From bc63a3e601fbba5f0402290b1918a0a722046b8c Mon Sep 17 00:00:00 2001 From: zlzw <583819556@qq.com> Date: Mon, 27 May 2024 13:48:52 +0800 Subject: [PATCH 01/42] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E3=80=90=E5=85=A8?= =?UTF-8?q?=E6=9C=8D=E5=85=AC=E5=91=8A=E4=BC=98=E5=8C=96=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../event/AllServerNotifyFFGGGDJANEvent.java | 10 ++++ config.gradle | 4 +- .../live/presenter/LiveGiftAnimPresenter.java | 9 ++++ live/src/main/res/layout/view_live_room.xml | 44 ++++++++++++++---- .../full_service_notice_new_tmp_bg.png | Bin 0 -> 125369 bytes .../full_service_notice_new_tmp_icon.png | Bin 0 -> 47928 bytes 6 files changed, 57 insertions(+), 10 deletions(-) create mode 100644 live/src/main/res/mipmap-xxxhdpi/full_service_notice_new_tmp_bg.png create mode 100644 live/src/main/res/mipmap-xxxhdpi/full_service_notice_new_tmp_icon.png diff --git a/common/src/main/java/com/yunbao/common/event/AllServerNotifyFFGGGDJANEvent.java b/common/src/main/java/com/yunbao/common/event/AllServerNotifyFFGGGDJANEvent.java index 447dfa5ab..0b2de7dc5 100644 --- a/common/src/main/java/com/yunbao/common/event/AllServerNotifyFFGGGDJANEvent.java +++ b/common/src/main/java/com/yunbao/common/event/AllServerNotifyFFGGGDJANEvent.java @@ -37,6 +37,8 @@ public class AllServerNotifyFFGGGDJANEvent extends BaseModel { private List buttonStyle; @SerializedName("h5_type") private String h5Type; + @SerializedName("left_image") + private String leftImage; public String getH5Type() { return h5Type; @@ -47,6 +49,14 @@ public class AllServerNotifyFFGGGDJANEvent extends BaseModel { return this; } + public String getLeftImage() { + return leftImage; + } + + public void setLeftImage(String leftImage) { + this.leftImage = leftImage; + } + public String getMethod() { return method; } diff --git a/config.gradle b/config.gradle index fd33bfeaf..14d48a2a1 100644 --- a/config.gradle +++ b/config.gradle @@ -9,9 +9,9 @@ ext { ] manifestPlaceholders = [ //正式、 - serverHost : "https://napi.yaoulive.com", +// serverHost : "https://napi.yaoulive.com", // 测试 -// serverHost : "https://ceshi.yaoulive.com", + serverHost : "https://ceshi.yaoulive.com", //百度语音识别 diff --git a/live/src/main/java/com/yunbao/live/presenter/LiveGiftAnimPresenter.java b/live/src/main/java/com/yunbao/live/presenter/LiveGiftAnimPresenter.java index 7491d1629..00175716c 100644 --- a/live/src/main/java/com/yunbao/live/presenter/LiveGiftAnimPresenter.java +++ b/live/src/main/java/com/yunbao/live/presenter/LiveGiftAnimPresenter.java @@ -64,6 +64,7 @@ import com.yunbao.common.utils.HtmlTagHandler; import com.yunbao.common.utils.L; import com.yunbao.common.utils.LiveRoomCheckLivePresenter; import com.yunbao.common.utils.MicStatusManager; +import com.yunbao.common.utils.StringUtil; import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.utils.WordUtil; import com.yunbao.common.views.weight.ViewClicksAntiShake; @@ -276,6 +277,7 @@ public class LiveGiftAnimPresenter { mFrameImageView = (FrameImageView) v.findViewById(R.id.all_frame_img); full_service_notice_new = v.findViewById(R.id.full_service_notice_new); full_service_notice_new_bg = v.findViewById(R.id.full_service_notice_new_bg); + full_service_notice_new_icon = v.findViewById(R.id.full_service_notice_new_icon); full_service_notice_new_text = v.findViewById(R.id.full_service_notice_new_text); iv_look_full_service_notice_new = v.findViewById(R.id.iv_look_full_service_notice_new); iv_look_full_service_notice_new3 = v.findViewById(R.id.iv_look_full_service_notice_new3); @@ -1147,6 +1149,7 @@ public class LiveGiftAnimPresenter { View full_service_notice_new; ImageView full_service_notice_new_bg; + ImageView full_service_notice_new_icon; TextView full_service_notice_new_text; TextView iv_look_full_service_notice_new; AllServerNotifyFFGGGDJANEvent notifyFFGGGDJANEvent; @@ -1181,6 +1184,12 @@ public class LiveGiftAnimPresenter { full_service_notice_new.setAlpha(1f); full_service_notice_new.setVisibility(View.VISIBLE); ImgLoader.display(mContext, event.getBackgroundImage(), full_service_notice_new_bg); + if(!StringUtil.isEmpty(event.getLeftImage())){ + full_service_notice_new_icon.setVisibility(View.VISIBLE); + ImgLoader.display(mContext,event.getLeftImage(),full_service_notice_new_icon); + }else{ + full_service_notice_new_icon.setVisibility(View.GONE); + } SpannableStringBuilder builder = new SpannableStringBuilder(); String msgN = WordUtil.isNewZh() ? event.getMsgCn() : event.getMsgEn(); builder.append(msgN); diff --git a/live/src/main/res/layout/view_live_room.xml b/live/src/main/res/layout/view_live_room.xml index 94c376c3e..16ce4dcbe 100644 --- a/live/src/main/res/layout/view_live_room.xml +++ b/live/src/main/res/layout/view_live_room.xml @@ -1212,17 +1212,43 @@ android:layout_width="match_parent" android:layout_height="51dp" android:translationX="500dp" + android:visibility="invisible" tools:translationX="0dp" - tools:visibility="visible" - android:visibility="invisible"> - + + + android:layout_marginEnd="7dp"> + + + + + + + + @@ -1270,6 +1296,8 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" + tools:text="btn" + tools:textColor="@color/white" android:gravity="center" android:textSize="12sp" /> diff --git a/live/src/main/res/mipmap-xxxhdpi/full_service_notice_new_tmp_bg.png b/live/src/main/res/mipmap-xxxhdpi/full_service_notice_new_tmp_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..ec713198e0c3b2507906124328f56bc552c3ee92 GIT binary patch literal 125369 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 z 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 literal 0 HcmV?d00001 From 225929c891c253eba714a72fea37799082455bf0 Mon Sep 17 00:00:00 2001 From: zlzw <583819556@qq.com> Date: Mon, 27 May 2024 14:03:20 +0800 Subject: [PATCH 02/42] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E3=80=90=E5=85=A8?= =?UTF-8?q?=E6=9C=8D=E5=85=AC=E5=91=8A=E4=BC=98=E5=8C=96=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- live/src/main/res/layout/view_live_room.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/live/src/main/res/layout/view_live_room.xml b/live/src/main/res/layout/view_live_room.xml index 16ce4dcbe..1b330e863 100644 --- a/live/src/main/res/layout/view_live_room.xml +++ b/live/src/main/res/layout/view_live_room.xml @@ -1227,6 +1227,7 @@ android:id="@+id/full_service_notice_new_bg" android:layout_width="match_parent" android:layout_height="40dp" + android:layout_marginStart="3dp" android:scaleType="fitXY" android:src="@mipmap/full_service_notice_new_tmp_bg" app:layout_constraintBottom_toBottomOf="parent" @@ -1238,7 +1239,7 @@ android:id="@+id/full_service_notice_new_icon" android:layout_width="52dp" android:layout_height="52dp" - android:layout_marginStart="6dp" + android:layout_marginStart="0dp" android:scaleType="fitCenter" android:src="@mipmap/full_service_notice_new_tmp_icon" android:visibility="gone" @@ -1283,6 +1284,7 @@ android:id="@+id/iv_look_full_service_notice_new3" android:layout_width="56dp" android:layout_height="30dp" + android:layout_marginBottom="1dp" android:layout_marginEnd="5dp"> Date: Tue, 28 May 2024 15:02:15 +0800 Subject: [PATCH 03/42] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=BC=B9=E7=AA=97?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../phonelive/activity/LauncherActivity.java | 9 +- .../com/yunbao/common/bean/OpenAdModel.java | 41 +++++-- .../com/yunbao/common/dialog/DebugDialog.java | 6 +- .../dialog/OpenAdBottomDialogPopup.java | 67 ++++++++++- .../dialog/OpenAdCenterDialogPopup.java | 93 ++++++++++++--- .../yunbao/common/manager/OpenAdManager.java | 112 +++++++++++++++--- .../main/res/layout/dialog_open_bottom_ad.xml | 15 ++- .../main/res/layout/dialog_open_center_ad.xml | 17 +-- .../yunbao/main/activity/MainActivity.java | 10 +- .../main/views/MainHomeLiveViewHolder.java | 1 - 10 files changed, 300 insertions(+), 71 deletions(-) diff --git a/app/src/main/java/com/shayu/phonelive/activity/LauncherActivity.java b/app/src/main/java/com/shayu/phonelive/activity/LauncherActivity.java index f0619923c..7f872d4e3 100644 --- a/app/src/main/java/com/shayu/phonelive/activity/LauncherActivity.java +++ b/app/src/main/java/com/shayu/phonelive/activity/LauncherActivity.java @@ -113,6 +113,7 @@ public class LauncherActivity extends AppCompatActivity implements View.OnClickL res.updateConfiguration(config, res.getDisplayMetrics()); return res; } + @Override protected void onCreate(@Nullable Bundle savedInstanceState) { getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS); @@ -144,7 +145,11 @@ public class LauncherActivity extends AppCompatActivity implements View.OnClickL } }; mHandler.sendEmptyMessageDelayed(WHAT_GET_CONFIG, 1000); - LogUtil.uploadErrorLog(AppContext.sInstance); + try { + LogUtil.uploadErrorLog(AppContext.sInstance); + } catch (Exception e) { + e.printStackTrace(); + } SpUtil.getInstance().setBooleanValue("NOTIFICATION", NotificationManagerCompat.from(this).areNotificationsEnabled()); } @@ -229,7 +234,7 @@ public class LauncherActivity extends AppCompatActivity implements View.OnClickL } else { checkUidAndToken(); } - }else{ + } else { ToastUtil.show(getString(R.string.net_error)); } } 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 8260ee377..3a8777ae9 100644 --- a/common/src/main/java/com/yunbao/common/bean/OpenAdModel.java +++ b/common/src/main/java/com/yunbao/common/bean/OpenAdModel.java @@ -4,6 +4,7 @@ import com.google.gson.annotations.SerializedName; import com.yunbao.common.CommonAppConfig; import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.utils.StringUtil; +import com.yunbao.common.views.weight.ViewClicksAntiShake; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -22,6 +23,8 @@ public class OpenAdModel extends BaseModel { public static final int SHOW_ONE = 3;//3. 仅弹出一次; @SerializedName("id") private int id; + @SerializedName("popup_name") + private String name; @SerializedName("popup_location") private int type = TYPE_HOME; @SerializedName("activity_url") @@ -35,24 +38,25 @@ public class OpenAdModel extends BaseModel { @SerializedName("popup_model") private int model = MODEL_SQUARE; @SerializedName("start_show_time") - private String startTime;//活动开始时间 + private String startTime;//活动开始时间 1 @SerializedName("end_show_time") - private String endTime;//活动结束时间 + private String endTime;//活动结束时间 5 @SerializedName("popup_permission") private int permission; @SerializedName("popup_frequency") private int showModel = SHOW_DEF;//显示模式,1:杀死程序后弹出 2:指定时间内(本机时间) 3:1. 仅弹出一次 @SerializedName("popup_frequency_time") - private String section = "0";// SHOW_DEF = 2 - + private String section = "0";// SHOW_DEF = 2 1 + @SerializedName("popup_sort") + private int sort = 1;//弹框类型 1.图片 2.H5 public OpenAdModel() { } public static OpenAdModel createTestData() { OpenAdModel model = new OpenAdModel(); - model.id=3; - model.type=1; + model.id = 3; + model.type = 1; model.url = "/h5/GuildTournament/20230821/rank.html"; model.imageUrl = "https://ceshi.yaoulive.com/data/upload/20230913/1694589490.png"; model.showTime = 10; @@ -66,6 +70,22 @@ public class OpenAdModel extends BaseModel { return model; } + public int getSort() { + return sort; + } + + public void setSort(int sort) { + this.sort = sort; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + public int getShowModel() { return showModel; } @@ -96,7 +116,8 @@ public class OpenAdModel extends BaseModel { } return url + "?t=" + System.currentTimeMillis() / 1000; } - public String getOriginalUrl(){ + + public String getOriginalUrl() { return url; } @@ -198,6 +219,7 @@ public class OpenAdModel extends BaseModel { public String toString() { return "OpenAdModel{" + "id=" + id + + ", name='" + name + '\'' + ", type=" + type + ", url='" + url + '\'' + ", imageUrl='" + imageUrl + '\'' + @@ -206,7 +228,10 @@ public class OpenAdModel extends BaseModel { ", model=" + model + ", startTime='" + startTime + '\'' + ", endTime='" + endTime + '\'' + - ", permission='" + permission + '\'' + + ", permission=" + permission + + ", showModel=" + showModel + + ", section='" + section + '\'' + + ", sort=" + sort + '}'; } } diff --git a/common/src/main/java/com/yunbao/common/dialog/DebugDialog.java b/common/src/main/java/com/yunbao/common/dialog/DebugDialog.java index 48131bfbf..6ad00a421 100644 --- a/common/src/main/java/com/yunbao/common/dialog/DebugDialog.java +++ b/common/src/main/java/com/yunbao/common/dialog/DebugDialog.java @@ -20,13 +20,14 @@ import com.yunbao.common.utils.AppManager; import com.yunbao.common.utils.ToastUtil; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Timer; import java.util.TimerTask; public class DebugDialog { RecyclerView recyclerView; - HashMap params; + LinkedHashMap params; DebugDialogAdapter adapter; private static DebugDialog debugDialog; Context mContext; @@ -69,7 +70,7 @@ public class DebugDialog { this.runnable = runnable; if (params == null) { Log.i("debug弹窗", "DebugDialog: 初始化参数"); - params = new HashMap<>(); + params = new LinkedHashMap<>(); } init(); } @@ -102,6 +103,7 @@ public class DebugDialog { } public void show() { + if (recyclerView != null) return; if (showPattern == ShowPattern.CURRENT_ACTIVITY) { createView(); return; diff --git a/common/src/main/java/com/yunbao/common/dialog/OpenAdBottomDialogPopup.java b/common/src/main/java/com/yunbao/common/dialog/OpenAdBottomDialogPopup.java index 072ab97a8..9c475e1a7 100644 --- a/common/src/main/java/com/yunbao/common/dialog/OpenAdBottomDialogPopup.java +++ b/common/src/main/java/com/yunbao/common/dialog/OpenAdBottomDialogPopup.java @@ -1,7 +1,10 @@ package com.yunbao.common.dialog; +import android.app.Activity; import android.content.Context; +import android.webkit.WebView; import android.widget.ImageView; +import android.widget.LinearLayout; import androidx.annotation.NonNull; @@ -9,12 +12,18 @@ 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.event.JavascriptInterfaceEvent; import com.yunbao.common.glide.ImgLoader; import com.yunbao.common.interfaces.OnItemClickListener; +import com.yunbao.common.manager.IMLoginManager; +import com.yunbao.common.utils.JavascriptInterfaceUtils; + +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; public class OpenAdBottomDialogPopup extends AbsDialogPopupWindow { - private ImageView mImageView; private ImageView mClose; + private LinearLayout contentLayout; private OpenAdModel model; private OnItemClickListener mListener; @@ -27,6 +36,11 @@ public class OpenAdBottomDialogPopup extends AbsDialogPopupWindow { @Override public void buildDialog(XPopup.Builder builder) { builder.animationDuration(0); + builder.hasShadowBg(true); + if(model.getSort()==2){ + builder.dismissOnTouchOutside(false); + builder.dismissOnBackPressed(false); + } } @Override @@ -51,8 +65,47 @@ public class OpenAdBottomDialogPopup extends AbsDialogPopupWindow { @Override protected void onCreate() { super.onCreate(); - mImageView = findViewById(R.id.img); + contentLayout = findViewById(R.id.content_layout); mClose = findViewById(R.id.close); + if (model.getSort() == 1) { + setImage(); + } else { + setWeb(); + } + + mClose.setOnClickListener(v -> dismiss()); + if (model.getShowTime() > 0) { + mClose.postDelayed(this::dismiss, model.getShowTime()); + } + } + + private void setWeb() { + WebView mWebView = new WebView(mContext); + mWebView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); + mWebView.addJavascriptInterface(JavascriptInterfaceUtils.getInstance().setmContext((Activity) mContext, mWebView).setPageClose(true).setLiveZhuangBana(false), "androidObject"); + mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); // 是否允许JS打开新窗口 + mWebView.getSettings().setJavaScriptEnabled(true); + mWebView.getSettings().setDomStorageEnabled(true); + String appCachePath = mContext.getCacheDir().getAbsolutePath(); +// mWebView.getSettings().setAppCachePath(appCachePath); + mWebView.getSettings().setAllowFileAccess(true); + mWebView.getSettings().setUseWideViewPort(true); // 关键点 + mWebView.getSettings().setAllowFileAccess(true); // 允许访问文件 + mWebView.setHorizontalScrollBarEnabled(false); + mWebView.setVerticalScrollBarEnabled(false); + String url=model.getUrl(); + if(url.contains("?")){ + url+="&uid="+ IMLoginManager.get(mContext).getUserInfo().getId()+"&token="+IMLoginManager.get(mContext).getUserInfo().getToken(); + }else{ + url+="?uid="+ IMLoginManager.get(mContext).getUserInfo().getId()+"&token="+IMLoginManager.get(mContext).getUserInfo().getToken(); + } + mWebView.loadUrl(url); + contentLayout.addView(mWebView); + } + + private void setImage() { + ImageView mImageView = new ImageView(mContext); + mImageView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); mImageView.setOnClickListener(v -> { WebViewActivity.forward(mContext, model.getUrl(), model.getType() != OpenAdModel.TYPE_HOME); if (mListener != null) { @@ -61,10 +114,12 @@ public class OpenAdBottomDialogPopup extends AbsDialogPopupWindow { } dismiss(); }); - mClose.setOnClickListener(v -> dismiss()); ImgLoader.display(mContext, model.getImageUrl(), mImageView); - if (model.getShowTime() > 0) { - mClose.postDelayed(this::dismiss, model.getShowTime()); - } + contentLayout.addView(mImageView); + } + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onJavascriptInterfaceEvent(JavascriptInterfaceEvent event) { + } } diff --git a/common/src/main/java/com/yunbao/common/dialog/OpenAdCenterDialogPopup.java b/common/src/main/java/com/yunbao/common/dialog/OpenAdCenterDialogPopup.java index d5a0de407..f75c323dc 100644 --- a/common/src/main/java/com/yunbao/common/dialog/OpenAdCenterDialogPopup.java +++ b/common/src/main/java/com/yunbao/common/dialog/OpenAdCenterDialogPopup.java @@ -1,8 +1,13 @@ package com.yunbao.common.dialog; +import android.app.Activity; import android.content.Context; +import android.graphics.Color; import android.util.Log; +import android.view.ViewGroup; +import android.webkit.WebView; import android.widget.ImageView; +import android.widget.LinearLayout; import androidx.annotation.NonNull; import androidx.constraintlayout.widget.ConstraintLayout; @@ -11,14 +16,23 @@ 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.event.JavascriptInterfaceEvent; import com.yunbao.common.glide.ImgLoader; import com.yunbao.common.interfaces.OnItemClickListener; +import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.utils.DpUtil; +import com.yunbao.common.utils.JavascriptInterfaceUtils; import com.yunbao.common.utils.RouteUtil; import com.yunbao.common.utils.ScreenDimenUtil; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; + +import java.util.Map; + public class OpenAdCenterDialogPopup extends AbsDialogFullScreenPopupWindow { private ImageView mImageView; + private LinearLayout contentLayout; private ImageView mClose; private OpenAdModel model; private OnItemClickListener mListener; @@ -39,7 +53,8 @@ public class OpenAdCenterDialogPopup extends AbsDialogFullScreenPopupWindow { @Override public void buildDialog(XPopup.Builder builder) { - builder.hasShadowBg(false); + builder.hasShadowBg(true); + builder.shadowBgColor(Color.parseColor("#80000000")); builder.animationDuration(0); } @@ -61,12 +76,61 @@ public class OpenAdCenterDialogPopup extends AbsDialogFullScreenPopupWindow { @Override protected void onCreate() { super.onCreate(); - Log.e("-----弹窗-----", "onCreate: 创建弹窗" ); - mImageView = findViewById(R.id.img); + Log.e("-----弹窗-----", "onCreate: 创建弹窗"); + contentLayout = findViewById(R.id.content_layout); mClose = findViewById(R.id.close); - findViewById(R.id.layout).setOnClickListener(v -> dismiss()); + if (model.getSort() == 1) { + setImage(model); + findViewById(R.id.layout).setOnClickListener(v -> dismiss()); + } else { + setWeb(model); + } + mClose.setOnClickListener(v -> dismiss()); + if (model.getShowTime() > 0) { + mClose.postDelayed(this::dismiss, model.getShowTime()); + } + } + + private void setWeb(OpenAdModel model) { + int width = ScreenDimenUtil.getInstance().getScreenWdith() - DpUtil.dp2px(20); + int height = (int) (width * 1.4); + if (model.getModel() == OpenAdModel.MODEL_SQUARE) { + height = (int) (width * 1.2); + } + WebView mWebView = new WebView(mContext); + mWebView.setLayoutParams(new LinearLayout.LayoutParams(width, height)); + mWebView.addJavascriptInterface(JavascriptInterfaceUtils.getInstance().setmContext((Activity) mContext, mWebView).setPageClose(true).setLiveZhuangBana(false), "androidObject"); + mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); // 是否允许JS打开新窗口 + mWebView.getSettings().setJavaScriptEnabled(true); + mWebView.getSettings().setDomStorageEnabled(true); + String appCachePath = mContext.getCacheDir().getAbsolutePath(); +// mWebView.getSettings().setAppCachePath(appCachePath); + mWebView.getSettings().setAllowFileAccess(true); + mWebView.getSettings().setUseWideViewPort(true); // 关键点 + mWebView.getSettings().setAllowFileAccess(true); // 允许访问文件 + mWebView.setHorizontalScrollBarEnabled(false); + mWebView.setVerticalScrollBarEnabled(false); + String url = model.getUrl(); + if (url.contains("?")) { + url += "&uid=" + IMLoginManager.get(mContext).getUserInfo().getId() + "&token=" + IMLoginManager.get(mContext).getUserInfo().getToken(); + } else { + url += "?uid=" + IMLoginManager.get(mContext).getUserInfo().getId() + "&token=" + IMLoginManager.get(mContext).getUserInfo().getToken(); + } + Log.i("-----弹窗-----", "setWeb: "+url); + mWebView.loadUrl(url); + contentLayout.addView(mWebView); + } + + private void setImage(OpenAdModel model) { + int width = ScreenDimenUtil.getInstance().getScreenWdith() - DpUtil.dp2px(20); + int height = (int) (width * 1.4); + if (model.getModel() == OpenAdModel.MODEL_SQUARE) { + height = (int) (width * 1.2); + } + mImageView = new ImageView(mContext); + mImageView.setLayoutParams(new LinearLayout.LayoutParams(width, height)); mImageView.setOnClickListener(v -> { - if("home_page_banner_battle".equals(model.getOriginalUrl())){ + if ("home_page_banner_battle".equals(model.getOriginalUrl())) { RouteUtil.forwardBattlePass(); dismiss(); return; @@ -78,19 +142,12 @@ public class OpenAdCenterDialogPopup extends AbsDialogFullScreenPopupWindow { } 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()); - } + contentLayout.addView(mImageView); + } + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onJavascriptInterfaceEvent(JavascriptInterfaceEvent event) { + } } 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 46242290d..4aaa0ea2e 100644 --- a/common/src/main/java/com/yunbao/common/manager/OpenAdManager.java +++ b/common/src/main/java/com/yunbao/common/manager/OpenAdManager.java @@ -7,19 +7,25 @@ import android.util.Log; import com.yunbao.common.CommonAppContext; import com.yunbao.common.bean.OpenAdModel; +import com.yunbao.common.dialog.DebugDialog; 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.interfaces.OnItemClickListener; +import com.yunbao.common.utils.AppManager; import com.yunbao.common.utils.SpUtil; import com.yunbao.common.utils.StringUtil; import com.yunbao.common.utils.ToastUtil; +import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Objects; public class OpenAdManager { public static final int TYPE_HOME = 1; @@ -28,21 +34,40 @@ public class OpenAdManager { private Map showMap; private List list = null; private Handler handler = new Handler(Looper.getMainLooper()); - private Map runnableMap = new HashMap<>(); + private Map runnableMap = new LinkedHashMap<>(); + private Map waitRunnableMap = new LinkedHashMap<>();//等待运行的弹窗 private int showType; + private WeakReference runNowRunnable; + private static final boolean IS_QUEUE_SHOW = true;//是否按队列显示弹窗,true就会等待上一个弹窗关闭后弹出,false就按原逻辑顺序直接弹出 private OpenAdManager() { showMap = new HashMap<>(); + DebugDialog.getInstance(new DebugDialog.DebugDialogRunnable() { + @Override + public void run(DebugDialog dialog) { + dialog.show(); + onItemClickListener = new OnItemClickListener() { + @Override + public void onItemClick(String bean, int position) { + dialog.setParams(bean, "剩余:" + position); + } + }; + } + }); init(false); } - public void reset() { + public void close() { dismiss(); runnableMap.clear(); showMap.clear(); list.clear(); } + public void reset() { + next(); + } + private static final class MInstanceHolder { static final OpenAdManager mInstance = new OpenAdManager(); } @@ -70,30 +95,38 @@ public class OpenAdManager { list = new ArrayList<>(); return; } + Collections.sort(data, new AdListComparator()); list = data; if (isShow) { - show(TYPE_HOME, false); + if (showType == 0) { + show(TYPE_HOME, false); + } else { + show(showType, false); + } } } @Override public void onError(String error) { - System.err.println("弹框列表:" + error); + Log.e(TAG, "弹框列表:" + error); } }); } - private static long showTime=0; + private static long showTime = 0; + private OnItemClickListener onItemClickListener; + public synchronized void show(int type, boolean isGuard) { + showType = type; if (list == null) { init(true); return; } - if(System.currentTimeMillis()-showTime<100){ + Log.i(TAG, "show: 调用显示 " + type + " " + isGuard); + if (System.currentTimeMillis() - showTime < 100) { return; } - showTime=System.currentTimeMillis(); - showType = type; + showTime = System.currentTimeMillis(); for (OpenAdModel model : list) { if (model.getType() == type) { if (type == OpenAdModel.TYPE_LIVE && !model.userIsPermission(isGuard)) { @@ -122,13 +155,22 @@ public class OpenAdManager { if (!isShow(model)) { Log.i(TAG, "show: " + model); - handler.postDelayed(new AdRunnable(model), model.getDelayShowTime()); + if (IS_QUEUE_SHOW) { + waitRunnableMap.put(new AdRunnable(model), model.getDelayShowTime()); + } else { + handler.postDelayed(new AdRunnable(model), model.getDelayShowTime()); + } } else { Log.i(TAG, "notshow: " + model); } } } + Log.i(TAG, "show: 循环完毕,调用next"); + if (IS_QUEUE_SHOW) { + onItemClickListener.onItemClick("接口返回需要展示的弹窗数:", waitRunnableMap.size()); + next(); + } Log.i(TAG, "------------------------------"); } @@ -144,6 +186,9 @@ public class OpenAdManager { } } runnableMap.clear(); + if (runNowRunnable != null && runNowRunnable.get() != null) { + handler.removeCallbacks(runNowRunnable.get()); + } } private synchronized boolean isShow(OpenAdModel type) { @@ -153,11 +198,26 @@ public class OpenAdManager { return false; } + void next() { + Log.i(TAG, "next: " + waitRunnableMap.size()); + if (waitRunnableMap.isEmpty()) return; + AdRunnable next = waitRunnableMap.keySet().iterator().next(); + Integer i = waitRunnableMap.get(next); + if (i == null) { + i = 0; + } + onItemClickListener.onItemClick("当前加载id:" + next.model.getId() + " " + next.model.getName() + " 延迟展示时间:" + i, (waitRunnableMap.size() - 1)); + handler.postDelayed(next, i); + } + private class AdRunnable implements Runnable { OpenAdModel model; + AdRunnable runnable; public AdRunnable(OpenAdModel model) { this.model = model; + this.runnable = this; + runNowRunnable = new WeakReference<>(this); runnableMap.put(model.getId(), this); } @@ -183,23 +243,45 @@ public class OpenAdManager { if (model.getType() != showType) { return; } - if(isShow(model)){ - Log.i(TAG,"展示过:"+model); + if (isShow(model)) { + Log.i(TAG, "展示过:" + model); return; } showMap.put(model.getId(), true); if (model.getShowModel() == OpenAdModel.SHOW_DIY) { - String nextTime= String.valueOf(System.currentTimeMillis() + (Long.parseLong(model.getSection()) * 60 * 1000)); + String nextTime = String.valueOf(System.currentTimeMillis() + (Long.parseLong(model.getSection()) * 60 * 1000)); SpUtil.setStringValue("open_ad_popup_time_" + model.getId(), nextTime); showMap.remove(model.getId()); } if (model.getModel() == OpenAdModel.MODEL_BOTTOM) { - new OpenAdBottomDialogPopup(CommonAppContext.getTopActivity(), model).setListener((bean, position) -> { + new OpenAdBottomDialogPopup(AppManager.getInstance().getLastActivity(), model).setListener((bean, position) -> { + Log.i(TAG, "run: 弹框回调:" + position); + if (IS_QUEUE_SHOW) { + waitRunnableMap.remove(runnable); + if (position == 0) { + next(); + } + } }).showDialog(); } else { - new OpenAdCenterDialogPopup(CommonAppContext.getTopActivity(), model).setListener((bean, position) -> { + new OpenAdCenterDialogPopup(AppManager.getInstance().getLastActivity(), model).setListener((bean, position) -> { + Log.i(TAG, "run: 弹框回调:" + position); + if (IS_QUEUE_SHOW) { + waitRunnableMap.remove(runnable); + if (position == 0) { + next(); + } + } }).showDialog(); } } } + + private class AdListComparator implements Comparator { + + @Override + public int compare(OpenAdModel openAdModel, OpenAdModel t1) { + return openAdModel.getSort() - t1.getSort(); + } + } } 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 192f2d295..07cbd6f4f 100644 --- a/common/src/main/res/layout/dialog_open_bottom_ad.xml +++ b/common/src/main/res/layout/dialog_open_bottom_ad.xml @@ -5,16 +5,19 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> - + app:srcCompat="@mipmap/background_gift_wall"> + + + + diff --git a/common/src/main/res/layout/dialog_open_center_ad.xml b/common/src/main/res/layout/dialog_open_center_ad.xml index dd60e83a6..3e09feb6c 100644 --- a/common/src/main/res/layout/dialog_open_center_ad.xml +++ b/common/src/main/res/layout/dialog_open_center_ad.xml @@ -6,17 +6,20 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - + app:layout_constraintStart_toStartOf="parent" + android:layout_marginBottom="12dp"> + + + \ No newline at end of file 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 05d7a1ab9..3f2a47ced 100644 --- a/main/src/main/java/com/yunbao/main/activity/MainActivity.java +++ b/main/src/main/java/com/yunbao/main/activity/MainActivity.java @@ -13,8 +13,6 @@ import android.app.PendingIntent; import android.content.ClipData; import android.content.Context; import android.content.Intent; -import android.net.ConnectivityManager; -import android.net.NetworkInfo; import android.net.Uri; import android.os.Build; import android.os.Bundle; @@ -51,14 +49,12 @@ import com.tencent.imsdk.v2.V2TIMManager; import com.tencent.imsdk.v2.V2TIMSDKConfig; import com.tencent.imsdk.v2.V2TIMSDKListener; import com.tencent.imsdk.v2.V2TIMUserFullInfo; -import com.yunbao.common.dialog.DebugDialog; import com.yunbao.common.utils.MobclickAgent; import com.yunbao.common.CommonAppConfig; import com.yunbao.common.Constants; import com.yunbao.common.activity.AbsActivity; import com.yunbao.common.activity.WebViewActivity; import com.yunbao.common.adapter.ViewPagerAdapter; -import com.yunbao.common.bean.AnchorRecommendItemModel; import com.yunbao.common.bean.AnchorRecommendModel; import com.yunbao.common.bean.AnchorStartLiveBean; import com.yunbao.common.bean.ChatRemarksBean; @@ -223,7 +219,6 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene protected void main() { ActivityCompat.postponeEnterTransition(this); ConversationIMListManager.get(this); - OpenAdManager.getInstance(); //在请求一下这个接口给我后台版本号 CommonHttpUtil.getConfig(mContext, new CommonCallback() { @Override @@ -362,6 +357,7 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene } break; } + OpenAdManager.getInstance().show(OpenAdManager.TYPE_HOME, false); if (mTabButtonGroup.getCurPosition() != position) { System.err.println("重连IM:" + IMLoginManager.isLogin(mContext)); if (!IMLoginManager.isLogin(mContext)) { @@ -555,6 +551,7 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene //获取指导员账号 ConversationIMListManager.get(this).getUserInstructor(this); checkVersion(); + OpenAdManager.getInstance().show(OpenAdManager.TYPE_HOME, false); } /** @@ -948,6 +945,7 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene NoviceInstructorManager.get(mContext).getNoviceInstructor(); NoviceInstructorManager.get(mContext).checktHomeZdyPop(); initAnchorRecommendBanner(); + OpenAdManager.getInstance().reset(); } /** @@ -1146,7 +1144,7 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene if (EasyFloat.isShow("LiveFloatView")) { EasyFloat.dismiss("LiveFloatView", true); } - OpenAdManager.getInstance().reset(); + OpenAdManager.getInstance().close(); super.onBackPressed(); } } diff --git a/main/src/main/java/com/yunbao/main/views/MainHomeLiveViewHolder.java b/main/src/main/java/com/yunbao/main/views/MainHomeLiveViewHolder.java index db9a1933b..904886749 100644 --- a/main/src/main/java/com/yunbao/main/views/MainHomeLiveViewHolder.java +++ b/main/src/main/java/com/yunbao/main/views/MainHomeLiveViewHolder.java @@ -560,7 +560,6 @@ public class MainHomeLiveViewHolder extends AbsMainHomeChildViewHolder implement @Override public void onResume() { super.onResume(); - OpenAdManager.getInstance().show(OpenAdManager.TYPE_HOME, false); } @Override From c92e8dd8bc442c20f6834487b03b225b6407ef83 Mon Sep 17 00:00:00 2001 From: zlzw <583819556@qq.com> Date: Tue, 28 May 2024 17:12:38 +0800 Subject: [PATCH 04/42] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=BC=B9=E7=AA=97?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/shayu/phonelive/AppContext.java | 10 ++++- .../com/yunbao/common/bean/OpenAdModel.java | 2 +- .../dialog/OpenAdCenterDialogPopup.java | 40 ++++++++++-------- .../yunbao/common/manager/OpenAdManager.java | 42 +++++++++++++------ .../com/yunbao/common/utils/AppManager.java | 31 ++++++++++++-- 5 files changed, 88 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/com/shayu/phonelive/AppContext.java b/app/src/main/java/com/shayu/phonelive/AppContext.java index 1cf9e05fb..bb6bcaa68 100644 --- a/app/src/main/java/com/shayu/phonelive/AppContext.java +++ b/app/src/main/java/com/shayu/phonelive/AppContext.java @@ -30,6 +30,7 @@ import com.tencent.imsdk.v2.V2TIMGroupMemberInfo; import com.tencent.imsdk.v2.V2TIMManager; import com.tencent.imsdk.v2.V2TIMSimpleMsgListener; import com.tencent.imsdk.v2.V2TIMUserInfo; +import com.yunbao.common.manager.OpenAdManager; import com.yunbao.common.utils.MobclickAgent; import com.yunbao.common.BuildConfig; import com.yunbao.common.CommonAppConfig; @@ -37,7 +38,6 @@ import com.yunbao.common.CommonAppContext; import com.yunbao.common.Constants; import com.yunbao.common.bean.AnchorStartLiveBean; import com.yunbao.common.bean.CrashSaveBean; -import com.yunbao.common.dialog.DebugDialog; import com.yunbao.common.event.SudGameSocketImEvent; import com.yunbao.common.manager.imrongcloud.InstructorSendReward; import com.yunbao.common.manager.imrongcloud.InstructorSendRewardProvider; @@ -54,6 +54,7 @@ import com.yunbao.live.socket.SocketRyClient; import com.yunbao.live.utils.LiveImDeletUtil; import com.yunbao.live.views.PortraitLiveManager; import com.yunbao.live.views.RecommendLiveRoomProvider; +import com.yunbao.main.activity.LoginActivity; import com.yunbao.main.activity.MsgSettActivity; import org.greenrobot.eventbus.EventBus; @@ -108,20 +109,25 @@ public class AppContext extends CommonAppContext { @Override public void onActivityDestroyed(@NonNull Activity activity) { + AppManager.getInstance().removeActivity(activity); for (WeakReference reference : activities) { if (reference.get() == activity) { activities.remove(reference); return; } } - AppManager.getInstance().removeActivity(activity); + } @Override public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) { activities.add(new WeakReference<>(activity)); + if(activity instanceof LoginActivity){ + AppManager.getInstance().clear(); + } CrashSaveBean.getInstance().setActivitySize(activities); AppManager.getInstance().addActivity(activity); + OpenAdManager.getInstance().dismiss(); } @Override 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 3a8777ae9..7bc948149 100644 --- a/common/src/main/java/com/yunbao/common/bean/OpenAdModel.java +++ b/common/src/main/java/com/yunbao/common/bean/OpenAdModel.java @@ -112,7 +112,7 @@ public class OpenAdModel extends BaseModel { public String getUrl() { if (!url.startsWith("http://") || !url.startsWith("https://")) { - url = CommonAppConfig.HOST + url; + url = CommonAppConfig.HOST + (url.startsWith("/") ? url : "/" + url); } return url + "?t=" + System.currentTimeMillis() / 1000; } diff --git a/common/src/main/java/com/yunbao/common/dialog/OpenAdCenterDialogPopup.java b/common/src/main/java/com/yunbao/common/dialog/OpenAdCenterDialogPopup.java index f75c323dc..dc1ddb287 100644 --- a/common/src/main/java/com/yunbao/common/dialog/OpenAdCenterDialogPopup.java +++ b/common/src/main/java/com/yunbao/common/dialog/OpenAdCenterDialogPopup.java @@ -4,13 +4,11 @@ import android.app.Activity; import android.content.Context; import android.graphics.Color; import android.util.Log; -import android.view.ViewGroup; import android.webkit.WebView; import android.widget.ImageView; import android.widget.LinearLayout; import androidx.annotation.NonNull; -import androidx.constraintlayout.widget.ConstraintLayout; import com.lxj.xpopup.XPopup; import com.yunbao.common.R; @@ -28,8 +26,6 @@ import com.yunbao.common.utils.ScreenDimenUtil; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; -import java.util.Map; - public class OpenAdCenterDialogPopup extends AbsDialogFullScreenPopupWindow { private ImageView mImageView; private LinearLayout contentLayout; @@ -79,11 +75,29 @@ public class OpenAdCenterDialogPopup extends AbsDialogFullScreenPopupWindow { Log.e("-----弹窗-----", "onCreate: 创建弹窗"); contentLayout = findViewById(R.id.content_layout); mClose = findViewById(R.id.close); + int width = ScreenDimenUtil.getInstance().getScreenWdith() - DpUtil.dp2px(10); + int height = (int) (width * 1.5); + if (model.getModel() == OpenAdModel.MODEL_SQUARE) { + height = (int) (width * 1.2); + } + Log.i("-----弹窗-----", "高度:" + height+" 宽度:"+width); + DebugDialog.getInstance(new DebugDialog.DebugDialogRunnable() { + @Override + public void run(DebugDialog dialog) { + dialog.show(); + int width = ScreenDimenUtil.getInstance().getScreenWdith() - DpUtil.dp2px(10); + int height = (int) (width * 1.5); + if (model.getModel() == OpenAdModel.MODEL_SQUARE) { + height = (int) (width * 1.2); + } + dialog.setParams(model.getName()+"弹框高宽","高度:" + height+" 宽度:"+width); + } + }); if (model.getSort() == 1) { - setImage(model); + setImage(model,width,height); findViewById(R.id.layout).setOnClickListener(v -> dismiss()); } else { - setWeb(model); + setWeb(model,width,height); } mClose.setOnClickListener(v -> dismiss()); if (model.getShowTime() > 0) { @@ -91,12 +105,7 @@ public class OpenAdCenterDialogPopup extends AbsDialogFullScreenPopupWindow { } } - private void setWeb(OpenAdModel model) { - int width = ScreenDimenUtil.getInstance().getScreenWdith() - DpUtil.dp2px(20); - int height = (int) (width * 1.4); - if (model.getModel() == OpenAdModel.MODEL_SQUARE) { - height = (int) (width * 1.2); - } + private void setWeb(OpenAdModel model, int width, int height) { WebView mWebView = new WebView(mContext); mWebView.setLayoutParams(new LinearLayout.LayoutParams(width, height)); mWebView.addJavascriptInterface(JavascriptInterfaceUtils.getInstance().setmContext((Activity) mContext, mWebView).setPageClose(true).setLiveZhuangBana(false), "androidObject"); @@ -121,12 +130,7 @@ public class OpenAdCenterDialogPopup extends AbsDialogFullScreenPopupWindow { contentLayout.addView(mWebView); } - private void setImage(OpenAdModel model) { - int width = ScreenDimenUtil.getInstance().getScreenWdith() - DpUtil.dp2px(20); - int height = (int) (width * 1.4); - if (model.getModel() == OpenAdModel.MODEL_SQUARE) { - height = (int) (width * 1.2); - } + private void setImage(OpenAdModel model, int width, int height) { mImageView = new ImageView(mContext); mImageView.setLayoutParams(new LinearLayout.LayoutParams(width, height)); mImageView.setOnClickListener(v -> { 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 4aaa0ea2e..3f32f965c 100644 --- a/common/src/main/java/com/yunbao/common/manager/OpenAdManager.java +++ b/common/src/main/java/com/yunbao/common/manager/OpenAdManager.java @@ -1,10 +1,12 @@ package com.yunbao.common.manager; +import android.app.Activity; import android.content.Context; import android.os.Handler; import android.os.Looper; import android.util.Log; +import com.lzf.easyfloat.enums.ShowPattern; import com.yunbao.common.CommonAppContext; import com.yunbao.common.bean.OpenAdModel; import com.yunbao.common.dialog.DebugDialog; @@ -42,18 +44,6 @@ public class OpenAdManager { private OpenAdManager() { showMap = new HashMap<>(); - DebugDialog.getInstance(new DebugDialog.DebugDialogRunnable() { - @Override - public void run(DebugDialog dialog) { - dialog.show(); - onItemClickListener = new OnItemClickListener() { - @Override - public void onItemClick(String bean, int position) { - dialog.setParams(bean, "剩余:" + position); - } - }; - } - }); init(false); } @@ -65,6 +55,7 @@ public class OpenAdManager { } public void reset() { + Log.i(TAG, "reset: "); next(); } @@ -80,13 +71,14 @@ public class OpenAdManager { if (list != null && list.isEmpty()) { return; } - Context context = CommonAppContext.getTopActivity(); + Context context = AppManager.getInstance().getMainActivity(); if (context == null) { context = CommonAppContext.sInstance; } if (context == null) { return; } + LiveNetManager.get(context).activityPopup(new HttpCallback>() { @Override public void onSuccess(List data) { @@ -126,6 +118,19 @@ public class OpenAdManager { if (System.currentTimeMillis() - showTime < 100) { return; } + DebugDialog.getInstance(new DebugDialog.DebugDialogRunnable() { + @Override + public void run(DebugDialog dialog) { + dialog.setShowPattern(ShowPattern.CURRENT_ACTIVITY); + dialog.show(); + onItemClickListener = new OnItemClickListener() { + @Override + public void onItemClick(String bean, int position) { + dialog.setParams(bean, "剩余:" + position); + } + }; + } + }); showTime = System.currentTimeMillis(); for (OpenAdModel model : list) { if (model.getType() == type) { @@ -247,6 +252,17 @@ public class OpenAdManager { Log.i(TAG, "展示过:" + model); return; } + if (model.getType() == OpenAdModel.TYPE_HOME && !AppManager.getInstance().isMainActivity()) { + Log.i(TAG, "首页类型弹窗,但当前不是首页"); + dismiss(); + return; + } + if (model.getType() == TYPE_LIVE && !AppManager.getInstance().isLiveActivity()) { + Log.i(TAG, "直播类型弹窗,但当前不是直播"); + dismiss(); + return; + } + showMap.put(model.getId(), true); if (model.getShowModel() == OpenAdModel.SHOW_DIY) { String nextTime = String.valueOf(System.currentTimeMillis() + (Long.parseLong(model.getSection()) * 60 * 1000)); diff --git a/common/src/main/java/com/yunbao/common/utils/AppManager.java b/common/src/main/java/com/yunbao/common/utils/AppManager.java index f27c2815a..16580d954 100644 --- a/common/src/main/java/com/yunbao/common/utils/AppManager.java +++ b/common/src/main/java/com/yunbao/common/utils/AppManager.java @@ -1,6 +1,7 @@ package com.yunbao.common.utils; import android.app.Activity; +import android.util.Log; import com.yunbao.common.BuildConfig; @@ -11,7 +12,7 @@ public class AppManager { private static Stack activityStack; public AppManager() { - activityStack=new Stack<>(); + activityStack = new Stack<>(); } /** @@ -36,18 +37,38 @@ public class AppManager { return activity; } } - return null; + return getLastActivity(); } public Activity getLiveActivity() { for (Activity activity : activityStack) { - if (activity.getClass().getSimpleName().contains("LiveAudienceActivity")) { + if (activity.getClass().getSimpleName().contains("LiveActivity")) { return activity; } } return null; } + public void clear() { + activityStack.clear(); + } + + public boolean isMainActivity() { + Activity lastActivity = getLastActivity(); + if(lastActivity==null){ + return false; + } + return lastActivity.getClass().getSimpleName().contains("MainActivity"); + } + + public boolean isLiveActivity() { + Activity lastActivity = getLastActivity(); + if(lastActivity==null){ + return false; + } + return lastActivity.getClass().getSimpleName().contains("LiveActivity"); + } + public static class SingleApp { public static AppManager INSTANCE = new AppManager(); } @@ -59,6 +80,10 @@ public class AppManager { if (activityStack == null) { activityStack = new Stack(); } + //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>class com.yunbao.main.activity.MsgAddressBookActivity + if (getActivity(activity.getClass()) != null) { + activityStack.remove(getActivity(activity.getClass())); + } activityStack.add(activity); } From 022806d9da6f3741146937936294494ef8f534ce Mon Sep 17 00:00:00 2001 From: zlzw <583819556@qq.com> Date: Thu, 30 May 2024 15:14:00 +0800 Subject: [PATCH 05/42] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=9B=B4=E6=92=AD?= =?UTF-8?q?=E9=97=B4=20=E7=94=A8=E6=88=B7=E7=AD=89=E7=BA=A7+=E8=B6=85?= =?UTF-8?q?=E7=9A=87+=E7=B2=89=E4=B8=9D=E7=89=8C+=E5=9B=BE=E6=A0=87+?= =?UTF-8?q?=E5=90=8D=E5=AD=97=EF=BC=8810=E5=AD=97=EF=BC=89=E4=BC=9A?= =?UTF-8?q?=E4=B8=A2=E5=A4=B1=E5=90=8D=E5=AD=97=E5=89=8D=E9=9D=A2=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/yunbao/live/utils/LiveTextRender.java | 87 ++++++++++++++----- live/src/main/res/layout/item_live_chat.xml | 2 +- 2 files changed, 66 insertions(+), 23 deletions(-) diff --git a/live/src/main/java/com/yunbao/live/utils/LiveTextRender.java b/live/src/main/java/com/yunbao/live/utils/LiveTextRender.java index b220d8f07..f9f67b5ba 100644 --- a/live/src/main/java/com/yunbao/live/utils/LiveTextRender.java +++ b/live/src/main/java/com/yunbao/live/utils/LiveTextRender.java @@ -21,6 +21,7 @@ import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.MeasureSpec; +import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; @@ -263,7 +264,7 @@ public class LiveTextRender { } public interface CreatePrefixCallback { - void onPrefixCallback(SpannableStringBuilder builder); + void onPrefixCallback(SpannableStringBuilder builder, int prefixWidth); } /** @@ -353,19 +354,20 @@ public class LiveTextRender { index = builder.length(); } } - createPrefixCallback.onPrefixCallback(builder); + createPrefixCallback.onPrefixCallback(builder, 0); } @Override public void onLoadFailed() { SpannableStringBuilder builder = new SpannableStringBuilder(); int index = 0; - + int prefixWidth = 0; if (levelDrawable != null) { builder.append(" "); levelDrawable.setBounds(0, 0, DpUtil.dp2px(17), DpUtil.dp2px(17)); builder.setSpan(new VerticalImageSpan(levelDrawable), index, index + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); index = builder.length(); + prefixWidth += levelDrawable.getBounds().width(); } if (gzDrawablesMap.containsKey(bean)) {//贵族 @@ -373,6 +375,7 @@ public class LiveTextRender { gzDrawablesMap.get(bean).setBounds(0, 0, DpUtil.dp2px(35), DpUtil.dp2px(20)); builder.setSpan(new VerticalImageSpan(gzDrawablesMap.get(bean)), index, index + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); index = builder.length(); + prefixWidth += gzDrawablesMap.get(bean).getBounds().width(); } if (ryxzDrawablesMap.containsKey(bean)) {//荣誉勋章 @@ -380,6 +383,7 @@ public class LiveTextRender { ryxzDrawablesMap.get(bean).setBounds(0, 0, DpUtil.dp2px(18), DpUtil.dp2px(18)); builder.setSpan(new VerticalImageSpan(ryxzDrawablesMap.get(bean)), index, index + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); index = builder.length(); + prefixWidth += ryxzDrawablesMap.get(bean).getBounds().width(); } if (nhDrawablesMap.containsKey(bean)) {//靓号 @@ -387,6 +391,7 @@ public class LiveTextRender { nhDrawablesMap.get(bean).setBounds(0, 0, DpUtil.dp2px(17), DpUtil.dp2px(17)); builder.setSpan(new VerticalImageSpan(nhDrawablesMap.get(bean)), index, index + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); index = builder.length(); + prefixWidth += nhDrawablesMap.get(bean).getBounds().width(); } //在这里添加粉丝徽章的图片 if (!TextUtils.isEmpty(bean.getMedalNmae()) && !TextUtils.isEmpty(bean.getMedalLevelImageUrl()) @@ -397,6 +402,7 @@ public class LiveTextRender { drawable.setBounds(0, 0, DpUtil.dp2px(44), DpUtil.dp2px(17)); builder.setSpan(new VerticalImageSpan(drawable), index, index + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); index = builder.length(); + prefixWidth += drawable.getBounds().width(); } } @@ -421,7 +427,7 @@ public class LiveTextRender { index = builder.length(); } } - createPrefixCallback.onPrefixCallback(builder); + createPrefixCallback.onPrefixCallback(builder, prefixWidth); } }); @@ -515,9 +521,9 @@ public class LiveTextRender { } public void getGuardImage(Context mContext, int guardType, ImgLoader.DrawableCallback callback) { - if (guardType==0){ + if (guardType == 0) { callback.onLoadFailed(); - }else { + } else { if (mContext instanceof Activity) { if (((Activity) mContext).isDestroyed()) { mContext = CommonAppContext.getTopActivity(); @@ -684,7 +690,7 @@ public class LiveTextRender { createPrefix(drawable, bean, new CreatePrefixCallback() { @Override - public void onPrefixCallback(SpannableStringBuilder builder) { + public void onPrefixCallback(SpannableStringBuilder builder, int prefixWidth) { int color = Color.parseColor("#68F1F4"); if (bean.isAnchor()) { color = Color.parseColor("#FBEABF"); @@ -696,20 +702,20 @@ public class LiveTextRender { builder = renderGift(color, builder, bean); break; default: - builder = renderChat(color, builder, bean); + builder = renderChat(textView, color, builder, bean, prefixWidth); break; } textView.setText(builder); } }); - } + }// 123123123123123123123123 @Override public void onLoadFailed() { createPrefix(null, bean, new CreatePrefixCallback() { @Override - public void onPrefixCallback(SpannableStringBuilder builder) { + public void onPrefixCallback(SpannableStringBuilder builder, int prefixWidth) { int color = 0; if (bean.isAnchor()) { color = 0xffffdd00; @@ -721,7 +727,7 @@ public class LiveTextRender { builder = renderGift(color, builder, bean); break; default: - builder = renderChat(color, builder, bean); + builder = renderChat(textView, color, builder, bean, prefixWidth); break; } textView.setText(builder); @@ -808,12 +814,31 @@ public class LiveTextRender { /** * 渲染普通聊天消息 */ - private SpannableStringBuilder renderChat(int color, SpannableStringBuilder builder, LiveChatBean bean) { + private SpannableStringBuilder renderChat(TextView textView, int color, SpannableStringBuilder builder, LiveChatBean bean, int prefixWidth) { int length = builder.length(); String name = bean.getUserNiceName(); if (bean.getType() != LiveChatBean.ENTER_ROOM) {//产品规定,进场消息不允许加冒号 name += ":"; } + SpannableStringBuilder sb = new SpannableStringBuilder(); + sb.append(builder).append(name).append(" "); + float measuredText = textView.getPaint().measureText(sb, 0, sb.length()) + prefixWidth; + int width = ((ViewGroup) textView.getParent()).getWidth(); + //检测渲染后图标+名字是否超过父布局宽度,超过了就做换行处理 + if (measuredText > width) { + sb.clear(); + sb.append(builder); + for (int i = 0; i < name.length(); i++) { + sb.append(name.charAt(i)).append(" "); + measuredText = textView.getPaint().measureText(sb, 0, sb.length()) + prefixWidth; + if (measuredText + 1 > width) { + name = name.substring(0, i+1) + "\n" + name.substring(i+1); + break; + } + } + sb.clear(); + } + // name=name.substring(0,7)+"\n"+name.substring(7); builder.append(name); //超皇设置渐变色展示昵称 if (TextUtils.equals("7", bean.getNobleId()) && !TextUtils.isEmpty(bean.getStartColor())) { @@ -823,6 +848,24 @@ public class LiveTextRender { builder.setSpan(new ForegroundColorSpan(color), length, length + name.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } int lengthContent = builder.length(); + //这一段先别删,万一后面要改内容换行呢 + /* sb.clear(); + sb.append(builder).append(bean.getContent()); + measuredText = textView.getPaint().measureText(sb, 0, sb.length()) + prefixWidth; + if (measuredText > width) { + sb.clear(); + sb.append(builder); + for (int i = 0; i < bean.getContent().length(); i++) { + sb.append(bean.getContent().charAt(i)); + measuredText = textView.getPaint().measureText(sb, 0, sb.length()) + prefixWidth; + if (measuredText + 3 > width) { + bean.setContent(bean.getContent().substring(0, i) + "\n"+ bean.getContent().substring(i)); + bean.setContent(""); + break; + } + } + } +*/ builder.append(bean.getContent()); //超皇设置渐变色展示昵称 if (TextUtils.equals("7", bean.getNobleId()) && !TextUtils.isEmpty(bean.getContentColor())) { @@ -889,7 +932,7 @@ public class LiveTextRender { if (textView != null) { createPrefix(drawable, bean, new CreatePrefixCallback() { @Override - public void onPrefixCallback(SpannableStringBuilder builder) { + public void onPrefixCallback(SpannableStringBuilder builder, int prefixWidth) { int start = builder.length(); String name = bean.getUserNiceName() + " "; builder.append(name); @@ -904,15 +947,15 @@ public class LiveTextRender { @Override public void onLoadFailed() { if (textView != null) { - createPrefix(null, bean, new CreatePrefixCallback() { - @Override - public void onPrefixCallback(SpannableStringBuilder builder) { - int start = builder.length(); - String name = bean.getUserNiceName() + " "; - builder.append(name); - textView.setText(builder); - } - }); + createPrefix(null, bean, new CreatePrefixCallback() { + @Override + public void onPrefixCallback(SpannableStringBuilder builder, int prefixWidth) { + int start = builder.length(); + String name = bean.getUserNiceName() + " "; + builder.append(name); + textView.setText(builder); + } + }); } } diff --git a/live/src/main/res/layout/item_live_chat.xml b/live/src/main/res/layout/item_live_chat.xml index c4d360d8c..da2996682 100644 --- a/live/src/main/res/layout/item_live_chat.xml +++ b/live/src/main/res/layout/item_live_chat.xml @@ -10,7 +10,7 @@ Date: Thu, 30 May 2024 15:14:52 +0800 Subject: [PATCH 06/42] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=BC=B9=E7=AA=97?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/yunbao/common/bean/OpenAdModel.java | 16 +++-- .../dialog/OpenAdBottomDialogPopup.java | 11 +++- .../dialog/OpenAdCenterDialogPopup.java | 2 +- .../yunbao/common/manager/OpenAdManager.java | 64 ++++++++++++++----- .../com/yunbao/common/utils/AppManager.java | 4 +- .../live/views/PortraitLiveManager.java | 6 ++ .../yunbao/main/activity/MainActivity.java | 2 +- 7 files changed, 79 insertions(+), 26 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 7bc948149..4f4b73be4 100644 --- a/common/src/main/java/com/yunbao/common/bean/OpenAdModel.java +++ b/common/src/main/java/com/yunbao/common/bean/OpenAdModel.java @@ -2,9 +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 com.yunbao.common.views.weight.ViewClicksAntiShake; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -48,7 +46,9 @@ public class OpenAdModel extends BaseModel { @SerializedName("popup_frequency_time") private String section = "0";// SHOW_DEF = 2 1 @SerializedName("popup_sort") - private int sort = 1;//弹框类型 1.图片 2.H5 + private int popupSort = 1;//弹框类型 1.图片 2.H5 + @SerializedName("sort") + private int sort = 0; public OpenAdModel() { } @@ -70,6 +70,10 @@ public class OpenAdModel extends BaseModel { return model; } + public int getPopupSort() { + return popupSort; + } + public int getSort() { return sort; } @@ -78,6 +82,10 @@ public class OpenAdModel extends BaseModel { this.sort = sort; } + public void setPopupSort(int popupSort) { + this.popupSort = popupSort; + } + public String getName() { return name; } @@ -231,7 +239,7 @@ public class OpenAdModel extends BaseModel { ", permission=" + permission + ", showModel=" + showModel + ", section='" + section + '\'' + - ", sort=" + sort + + ", sort=" + popupSort + '}'; } } diff --git a/common/src/main/java/com/yunbao/common/dialog/OpenAdBottomDialogPopup.java b/common/src/main/java/com/yunbao/common/dialog/OpenAdBottomDialogPopup.java index 9c475e1a7..24771384d 100644 --- a/common/src/main/java/com/yunbao/common/dialog/OpenAdBottomDialogPopup.java +++ b/common/src/main/java/com/yunbao/common/dialog/OpenAdBottomDialogPopup.java @@ -16,7 +16,9 @@ import com.yunbao.common.event.JavascriptInterfaceEvent; import com.yunbao.common.glide.ImgLoader; import com.yunbao.common.interfaces.OnItemClickListener; import com.yunbao.common.manager.IMLoginManager; +import com.yunbao.common.utils.DpUtil; import com.yunbao.common.utils.JavascriptInterfaceUtils; +import com.yunbao.common.utils.ScreenDimenUtil; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; @@ -37,7 +39,7 @@ public class OpenAdBottomDialogPopup extends AbsDialogPopupWindow { public void buildDialog(XPopup.Builder builder) { builder.animationDuration(0); builder.hasShadowBg(true); - if(model.getSort()==2){ + if(model.getPopupSort()==2){ builder.dismissOnTouchOutside(false); builder.dismissOnBackPressed(false); } @@ -67,7 +69,7 @@ public class OpenAdBottomDialogPopup extends AbsDialogPopupWindow { super.onCreate(); contentLayout = findViewById(R.id.content_layout); mClose = findViewById(R.id.close); - if (model.getSort() == 1) { + if (model.getPopupSort() == 1) { setImage(); } else { setWeb(); @@ -104,8 +106,11 @@ public class OpenAdBottomDialogPopup extends AbsDialogPopupWindow { } private void setImage() { + int width = ScreenDimenUtil.getInstance().getScreenWdith(); + int height = (int) (width * 1.4); + ImageView mImageView = new ImageView(mContext); - mImageView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); + mImageView.setLayoutParams(new LinearLayout.LayoutParams(width, height)); mImageView.setOnClickListener(v -> { WebViewActivity.forward(mContext, model.getUrl(), model.getType() != OpenAdModel.TYPE_HOME); if (mListener != null) { diff --git a/common/src/main/java/com/yunbao/common/dialog/OpenAdCenterDialogPopup.java b/common/src/main/java/com/yunbao/common/dialog/OpenAdCenterDialogPopup.java index dc1ddb287..09b3f58e4 100644 --- a/common/src/main/java/com/yunbao/common/dialog/OpenAdCenterDialogPopup.java +++ b/common/src/main/java/com/yunbao/common/dialog/OpenAdCenterDialogPopup.java @@ -93,7 +93,7 @@ public class OpenAdCenterDialogPopup extends AbsDialogFullScreenPopupWindow { dialog.setParams(model.getName()+"弹框高宽","高度:" + height+" 宽度:"+width); } }); - if (model.getSort() == 1) { + if (model.getPopupSort() == 1) { setImage(model,width,height); findViewById(R.id.layout).setOnClickListener(v -> dismiss()); } else { 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 3f32f965c..b90621a4a 100644 --- a/common/src/main/java/com/yunbao/common/manager/OpenAdManager.java +++ b/common/src/main/java/com/yunbao/common/manager/OpenAdManager.java @@ -25,6 +25,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; +import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -82,6 +83,7 @@ public class OpenAdManager { LiveNetManager.get(context).activityPopup(new HttpCallback>() { @Override public void onSuccess(List data) { + data.clear(); if (data == null || data.isEmpty()) { Log.i(TAG, "onSuccess: 没有数据"); list = new ArrayList<>(); @@ -132,11 +134,14 @@ public class OpenAdManager { } }); showTime = System.currentTimeMillis(); + waitRunnableMap.clear(); + runnableMap.clear(); + runNowRunnable = null; 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 (model.getShowModel() == OpenAdModel.SHOW_ONE) { if (SpUtil.getInstance().getBooleanValue("open_ad_popup_" + model.getId())) { continue; @@ -203,16 +208,35 @@ public class OpenAdManager { return false; } - void next() { - Log.i(TAG, "next: " + waitRunnableMap.size()); - if (waitRunnableMap.isEmpty()) return; - AdRunnable next = waitRunnableMap.keySet().iterator().next(); - Integer i = waitRunnableMap.get(next); - if (i == null) { - i = 0; + int getNowType() { + Activity lastActivity = AppManager.getInstance().getLastActivity(); + if (lastActivity == null) { + return -1; } - onItemClickListener.onItemClick("当前加载id:" + next.model.getId() + " " + next.model.getName() + " 延迟展示时间:" + i, (waitRunnableMap.size() - 1)); - handler.postDelayed(next, i); + if (AppManager.getInstance().isLiveActivity()) { + return TYPE_LIVE; + } else if (AppManager.getInstance().isMainActivity()) { + return TYPE_HOME; + } + return -2; + } + + void next() { + Log.i(TAG, "next: 剩余数" + waitRunnableMap.size()); + if (waitRunnableMap.isEmpty()) return; + for (AdRunnable next : waitRunnableMap.keySet()) { + Log.i(TAG, "next: " + next.model); + if (next.model.getType() == getNowType()) { + Integer i = waitRunnableMap.get(next); + if (i == null) { + i = 0; + } + onItemClickListener.onItemClick("当前加载id:" + next.model.getId() + " " + next.model.getName() + " 延迟展示时间:" + i, (waitRunnableMap.size() - 1)); + handler.postDelayed(next, i); + return; + } + } + } private class AdRunnable implements Runnable { @@ -271,9 +295,9 @@ public class OpenAdManager { } if (model.getModel() == OpenAdModel.MODEL_BOTTOM) { new OpenAdBottomDialogPopup(AppManager.getInstance().getLastActivity(), model).setListener((bean, position) -> { - Log.i(TAG, "run: 弹框回调:" + position); + Log.i(TAG, "run: 弹框回调:" + position + " id = " + model.getId()); if (IS_QUEUE_SHOW) { - waitRunnableMap.remove(runnable); + removeList(bean); if (position == 0) { next(); } @@ -281,9 +305,9 @@ public class OpenAdManager { }).showDialog(); } else { new OpenAdCenterDialogPopup(AppManager.getInstance().getLastActivity(), model).setListener((bean, position) -> { - Log.i(TAG, "run: 弹框回调:" + position); + Log.i(TAG, "run: 弹框回调:" + position + " id = " + model.getId()); if (IS_QUEUE_SHOW) { - waitRunnableMap.remove(runnable); + removeList(bean); if (position == 0) { next(); } @@ -291,6 +315,16 @@ public class OpenAdManager { }).showDialog(); } } + + void removeList(OpenAdModel model) { + Log.i(TAG, "removeList: " + model); + for (AdRunnable next : waitRunnableMap.keySet()) { + if (next.model.getId() == model.getId()) { + waitRunnableMap.remove(next); + return; + } + } + } } private class AdListComparator implements Comparator { diff --git a/common/src/main/java/com/yunbao/common/utils/AppManager.java b/common/src/main/java/com/yunbao/common/utils/AppManager.java index 16580d954..6d686ce7d 100644 --- a/common/src/main/java/com/yunbao/common/utils/AppManager.java +++ b/common/src/main/java/com/yunbao/common/utils/AppManager.java @@ -60,13 +60,13 @@ public class AppManager { } return lastActivity.getClass().getSimpleName().contains("MainActivity"); } - +//TODO 首页类型没展示完进直播间会不展示直播间的。 public boolean isLiveActivity() { Activity lastActivity = getLastActivity(); if(lastActivity==null){ return false; } - return lastActivity.getClass().getSimpleName().contains("LiveActivity"); + return lastActivity.getClass().getSimpleName().contains("LiveAudienceActivity"); } public static class SingleApp { 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 f266f585b..1c236e345 100644 --- a/live/src/main/java/com/yunbao/live/views/PortraitLiveManager.java +++ b/live/src/main/java/com/yunbao/live/views/PortraitLiveManager.java @@ -15,6 +15,7 @@ import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; import android.widget.FrameLayout; import android.widget.ImageView; @@ -27,8 +28,10 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.blankj.utilcode.util.GsonUtils; import com.lzf.easyfloat.EasyFloat; +import com.lzf.easyfloat.enums.ShowPattern; import com.lzf.easyfloat.permission.PermissionUtils; import com.lzf.easyfloat.utils.LifecycleUtils; +import com.yunbao.common.dialog.DebugDialog; import com.yunbao.common.manager.imrongcloud.RongcloudIMManager; import com.yunbao.common.utils.MobclickAgent; import com.yunbao.common.CommonAppConfig; @@ -109,6 +112,7 @@ import com.yunbao.live.socket.SocketRyChatUtil; import com.yunbao.live.socket.SocketRyClient; import com.yunbao.live.socket.SocketSendBean; import com.yunbao.live.utils.LiveImDeletUtil; +import com.yunbao.live.utils.LiveTextRender; import org.greenrobot.eventbus.EventBus; @@ -316,6 +320,7 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe loading.setVisibility(View.GONE); enterRoomLeaveHandler.post(enterRoomLeaveRunnable); OpenAdManager.getInstance().show(OpenAdManager.TYPE_LIVE, LiveGuardInfo.isGuard(mLiveGuardInfo)); + } }; final Runnable loadTimeoutRunnableGone = new Runnable() { @@ -324,6 +329,7 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe loading.setVisibility(View.GONE); enterRoomLeaveHandler.post(enterRoomLeaveRunnable); //ToastUtil.show(mContext.getString(R.string.net_error) + " :500");//异常下播,等待加载时间过了后弹出 + OpenAdManager.getInstance().show(OpenAdManager.TYPE_LIVE, LiveGuardInfo.isGuard(mLiveGuardInfo)); } }; 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 3f2a47ced..ab940bbfb 100644 --- a/main/src/main/java/com/yunbao/main/activity/MainActivity.java +++ b/main/src/main/java/com/yunbao/main/activity/MainActivity.java @@ -945,7 +945,7 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene NoviceInstructorManager.get(mContext).getNoviceInstructor(); NoviceInstructorManager.get(mContext).checktHomeZdyPop(); initAnchorRecommendBanner(); - OpenAdManager.getInstance().reset(); + OpenAdManager.getInstance().show(OpenAdManager.TYPE_HOME, false); } /** From 949c0ab759bf3dab291f49b08e20c4d75b5bdc74 Mon Sep 17 00:00:00 2001 From: zlzw <583819556@qq.com> Date: Thu, 30 May 2024 15:33:19 +0800 Subject: [PATCH 07/42] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=BC=B9=E7=AA=97?= =?UTF-8?q?=E3=80=81=E7=AD=BE=E5=88=B0=E5=BC=B9=E7=AA=97=E3=80=81=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E5=BC=B9=E7=AA=97=E4=BC=98=E5=85=88=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 3 ++ .../com/yunbao/common/CommonAppConfig.java | 1 + .../com/yunbao/common/dialog/DebugDialog.java | 3 +- .../yunbao/common/manager/OpenAdManager.java | 1 - .../common/views/APKUpdateCustomPopup.java | 15 +++++++ config.gradle | 2 + .../yunbao/main/activity/MainActivity.java | 39 +++++++++++++++++-- .../com/yunbao/main/dialog/SigninDialog.java | 17 +++++++- 8 files changed, 74 insertions(+), 7 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ded4c2c0f..8b793787a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -157,6 +157,9 @@ + diff --git a/common/src/main/java/com/yunbao/common/CommonAppConfig.java b/common/src/main/java/com/yunbao/common/CommonAppConfig.java index 6b1a7119d..46fc66581 100644 --- a/common/src/main/java/com/yunbao/common/CommonAppConfig.java +++ b/common/src/main/java/com/yunbao/common/CommonAppConfig.java @@ -37,6 +37,7 @@ public class CommonAppConfig { public static final boolean IS_UPLOAD_ERROR_LOG = getMetaDataBoolean("IS_UPLOAD_ERROR_LOG"); //是否为插件包模式 public static final boolean IS_PLUGIN_MODEL = getMetaDataBoolean("IS_PLUGIN_MODEL"); + public static final String BUILD_TIME = getMetaDataString("BUILD_TIME"); //外部sd卡 public static final String DCMI_PATH = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath(); diff --git a/common/src/main/java/com/yunbao/common/dialog/DebugDialog.java b/common/src/main/java/com/yunbao/common/dialog/DebugDialog.java index 6ad00a421..bde2acfbd 100644 --- a/common/src/main/java/com/yunbao/common/dialog/DebugDialog.java +++ b/common/src/main/java/com/yunbao/common/dialog/DebugDialog.java @@ -15,6 +15,7 @@ import com.lzf.easyfloat.EasyFloat; import com.lzf.easyfloat.enums.ShowPattern; import com.lzf.easyfloat.interfaces.OnPermissionResult; import com.lzf.easyfloat.permission.PermissionUtils; +import com.yunbao.common.CommonAppConfig; import com.yunbao.common.adapter.DebugDialogAdapter; import com.yunbao.common.utils.AppManager; import com.yunbao.common.utils.ToastUtil; @@ -138,7 +139,7 @@ public class DebugDialog { EasyFloat.updateFloat("debug"); } }); - params.put("debug弹窗", textView); + params.put("发包时间:"+ CommonAppConfig.BUILD_TIME, textView); adapter.setParamMap(params); EasyFloat.with(mContext) 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 b90621a4a..1e5f1d7d3 100644 --- a/common/src/main/java/com/yunbao/common/manager/OpenAdManager.java +++ b/common/src/main/java/com/yunbao/common/manager/OpenAdManager.java @@ -83,7 +83,6 @@ public class OpenAdManager { LiveNetManager.get(context).activityPopup(new HttpCallback>() { @Override public void onSuccess(List data) { - data.clear(); if (data == null || data.isEmpty()) { Log.i(TAG, "onSuccess: 没有数据"); list = new ArrayList<>(); diff --git a/common/src/main/java/com/yunbao/common/views/APKUpdateCustomPopup.java b/common/src/main/java/com/yunbao/common/views/APKUpdateCustomPopup.java index f860e2203..7747bfa9b 100644 --- a/common/src/main/java/com/yunbao/common/views/APKUpdateCustomPopup.java +++ b/common/src/main/java/com/yunbao/common/views/APKUpdateCustomPopup.java @@ -2,6 +2,7 @@ package com.yunbao.common.views; import android.app.Activity; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; @@ -44,6 +45,7 @@ public class APKUpdateCustomPopup extends CenterPopupView { private ProgressBar progressBar; private Activity mContext; private boolean mInside; + private DialogInterface.OnDismissListener onDismissListener; public APKUpdateCustomPopup(@NonNull Activity context, boolean inside) { super(context); @@ -57,6 +59,11 @@ public class APKUpdateCustomPopup extends CenterPopupView { return R.layout.apk_update_custom_popup; } + public APKUpdateCustomPopup setOnDismissListener(DialogInterface.OnDismissListener onDismissListener) { + this.onDismissListener = onDismissListener; + return this; + } + // 执行初始化操作,比如:findView,设置点击,或者任何你弹窗内的业务逻辑 @Override protected void onCreate() { @@ -69,6 +76,14 @@ public class APKUpdateCustomPopup extends CenterPopupView { } + @Override + protected void onDismiss() { + super.onDismiss(); + if (onDismissListener != null) { + onDismissListener.onDismiss(null); + } + } + private void initView() { if (!mInside) { if (CommonAppConfig.IS_GOOGLE_PLAY == 0 && APKManager.get().getAPKGoogleIsUp() == 1) { diff --git a/config.gradle b/config.gradle index 14d48a2a1..fe92cbdd4 100644 --- a/config.gradle +++ b/config.gradle @@ -13,6 +13,8 @@ ext { // 测试 serverHost : "https://ceshi.yaoulive.com", + buildTime : new Date().format("MM-dd HH:mm", TimeZone.getTimeZone("GMT+8")), + //百度语音识别 baiduAppId : "23774720", 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 ab940bbfb..ad4ebd3f5 100644 --- a/main/src/main/java/com/yunbao/main/activity/MainActivity.java +++ b/main/src/main/java/com/yunbao/main/activity/MainActivity.java @@ -12,6 +12,7 @@ import android.app.NotificationChannel; import android.app.PendingIntent; import android.content.ClipData; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Build; @@ -551,7 +552,6 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene //获取指导员账号 ConversationIMListManager.get(this).getUserInstructor(this); checkVersion(); - OpenAdManager.getInstance().show(OpenAdManager.TYPE_HOME, false); } /** @@ -848,7 +848,15 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene if (!APKManager.get().getApkVerNew()) { new XPopup.Builder(mContext).isDestroyOnDismiss(true).dismissOnBackPressed(false) // 按返回键是否关闭弹窗,默认为true .dismissOnTouchOutside(false) // 点击外部是否关闭弹窗,默认为true - .asCustom(new APKUpdateCustomPopup(mContext, false)).show(); + .asCustom( + new APKUpdateCustomPopup(mContext, false) + .setOnDismissListener(new DialogInterface.OnDismissListener() { + @Override + public void onDismiss(DialogInterface dialogInterface) { + requestBonus(); + } + }) + ).show(); } } else { requestBonus(); @@ -858,6 +866,10 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene }); } + private void initAdOpenWindows() { + OpenAdManager.getInstance().show(OpenAdManager.TYPE_HOME, false); + } + /** * 填写邀请码 */ @@ -888,14 +900,21 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene * 签到奖励 */ SigninDialog fragment; + boolean isRequestBonus = false; private void requestBonus() { fragment = new SigninDialog(); MainHttpUtil.requestNewBonus(new HttpCallback() { @Override - public void onSuccess(int code, String msg, String[] info) { + public void onError() { + super.onError(); + isRequestBonus = true; + } + @Override + public void onSuccess(int code, String msg, String[] info) { + isRequestBonus = true; if (info.length > 0) { JSONObject obj = JSON.parseObject(info[0]); if (code == 0) { @@ -904,14 +923,24 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene bundle.putString("send_exp", obj.getString("send_exp")); bundle.putString("sign_day", obj.getString("sign_day")); fragment.setArguments(bundle); + fragment.setOnDismissListener(new DialogInterface.OnDismissListener() { + @Override + public void onDismiss(DialogInterface dialogInterface) { + initAdOpenWindows(); + } + }); if (!getSupportFragmentManager().isStateSaved()) { fragment.show(getSupportFragmentManager(), "SigninDialog"); } + } else { + initAdOpenWindows(); } if (obj != null && obj.containsKey("msg_zdy_send") && obj.containsKey("msg_zdy_send_text")) { Log.e("MainActivity333", info[0]); NoviceInstructorManager.get(mContext).getNetNoviceInstructor(info[0]); } + } else { + initAdOpenWindows(); } } }); @@ -945,7 +974,9 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene NoviceInstructorManager.get(mContext).getNoviceInstructor(); NoviceInstructorManager.get(mContext).checktHomeZdyPop(); initAnchorRecommendBanner(); - OpenAdManager.getInstance().show(OpenAdManager.TYPE_HOME, false); + if (isRequestBonus) { + initAdOpenWindows(); + } } /** diff --git a/main/src/main/java/com/yunbao/main/dialog/SigninDialog.java b/main/src/main/java/com/yunbao/main/dialog/SigninDialog.java index 219ede7e6..85c3969fb 100644 --- a/main/src/main/java/com/yunbao/main/dialog/SigninDialog.java +++ b/main/src/main/java/com/yunbao/main/dialog/SigninDialog.java @@ -3,6 +3,7 @@ package com.yunbao.main.dialog; import static com.yunbao.common.utils.RouteUtil.PATH_REWARD; import android.annotation.SuppressLint; +import android.content.DialogInterface; import android.os.Bundle; import android.view.Gravity; import android.view.View; @@ -20,12 +21,18 @@ import com.yunbao.main.R; public class SigninDialog extends AbsDialogFragment { TextView gold, sign_day; + private DialogInterface.OnDismissListener onDismissListener; @Override protected int getLayoutId() { return R.layout.signin_dialog; } + public SigninDialog setOnDismissListener(DialogInterface.OnDismissListener onDismissListener) { + this.onDismissListener = onDismissListener; + return this; + } + @Override protected int getDialogStyle() { return R.style.dialog; @@ -58,7 +65,7 @@ public class SigninDialog extends AbsDialogFragment { goto_sign.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - ARouter.getInstance().build(PATH_REWARD).withString("url", CommonAppConfig.HOST + "/index.php?g=Appapi&m=task&a=index" + "&uid=" + CommonAppConfig.getInstance().getUid() + "&token=" + CommonAppConfig.getInstance().getToken()+ "&isZh=" + (WordUtil.isNewZh() ? "1" : "0")).navigation(); + ARouter.getInstance().build(PATH_REWARD).withString("url", CommonAppConfig.HOST + "/index.php?g=Appapi&m=task&a=index" + "&uid=" + CommonAppConfig.getInstance().getUid() + "&token=" + CommonAppConfig.getInstance().getToken() + "&isZh=" + (WordUtil.isNewZh() ? "1" : "0")).navigation(); dismiss(); } @@ -79,4 +86,12 @@ public class SigninDialog extends AbsDialogFragment { sign_day.setText(String.format(getString(R.string.this_month), bundle.getString("sign_day"))); } + + @Override + public void onDismiss(DialogInterface dialog) { + super.onDismiss(dialog); + if (onDismissListener != null) { + onDismissListener.onDismiss(dialog); + } + } } From b7c0f5d3ec0de31095127517490c8a74f8aeec8d Mon Sep 17 00:00:00 2001 From: zlzw <583819556@qq.com> Date: Fri, 31 May 2024 10:30:12 +0800 Subject: [PATCH 08/42] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=88=98=E4=BB=A4?= =?UTF-8?q?=E5=9B=BE=E6=A0=87=E6=94=B9=E4=B8=BA=E9=80=9A=E8=BF=87=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/bean/AnchorRecommendModel.java | 20 +++++++++++++++++++ .../com/yunbao/common/utils/ViewUtils.java | 12 +++++++++++ .../yunbao/main/activity/MainActivity.java | 7 +++++++ .../main/res/layout/view_float_war_order.xml | 6 ++++-- 4 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 common/src/main/java/com/yunbao/common/utils/ViewUtils.java diff --git a/common/src/main/java/com/yunbao/common/bean/AnchorRecommendModel.java b/common/src/main/java/com/yunbao/common/bean/AnchorRecommendModel.java index 8129692a6..d64458a2b 100644 --- a/common/src/main/java/com/yunbao/common/bean/AnchorRecommendModel.java +++ b/common/src/main/java/com/yunbao/common/bean/AnchorRecommendModel.java @@ -24,6 +24,10 @@ public class AnchorRecommendModel extends BaseModel { @SerializedName("live_battle_pass_show_status") private int showWarOrder = 0;//是否显示首页戰令 + @SerializedName("live_battle_pass_image_cn") + private String battlePassImageCn; + @SerializedName("live_battle_pass_image_en") + private String battlePassImageEn; //是否支持换一批0=不支持 1=支持 @SerializedName("up_show") @@ -58,6 +62,22 @@ public class AnchorRecommendModel extends BaseModel { return listShow; } + public String getBattlePassImageCn() { + return battlePassImageCn; + } + + public void setBattlePassImageCn(String battlePassImageCn) { + this.battlePassImageCn = battlePassImageCn; + } + + public String getBattlePassImageEn() { + return battlePassImageEn; + } + + public void setBattlePassImageEn(String battlePassImageEn) { + this.battlePassImageEn = battlePassImageEn; + } + public AnchorRecommendModel setListShow(int listShow) { this.listShow = listShow; return this; diff --git a/common/src/main/java/com/yunbao/common/utils/ViewUtils.java b/common/src/main/java/com/yunbao/common/utils/ViewUtils.java new file mode 100644 index 000000000..a36d8d4e4 --- /dev/null +++ b/common/src/main/java/com/yunbao/common/utils/ViewUtils.java @@ -0,0 +1,12 @@ +package com.yunbao.common.utils; + +import android.view.View; + +public class ViewUtils { + public static T findViewById(View view,int id,Class clazz){ + return view.findViewById(id); + } + public static T findViewById(View view,int id){ + return view.findViewById(id); + } +} 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 ad4ebd3f5..4f645e18d 100644 --- a/main/src/main/java/com/yunbao/main/activity/MainActivity.java +++ b/main/src/main/java/com/yunbao/main/activity/MainActivity.java @@ -50,6 +50,7 @@ import com.tencent.imsdk.v2.V2TIMManager; import com.tencent.imsdk.v2.V2TIMSDKConfig; import com.tencent.imsdk.v2.V2TIMSDKListener; import com.tencent.imsdk.v2.V2TIMUserFullInfo; +import com.yunbao.common.glide.ImgLoader; import com.yunbao.common.utils.MobclickAgent; import com.yunbao.common.CommonAppConfig; import com.yunbao.common.Constants; @@ -101,6 +102,7 @@ import com.yunbao.common.utils.RouteUtil; import com.yunbao.common.utils.SpUtil; import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.utils.VersionUtil; +import com.yunbao.common.utils.ViewUtils; import com.yunbao.common.utils.WordUtil; import com.yunbao.common.views.APKUpdateCustomPopup; import com.yunbao.common.views.AbsMainViewHolder; @@ -664,6 +666,11 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene floatWarOrder.setTag(null); } else { floatWarOrder.setVisibility(View.VISIBLE); + if (WordUtil.isNewZh()) { + ImgLoader.display(mContext, data.getBattlePassImageCn(), ViewUtils.findViewById(floatWarOrder, R.id.battleImage, ImageView.class)); + } else { + ImgLoader.display(mContext, data.getBattlePassImageEn(), ViewUtils.findViewById(floatWarOrder, R.id.battleImage, ImageView.class)); + } floatWarOrder.setTag(data); } diff --git a/main/src/main/res/layout/view_float_war_order.xml b/main/src/main/res/layout/view_float_war_order.xml index 0a867ba7e..196d78132 100644 --- a/main/src/main/res/layout/view_float_war_order.xml +++ b/main/src/main/res/layout/view_float_war_order.xml @@ -2,10 +2,12 @@ + + android:layout_height="61.5dp" + android:src="@mipmap/icon_bp_flot" /> " + url); + view.loadUrl(url); + + return true; + } + + @Override + public void onPageFinished(WebView view, String url) { + } + }); String url=model.getUrl(); if(url.contains("?")){ url+="&uid="+ IMLoginManager.get(mContext).getUserInfo().getId()+"&token="+IMLoginManager.get(mContext).getUserInfo().getToken(); diff --git a/common/src/main/java/com/yunbao/common/dialog/OpenAdCenterDialogPopup.java b/common/src/main/java/com/yunbao/common/dialog/OpenAdCenterDialogPopup.java index ed474af5f..3f6211eea 100644 --- a/common/src/main/java/com/yunbao/common/dialog/OpenAdCenterDialogPopup.java +++ b/common/src/main/java/com/yunbao/common/dialog/OpenAdCenterDialogPopup.java @@ -5,9 +5,12 @@ import android.content.Context; import android.graphics.Color; import android.util.Log; import android.view.View; +import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.WindowInsets; +import android.webkit.WebResourceRequest; import android.webkit.WebView; +import android.webkit.WebViewClient; import android.widget.ImageView; import android.widget.LinearLayout; @@ -24,8 +27,10 @@ import com.yunbao.common.interfaces.OnItemClickListener; import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.utils.DpUtil; import com.yunbao.common.utils.JavascriptInterfaceUtils; +import com.yunbao.common.utils.L; import com.yunbao.common.utils.RouteUtil; import com.yunbao.common.utils.ScreenDimenUtil; +import com.yunbao.common.utils.ToastUtil; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; @@ -126,7 +131,7 @@ public class OpenAdCenterDialogPopup extends AbsDialogFullScreenPopupWindow { private void setWeb(OpenAdModel model, int width, int height) { WebView mWebView = new WebView(mContext); - mWebView.setLayoutParams(new LinearLayout.LayoutParams(width, height)); + mWebView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, height)); mWebView.addJavascriptInterface(JavascriptInterfaceUtils.getInstance().setmContext((Activity) mContext, mWebView).setPageClose(true).setLiveZhuangBana(false), "androidObject"); mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); // 是否允许JS打开新窗口 mWebView.getSettings().setJavaScriptEnabled(true); @@ -138,6 +143,19 @@ public class OpenAdCenterDialogPopup extends AbsDialogFullScreenPopupWindow { mWebView.getSettings().setAllowFileAccess(true); // 允许访问文件 mWebView.setHorizontalScrollBarEnabled(false); mWebView.setVerticalScrollBarEnabled(false); + mWebView.setWebViewClient(new WebViewClient() { + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + L.e("H5-------->" + url); + view.loadUrl(url); + + return true; + } + + @Override + public void onPageFinished(WebView view, String url) { + } + }); String url = model.getUrl(); if (url.contains("?")) { url += "&uid=" + IMLoginManager.get(mContext).getUserInfo().getId() + "&token=" + IMLoginManager.get(mContext).getUserInfo().getToken(); From 98095e07eea0f2606adfdd4ffd567f1073f451a3 Mon Sep 17 00:00:00 2001 From: zlzw <583819556@qq.com> Date: Sat, 1 Jun 2024 14:00:48 +0800 Subject: [PATCH 12/42] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=BC=B9=E7=AA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/dialog/OpenAdCenterDialogPopup.java | 14 ++++++++++---- .../src/main/res/layout/dialog_open_center_ad.xml | 2 -- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/common/src/main/java/com/yunbao/common/dialog/OpenAdCenterDialogPopup.java b/common/src/main/java/com/yunbao/common/dialog/OpenAdCenterDialogPopup.java index 3f6211eea..046494ea8 100644 --- a/common/src/main/java/com/yunbao/common/dialog/OpenAdCenterDialogPopup.java +++ b/common/src/main/java/com/yunbao/common/dialog/OpenAdCenterDialogPopup.java @@ -4,6 +4,7 @@ import android.app.Activity; import android.content.Context; import android.graphics.Color; import android.util.Log; +import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; @@ -94,12 +95,12 @@ public class OpenAdCenterDialogPopup extends AbsDialogFullScreenPopupWindow { if (isShow) return; isShow = true; - int width = ScreenDimenUtil.getInstance().getScreenWdith() - DpUtil.dp2px(10); + int width = contentLayout.getWidth() - DpUtil.dp2px(20); int height = (int) (width * 1.5); if (model.getModel() == OpenAdModel.MODEL_SQUARE) { height = (int) (width * 1.2); } - Log.i("-----弹窗-----", "高度:" + height + " 宽度:" + width + " 布局宽度: " + contentLayout.getWidth() + " 屏幕宽度: " + ScreenDimenUtil.getInstance().getScreenWdith()); + Log.i("-----弹窗-----", "高度:" + height + " 宽度:" + width + " 屏幕宽度: " + ScreenDimenUtil.getInstance().getScreenWdith()); /*DebugDialog.getInstance(new DebugDialog.DebugDialogRunnable() { @Override public void run(DebugDialog dialog) { @@ -131,7 +132,9 @@ public class OpenAdCenterDialogPopup extends AbsDialogFullScreenPopupWindow { private void setWeb(OpenAdModel model, int width, int height) { WebView mWebView = new WebView(mContext); - mWebView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, height)); + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(width, height); + params.gravity = Gravity.CENTER; + mWebView.setLayoutParams(params); mWebView.addJavascriptInterface(JavascriptInterfaceUtils.getInstance().setmContext((Activity) mContext, mWebView).setPageClose(true).setLiveZhuangBana(false), "androidObject"); mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); // 是否允许JS打开新窗口 mWebView.getSettings().setJavaScriptEnabled(true); @@ -170,7 +173,10 @@ public class OpenAdCenterDialogPopup extends AbsDialogFullScreenPopupWindow { private void setImage(OpenAdModel model, int width, int height) { mImageView = new ImageView(mContext); mImageView.setScaleType(ImageView.ScaleType.CENTER_CROP); - mImageView.setLayoutParams(new LinearLayout.LayoutParams(width, height)); + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(width, height); + params.gravity = Gravity.CENTER; + mImageView.setLayoutParams(params); + mImageView.setOnClickListener(v -> { if ("home_page_banner_battle".equals(model.getOriginalUrl())) { RouteUtil.forwardBattlePass(); diff --git a/common/src/main/res/layout/dialog_open_center_ad.xml b/common/src/main/res/layout/dialog_open_center_ad.xml index a67588370..8e078bb5d 100644 --- a/common/src/main/res/layout/dialog_open_center_ad.xml +++ b/common/src/main/res/layout/dialog_open_center_ad.xml @@ -10,8 +10,6 @@ android:id="@+id/content_layout" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginStart="20dp" - android:layout_marginEnd="20dp" android:layout_marginBottom="12dp" android:orientation="vertical" app:layout_constraintBottom_toBottomOf="parent" From b5417f90b4b0bee1075c891be1820eece7cccad3 Mon Sep 17 00:00:00 2001 From: zlzw <583819556@qq.com> Date: Mon, 3 Jun 2024 09:41:51 +0800 Subject: [PATCH 13/42] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=BC=B9=E7=AA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/yunbao/common/bean/PrankGiftBean.java | 11 ++ .../com/yunbao/common/glide/ImgLoader.java | 11 +- .../yunbao/common/manager/OpenAdManager.java | 1 + .../ic_prank_gift_add_gift_to.png | Bin 0 -> 933 bytes .../res/mipmap-xxhdpi/ic_prank_gift_del.png | Bin 0 -> 1721 bytes .../mipmap-xxhdpi/ic_prank_gift_switch.png | Bin 0 -> 725 bytes .../ItemLivePrankGiftNumberAdapter.java | 79 ++++++++ .../com/yunbao/live/dialog/GiftPopDialog.java | 22 +-- .../live/dialog/LivePrankAddGiftDialog.java | 136 ++++++++++++++ .../dialog/LivePrankAddGiftNumberDialog.java | 137 ++++++++++++++ .../live/dialog/LivePrankDialogFragment.java | 88 ++++++++- .../drawable/bg_prank_btn_gift_add_number.xml | 9 + .../res/drawable/bg_prank_gift_add_item.xml | 9 + .../res/layout/dialog_live_prank_add_gift.xml | 173 ++++++++++++++++++ .../dialog_live_prank_add_gift_number.xml | 88 +++++++++ .../item_prank_dialog_add_gift_number.xml | 17 ++ .../res/layout/view_live_prank_turntable.xml | 116 ++++++++++-- live/src/main/res/values-en/strings.xml | 7 + live/src/main/res/values/strings.xml | 15 ++ 19 files changed, 880 insertions(+), 39 deletions(-) create mode 100644 common/src/main/res/mipmap-xxhdpi/ic_prank_gift_add_gift_to.png create mode 100644 common/src/main/res/mipmap-xxhdpi/ic_prank_gift_del.png create mode 100644 common/src/main/res/mipmap-xxhdpi/ic_prank_gift_switch.png create mode 100644 live/src/main/java/com/yunbao/live/adapter/ItemLivePrankGiftNumberAdapter.java create mode 100644 live/src/main/java/com/yunbao/live/dialog/LivePrankAddGiftDialog.java create mode 100644 live/src/main/java/com/yunbao/live/dialog/LivePrankAddGiftNumberDialog.java create mode 100644 live/src/main/res/drawable/bg_prank_btn_gift_add_number.xml create mode 100644 live/src/main/res/drawable/bg_prank_gift_add_item.xml create mode 100644 live/src/main/res/layout/dialog_live_prank_add_gift.xml create mode 100644 live/src/main/res/layout/dialog_live_prank_add_gift_number.xml create mode 100644 live/src/main/res/layout/item_prank_dialog_add_gift_number.xml diff --git a/common/src/main/java/com/yunbao/common/bean/PrankGiftBean.java b/common/src/main/java/com/yunbao/common/bean/PrankGiftBean.java index a7e6c95a7..ff79d641e 100644 --- a/common/src/main/java/com/yunbao/common/bean/PrankGiftBean.java +++ b/common/src/main/java/com/yunbao/common/bean/PrankGiftBean.java @@ -56,4 +56,15 @@ public class PrankGiftBean extends BaseModel{ public void setGiftId(String giftId) { this.giftId = giftId; } + + @Override + public String toString() { + return "PrankGiftBean{" + + "title='" + title + '\'' + + ", name='" + name + '\'' + + ", icon='" + icon + '\'' + + ", num=" + num + + ", giftId='" + giftId + '\'' + + '}'; + } } diff --git a/common/src/main/java/com/yunbao/common/glide/ImgLoader.java b/common/src/main/java/com/yunbao/common/glide/ImgLoader.java index f13262a34..bfd4b2b68 100644 --- a/common/src/main/java/com/yunbao/common/glide/ImgLoader.java +++ b/common/src/main/java/com/yunbao/common/glide/ImgLoader.java @@ -16,6 +16,7 @@ import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.target.CustomTarget; import com.bumptech.glide.request.transition.Transition; import com.yunbao.common.R; +import com.yunbao.common.interfaces.OnItemClickListener; import java.io.File; @@ -226,14 +227,20 @@ public class ImgLoader { .skipMemoryCache(SKIP_MEMORY_CACHE) .into(imageView); } - public static void displayDrawable(Context context, String url, final DrawableCallback callback) { + displayDrawable(context, url, -1, -1, callback); + } + public static void displayDrawable(Context context, String url, int width, int height, final DrawableCallback callback) { if (TextUtils.isEmpty(url) || !contextIsExist(context)) { if (callback != null) callback.onLoadFailed(); } else { - Glide.with(context).asDrawable().load(url).thumbnail(thumbnail).skipMemoryCache(SKIP_MEMORY_CACHE).into(new CustomTarget() { + RequestBuilder builder = Glide.with(context).asDrawable().load(url); + if (width != -1 && height != -1) { + builder = builder.override(width, height); + } + builder.thumbnail(thumbnail).skipMemoryCache(SKIP_MEMORY_CACHE).into(new CustomTarget() { @Override public void onResourceReady(@NonNull Drawable resource, @Nullable Transition transition) { 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 b49247ddd..4efea8234 100644 --- a/common/src/main/java/com/yunbao/common/manager/OpenAdManager.java +++ b/common/src/main/java/com/yunbao/common/manager/OpenAdManager.java @@ -96,6 +96,7 @@ public class OpenAdManager { return; } Collections.sort(data, new AdListComparator()); + data.clear(); list = data; if (isShow) { if (showType == 0) { diff --git a/common/src/main/res/mipmap-xxhdpi/ic_prank_gift_add_gift_to.png b/common/src/main/res/mipmap-xxhdpi/ic_prank_gift_add_gift_to.png new file mode 100644 index 0000000000000000000000000000000000000000..6a4592ca857278189034d5c617ba4ea9b15466f9 GIT binary patch literal 933 zcmV;W16urvP)Px&Ur9tkR9HvNmrH09Q51&%a}#Z>ih@{FD2k7T#f{*un_z7-sZea%swj&1MtmUX zqM#zUD88^hKoE7IC~8dW157fpSSgAX1L{&*ks_kRYN<_Vn#?_RoT<35&15D%W_$14 z|GWRW=iGY;|G`IA8NA-=86Hn@0FYWHlfBc{cJGtbe{;>V45282O#q!@CIR4RcX#qw zS64WlOTfx_9uRfA0UQIU2tdD-a;vJg+ycN>gvOd<8N%yrnBnp82>@%21^F8@Z;wV> zuKzU%U8tg>cADEQZV=Hj6Xd;=v`STPKXn3P*@+R6s;b%&Aw&l=77!5u{ES(wi$;T8 zc0uxn06>aTzZAeF0JDDth7n1nXnjXVFkuJ84g`P(S5;MZsSqyJ6xEnHG%%3a{N%~K zZ~21QgfL_jrG6VTnu*{6ILoZ3Zt6(Bsp|;B@Anrm7as;_&v5OSz|4I_ye|@I(L-hV za|EHQ`27vjnfZ!tjH&uXN^Q5QwqCPJ;TS>}GBU;;W|oVMjKLR8lQpqei=MhUi&;S+ zjPtR24v-B3Si;N<(Bo`Y+t$|B`X-kn1%uF2*XIjV19X{)N&waXdj8=@+4b+K6RWi9}H+$n@ml$Djt@+=V+m;f)N#7Dsnw1BGUnUl#Ae(Hjco3t$VPyu4=eq)Fp00tgV1TYq&+iCwB1x(Y!4aR?KjnTR%;Vo5+dm`L=T zi^t;`I{Px*b4f%&R9Hv7SX+!!RTMq@+3}C0&PKQn(nNH_Ud+yoJ9y{Xz zecVoh=d(Tg>~+rGd+oI^ur5|InY1#-tcGFq0l+N)aI=(h4FKH47z4)G93oCiDN_KD ztk>%oYqeTsWMrgn)(stEW}50L5al9RRSel_Nz_EWN$G52~u_DV0h;WV6{n6h$FUYPk%< z5Np@2-R^KWHtV`RmQJU?L&T=^L9~L1??)n$-{9oQlbX}%e3CJ?sa;jM-R^aMzke5F z%(!yp%F(H*sZ=9`%|M~g=ey10@obY)&W?|de_E^6X4>Ef0Eh#?J8_Rk~cRfu5e8`{{z|bo!&2nVCH2oJzgj(&zWQ z4Cl|Ezk_rBEMsh`^jcXNhEWd$0=K)}?(IT|QYMr6vRbW{7oAaLTa7?PbXyBHA@gd!3r*egN2kh)t`j2{>4@X3Z9d!?DRQj8ZCE5qAuUp*SE`Nv-Qu;&L%RM%yC6g zY~gTtud1r9nVFe$sZ{Eys;VScOsz)B#OQ@yBaLIq>c34SH+XMv?{2Hrx~@{GoYFMS zXSG__R;$&ssZ{EFMNzaa&jduQ5TG}^G+f$lu~_WkaCo<>sy*~$wOSp`WHLVziLUTW zBtUPNjq|lmD47F+z&3}&v61q!TrU5b%jJGwA(#a-%Ar>Qz|m!AM|y;CIDC)8;fM+$ zvYc}Vol__jj!#Zbo*^<_0kAnpBofaxy1Qu+)=26HY&P3^!!U~Jboz_=)}w|(p?%bT zipAnj6B83ByU8PJPYYUnY;0`5l(MU`4+H{ttzNx)L`pf`;G!bEhSTW`1_FWIj4>^r z&wpJk7B87i2P%6Z#0j`?;ljpxz5YA^EO1G?C8ab%q0knm(>X#flg(z2R4SFJMdG9X z{eJ(j*XzBPn4P$&P$(n;z)Z#2IOlIcGMQXGFT!7vQrg;qF$|*?3Dbb4rL=)DC!6pzR61b`=6HCRPatbKib z4+DTDm&<)sDwY23BtIy8Jv}{}JRZ;Xxw*N&#>dBxwvr$Jwle%|czF24lKP9s<0O!L z&8|R=+HSY|4a2DFx?VAxsC3q}mM-cJW8xTGs$wa+g|G?BJ zy$Fi<2>|vAA!s5ot0voqj%bB*{;j5IN0v{k%Z)l#O=Ez3jASW^vK8bOO%wtVi=6W> z76-z14B0Uu8-wIl02ly(C?c+Eyc&J?SuVyXH%KOdlu`qLA^?ofSMDz~b9HpoEw2z~ zoIQKiX}8<^=W}3?b55W3NG*~Crmtxe!b$0;(e?oOqL P00000NkvXXu0mjfMLIE~ literal 0 HcmV?d00001 diff --git a/common/src/main/res/mipmap-xxhdpi/ic_prank_gift_switch.png b/common/src/main/res/mipmap-xxhdpi/ic_prank_gift_switch.png new file mode 100644 index 0000000000000000000000000000000000000000..c140e0bc96329d9275b11cd26f91a6f118e4b2d0 GIT binary patch literal 725 zcmV;`0xJE9P)Px%k4Z#9R9Hvtmd|SwK@`W|471x1HXcG0gydjmHrIkwPX*bNN5Ml7Z~g-+dQh|} zr7cRKh5iZlAmUlPHee4P%vlJ#lWm}&XzL+~*^tfdlYyjaNxErp+k$zw-FfrgXTI;v z4+7`R$T{PIDNs~J{y&8fk-4sW2N46#`I|FWXm@wlG7Muo3`1x%8jC`RmE)jdFIlZt zyN-w-0e}KP006f*=kG^B#SVmsR7$x-2w4CCLJ0X91i`#%nsOLa>_951>$-_B40kA{ zbCgo(^?ILmU7yS4a^6v>Qvp&*ZQH)U7%MZzuBva}_utj)_1l(Z_5Oq!3REta6H&Y2 zq~o6FA?N&xrfJ&%aJfJKMLwT@J`$)}tzKh{ZEKoloHXG${)ni`b?B<=I(VLUqfjV( z82tQ8A;)n_nM`K6*=&vzeqo!TxNcM(&dD5a(fok$_aaV`PC8l^N10KX56s3;STBjT4Z3>Qt) z{66YnTu7(WE3H=RFa;s;RW+4L!T$b!NeHnz6i7-ruW8zj@B4#sRPP1G*n}D!Kh5|3 zp8#NS&OePj7#+vC4*=_g5N&2=2D;sDsa~(IXR}${+uQr6a#@zuIf^_qft2zQrF28x zJIQ1c+U@p6rBZoPEEd&^FIF45VkzZaLdfg>WvCi_GoQ~tCWOS=?8lbCb=`+y7_I?; zuAT~=PG?C7u^cB|m00000NkvXX Hu0mjfj?+f; literal 0 HcmV?d00001 diff --git a/live/src/main/java/com/yunbao/live/adapter/ItemLivePrankGiftNumberAdapter.java b/live/src/main/java/com/yunbao/live/adapter/ItemLivePrankGiftNumberAdapter.java new file mode 100644 index 000000000..38c3b14fc --- /dev/null +++ b/live/src/main/java/com/yunbao/live/adapter/ItemLivePrankGiftNumberAdapter.java @@ -0,0 +1,79 @@ +package com.yunbao.live.adapter; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.yunbao.live.R; + +import java.util.ArrayList; +import java.util.List; + +public class ItemLivePrankGiftNumberAdapter extends RecyclerView.Adapter { + List list = new ArrayList<>(); + int selectNumber; + OnSelectNumberListener onSelectNumberListener; + + public void setOnSelectNumberListener(OnSelectNumberListener onSelectNumberListener) { + this.onSelectNumberListener = onSelectNumberListener; + } + + public void setSelectNumber(int selectNumber) { + this.selectNumber = selectNumber; + } + + public int getSelectNumber() { + return selectNumber; + } + + public void setList(List list) { + this.list = list; + notifyDataSetChanged(); + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_prank_dialog_add_gift_number, parent, false)); + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + holder.setData(list.get(position), selectNumber); + } + + @Override + public int getItemCount() { + return list.size(); + } + + public interface OnSelectNumberListener { + void onSelectNumber(int number); + } + + public class ViewHolder extends RecyclerView.ViewHolder { + private Button button; + + public ViewHolder(@NonNull View itemView) { + super(itemView); + button = itemView.findViewById(R.id.coin); + } + + public void setData(int number, int selectNumber) { + button.setText(String.valueOf(number)); + if (number == selectNumber) { + button.setBackgroundResource(R.drawable.bg_prank_btn_gift_add_number); + } else { + button.setBackgroundResource(R.drawable.bg_prank_coin); + } + button.setOnClickListener(view -> { + ItemLivePrankGiftNumberAdapter.this.selectNumber = number; + notifyDataSetChanged(); + }); + } + } +} diff --git a/live/src/main/java/com/yunbao/live/dialog/GiftPopDialog.java b/live/src/main/java/com/yunbao/live/dialog/GiftPopDialog.java index ac1340c5d..4694205e4 100644 --- a/live/src/main/java/com/yunbao/live/dialog/GiftPopDialog.java +++ b/live/src/main/java/com/yunbao/live/dialog/GiftPopDialog.java @@ -217,7 +217,7 @@ public class GiftPopDialog extends AbsDialogPopupWindow implements ActionListene for (int i = 0; i < list.size(); i++) { JSONObject data = list.getJSONObject(i); GiftTopBean giftTopBean = new GiftTopBean(); - giftTopBean.setName(WordUtil.isNewZh()?data.getString("name"):data.getString("en_name")); + giftTopBean.setName(WordUtil.isNewZh() ? data.getString("name") : data.getString("en_name")); name.add(giftTopBean); } @@ -265,17 +265,17 @@ public class GiftPopDialog extends AbsDialogPopupWindow implements ActionListene public void onClick(View view) { int id = view.getId(); if (id == R.id.btn_send) { - DialogUitl.showSimpleInputDialog(mContext, WordUtil.isNewZh() ?"輸入數量":"Input quantity", DialogUitl.INPUT_TYPE_NUMBER, new DialogUitl.SimpleCallback() { + DialogUitl.showSimpleInputDialog(mContext, WordUtil.isNewZh() ? "輸入數量" : "Input quantity", DialogUitl.INPUT_TYPE_NUMBER, new DialogUitl.SimpleCallback() { @Override public void onConfirmClick(Dialog dialog, String content) { try { prangNum = Integer.parseInt(content); if (prangNum <= 0) { - ToastUtil.show(WordUtil.isNewZh() ?"數量不能為0或負數":"The quantity cannot be zero or negative"); + ToastUtil.show(WordUtil.isNewZh() ? "數量不能為0或負數" : "The quantity cannot be zero or negative"); return; } if (prangNum > 999) { - ToastUtil.show(WordUtil.isNewZh() ?"數量不能大於999":"The number cannot be greater than 999"); + ToastUtil.show(WordUtil.isNewZh() ? "數量不能大於999" : "The number cannot be greater than 999"); return; } mBtnSend.setText(content); @@ -285,7 +285,7 @@ public class GiftPopDialog extends AbsDialogPopupWindow implements ActionListene dialog.dismiss(); } catch (Exception e) { e.printStackTrace(); - ToastUtil.show(WordUtil.isNewZh() ? "輸入錯誤":"Input error"); + ToastUtil.show(WordUtil.isNewZh() ? "輸入錯誤" : "Input error"); } } }); @@ -307,29 +307,29 @@ public class GiftPopDialog extends AbsDialogPopupWindow implements ActionListene }); } else if (id == R.id.gift_btn) { if (bean == null) { - ToastUtil.show(WordUtil.isNewZh() ? "整蠱禮物不能為空":"A trick gift can't be empty"); + ToastUtil.show(WordUtil.isNewZh() ? "整蠱禮物不能為空" : "A trick gift can't be empty"); return; } if (StringUtil.isEmpty(prangContext) || prangNum == 0) { - ToastUtil.show(WordUtil.isNewZh() ?"整蠱內容或數量不能為空":"The content or number of pranks cannot be empty"); + ToastUtil.show(WordUtil.isNewZh() ? "整蠱內容或數量不能為空" : "The content or number of pranks cannot be empty"); return; } if (prangNum >= 999) { - ToastUtil.show(WordUtil.isNewZh() ?"整蠱數量不能過大":"The number of pranks should not be too large"); + ToastUtil.show(WordUtil.isNewZh() ? "整蠱數量不能過大" : "The number of pranks should not be too large"); return; } if (WordUtil.isSpecialChar(prangContext)) { - ToastUtil.show(WordUtil.isNewZh() ?"整蠱內容不能包含特殊字符":"The prank content must not contain special characters"); + ToastUtil.show(WordUtil.isNewZh() ? "整蠱內容不能包含特殊字符" : "The prank content must not contain special characters"); return; } if (prangContext.length() > 6) { - ToastUtil.show(WordUtil.isNewZh() ?"整蠱內容過長":"The prank is too long"); + ToastUtil.show(WordUtil.isNewZh() ? "整蠱內容過長" : "The prank is too long"); return; } if (giftBeans != null) { for (PrankGiftBean giftBean : giftBeans) { if (giftBean.getGiftId().equals(bean.getId() + "")) { - ToastUtil.show(WordUtil.isNewZh() ?"整蠱禮物已存在":"Prank gifts already exist"); + ToastUtil.show(WordUtil.isNewZh() ? "整蠱禮物已存在" : "Prank gifts already exist"); return; } } diff --git a/live/src/main/java/com/yunbao/live/dialog/LivePrankAddGiftDialog.java b/live/src/main/java/com/yunbao/live/dialog/LivePrankAddGiftDialog.java new file mode 100644 index 000000000..9c83768cd --- /dev/null +++ b/live/src/main/java/com/yunbao/live/dialog/LivePrankAddGiftDialog.java @@ -0,0 +1,136 @@ +package com.yunbao.live.dialog; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.lxj.xpopup.XPopup; +import com.yunbao.common.bean.PrankGiftBean; +import com.yunbao.common.dialog.AbsDialogPopupWindow; +import com.yunbao.common.glide.ImgLoader; +import com.yunbao.common.interfaces.OnItemClickListener; +import com.yunbao.common.utils.DpUtil; +import com.yunbao.common.utils.ToastUtil; +import com.yunbao.common.utils.WordUtil; +import com.yunbao.common.views.weight.ViewClicksAntiShake; +import com.yunbao.live.R; + +import java.util.ArrayList; +import java.util.List; + +public class LivePrankAddGiftDialog extends AbsDialogPopupWindow { + + private TextView prankBtn; + private ImageView backBtn; + private TextView giftText; + private TextView numberText; + private EditText contentText; + + private OnItemClickListener onItemClickListener; + + private List giftBeans = new ArrayList<>(); + + + public LivePrankAddGiftDialog(@NonNull Context context) { + super(context); + } + + @Override + public void buildDialog(XPopup.Builder builder) { + + } + + public LivePrankAddGiftDialog setGiftBeans(List giftBeans) { + this.giftBeans = giftBeans; + return this; + } + + @Override + public int bindLayoutId() { + return R.layout.dialog_live_prank_add_gift; + } + + @Override + protected void onCreate() { + super.onCreate(); + initView(); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.onItemClickListener = onItemClickListener; + } + + void initView() { + prankBtn = findViewById(R.id.prank_btn); + backBtn = findViewById(R.id.back); + giftText = findViewById(R.id.gift_text); + numberText = findViewById(R.id.number_text); + contentText = findViewById(R.id.content_text); + + ViewClicksAntiShake.clicksAntiShake(giftText, new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + GiftPopDialog dialog = new GiftPopDialog(mContext, new GiftPopDialog.ActionListener() { + + @Override + public void onSelectGift(PrankGiftBean bean) { + if (bean != null) { + giftText.setText(bean.getName()); + /*ImgLoader.displayDrawable(mContext, bean.getIcon(), DpUtil.dp2px(16), DpUtil.dp2px(16), new ImgLoader.DrawableCallback() { + @Override + public void onLoadSuccess(Drawable drawable) { + giftText.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null); + } + + @Override + public void onLoadFailed() { + } + });*/ + giftText.setTag(bean); + } + } + + @Override + public void onDismiss() { + + } + }); + dialog.setShowNumber(false); + dialog.setList(giftBeans); + dialog.showDialog(); + } + }); + ViewClicksAntiShake.clicksAntiShake(numberText, new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + new LivePrankAddGiftNumberDialog(mContext) + .setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(Integer bean, int position) { + numberText.setText(String.valueOf(bean)); + numberText.setTag(bean); + } + }) + .showDialog(); + } + }); + ViewClicksAntiShake.clicksAntiShake(prankBtn, new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + PrankGiftBean bean = (PrankGiftBean) giftText.getTag(); + if (bean == null) { + ToastUtil.show(WordUtil.isNewZh() ? "整蠱禮物不能為空" : "A trick gift can't be empty"); + return; + } + if (numberText.getTag()==null){ + ToastUtil.show(WordUtil.isNewZh() ? "整蠱內容或數量不能為空" : "The content or number of pranks cannot be empty"); + return; + } + } + }); + } +} diff --git a/live/src/main/java/com/yunbao/live/dialog/LivePrankAddGiftNumberDialog.java b/live/src/main/java/com/yunbao/live/dialog/LivePrankAddGiftNumberDialog.java new file mode 100644 index 000000000..0ea661e09 --- /dev/null +++ b/live/src/main/java/com/yunbao/live/dialog/LivePrankAddGiftNumberDialog.java @@ -0,0 +1,137 @@ +package com.yunbao.live.dialog; + +import android.app.Dialog; +import android.content.Context; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.lxj.xpopup.XPopup; +import com.yunbao.common.bean.PrankGiftBean; +import com.yunbao.common.dialog.AbsDialogPopupWindow; +import com.yunbao.common.interfaces.OnItemClickListener; +import com.yunbao.common.utils.DialogUitl; +import com.yunbao.common.utils.WordUtil; +import com.yunbao.common.views.weight.ViewClicksAntiShake; +import com.yunbao.live.R; +import com.yunbao.live.adapter.ItemLivePrankGiftNumberAdapter; + +import java.util.ArrayList; +import java.util.List; + +public class LivePrankAddGiftNumberDialog extends AbsDialogPopupWindow { + + private TextView prankBtn; + private ImageView backBtn; + private Button mBtnNumber; + private RecyclerView numberRecycler; + private ItemLivePrankGiftNumberAdapter mAdapter; + + private OnItemClickListener onItemClickListener; + private int giftNumber = -1; + + private List giftBeans = new ArrayList<>(); + + + public LivePrankAddGiftNumberDialog(@NonNull Context context) { + super(context); + } + + public LivePrankAddGiftNumberDialog setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.onItemClickListener = onItemClickListener; + return this; + } + + @Override + public void buildDialog(XPopup.Builder builder) { + + } + + + @Override + public int bindLayoutId() { + return R.layout.dialog_live_prank_add_gift_number; + } + + @Override + protected void onCreate() { + super.onCreate(); + initView(); + initData(); + } + + @Override + protected void onDismiss() { + super.onDismiss(); + } + + void initView() { + prankBtn = findViewById(R.id.prank_btn); + backBtn = findViewById(R.id.back); + numberRecycler = findViewById(R.id.numberList); + mBtnNumber = findViewById(R.id.btnNumber); + mAdapter = new ItemLivePrankGiftNumberAdapter(); + numberRecycler.setAdapter(mAdapter); + mAdapter.setOnSelectNumberListener(number -> { + if (number > 0) { + giftNumber = number; + mBtnNumber.setText(R.string.live_prank_gift_dialog_number_btn); + } + }); + ViewClicksAntiShake.clicksAntiShake(mBtnNumber, new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + DialogUitl.showSimpleInputDialog(mContext, WordUtil.isNewZh() ? "输入数量" : "Input number", DialogUitl.INPUT_TYPE_NUMBER, new DialogUitl.SimpleCallback() { + @Override + public void onConfirmClick(Dialog dialog, String content) { + try { + int number = Integer.parseInt(content); + if (number > 0 && number < 10000) { + mBtnNumber.setText(content); + giftNumber = number; + mAdapter.setSelectNumber(-1); + mAdapter.notifyDataSetChanged(); + dialog.dismiss(); + } + } catch (Exception e) { + e.printStackTrace(); + mBtnNumber.setText(R.string.live_prank_gift_dialog_number_btn); + dialog.dismiss(); + } + } + }); + } + }); + ViewClicksAntiShake.clicksAntiShake(prankBtn, new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + if (onItemClickListener != null) { + if (mAdapter.getSelectNumber() > 0) { + giftNumber = mAdapter.getSelectNumber(); + } + onItemClickListener.onItemClick(giftNumber, 0); + dismiss(); + } + } + }); + } + + List mList = new ArrayList<>(); + + void initData() { + mList.add(9999); + mList.add(3344); + mList.add(1314); + mList.add(520); + mList.add(88); + mList.add(68); + mList.add(10); + mList.add(8); + mList.add(1); + mAdapter.setList(mList); + } +} diff --git a/live/src/main/java/com/yunbao/live/dialog/LivePrankDialogFragment.java b/live/src/main/java/com/yunbao/live/dialog/LivePrankDialogFragment.java index e81a94b2c..5025be9a7 100644 --- a/live/src/main/java/com/yunbao/live/dialog/LivePrankDialogFragment.java +++ b/live/src/main/java/com/yunbao/live/dialog/LivePrankDialogFragment.java @@ -7,6 +7,7 @@ import android.view.Gravity; import android.view.View; import android.view.Window; import android.view.WindowManager; +import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; @@ -27,6 +28,7 @@ import com.yunbao.common.utils.DialogUitl; import com.yunbao.common.utils.DpUtil; import com.yunbao.common.utils.StringUtil; import com.yunbao.common.utils.ToastUtil; +import com.yunbao.common.utils.ViewUtils; import com.yunbao.common.utils.WordUtil; import com.yunbao.common.views.weight.ViewClicksAntiShake; import com.yunbao.live.R; @@ -39,7 +41,7 @@ import java.util.Locale; public class LivePrankDialogFragment extends AbsDialogFragment implements View.OnClickListener { private TabLayout mTabLayout; - private View mTurntableConfigLayout; + private View mTurntableConfigLayout, mGiftConfigLayout; private TextView mPrankBtn; private ImageView mTurntableConfigImageView; private TextView mCoinTextView; @@ -48,7 +50,15 @@ public class LivePrankDialogFragment extends AbsDialogFragment implements View.O private LivePrankRecyclerAdapter recyclerAdapter; private String mLiveUid; private PrankHttpTurntableBean bean = new PrankHttpTurntableBean(); - private List giftBeans; + private List giftBeans = new ArrayList<>(); + + private TextView giftSwitch1TitleText; + private TextView giftSwitch1DescText; + private ImageView giftSwitch1Btn; + private TextView giftTypeNowText; + private TextView giftTypeTodoText; + private TextView giftTypeNowSwitchText; + private Button mBtnAddGift; public void setmLiveUid(String mLiveUid) { this.mLiveUid = mLiveUid; @@ -85,11 +95,13 @@ public class LivePrankDialogFragment extends AbsDialogFragment implements View.O initView(); initTab(); initTurntableData(); + initGiftConfigLayoutView(); } private void initView() { mTabLayout = (TabLayout) findViewById(R.id.prank_tabLayout); mTurntableConfigLayout = findViewById(R.id.turntable_layout); + mGiftConfigLayout = findViewById(R.id.gift_layout); mTurntableConfigImageView = (ImageView) findViewById(R.id.switch1_btn); mCoinTextView = (TextView) findViewById(R.id.switch2_btn); mPrankRecyclerView = (RecyclerView) findViewById(R.id.prank_config); @@ -108,6 +120,10 @@ public class LivePrankDialogFragment extends AbsDialogFragment implements View.O recyclerAdapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(String bean, int position) { + if (position == -2) { + showGiftDialog(); + return; + } if (recyclerAdapter.getViewTypeOfList()) { switch (position) { case 1: @@ -238,7 +254,9 @@ public class LivePrankDialogFragment extends AbsDialogFragment implements View.O } if ((int) tab.getTag() == 0) { mTurntableConfigLayout.setVisibility(View.VISIBLE); + mGiftConfigLayout.setVisibility(View.GONE); mPrankRecyclerView.setVisibility(View.VISIBLE); + mBtnAddGift.setVisibility(View.GONE); mGiftNotDate.setVisibility(View.GONE); recyclerAdapter.setViewType(LivePrankRecyclerAdapter.TYPE_TURNTABLE); mPrankBtn.setBackgroundResource(R.drawable.bg_live_prank_turntable_save); @@ -253,6 +271,9 @@ public class LivePrankDialogFragment extends AbsDialogFragment implements View.O initTurntableData(); } else { mTurntableConfigLayout.setVisibility(View.GONE); + mGiftConfigLayout.setVisibility(View.VISIBLE); + mBtnAddGift.setVisibility(View.VISIBLE); + recyclerAdapter.setViewType(LivePrankRecyclerAdapter.TYPE_GIFT); mPrankBtn.setBackgroundResource(R.drawable.bg_live_prank_gift_set); if (IMLoginManager.get(mContext).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) { @@ -279,6 +300,47 @@ public class LivePrankDialogFragment extends AbsDialogFragment implements View.O }); } + private void showGiftDialog() { + new LivePrankAddGiftDialog(mContext).setGiftBeans(giftBeans).showDialog(); + } + + private void initGiftConfigLayoutView() { + giftSwitch1TitleText = (TextView) findViewById(R.id.gift_switch1_title_text); + giftSwitch1DescText = (TextView) findViewById(R.id.gift_switch1_desc_text); + giftSwitch1Btn = (ImageView) findViewById(R.id.gift_switch1_btn); + giftTypeNowText = (TextView) findViewById(R.id.gift_type_now_text); + giftTypeTodoText = (TextView) findViewById(R.id.gift_type_todo); + giftTypeNowSwitchText = (TextView) findViewById(R.id.gift_type_now_switch); + mBtnAddGift = (Button) findViewById(R.id.gift_add_btn); + + ViewClicksAntiShake.clicksAntiShake(giftSwitch1Btn, new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + if (giftSwitch1Btn.getTag().equals("true")) { + giftSwitch1Btn.setTag("false"); + giftSwitch1Btn.setImageResource(R.mipmap.special_icon_off); + } else { + giftSwitch1Btn.setTag("true"); + giftSwitch1Btn.setImageResource(R.mipmap.special_icon_on); + } + } + }); + ViewClicksAntiShake.clicksAntiShake(giftTypeNowSwitchText, new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + CharSequence tmp = giftTypeNowText.getText(); + giftTypeNowText.setText(giftTypeNowSwitchText.getText()); + giftTypeNowSwitchText.setText(tmp); + } + }); + ViewClicksAntiShake.clicksAntiShake(mBtnAddGift, new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + showGiftDialog(); + } + }); + } + private void initTurntableData() { LiveNetManager.get(mContext).getAnchorPrankTurntable(mLiveUid, new HttpCallback() { @Override @@ -312,17 +374,23 @@ public class LivePrankDialogFragment extends AbsDialogFragment implements View.O LiveNetManager.get(mContext).getPrankGiftList(mLiveUid, new HttpCallback>() { @Override public void onSuccess(List data) { - if (!data.isEmpty()) { - mGiftNotDate.setVisibility(View.GONE); - mPrankRecyclerView.setVisibility(View.VISIBLE); - recyclerAdapter.setViewType(LivePrankRecyclerAdapter.TYPE_GIFT); - giftBeans = data; - recyclerAdapter.setList(data); - recyclerAdapter.notifyDataSetChanged(); + if (data.size() < 6) { + mBtnAddGift.setVisibility(View.VISIBLE); + } else { + mBtnAddGift.setVisibility(View.GONE); + } + mGiftNotDate.setVisibility(View.GONE); + mPrankRecyclerView.setVisibility(View.VISIBLE); + recyclerAdapter.setViewType(LivePrankRecyclerAdapter.TYPE_GIFT); + giftBeans = data; + recyclerAdapter.setList(data); + recyclerAdapter.notifyDataSetChanged(); + /*if (!data.isEmpty()) { + } else { mPrankRecyclerView.setVisibility(View.GONE); mGiftNotDate.setVisibility(View.VISIBLE); - } + }*/ } @Override diff --git a/live/src/main/res/drawable/bg_prank_btn_gift_add_number.xml b/live/src/main/res/drawable/bg_prank_btn_gift_add_number.xml new file mode 100644 index 000000000..5d55567c7 --- /dev/null +++ b/live/src/main/res/drawable/bg_prank_btn_gift_add_number.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/live/src/main/res/drawable/bg_prank_gift_add_item.xml b/live/src/main/res/drawable/bg_prank_gift_add_item.xml new file mode 100644 index 000000000..abe9f2e32 --- /dev/null +++ b/live/src/main/res/drawable/bg_prank_gift_add_item.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/live/src/main/res/layout/dialog_live_prank_add_gift.xml b/live/src/main/res/layout/dialog_live_prank_add_gift.xml new file mode 100644 index 000000000..07cadbf99 --- /dev/null +++ b/live/src/main/res/layout/dialog_live_prank_add_gift.xml @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/live/src/main/res/layout/dialog_live_prank_add_gift_number.xml b/live/src/main/res/layout/dialog_live_prank_add_gift_number.xml new file mode 100644 index 000000000..46cad6c58 --- /dev/null +++ b/live/src/main/res/layout/dialog_live_prank_add_gift_number.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + +