From e58ce7932fa2401cd0f2385e6e3ab20dcb7b79f7 Mon Sep 17 00:00:00 2001 From: Martin <13046765170@163.com> Date: Fri, 13 Sep 2024 16:30:20 +0800 Subject: [PATCH] =?UTF-8?q?1.=E8=B0=83=E6=95=B4=E7=99=BB=E5=BD=95=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2UI=202.=E4=BF=AE=E6=94=B9H5URL=E5=9C=B0=E5=9D=80=203.?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BF=83=E6=84=BF=E5=8D=95=E5=9C=B0=E5=9D=80?= =?UTF-8?q?=204.=E5=B0=86PD=20=E4=BF=AE=E6=94=B9=E6=9C=AA=20POYO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/yunbao/common/HtmlConfig.java | 2 +- .../com/yunbao/common/http/HttpCallback.java | 1 + .../common/http/JavaConverterFactory.java | 46 +++++++++--------- .../java/com/yunbao/common/http/JsonBean.java | 25 +++++----- .../utils/JavascriptInterfaceUtils.java | 2 +- common/src/main/res/values/strings.xml | 2 +- .../yunbao/live/activity/LiveActivity.java | 2 +- .../yunbao/live/socket/SocketRyClient.java | 2 +- .../yunbao/live/socket/SocketSwClient.java | 2 +- .../yunbao/live/views/LiveRoomViewHolder.java | 8 +-- live/src/main/res/layout/view_live_room.xml | 3 +- .../main/activity/EditProfileActivity.java | 2 +- .../main/views/MainMeViewHolder_PD.java | 2 +- .../main/res/drawable/background_227bef.xml | 2 +- main/src/main/res/layout/activity_entry.xml | 7 +-- .../main/res/mipmap-xxxhdpi/white_logo.png | Bin 7850 -> 0 bytes 16 files changed, 57 insertions(+), 51 deletions(-) delete mode 100644 main/src/main/res/mipmap-xxxhdpi/white_logo.png diff --git a/common/src/main/java/com/yunbao/common/HtmlConfig.java b/common/src/main/java/com/yunbao/common/HtmlConfig.java index 553153585..c4b3dac7e 100644 --- a/common/src/main/java/com/yunbao/common/HtmlConfig.java +++ b/common/src/main/java/com/yunbao/common/HtmlConfig.java @@ -33,7 +33,7 @@ public class HtmlConfig { public static final String LUCK_GIFT_TIP = CommonAppConfig.HOST + "/index.php?g=portal&m=page&a=index&id=26"; //直播间玩家看到的心愿单 - public static final String WISHLIST_URL = CommonAppConfig.HOST + "/index.php?g=Appapi&m=Wish&a=index"; + public static final String WISHLIST_URL = CommonAppConfig.HOST + "/h5/wish/index.html?1=1"; //直播间玩家看到的转盘 public static final String TURNTABLE_URL = CommonAppConfig.HOST + "/Appapi/Turntable/index"; diff --git a/common/src/main/java/com/yunbao/common/http/HttpCallback.java b/common/src/main/java/com/yunbao/common/http/HttpCallback.java index 7b1c6b411..79acc81c5 100644 --- a/common/src/main/java/com/yunbao/common/http/HttpCallback.java +++ b/common/src/main/java/com/yunbao/common/http/HttpCallback.java @@ -36,6 +36,7 @@ public abstract class HttpCallback extends AbsCallback { public void onSuccess(Response response) { JsonBean bean = response.body(); String gson = new Gson().toJson(bean); + L.e("gson:" + gson); if (bean != null) { if (200 == bean.getRet()) { Data data = bean.getData(); diff --git a/common/src/main/java/com/yunbao/common/http/JavaConverterFactory.java b/common/src/main/java/com/yunbao/common/http/JavaConverterFactory.java index 070c97d24..898f5eb9b 100644 --- a/common/src/main/java/com/yunbao/common/http/JavaConverterFactory.java +++ b/common/src/main/java/com/yunbao/common/http/JavaConverterFactory.java @@ -43,8 +43,7 @@ public final class JavaConverterFactory extends Converter.Factory { } @Override - public Converter responseBodyConverter(Type type, Annotation[] annotations, - Retrofit retrofit) { + public Converter responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) { TypeAdapter adapter = gson.getAdapter(TypeToken.get(type)); return new JsonResponseBodyConverter<>(gson, adapter); } @@ -55,9 +54,10 @@ public final class JavaConverterFactory extends Converter.Factory { return super.requestBodyConverter(type, parameterAnnotations, methodAnnotations, retrofit); } - final class JsonResponseBodyConverter implements Converter { + final class JsonResponseBodyConverter implements Converter { private final Gson gson; private final TypeAdapter adapter; + JsonResponseBodyConverter(Gson gson, TypeAdapter adapter) { this.gson = gson; this.adapter = adapter; @@ -67,31 +67,31 @@ public final class JavaConverterFactory extends Converter.Factory { public T convert(ResponseBody value) throws IOException { String response = value.string(); String allResponseData; - L.e("解密前::"+response); + L.e("解密前::" + response); JSONObject jsonObject = JSONObject.parseObject(response); - if(jsonObject!=null){ - allResponseData = jsonObject.getString("data"); - if(allResponseData!=null){ - byte[] decodedData = null; - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { - decodedData = Base64.getDecoder().decode(allResponseData); - } - response = AesUtils.decryptToString(decodedData); + allResponseData = jsonObject.getString("data"); + if (allResponseData.indexOf(":") <= 0) { + byte[] decodedData = null; + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { + decodedData = Base64.getDecoder().decode(allResponseData); } - } - jsonObject.put("data",JSONObject.parseObject(response)); + response = AesUtils.decryptToString(decodedData); + jsonObject.put("data", JSONObject.parseObject(response)); - response = JSON.toJSONString(jsonObject); - L.e("解密后::"+ response); - //获取加密数据,解密,之后再让adapter去处理json串,解析具体的数据就可以了 - try{ + response = JSON.toJSONString(jsonObject); + L.e("解密后::" + response); + //获取加密数据,解密,之后再让adapter去处理json串,解析具体的数据就可以了 + try { + return adapter.fromJson(response); + } catch (Exception e) { + e.printStackTrace(); + } finally { + value.close(); + } + } else { return adapter.fromJson(response); - } catch (Exception e) { - e.printStackTrace(); - } finally { - value.close(); } - return null; + return null; } } } \ No newline at end of file diff --git a/common/src/main/java/com/yunbao/common/http/JsonBean.java b/common/src/main/java/com/yunbao/common/http/JsonBean.java index f6c4d927f..d9f1e51c5 100644 --- a/common/src/main/java/com/yunbao/common/http/JsonBean.java +++ b/common/src/main/java/com/yunbao/common/http/JsonBean.java @@ -39,32 +39,35 @@ public class JsonBean { } public Data getData() { - if(data.indexOf(":")>0){ - return GsonUtils.fromJson(data,Data.class); - }else{ + L.e("data:" + data); + if (data.indexOf(":") > 0) { + L.e("未加密::" + data); + return JSON.parseObject(data, Data.class); + //return GsonUtils.fromJson(data, Data.class); + } else { Data resultData = new Data(); byte[] decodedData = null; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { decodedData = Base64.getDecoder().decode(data); } String decryptedText = AesUtils.decryptToString(decodedData); - L.e("解码前:"+data); - L.e("解码前-转成base64:"+decodedData); - L.e("解码前-解密後:"+decryptedText); + L.e("解码前:" + data); + L.e("解码前-转成base64:" + decodedData); + L.e("解码前-解密後:" + decryptedText); JSONObject object = JSON.parseObject(decryptedText); try { JSONArray jsonArray = object.getJSONArray("info"); - String [] array = new String[jsonArray.size()]; - for (int i = 0; i %s has been sent to your personalized dress up Mini blind box Collection blind box - PD blind box + POYO blind box Individual dressing Can be obtained randomly, %s I got %s %s diff --git a/live/src/main/java/com/yunbao/live/activity/LiveActivity.java b/live/src/main/java/com/yunbao/live/activity/LiveActivity.java index c373be3c6..326aa90e0 100644 --- a/live/src/main/java/com/yunbao/live/activity/LiveActivity.java +++ b/live/src/main/java/com/yunbao/live/activity/LiveActivity.java @@ -972,7 +972,7 @@ public abstract class LiveActivity extends AbsActivity implements SocketMessageL dialog.findViewById(R.id.tv_into).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - String url = CommonAppConfig.HOST + "/index.php?g=Appapi&m=task&a=index&uid=" + CommonAppConfig.getInstance().getUid() + "&token=" + CommonAppConfig.getInstance().getToken() + "&tabIndex=1"; + String url = CommonAppConfig.HOST + "/h5/task/index.html?uid=" + CommonAppConfig.getInstance().getUid() + "&token=" + CommonAppConfig.getInstance().getToken() + "&tabIndex=1"; WebViewActivity.forward(mContext, url, true); dialog.dismiss(); } diff --git a/live/src/main/java/com/yunbao/live/socket/SocketRyClient.java b/live/src/main/java/com/yunbao/live/socket/SocketRyClient.java index 65f3d424e..52b4c534b 100644 --- a/live/src/main/java/com/yunbao/live/socket/SocketRyClient.java +++ b/live/src/main/java/com/yunbao/live/socket/SocketRyClient.java @@ -457,7 +457,7 @@ public class SocketRyClient { } else if (TextUtils.equals(boxType, "2")) { boxTypeName = WordUtil.isNewZh() ? "典藏盲盒" : "Collection blind box"; } else { - boxTypeName = WordUtil.isNewZh() ? "PD盲盒" : "PD blind box"; + boxTypeName = WordUtil.isNewZh() ? "POYO盲盒" : "POYO blind box"; } AllServerNotifyEvent allServerNotifyEvent = new AllServerNotifyEvent() diff --git a/live/src/main/java/com/yunbao/live/socket/SocketSwClient.java b/live/src/main/java/com/yunbao/live/socket/SocketSwClient.java index 93bad8965..ab6ad5b35 100644 --- a/live/src/main/java/com/yunbao/live/socket/SocketSwClient.java +++ b/live/src/main/java/com/yunbao/live/socket/SocketSwClient.java @@ -461,7 +461,7 @@ public class SocketSwClient { } else if (TextUtils.equals(boxType, "2")) { boxTypeName = WordUtil.isNewZh() ? "典藏盲盒" : "Collection blind box"; } else { - boxTypeName = WordUtil.isNewZh() ? "PD盲盒" : "PD blind box"; + boxTypeName = WordUtil.isNewZh() ? "POYO盲盒" : "POYO blind box"; } AllServerNotifyEvent allServerNotifyEvent = new AllServerNotifyEvent().setBlindBoxId(map.getString("blind_box_id")).setBoxType(boxType).setBoxTypeName(boxTypeName).setDressName(WordUtil.isNewZh() ? map.getString("dress_name") : TextUtils.isEmpty(map.getString("dress_nameen")) ? map.getString("dress_name") : map.getString("dress_nameen")).setGiftNotification(map.getString("gift_notification")).setGiftName(WordUtil.isNewZh() ? mCt.getString("giftname") : mCt.getString("giftnameen")).setUserNiceName(map.getString("uname")).setGiftIcon(map.getString("gifticon")).setAnchorName(map.getString("ancherName")).setDisplaySrc(map.getString("display_src")); Log.e("AllServerNotifyEvent", allServerNotifyEvent.toString()); diff --git a/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java b/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java index 9e811c460..aceda8ca5 100644 --- a/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java @@ -5523,7 +5523,7 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis @Override public void run() { BannerBean bannerBean = new BannerBean(); - bannerBean.setWishlistIcon(model.getWishlistIcon()).setWishlistName(model.getWishlistName()).setWishlistNum(model.getWishlistNum()).setWishlistProgress(model.getWishlistProgress()).setmLink(CommonAppConfig.HOST + "/index.php").setType(1); + bannerBean.setWishlistIcon(model.getWishlistIcon()).setWishlistName(model.getWishlistName()).setWishlistNum(model.getWishlistNum()).setWishlistProgress(model.getWishlistProgress()).setmLink(CommonAppConfig.HOST + "/h5/wish/index.html").setType(1); bannerBean.setShow_type("2"); mTopBannerList.add(bannerBean); LiveChatBean bean = new LiveChatBean(); @@ -6243,7 +6243,7 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis } BannerBean bannerBean = new BannerBean(); - bannerBean.setWishlistIcon(wishListProgress.getWishlistIcon()).setWishlistName(wishListProgress.getWishlistName()).setWishlistNum(wishListProgress.getWishlistNum()).setWishlistProgress(wishListProgress.getWishlistProgress()).setmLink(CommonAppConfig.HOST + "/index.php").setType(1); + bannerBean.setWishlistIcon(wishListProgress.getWishlistIcon()).setWishlistName(wishListProgress.getWishlistName()).setWishlistNum(wishListProgress.getWishlistNum()).setWishlistProgress(wishListProgress.getWishlistProgress()).setmLink(CommonAppConfig.HOST + "/h5/wish/index.html").setType(1); bannerBean.setShow_type("2"); if (mTopBannerList.size() == 1 || mTopBannerList.size() == 0) { mTopBannerList.add(bannerBean); @@ -6302,7 +6302,7 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis IMLoginModel userInfo = IMLoginManager.get(mContext).getUserInfo(); String type = ""; StringBuffer htmlUrl = new StringBuffer(); - htmlUrl.append(bean.getLink()).append(bean.getLink().contains("?") ? "&uid=" : "?uid=").append(userInfo.getId()).append("&token=").append(userInfo.getToken()).append("&anchorUid=").append(mLiveUid).append("&liveUid=").append(mLiveUid).append("&t=").append(System.currentTimeMillis()).append("&g=Appapi&m=Wish&a=index").append("&isZh=").append(((IMLoginManager.get(mContext).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) ? "1" : "0")); + htmlUrl.append(bean.getLink()).append(bean.getLink().contains("?") ? "&uid=" : "?uid=").append(userInfo.getId()).append("&token=").append(userInfo.getToken()).append("&anchorUid=").append(mLiveUid).append("&liveUid=").append(mLiveUid).append("&t=").append(System.currentTimeMillis()).append("&isZh=").append(((IMLoginManager.get(mContext).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) ? "1" : "0")); if (TextUtils.equals(type, "1")) { ZhuangBanActivity.forward(mContext, htmlUrl.toString(), false, 1); } else { @@ -6357,7 +6357,7 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis IMLoginModel userInfo = IMLoginManager.get(mContext).getUserInfo(); String type = ""; StringBuffer htmlUrl = new StringBuffer(); - htmlUrl.append(bean.getLink()).append(bean.getLink().contains("?") ? "&uid=" : "?uid=").append(userInfo.getId()).append("&token=").append(userInfo.getToken()).append("&anchorUid=").append(mLiveUid).append("&liveUid=").append(mLiveUid).append("&t=").append(System.currentTimeMillis()).append("&g=Appapi&m=Wish&a=index").append("&isZh=").append(((IMLoginManager.get(mContext).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) ? "1" : "0")); + htmlUrl.append(bean.getLink()).append(bean.getLink().contains("?") ? "&uid=" : "?uid=").append(userInfo.getId()).append("&token=").append(userInfo.getToken()).append("&anchorUid=").append(mLiveUid).append("&liveUid=").append(mLiveUid).append("&t=").append(System.currentTimeMillis()).append("&isZh=").append(((IMLoginManager.get(mContext).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) ? "1" : "0")); if (TextUtils.equals(type, "1")) { ZhuangBanActivity.forward(mContext, htmlUrl.toString(), false, 1); } else { diff --git a/live/src/main/res/layout/view_live_room.xml b/live/src/main/res/layout/view_live_room.xml index d6f9621b3..a88d7aeae 100644 --- a/live/src/main/res/layout/view_live_room.xml +++ b/live/src/main/res/layout/view_live_room.xml @@ -2337,7 +2337,8 @@ android:layout_width="40dp" android:layout_height="50dp" android:layout_marginTop="10dp" - android:visibility="invisible"> + android:visibility="invisible" + tools:visibility="visible"> - + diff --git a/main/src/main/res/layout/activity_entry.xml b/main/src/main/res/layout/activity_entry.xml index 45e2ce5c5..bb561a424 100644 --- a/main/src/main/res/layout/activity_entry.xml +++ b/main/src/main/res/layout/activity_entry.xml @@ -51,7 +51,7 @@ android:src="@mipmap/icon_facebook" /> @@ -120,7 +120,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/login_use_phone" - android:layout_marginLeft="25dp" + android:layout_marginLeft="35dp" android:textColor="@color/black1" android:textSize="14sp" /> @@ -172,6 +172,7 @@ android:id="@+id/lt_login_other" android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_marginTop="100dp" android:layout_marginLeft="25dp" android:layout_marginRight="25dp" android:orientation="vertical"> diff --git a/main/src/main/res/mipmap-xxxhdpi/white_logo.png b/main/src/main/res/mipmap-xxxhdpi/white_logo.png deleted file mode 100644 index 51a8588eefd0613fa7bb1d87b259356f3ec02c24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7850 zcmeHM)ms$Y*Bx?*8B)4iLAp!2LqIyDyG9ymhGr+H)Jnj5nki!4~20%ws zUr7a``S`!}KL!53Dqz2LBK2g6M;|@yHvlwdOvN_hug8M_R_;H=-C?6+Jp8?JzHI^( zIv8A3kzFcXaogkgFS)!KJMyKIzs8~;iD0$SCz8(GR^3gQqS6#WtZq!&B2Rj~EC~5) zGWN=&o@Iqs1NW^YLn*iBadj&=ewr~96bBFpGTFRhMeLCE+Bx}|)3lLXSc+*7rnOJ441`CO7K z@hgot1j-Ys)9DR=Wmg)l_C4G9%f$8jXIcONwW*q-oPNOKp+#WuYa{a4b{_}m6%}0) zG36rXn;08O>Wq#gS^OF@*rOK7s$De9?!Le}8h@I?{B#<852vX$t18NReOfgo3q=RN z2yS=ypR}#{ueFRbcs)E8c&~P>t=;AOkG1T+4|t{;A;q@on#mpwnnGN&sfc_y|9Lz% zoxXE&vNj`Wq^JH{y&8o=Nxy6H;uSOc5$VM?JwE=uWBg>(NT6z`Qct=uko-_DB8q(M zqgPJ5k8w*NstoKLaO~U>|EP)6(8r*LYSR+&Z;~xuxNG94V zWnYv0z7;FkzfuGU5&K(6ytn&borcfHhoB~ zKCvHFon8r4B<1A_XwUw$Rm0y5-q+{7YZd+68nkcKuWS7BcnCimnUn&!m=OpFOdsqk zG?>R7ArF09#u?b1nmfqDFGl|d#f`hNJJE0P85+$IS=-RewI+whq9KF6Y&dK+N}CSW zwXL|6QK-&h*PA3&F8B9~hC5xA$3z_)pn9oaNf<`f3fFQ#`J*-HSvV`%AmO)k!3r7G z$lukOJ6gVkErN5=LUp|RS}Ga*e(B3ieXg|}ef-f{3@pkO_7L0pl%xzQuEu^F=i{%z zBeBp7!2qUx4K3W?A7xiA!Oa?sJakuf&q_~z2gkjBqL8)Fe~dRucfQG^g;6#x?$_Xg z9aK^S(xbF}&9`0ve7Dxq@{>~4aw#}9*M;g|$%0DRl>qs>>B_* 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 E0q)L|hyVZp