61 Commits

Author SHA1 Message Date
Max
515912b40a chore:调整jvm配置(解决butterknife导致打包失败问题) 2024-06-11 11:12:25 +08:00
Max
bf492ed403 同步PIKO修复bug(fix:修复相亲房送礼导致闭麦、结束导致闭麦问题(只是临时补救,具体看注释)
fix:移除BaseRoomFragment中更新麦克风状态的某些判断(isNoProhibitMic),不知道之前为何加这段判断,但这段判断风险较大,某些情况导致麦克风状态一直显示未关闭(去掉后经测试验收,未发现问题)
)
2024-05-15 10:25:03 +08:00
Max
5ea7426e7d fix:替换新用户打招呼弹窗的图片 2024-04-19 11:48:01 +08:00
Max
013ed0a39d fix:修复文件上传回调不在主线程导致的上传特权卡流程失败问题(文件上传统一回调主线程) 2024-04-09 15:00:10 +08:00
Max
1e80959db6 fix:修复发布动态上传失败后子线程回调更新UI导致崩溃问题 2024-04-03 11:19:10 +08:00
Max
06f31c3e9c fix:技能卡-声音秀增加权限申请逻辑 2024-03-28 19:13:24 +08:00
Max
1bb3bb1c3e feat:新增荣誉渠道 2024-03-28 12:00:55 +08:00
Max
3d478a5017 feat:增加debug环境是否混淆配置 2024-03-27 19:34:06 +08:00
Max
d329c97f03 feat:移除个人主页-公会icon 2024-03-27 19:27:42 +08:00
Max
d1fd822c42 feat:完成补填邀请码功能 2024-03-27 19:27:42 +08:00
Max
f86fea11b8 feat:完成补填邀请码UI部分 2024-03-27 19:27:41 +08:00
Max
e707da25a8 feat:适配网页实名认证的权限申请 2024-03-27 19:27:41 +08:00
Max
4af7fcf877 feat:文件上传支持自定义域名替换 2024-03-27 19:25:36 +08:00
Max
0695a74520 feat:新增渠道:fir 2024-03-18 18:44:30 +08:00
Max
fced114686 feat:移除AVRoomActivity中的全服礼物飘屏逻辑到BaseActivity 2024-03-18 14:44:44 +08:00
Max
3181a115d8 feat:同步peko完成礼物飘窗UI优化(同步peko:去掉普通礼物飘窗) 2024-03-18 14:44:43 +08:00
Max
4c48bef21b feat:移除七牛云,改用腾讯COS 2024-03-18 14:43:56 +08:00
Max
60d274c79a feat:客服中心改为私聊 2024-03-14 14:31:12 +08:00
Max
a48440209a fix:修复首页默认选中Tab-bug 2024-03-13 17:39:25 +08:00
Max
65bcf7a7ca fix:修复【一键登录不可用时按钮改为手机号登录功能】部分场景未失效bug 2024-02-04 17:11:48 +08:00
Max
b307db446d fix:修复UI反馈问题(礼物面板) 2024-02-04 11:52:02 +08:00
Max
bed3184df9 fix:修复赠送背包TAB的解锁礼物后,未更新顶部提示面板数量问题 2024-02-02 18:04:12 +08:00
Max
2c4fb0e056 fix:修复公屏-装扮礼物icon展示大小问题 2024-02-02 10:56:23 +08:00
Max
784aeebdf4 feat:修改资料页UI调整:增加箭头icon 2024-02-01 15:50:34 +08:00
Max
043e79681d fix:修复背包礼物显示锁问题 2024-02-01 15:22:11 +08:00
Max
b6972ee445 fix:修复装扮公屏展示问题 2024-02-01 14:58:16 +08:00
Max
4fd1bd73ea fix:装扮礼物点击banner增加空值判断 2024-02-01 14:33:53 +08:00
Max
afab35a691 fix:修复我的头饰状态判断错误问题 2024-02-01 14:33:30 +08:00
Max
d508912a9c feat:设置SplashScreen默认背景色(部分手机默认黑色) 2024-02-01 09:39:19 +08:00
Max
ec2e46b0a4 fix:调整礼物墙等级背景展示错误问题 2024-01-31 17:23:54 +08:00
Max
e2cf045ab7 fix:修复已解锁后文案展示问题 2024-01-31 16:16:49 +08:00
Max
c2cdd5d6f1 feat:去掉年度盛典icon 2024-01-31 11:38:59 +08:00
Max
5bacadf9df Merge branch 'feature/gift' into develop 2024-01-30 17:06:22 +08:00
Max
eb81154c1c feat:替换新人标签icon 2024-01-30 17:03:22 +08:00
Max
ae19a0c653 feat:修改注册默认头像地址 2024-01-30 17:01:58 +08:00
Max
44787e5041 feat:完成礼物墙优化(用户主页展示所有礼物) 2024-01-30 16:12:46 +08:00
Max
a8f12371a7 feat:调整装扮礼物banner字段 2024-01-30 11:03:53 +08:00
Max
950ce098dc feat:解锁礼物&装扮礼物,增加气泡展示逻辑 2024-01-29 19:32:55 +08:00
Max
720cf52fd0 feat:调整礼物面板-tab-new图标 2024-01-29 18:59:19 +08:00
Max
5d4aa38b93 feat:完成我的装扮下各个Tab的过期时间展示规则调整; 2024-01-29 18:41:10 +08:00
Max
a2faf14901 fix:优化解锁提示面板体验(模糊背景偶尔加载慢,改为动态添加View,有所改善) 2024-01-29 17:33:24 +08:00
Max
665fecb427 feat:完成解锁礼物与装扮礼物公屏展示逻辑 2024-01-29 16:51:19 +08:00
Max
6fb428b536 feat:补充解锁礼物点击联动逻辑 2024-01-29 15:32:44 +08:00
Max
a01a362506 feat:完成装扮礼物banner展示逻辑 2024-01-29 14:47:59 +08:00
Max
44ad80c708 feat:完成送礼后的解锁礼物本地状态更新逻辑 2024-01-29 11:51:46 +08:00
Max
f212af49f1 feat:完成趣味礼物展示 2024-01-26 18:50:22 +08:00
Max
3bcac093c7 feat:完成装扮商城、我的装扮 部分UI调整 2024-01-26 15:16:09 +08:00
Max
dd87492ffb feat:完善礼物面板底部UI调整
feat:初步完成解锁信息条目UI部分
2024-01-26 11:44:48 +08:00
Max
de79e73c9a feat:完成礼物面板-条目部分的UI调整 2024-01-25 19:46:34 +08:00
Max
fac1497de3 feat:修改开通房间时的实名认证文案 2024-01-25 15:36:56 +08:00
Max
a8335e915c feat:优化用户修改昵称、简介体验(在当前页完成网络请求) 2024-01-25 15:08:45 +08:00
Max
53820a23c7 feat:优化一键登录获取失败后展示手机号登录 2024-01-25 14:49:25 +08:00
Max
8016cc860a fix:修复后台无法show弹窗问题 2024-01-25 14:21:48 +08:00
Max
95e3e0768c fix:修复小米推送集成配置问题 2024-01-24 18:15:27 +08:00
Max
6f73f3f4fb Merge branch 'fix/agroa' into develop 2024-01-24 18:00:07 +08:00
Max
b6524ad94f feat:删除调试日志 2024-01-24 17:59:57 +08:00
Max
f5fc2f9d79 fix:修复离开模式下管理可以点击主麦操作问题(改为点击toast提示) 2024-01-24 17:56:52 +08:00
Max
be28ed2509 fix:修复Pk结束后底部麦克风图标状态无法更新问题 2024-01-24 16:46:24 +08:00
Max
5be60fe7b2 fix:修复Pk面包拖拽问题(适配父容器内边距) 2024-01-24 16:07:59 +08:00
Max
522c4a9f6f fix:修复声网上麦后自动开麦问题 2024-01-23 15:22:46 +08:00
Max
e478c9c202 feat:针对华为市场审核 补充权限申请提示 2024-01-15 11:58:22 +08:00
201 changed files with 4281 additions and 2575 deletions

View File

@@ -156,12 +156,13 @@ android {
}
debug {
println("minifyEnabled = " + minify_enabled)
buildConfigField "String", "BASE_URL", "\"http://beta.api.nnbc123.cn/\""
buildConfigField "String", "WEB_URL", "\"http://beta.api.nnbc123.cn\""
buildConfigField "String", "BASE_URL_DEBUG", "BASE_URL"
buildConfigField "String", "BASE_URL_STAGING", "\"https://api.nnbc123.cn/\""
buildConfigField "String", "BASE_URL_RELEASE", "\"https://api.nnbc123.cn/\""
minifyEnabled false
minifyEnabled minify_enabled.toBoolean() // 是否混淆
shrinkResources false
signingConfig signingConfigs.v2
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
@@ -185,6 +186,11 @@ android {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
fir {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
mlq {
ndk {
abiFilters 'x86'
@@ -215,6 +221,11 @@ android {
abiFilters 'arm64-v8a'
}
}
rongyao {
ndk {
abiFilters 'arm64-v8a'
}
}
kuaishou_01 {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'

View File

@@ -216,14 +216,14 @@
<service
android:name="com.xiaomi.mipush.sdk.PushMessageHandler"
android:enabled="true"
android:exported="false" />
android:exported="true" />
<service
android:name="com.xiaomi.mipush.sdk.MessageHandleService"
android:enabled="true" /> <!--此service必须在2.2.5版本以后包括2.2.5版本)加入 -->
<receiver
android:name="com.xiaomi.push.service.receivers.NetworkStatusReceiver"
android:exported="true"
tools:node="remove">>
tools:node="remove">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />

View File

@@ -501,7 +501,7 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
getMvpPresenter().exitRoom();
QuickPassLoginAct.start(MainActivity.this);
PmDialogShowMrg.get().onLogout();
CustomerServerHelper.logout();
// CustomerServerHelper.logout();
}
public void onNeedLogin() {
@@ -657,7 +657,7 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
onTabClick(mCurrentTabType);
CustomerServerHelper.onLoginInfoUpdate(UserUtils.getUserInfo());
// CustomerServerHelper.onLoginInfoUpdate(UserUtils.getUserInfo());
}

View File

@@ -307,7 +307,7 @@ public class XChatApplication extends BaseApp {
// 集成测试
UMConfigure.setLogEnabled(BuildConfig.DEBUG);
} else {
CustomerServerHelper.init(instance, null);
// CustomerServerHelper.init(instance, null);
}
LogUtils.d("init time = " + (System.currentTimeMillis() - startTime) + "ms");

View File

@@ -2,15 +2,12 @@ package com.nnbc123.app.avroom.activity;
import static android.view.View.VISIBLE;
import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_ALL_SERVICE_GIFT;
import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_HEADER_TYPE_GIFT;
import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_LUCKY_GIFT;
import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_LUCKY_GIFT_SERVER_NOTIFY;
import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_ROOM_PK;
import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_ROOM_PK_NOTIFY;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
@@ -65,10 +62,6 @@ import com.nnbc123.app.ui.user.UserInfoActivity;
import com.nnbc123.app.ui.utils.ImageLoadUtils;
import com.nnbc123.app.ui.webview.CommonWebViewActivity;
import com.nnbc123.app.ui.widget.NobleOpenNoticeView;
import com.nnbc123.app.ui.widget.dialog.AllServiceGiftDialog;
import com.nnbc123.app.ui.widget.dialog.AllServiceGiftLevelOneDialog;
import com.nnbc123.app.ui.widget.dialog.AllServiceGiftLevelThreeDialog;
import com.nnbc123.app.ui.widget.dialog.AllServiceGiftLevelTwoDialog;
import com.nnbc123.app.ui.widget.dialog.MonsterDialog;
import com.nnbc123.app.ui.widget.marqueeview.Utils;
import com.nnbc123.app.utils.UserUtils;
@@ -92,7 +85,6 @@ import com.nnbc123.core.monsterhunting.bean.MonsterHuntingResult;
import com.nnbc123.core.monsterhunting.bean.MonsterInfo;
import com.nnbc123.core.monsterhunting.bean.MonsterProtocol;
import com.nnbc123.core.monsterhunting.manager.MonsterDataManager;
import com.nnbc123.core.noble.AllServiceGiftProtocol;
import com.nnbc123.core.noble.NobleInfo;
import com.nnbc123.core.noble.NobleResourceType;
import com.nnbc123.core.noble.NobleUtil;
@@ -119,7 +111,6 @@ import com.nnbc123.core.utils.LogUtils;
import com.nnbc123.core.utils.StringUtils;
import com.nnbc123.library.base.factory.CreatePresenter;
import com.nnbc123.library.rxbus.RxBus;
import com.nnbc123.library.utils.JavaUtil;
import com.nnbc123.library.utils.SingleToastUtil;
import com.nnbc123.library.utils.UIUtils;
import com.opensource.svgaplayer.SVGADrawable;
@@ -137,7 +128,6 @@ import java.lang.ref.WeakReference;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -197,8 +187,6 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
/*********************************显示全服礼物***************************************/
private GiftBroadcastObserver giftObserver;
private Dialog giftDialog;
private LinkedList<AllServiceGiftProtocol.DataBean> giftList;
private boolean isResume = true;
@Nullable
private SingleRoomTipDialog singleRoomTipDialog;
@@ -501,9 +489,6 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
super.onResume();
AvRoomDataManager.get().roomNoDestory = true;
registerGiftBroadcastMessage(true);
if (giftList != null) {
giftList.clear();
}
isResume = true;
}
@@ -904,12 +889,6 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
monsterDialog.dismiss();
monsterDialog = null;
}
if (giftDialog != null && giftDialog.isShowing()) {
giftDialog.setOnDismissListener(null);
giftDialog.dismiss();
giftDialog = null;
}
if (limitEnterRoomHelper != null) {
limitEnterRoomHelper.release();
}
@@ -1190,30 +1169,6 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
if (baseProtocol == null) return;
switch (baseProtocol.getFirst()) {
case CUSTOM_MSG_HEADER_TYPE_GIFT:
if (!isValid()) return;
if (giftList == null) {
giftList = new LinkedList<>();
}
int second2 = baseProtocol.getSecond();
AllServiceGiftProtocol.DataBean data = JSON.parseObject(String.valueOf(baseProtocol.getData()), AllServiceGiftProtocol.DataBean.class);
if (data == null || data.getGiftUrl() == null || data.isCeremonyGift())
return;
giftList.add(data);
if (second2 == CUSTOM_MSG_ALL_SERVICE_GIFT) {
if (giftDialog != null && giftDialog.isShowing()) {
// 如果当前以及有礼物弹窗在展示,则需要等到他 dismiss 后再显示下一个
AllServiceGiftProtocol.DataBean dataBean = giftList.peekFirst();
if (dataBean != null) {
return;
} else {
giftDialog.dismiss();
}
} else {
showGiftDialog();
}
}
break;
case CUSTOM_MSG_LUCKY_GIFT:
if (baseProtocol.getSecond() == CUSTOM_MSG_LUCKY_GIFT_SERVER_NOTIFY) {
RoomReceivedLuckyGiftAttachment attachment = new RoomReceivedLuckyGiftAttachment(CUSTOM_MSG_LUCKY_GIFT_SERVER_NOTIFY);
@@ -1236,39 +1191,6 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
}
}
private void showGiftDialog() {
if (giftList.size() == 0) return;
giftDialog = generateAllServiceGiftDialog(this, giftList.peekFirst());
giftDialog.setOnDismissListener(dialog -> {
giftList.pollFirst();
AllServiceGiftProtocol.DataBean dataBean = giftList.peekFirst();
if (dataBean != null) {
if (isValid()) {
showGiftDialog();
} else {
giftList.clear();
}
}
});
giftDialog.show();
}
private AllServiceGiftDialog generateAllServiceGiftDialog(Context context, AllServiceGiftProtocol.DataBean dataBean) {
switch (JavaUtil.str2int(dataBean.getLevelNum())) {
default:
case AllServiceGiftDialog.ALL_SERVICE_GIFT_LEVEL_1:
return new AllServiceGiftLevelOneDialog(context, dataBean);
case AllServiceGiftDialog.ALL_SERVICE_GIFT_LEVEL_2:
return new AllServiceGiftLevelTwoDialog(context, dataBean);
case AllServiceGiftDialog.ALL_SERVICE_GIFT_LEVEL_3:
return new AllServiceGiftLevelThreeDialog(context, dataBean);
}
}
@Override
protected void onPause() {
super.onPause();

View File

@@ -677,10 +677,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
} else {
val roomQueueInfo = AvRoomDataManager.get()
.getRoomQueueMemberInfoByAccount(myUid.toString())
if (roomQueueInfo?.mChatRoomMember?.isNoProhibitMic == true && roomQueueInfo.mRoomMicInfo?.isMicMute == false) {
bottomView.setMicBtnEnable(true)
bottomView.setMicBtnOpen(true)
} else if (roomQueueInfo?.mChatRoomMember != null
if (roomQueueInfo?.mChatRoomMember != null
&& myUid.toString() == roomQueueInfo.mChatRoomMember.account
&& roomQueueInfo.mRoomMicInfo?.isMicMute == true
) {
@@ -1000,7 +997,15 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
(roomInfo.isLeaveMode || AvRoomDataManager.get().isSingleRoom)
&& position == -1
) {
showUserCardDialog(roomInfo.uid.toString())
val currentUid = AuthModel.get().currentUid.toString()
if (roomInfo.isLeaveMode && !AvRoomDataManager.get().isSingleRoom && (AvRoomDataManager.get()
.isRoomOwner(currentUid) || AvRoomDataManager.get().isRoomAdmin(currentUid)
|| SuperAdminUtil.isSuperAdmin())
) {
SingleToastUtil.showToast("请先关闭离开模式")
} else {
showUserCardDialog(roomInfo.uid.toString())
}
} else {
val roomQueueInfo = AvRoomDataManager.get()
.getRoomQueueMemberInfoByMicPosition(position)

View File

@@ -125,59 +125,6 @@ public class GiftEffectView extends RelativeLayout implements SVGACallback {
giftInfo = giftEffectInfo.getGift();
}
if (giftInfo != null) {
int totalCoin = giftInfo.getGoldPrice() * giftEffectInfo.getGiftNum() * giftEffectInfo.getTargetUsers().size();
if (totalCoin >= 520 &&
giftEffectInfo.getGiftReceiveType() != GiftEffectInfo.GIFT_RECEIVE_TYPE_LUCKY
&& !AvRoomDataManager.get().isSelfGamePlaying()) {//礼物栏
ImageLoadUtils.loadImage(benefactorAvatar.getContext(), giftEffectInfo.getAvatar(), benefactorAvatar);
ImageLoadUtils.loadImage(giftImg.getContext(), giftInfo.getGiftUrl(), giftImg);
benefactorNick.setText(giftEffectInfo.getNick());
giftNumber.setText("X" + giftEffectInfo.getGiftNum());
giftName.setText(giftInfo.getGiftName());
container.setVisibility(VISIBLE);
if (giftEffectInfo.getGiftReceiveType() == GiftEffectInfo.GIFT_RECEIVE_TYPE_SINGLE) {
GiftReceiver giftReceiver = giftEffectInfo.getTargetUsers().get(0);
ImageLoadUtils.loadAvatar(receiverAvatar.getContext(), giftReceiver.getAvatar(), receiverAvatar);
receiverNick.setText(giftReceiver.getNick());
} else if (giftEffectInfo.getGiftReceiveType() == GiftEffectInfo.GIFT_RECEIVE_TYPE_ALL) {
receiverAvatar.setImageResource(R.mipmap.app_logo);
receiverNick.setText("全麦");
} else if (giftEffectInfo.getGiftReceiveType() == GiftEffectInfo.GIFT_RECEIVE_TYPE_MULTI) {
receiverAvatar.setImageResource(R.mipmap.app_logo);
StringBuilder sb = new StringBuilder();
for (GiftReceiver targetUser : giftEffectInfo.getTargetUsers()) {
RoomQueueInfo roomQueueInfo = AvRoomDataManager.get().getRoomQueueMemberInfoByAccount(targetUser.getUid() + "");
if (roomQueueInfo == null) continue;
sb.append(roomQueueInfo.mRoomMicInfo.getPosition() + 1).append("").append(",");
}
if (sb.length() > 0) {
sb.replace(sb.lastIndexOf(","), sb.length(), "");
}
receiverNick.setText(sb.toString());
}
Animation operatingAnim = AnimationUtils.loadAnimation(getContext(), R.anim.light_bg_rotate_anim);
LinearInterpolator lin = new LinearInterpolator();
operatingAnim.setInterpolator(lin);
giftLightBg.setAnimation(operatingAnim);
final Point center = new Point();
center.x = ResolutionUtils.getScreenWidth(getContext()) / 2;
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(container, "translationX", -UIUtil.dip2px(getContext(), 400), center.x - container.getWidth() / 2).setDuration(500);
objectAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
objectAnimator.start();
ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(container, "alpha", 0.0F, 1.0F).setDuration(500);
objectAnimator1.setInterpolator(new AccelerateDecelerateInterpolator());
objectAnimator1.start();
if (totalCoin < 4999) {
imgBg.setImageResource(R.drawable.icon_gift_effect_bg_1);
} else if (totalCoin < 9999) {
imgBg.setImageResource(R.drawable.icon_gift_effect_bg_2);
} else {
imgBg.setImageResource(R.drawable.icon_gift_effect_bg_3);
}
}
effectHandler.sendEmptyMessageDelayed(0, 6000);
if (giftInfo.getOtherViewType() == 1 && !TextUtils.isEmpty(giftInfo.getViewUrl())) {
drawVAPEffect(giftInfo.getViewUrl());

View File

@@ -1,5 +1,6 @@
package com.nnbc123.app.avroom.widget;
import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_GIFT;
import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_GIFT_COMPOUND;
import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_KITCHEN;
import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_PRIVILEGE;
@@ -93,6 +94,7 @@ import com.nnbc123.core.im.custom.bean.CarveUpGoldAttachment;
import com.nnbc123.core.im.custom.bean.CleanScreenAttachment;
import com.nnbc123.core.im.custom.bean.CustomAttachment;
import com.nnbc123.core.im.custom.bean.DatingAttachment;
import com.nnbc123.core.im.custom.bean.DressUpGiftAttachment;
import com.nnbc123.core.im.custom.bean.FaceAttachment;
import com.nnbc123.core.im.custom.bean.FansTeamMsgAttachment;
import com.nnbc123.core.im.custom.bean.GiftAttachment;
@@ -121,6 +123,7 @@ import com.nnbc123.core.im.custom.bean.RoomReceivedLuckyGiftAttachment;
import com.nnbc123.core.im.custom.bean.RoomTipAttachment;
import com.nnbc123.core.im.custom.bean.TarotAttachment;
import com.nnbc123.core.im.custom.bean.TarotMsgBean;
import com.nnbc123.core.im.custom.bean.UnLockGiftAttachment;
import com.nnbc123.core.im.custom.bean.VipMessageAttachment;
import com.nnbc123.core.im.custom.bean.WelcomeAttachment;
import com.nnbc123.core.im.custom.bean.WishListAttachment;
@@ -215,6 +218,7 @@ public class MessageView extends FrameLayout {
private int whiteColor;
private int greyColor;
private int appColor;
private int giftColor;
private int badgeWidth;
private int badgeHeight;
private int sysIconHeight;
@@ -277,6 +281,7 @@ public class MessageView extends FrameLayout {
whiteColor = ContextCompat.getColor(context, R.color.white);
greyColor = ContextCompat.getColor(context, R.color.white_transparent_50);
appColor = ContextCompat.getColor(context, R.color.app_color);
giftColor = ContextCompat.getColor(context, R.color.color_5CEFFF);
paddingWidth = Utils.dip2px(context, 10);
paddingHeight = Utils.dip2px(context, 8);
badgeWidth = Utils.dip2px(context, 15);
@@ -1011,6 +1016,13 @@ public class MessageView extends FrameLayout {
if (second == CustomAttachment.CUSTOM_MSG_PRIVILEGE_SECOND || second == CustomAttachment.CUSTOM_MSG_PRIVILEGE_SECOND_VIDEO) {
setPrivilegeNoticeMessage(chatRoomMessage, tvContent);
}
} else if (first == CUSTOM_MSG_GIFT) {
setVIPMessageBackground(chatRoomMessage, tvContent);
if (second == CustomAttachment.CUSTOM_MSG_GIFT_UNLOCK) {
setUnLockGiftMsg(tvContent, (UnLockGiftAttachment) attachment, chatRoomMessage);
} else if (second == CustomAttachment.CUSTOM_MSG_GIFT_DRESS) {
setDressGiftMsg(tvContent, (DressUpGiftAttachment) attachment, chatRoomMessage);
}
} else {
tvContent.setTextColor(Color.WHITE);
tvContent.setText(tvContent.getResources().getText(R.string.not_support_message_tip));
@@ -2928,6 +2940,53 @@ public class MessageView extends FrameLayout {
}
private void setUnLockGiftMsg(TextView tvContent, UnLockGiftAttachment attachment, ChatRoomMessage chatRoomMessage) {
if (attachment == null) return;
String nick = RegexUtil.getPrintableString(attachment.getNick());
String giftName = attachment.getGiftNameNotNull();
String giftImage = attachment.getGiftUrlNotNull();
SpannableBuilder text = new SpannableBuilder(tvContent)
.append(getNewUserDrawable(chatRoomMessage), badgeWidth, badgeHeight)
.append(nick, new ForegroundColorSpan(appColor), new OriginalDrawStatusClickSpan() {
@Override
public void onClick(@NonNull View widget) {
if (clickConsumer != null) {
Single.just(chatRoomMessage.getFromAccount()).subscribe(clickConsumer);
}
}
})
.append(" 已解锁礼物 ", new ForegroundColorSpan(whiteColor))
.append(giftImage, giftLength, giftLength)
.append(giftName, new ForegroundColorSpan(giftColor));
tvContent.setText(text.build());
tvContent.setOnClickListener(null);
tvContent.setMovementMethod(new LinkMovementMethod());
}
private void setDressGiftMsg(TextView tvContent, DressUpGiftAttachment attachment, ChatRoomMessage chatRoomMessage) {
if (attachment == null) return;
String nick = RegexUtil.getPrintableString(attachment.getNick());
String dressName = attachment.getDressNameNotNull();
String dressImage = attachment.getDressUrlNotNull();
SpannableBuilder text = new SpannableBuilder(tvContent)
.append(getNewUserDrawable(chatRoomMessage), badgeWidth, badgeHeight)
.append(nick, new ForegroundColorSpan(appColor), new OriginalDrawStatusClickSpan() {
@Override
public void onClick(@NonNull View widget) {
if (clickConsumer != null) {
Single.just(chatRoomMessage.getFromAccount()).subscribe(clickConsumer);
}
}
})
.append(" 获得 " + dressName + " ", new ForegroundColorSpan(whiteColor))
.append(dressImage, giftLength);
tvContent.setText(text.build());
tvContent.setOnClickListener(null);
tvContent.setMovementMethod(new LinkMovementMethod());
}
@Nullable
private Drawable getNewUserDrawable(ChatRoomMessage chatRoomMessage) {
boolean newUser = NobleUtil.getIsNewUser(UserInfo.IS_NEW_USER, chatRoomMessage);

View File

@@ -4,6 +4,7 @@ import static com.nnbc123.core.Constants.DEBUG_MAX_UID;
import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MESS_HEAD_NOBLE;
import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MESS_SUB_OPENNOBLE;
import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MESS_SUB_RENEWNOBLE;
import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_ALL_SERVICE_GIFT;
import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_HEADER_TYPE_GIFT;
import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_RED_PACKAGE;
import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_RED_PACKAGE_RECEIVE_ALL_DIAMOND;
@@ -13,6 +14,7 @@ import static com.nnbc123.library.utils.UIUtils.getActivityByContext;
import android.annotation.SuppressLint;
import android.app.ActivityManager;
import android.app.Dialog;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -69,7 +71,7 @@ import com.nnbc123.app.ui.login.LoginPhoneActivity;
import com.nnbc123.app.ui.pay.ChargeActivity;
import com.nnbc123.app.ui.setting.ResetPasswordActivity;
import com.nnbc123.app.ui.widget.DefaultToolBar;
import com.nnbc123.app.ui.widget.dialog.AllServiceGiftLevelCeremonyDialog;
import com.nnbc123.app.ui.widget.dialog.AllServiceGiftLevelDialog;
import com.nnbc123.app.ui.widget.dialog.AllServiceVipLevelUPDialog;
import com.nnbc123.app.ui.widget.dialog.GameInviteDialog;
import com.nnbc123.app.ui.widget.dialog.OpenNobleGlobalNoticeDialog;
@@ -114,6 +116,7 @@ import java.lang.ref.WeakReference;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import io.reactivex.Observable;
@@ -134,7 +137,7 @@ public abstract class BaseActivity extends RxAppCompatActivity
*/
protected static final String STATUS_TAG = "STATUS_TAG";
protected final RxPermissions rxPermissions = new RxPermissions(this);
public final RxPermissions rxPermissions = new RxPermissions(this);
protected TitleBar mTitleBar;
protected DefaultToolBar mToolBar;
protected CompositeDisposable mCompositeDisposable;
@@ -145,6 +148,8 @@ public abstract class BaseActivity extends RxAppCompatActivity
private OpenNobleGlobalNoticeDialog mNoticeDialog;
private boolean isShowingChargeDialog;
private Dialog giftDialog;
private LinkedList<AllServiceGiftProtocol.DataBean> giftList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -340,7 +345,14 @@ public abstract class BaseActivity extends RxAppCompatActivity
mNoticeDialog.dismiss();
mNoticeDialog = null;
}
if (giftDialog != null && giftDialog.isShowing()) {
giftDialog.setOnDismissListener(null);
giftDialog.dismiss();
giftDialog = null;
}
if (giftList != null) {
giftList.clear();
}
super.onDestroy();
LogUtil.i(this.getClass().getName(), "onDestroy");
/* ImageLoadUtils.clearMemory(this);*/
@@ -508,7 +520,6 @@ public abstract class BaseActivity extends RxAppCompatActivity
.compose(bindUntilEvent(ActivityEvent.PAUSE))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::onRoomEventReceived);
}
@Override
@@ -930,15 +941,53 @@ public abstract class BaseActivity extends RxAppCompatActivity
UserUtils.getUserInfo() == null)
return;
AllServiceGiftProtocol.DataBean data = JSON.parseObject(String.valueOf(baseProtocol.getData()), AllServiceGiftProtocol.DataBean.class);
if (data == null || data.getGiftUrl() == null || !data.isCeremonyGift())
if (data == null || data.getGiftUrl() == null)
return;
new AllServiceGiftLevelCeremonyDialog(context, data).show();
if (giftList == null) {
giftList = new LinkedList<>();
}
int second2 = baseProtocol.getSecond();
if (second2 == CUSTOM_MSG_ALL_SERVICE_GIFT) {
giftList.add(data);
if (giftDialog != null && giftDialog.isShowing()) {
// 如果当前以及有礼物弹窗在展示,则需要等到他 dismiss 后再显示下一个
AllServiceGiftProtocol.DataBean dataBean = giftList.peekFirst();
if (dataBean != null) {
return;
} else {
giftDialog.dismiss();
}
} else {
showGiftDialog();
}
}
break;
default:
break;
}
}
private void showGiftDialog() {
if (giftList.size() == 0) return;
giftDialog = generateAllServiceGiftDialog(this, giftList.peekFirst());
giftDialog.setOnDismissListener(dialog -> {
giftList.pollFirst();
AllServiceGiftProtocol.DataBean dataBean = giftList.peekFirst();
if (dataBean != null) {
if (isValid()) {
showGiftDialog();
} else {
giftList.clear();
}
}
});
giftDialog.show();
}
private AllServiceGiftLevelDialog generateAllServiceGiftDialog(Context context, AllServiceGiftProtocol.DataBean dataBean) {
return new AllServiceGiftLevelDialog(context, dataBean);
}
public void onGrabApprenticesEvent(GrabApprenticesEvent event) {
if (!isTopActivity()) return;
if (dialog != null && dialog.isAdded()) {

View File

@@ -5,13 +5,17 @@ import android.content.DialogInterface
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.view.*
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.lifecycleScope
import androidx.viewbinding.ViewBinding
import com.nnbc123.app.ui.utils.getActivityContext
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.nnbc123.app.ui.utils.getActivityContext
import com.trello.rxlifecycle3.components.support.RxDialogFragment
import java.lang.Exception
import java.lang.reflect.ParameterizedType
abstract class BaseDialog<T : ViewBinding> : RxDialogFragment() {
@@ -57,9 +61,13 @@ abstract class BaseDialog<T : ViewBinding> : RxDialogFragment() {
}
fun show(context: Context?) {
if (context == null) {
return
}
try {
context?.let {
show((getActivityContext(it) as FragmentActivity).supportFragmentManager, null)
val fragmentActivity = getActivityContext(context) as? FragmentActivity
fragmentActivity?.lifecycleScope?.launchWhenResumed {
show(fragmentActivity.supportFragmentManager, null)
}
} catch (e: Exception) {
e.printStackTrace()

View File

@@ -1,5 +1,8 @@
package com.nnbc123.app.common.permission
import android.content.Context
import android.content.pm.PackageManager
import androidx.core.content.ContextCompat
import com.tbruyelle.rxpermissions2.RxPermissions
/**
@@ -8,19 +11,28 @@ import com.tbruyelle.rxpermissions2.RxPermissions
**/
object PermissionHelper {
fun isGranted(context: Context, permission: String): Boolean {
return ContextCompat.checkSelfPermission(
context,
permission
) == PackageManager.PERMISSION_GRANTED
}
/**
* 检查权限是否都授权
*/
fun isAllGender(rxPermissions: RxPermissions, vararg perms: String?): Boolean {
if (perms.firstOrNull {
if (it == null) {
false
} else {
!rxPermissions.isGranted(it)
}
} != null) {
return false
}
return true
fun isAllGranted(context: Context, vararg permissions: String): Boolean {
return permissions.firstOrNull {
!isGranted(context, it)
} == null
}
/**
* 检查权限是否都授权
*/
fun isAllGranted(rxPermissions: RxPermissions, vararg perms: String): Boolean {
return perms.firstOrNull {
!rxPermissions.isGranted(it)
} == null
}
}

View File

@@ -3,7 +3,9 @@ package com.nnbc123.app.common.widget;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.widget.FrameLayout;
import android.widget.RelativeLayout;
@@ -67,22 +69,26 @@ public class DragLayout extends RelativeLayout {
parentHeight = parent.getHeight();
}
if (left < 0) {
left = 0;
int parentPaddingLeft = getParentPaddingLeft();
if (left < parentPaddingLeft) {
left = parentPaddingLeft;
right = left + getWidth();
}
if (right > parentWidth) {
right = parentWidth;
int paddingPaddingRight = getParentPaddingRight();
if (right > (parentWidth - paddingPaddingRight)) {
right = (parentWidth - paddingPaddingRight);
left = right - getWidth();
}
if (top < 0) {
top = 0;
int parentPaddingTop = getParentPaddingTop();
if (top < parentPaddingTop) {
top = parentPaddingTop;
bottom = top + getHeight();
}
if (bottom > parentHeight) {
bottom = parentHeight;
int paddingPaddingBottom = getParentPaddingBottom();
if (bottom > (parentHeight - paddingPaddingBottom)) {
bottom = (parentHeight - paddingPaddingBottom);
top = bottom - getHeight();
}
@@ -117,8 +123,8 @@ public class DragLayout extends RelativeLayout {
}
if (layoutParams != null) {
layoutParams.leftMargin = left;
layoutParams.topMargin = top;
layoutParams.leftMargin = left - getParentPaddingLeft();
layoutParams.topMargin = top - getParentPaddingTop();
layoutParams.width = getWidth();
layoutParams.height = getHeight();
setLayoutParams(layoutParams);
@@ -150,22 +156,26 @@ public class DragLayout extends RelativeLayout {
parentHeight = parent.getHeight();
}
if (left < 0) {
left = 0;
int parentPaddingLeft = getParentPaddingLeft();
if (left < parentPaddingLeft) {
left = parentPaddingLeft;
right = left + getWidth();
}
if (right > parentWidth) {
right = parentWidth;
int paddingPaddingRight = getParentPaddingRight();
if (right > (parentWidth - paddingPaddingRight)) {
right = (parentWidth - paddingPaddingRight);
left = right - getWidth();
}
if (top < 0) {
top = 0;
int parentPaddingTop = getParentPaddingTop();
if (top < parentPaddingTop) {
top = parentPaddingTop;
bottom = top + getHeight();
}
if (bottom > parentHeight) {
bottom = parentHeight;
int paddingPaddingBottom = getParentPaddingBottom();
if (bottom > (parentHeight - paddingPaddingBottom)) {
bottom = (parentHeight - paddingPaddingBottom);
top = bottom - getHeight();
}
@@ -192,4 +202,36 @@ public class DragLayout extends RelativeLayout {
return super.performClick();
}
protected int getParentPaddingLeft() {
ViewParent viewParent = getParent();
if (viewParent instanceof View) {
return ((View) viewParent).getPaddingLeft();
}
return 0;
}
protected int getParentPaddingRight() {
ViewParent viewParent = getParent();
if (viewParent instanceof View) {
return ((View) viewParent).getPaddingRight();
}
return 0;
}
protected int getParentPaddingTop() {
ViewParent viewParent = getParent();
if (viewParent instanceof View) {
return ((View) viewParent).getPaddingTop();
}
return 0;
}
protected int getParentPaddingBottom() {
ViewParent viewParent = getParent();
if (viewParent instanceof View) {
return ((View) viewParent).getPaddingBottom();
}
return 0;
}
}

View File

@@ -2,7 +2,6 @@ package com.nnbc123.app.decoration.adapter;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.netease.nim.uikit.support.glide.GlideApp;
import com.nnbc123.app.R;
@@ -39,62 +38,22 @@ public class MyCarAdapter extends BaseAdapter<CarInfo> {
helper.addOnClickListener(R.id.tv_used);
// 倒计时
int remainingDay = item.getRemainingDay();
int status = item.getStatus();
boolean canUse;
if (remainingDay >= 0 && status == CarInfo.STATUS_USER_CAN_USE) {
canUse = true;
} else {
canUse = false;
}
// 时间
if (remainingDay >= 0 && status == CarInfo.STATUS_USER_CAN_USE) {
String days;
if (item.getRemainingDay() > 99){
days = "99+";
}else {
days = item.getRemainingDay()+"";
if (item.getStatus() == CarInfo.STATUS_USER_CAN_USE) {
binding.tvUsed.setVisibility(View.VISIBLE);
binding.tvUsed.setEnabled(true);
binding.tvCounters.setText(mContext.getString(R.string.decoration_remainder) + item.getExpireText());
if (item.isUsing()) {
binding.tvUsed.setText("取消使用");
binding.tvUsed.setBackgroundResource(R.drawable.bg_common_cancel);
} else {
binding.tvUsed.setText("使用");
binding.tvUsed.setBackgroundResource(R.drawable.bg_common_confirm);
}
binding.tvCounters.setText(String.format(binding.tvCounters.getResources().getString(R.string.decoration_status_wrapper),
binding.tvCounters.getResources().getString(R.string.decoration_remainder) + days + ""));
} else {
if (status == CarInfo.STATUS_OFF_SHELF || status == CarInfo.STATUS_OUT_OF_DATE) {
binding.tvCounters.setText(String.format(binding.tvCounters.getResources().getString(R.string.decoration_status_wrapper),
binding.tvCounters.getResources().getString(R.string.past_due)));
}
binding.tvUsed.setVisibility(View.GONE);
binding.tvCounters.setText(binding.tvCounters.getResources().getString(R.string.past_due));
}
setUseButton(binding.tvUsed, canUse, item.isUsing());
updateTag(item, binding.ivTag);
}
private void setUseButton(TextView tvUsed, boolean canUse, boolean isUsing) {
if (!canUse) {
tvUsed.setVisibility(View.GONE);
tvUsed.setText("使用");
tvUsed.setBackgroundResource(R.drawable.bg_common_disable);
tvUsed.setEnabled(false);
tvUsed.setTextColor(mContext.getResources().getColor(R.color.text_secondary_878b9c));
} else if (isUsing) {
tvUsed.setVisibility(View.VISIBLE);
tvUsed.setText("取消使用");
tvUsed.setBackgroundResource(R.drawable.bg_common_cancel);
tvUsed.setEnabled(true);
tvUsed.setTextColor(mContext.getResources().getColor(R.color.text_normal_282828));
} else {
tvUsed.setVisibility(View.VISIBLE);
tvUsed.setText("使用");
tvUsed.setBackgroundResource(R.drawable.bg_common_confirm);
tvUsed.setTextColor(mContext.getResources().getColor(R.color.text_title_282828));
tvUsed.setEnabled(true);
}
}
private void updateTag(CarInfo carInfo, ImageView ivTag) {

View File

@@ -55,25 +55,12 @@ public class MyChatBubbleAdapter extends BaseAdapter<ChatBubbleInfo> {
binding.tvUsed.setVisibility(View.GONE);
binding.tvUsed.setEnabled(false);
binding.tvUsed.setText("使用");
binding.tvCounters.setText(mContext.getString(R.string.past_due));
} else {
binding.tvUsed.setVisibility(View.VISIBLE);
binding.tvUsed.setEnabled(true);
binding.tvCounters.setText(mContext.getString(R.string.decoration_remainder) + item.getExpireText());
}
// 日期展示
if (item.isHasExpired()) { // 过期
binding.tvCounters.setText(mContext.getString(R.string.past_due));
} else {
String days;
if (item.getExpireDays() > 99) {
days = "99+";
} else {
days = item.getExpireDays() + "";
}
binding.tvCounters.setText(mContext.getString(R.string.decoration_remainder) + days + mContext.getString(R.string.day));
}
}
}

View File

@@ -46,30 +46,14 @@ public class MyHeadWearAdapter extends BaseAdapter<HeadWearInfo> {
binding.ivTag.setImageResource(R.drawable.ic_mark_exclusive);
}
// 过期状态不可使用
if (item.getStatus() == 2) {
binding.tvUsed.setVisibility(View.GONE);
binding.tvUsed.setEnabled(false);
binding.tvUsed.setText("使用");
} else {
if (item.getStatus() == 1) {
binding.tvUsed.setVisibility(View.VISIBLE);
binding.tvUsed.setEnabled(true);
}
// 日期展示
if (item.getStatus() == 2) { // 过期
binding.tvCounters.setText(mContext.getString(R.string.past_due));
binding.tvCounters.setText(mContext.getString(R.string.decoration_remainder) + item.getExpireText());
} else {
String days;
if (item.getExpireDays() > 99){
days = "99+";
}else {
days = item.getExpireDays()+"";
}
binding.tvCounters.setText(mContext.getString(R.string.decoration_remainder) + days + mContext.getString(R.string.day));
binding.tvUsed.setVisibility(View.GONE);
binding.tvCounters.setText(mContext.getString(R.string.past_due));
}
}
}

View File

@@ -32,31 +32,16 @@ public class MyNamePlateAdapter extends BaseQuickAdapter<NamePlateInfo.Nameplate
.load(item.getNameplateImage())
.into(ivCover);
//使用按钮
TextView tvUsed = helper.getView(R.id.tv_used);
tvUsed.setBackgroundResource(item.isUsing() ? R.drawable.bg_common_cancel : R.drawable.bg_common_confirm);
tvUsed.setTextColor(item.isUsing() ? mContext.getResources().getColor(R.color.color_4C5AF1) :
mContext.getResources().getColor(R.color.white));
tvUsed.setText(item.isUsing() ? R.string.label_used : R.string.label_can_use);
if (item.isIsExpired()) { // 过期
// 日期展示
if (!item.isExpired()) {
helper.setText(R.id.tv_counters, mContext.getString(R.string.decoration_remainder) + item.getExpireText());
tvUsed.setVisibility(View.VISIBLE);
tvUsed.setText(item.isUsing() ? R.string.label_used : R.string.label_can_use);
tvUsed.setEnabled(true);
tvUsed.setBackgroundResource(item.isUsing() ? R.drawable.bg_common_cancel : R.drawable.bg_common_confirm);
} else {
helper.setText(R.id.tv_counters, mContext.getString(R.string.past_due));
tvUsed.setVisibility(View.GONE);
tvUsed.setEnabled(false);
tvUsed.setBackgroundResource(R.drawable.bg_common_disable);
tvUsed.setText("使用");
tvUsed.setTextColor(mContext.getResources().getColor(R.color.text_secondary_878b9c));
} else {
String days;
if (item.getExpireDays() > 99) {
days = "99+";
} else {
days = item.getExpireDays() + "";
}
helper.setText(R.id.tv_counters, mContext.getString(R.string.decoration_remainder) + days + mContext.getString(R.string.day));
tvUsed.setVisibility(View.VISIBLE);
tvUsed.setEnabled(true);
}
}
}

View File

@@ -54,25 +54,12 @@ public class MyUserCardWearAdapter extends BaseAdapter<UserCardWearInfo> {
binding.tvUsed.setVisibility(View.GONE);
binding.tvUsed.setEnabled(false);
binding.tvUsed.setText("使用");
binding.tvCounters.setText(mContext.getString(R.string.past_due));
} else {
binding.tvUsed.setVisibility(View.VISIBLE);
binding.tvUsed.setEnabled(true);
binding.tvCounters.setText(mContext.getString(R.string.decoration_remainder) + item.getExpireText());
}
// 日期展示
if (item.isHasExpired()) { // 过期
binding.tvCounters.setText(mContext.getString(R.string.past_due));
} else {
String days;
if (item.getExpireDays() > 99) {
days = "99+";
} else {
days = item.getExpireDays() + "";
}
binding.tvCounters.setText(mContext.getString(R.string.decoration_remainder) + days + mContext.getString(R.string.day));
}
}
}

View File

@@ -1,13 +1,18 @@
package com.nnbc123.app.decoration.view.widgets;
import android.content.Context;
import android.graphics.Color;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import androidx.core.content.ContextCompat;
import com.nnbc123.app.R;
import com.nnbc123.app.ui.widget.magicindicator.buildins.UIUtil;
import com.nnbc123.app.ui.widget.magicindicator.buildins.commonnavigator.abs.CommonNavigatorAdapter;
import com.nnbc123.app.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerIndicator;
import com.nnbc123.app.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerTitleView;
import com.nnbc123.app.ui.widget.magicindicator.buildins.commonnavigator.indicators.LinePagerIndicator;
import com.nnbc123.core.home.bean.TabInfo;
import java.util.List;
@@ -38,9 +43,9 @@ public class MyDecorationMagicIndicator extends CommonNavigatorAdapter {
public IPagerTitleView getTitleView(Context context, final int i) {
BadgeScaleTransitionPagerTitleView scaleTransitionPagerTitleView = new BadgeScaleTransitionPagerTitleView(context);
scaleTransitionPagerTitleView.setNormalColor(ContextCompat.getColor(mContext, R.color.text_secondary_878b9c));
scaleTransitionPagerTitleView.setSelectedColor(ContextCompat.getColor(mContext, R.color.text_title_282828));
scaleTransitionPagerTitleView.setSelectedColor(ContextCompat.getColor(mContext, R.color.color_2B2D33));
scaleTransitionPagerTitleView.setMinScale(0.9f);
scaleTransitionPagerTitleView.setTextSize(15);
scaleTransitionPagerTitleView.setTextSize(14);
scaleTransitionPagerTitleView.setText(mTitleList.get(i).getName());
if (mTitleList.get(i).getName().equals("座驾")) {
scaleTransitionPagerTitleView.findViewById(R.id.car_badge).setId(R.id.car_badge_garage);
@@ -62,7 +67,16 @@ public class MyDecorationMagicIndicator extends CommonNavigatorAdapter {
@Override
public IPagerIndicator getIndicator(Context context) {
return null;
LinePagerIndicator indicator = new LinePagerIndicator(context);
indicator.setMode(LinePagerIndicator.MODE_EXACTLY);
indicator.setLineHeight(UIUtil.dip2px(context, 4));
indicator.setRoundRadius(UIUtil.dip2px(context, 2));
indicator.setLineWidth(UIUtil.dip2px(context, 8));
indicator.setColors(Color.parseColor("#FFDA24"));
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
//lp.bottomMargin = 0;
indicator.setLayoutParams(lp);
return indicator;
}
public void setOnItemSelectListener(OnItemSelectListener onItemSelectListener) {

View File

@@ -30,10 +30,10 @@ import com.nnbc123.app.home.activity.VisitorListActivity
import com.nnbc123.app.home.adapter.MeCenterAdapter
import com.nnbc123.app.home.helper.BannerHelper
import com.nnbc123.app.home.helper.OpenRoomHelper
import com.nnbc123.app.qiyukefu.CustomerServerHelper
import com.nnbc123.app.skill.activity.SkillHomeActivity
import com.nnbc123.app.skill.activity.SkillHomeActivity.Companion.start
import com.nnbc123.app.support.LevelIconHelper
import com.nnbc123.app.ui.im.avtivity.NimP2PMessageActivity
import com.nnbc123.app.ui.patriarch.PatriarchModeActivity
import com.nnbc123.app.ui.pay.ChargeActivity
import com.nnbc123.app.ui.relation.AttentionListActivity
@@ -439,7 +439,8 @@ class MeFragment : BaseFragment(), View.OnClickListener {
UriProvider.getTutuRealNamePage()
)
R.id.tv_me_service -> {
CustomerServerHelper.contactCustomerServer(mContext)
NimP2PMessageActivity.start(requireContext(), "200014")
// CustomerServerHelper.contactCustomerServer(mContext)
}
R.id.tv_user_id -> {
mUserInfo?.let {

View File

@@ -106,7 +106,7 @@ class HomeFragment : BaseBindingFragment<HomeFragmentBinding>() {
})
InitialModel.get().cacheInitInfo?.defaultTab?.let {
val tab = it - 1
if (it >= 0 && it < tagList.size) {
if (tab >= 0 && tab < tagList.size) {
mBinding.viewPager.currentItem = tab
}
}

View File

@@ -89,10 +89,20 @@ public class OpenRoomHelper {
@NonNull
private static SpannableStringBuilder getCertificationTips(BaseActivity activity) {
String tips = activity.getString(R.string.tips_need_to_certification);
return getCertificationTips(activity, activity.getString(R.string.tips_need_to_certification_create_room));
}
@NonNull
private static SpannableStringBuilder getCertificationTips(BaseActivity activity, String actionName) {
String authentication = activity.getString(R.string.real_name_authentication);
String tips = activity.getString(R.string.tips_need_to_certification_format, actionName, authentication);
int actionStart = tips.indexOf(actionName);
int authenticationStart = tips.indexOf(authentication);
SpannableStringBuilder builder = new SpannableStringBuilder(tips);
builder.setSpan(new ForegroundColorSpan(ContextCompat.getColor(activity, R.color.appColor)),
tips.length() - 4, tips.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
actionStart, actionStart + actionName.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
builder.setSpan(new ForegroundColorSpan(ContextCompat.getColor(activity, R.color.appColor)),
authenticationStart, authenticationStart + authentication.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
return builder;
}

View File

@@ -36,7 +36,7 @@ class RequestPermissionEvent : UnicornEventBase<RequestPermissionEventEntry> {
&& perms != null
) {
val rxPermissions = RxPermissions(activity)
if (PermissionHelper.isAllGender(rxPermissions, * perms)) {
if (PermissionHelper.isAllGranted(rxPermissions, * perms)) {
p2?.onNotPorcessEvent()
} else {
RequestPermissionPromptDialog(p1, tips).show()
@@ -81,14 +81,23 @@ class RequestPermissionEvent : UnicornEventBase<RequestPermissionEventEntry> {
return ResUtil.getString(R.string.permission_denied_tips_mic)
}
RequestPermissionEventEntry.SCENES_TAKE_VIDEO -> {
return StringBuffer().append("1.")
.append(ResUtil.getString(R.string.permission_denied_tips_camera))
.append("\n2.").append(ResUtil.getString(R.string.permission_denied_tips_mic))
.toString()
}
RequestPermissionEventEntry.SCENES_TAKE_PHOTO -> {
return ResUtil.getString(R.string.permission_denied_tips_camera)
}
RequestPermissionEventEntry.SCENES_SELECT_MEDIA,
RequestPermissionEventEntry.SCENES_TAKE_VIDEO,
RequestPermissionEventEntry.SCENES_SAVE_IMAGE,
RequestPermissionEventEntry.SCENES_SAVE_VIDEO,
RequestPermissionEventEntry.SCENES_SELECT_VIDEO,
RequestPermissionEventEntry.SCENES_SELECT_FILE,
RequestPermissionEventEntry.SCENES_SELECT_IMAGE,
RequestPermissionEventEntry.SCENES_TAKE_PHOTO,
RequestPermissionEventEntry.SCENES_VIDEO_CHAT -> {
return ResUtil.getString(R.string.permission_denied_tips_image)
}

View File

@@ -1,11 +1,22 @@
package com.nnbc123.app.skill
import android.Manifest
import android.annotation.SuppressLint
import android.content.Intent
import android.net.Uri
import android.provider.Settings
import androidx.core.util.Consumer
import com.nnbc123.app.R
import com.nnbc123.app.base.BaseActivity
import com.nnbc123.app.common.permission.PermissionHelper.isAllGranted
import com.nnbc123.app.skill.dialog.SkillSelectionDialog
import com.nnbc123.app.skill.repository.SkillDataManager
import com.nnbc123.app.skill.repository.SkillModel
import com.nnbc123.app.skill.widget.*
import com.nnbc123.app.ui.widget.dialog.CommonTipDialog
import com.nnbc123.app.ui.widget.dialog.RequestPermissionPromptDialog
import com.nnbc123.app.ui.widget.dialog.RequestPermissionPromptDialog.Companion.dismissCurrentDialog
import com.nnbc123.app.ui.widget.dialog.RequestPermissionPromptDialog.Companion.isNeedPrompt
import com.nnbc123.core.file.FileModel
import com.nnbc123.core.skill.entity.PropRefEntity
import com.nnbc123.core.skill.entity.PropsEntity
@@ -13,6 +24,7 @@ import com.nnbc123.core.skill.entity.SkillPostServerEntity
import com.nnbc123.core.skill.entity.SkillPropertyEntity
import com.nnbc123.core.skill.event.SkillEvent
import com.nnbc123.core.utils.toast
import com.nnbc123.library.utils.ResUtil
import org.greenrobot.eventbus.EventBus
import java.io.File
@@ -198,4 +210,53 @@ class SkillDataDelegate(private val skillView: SkillCardView, private val activi
activity.toast(th.message)
})
}
override fun requestMicPermissions(consumer: Consumer<Boolean>) {
super.requestMicPermissions(consumer)
val permissions = arrayOf(
Manifest.permission.RECORD_AUDIO,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
)
val sb = StringBuffer()
sb.append("1.").append(ResUtil.getString(R.string.permission_denied_tips_mic))
.append("\n2.").append(ResUtil.getString(R.string.permission_denied_tips_image))
val tips = sb.toString()
if (isNeedPrompt()
&& !isAllGranted(activity.rxPermissions, *permissions)
) {
RequestPermissionPromptDialog(activity, tips).show()
}
activity.checkPermission(Consumer<Boolean> { isGranted: Boolean ->
dismissCurrentDialog()
if (isGranted) {
consumer.accept(true)
} else {
consumer.accept(false)
showPermissionDeniedTipsDialog(tips)
}
}, *permissions)
}
private fun showPermissionDeniedTipsDialog(message: String) {
val mPrivacyDialog = CommonTipDialog(activity)
mPrivacyDialog.setTipMsg(message)
mPrivacyDialog.setOkText("去设置")
mPrivacyDialog.setOnActionListener(
object : CommonTipDialog.OnActionListener {
override fun onOk() {
//同意跳到应用详情页面
val packageUri = Uri.parse("package:" + activity.packageName)
val intent = Intent(
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
packageUri
)
activity.startActivityForResult(
intent, 0
)
}
}
)
mPrivacyDialog.show()
}
}

View File

@@ -8,12 +8,15 @@ import android.view.View
import com.netease.nim.uikit.StatusBarUtil
import com.nnbc123.app.R
import com.nnbc123.app.base.BaseBindingActivity
import com.nnbc123.app.common.permission.PermissionHelper
import com.nnbc123.app.databinding.ActivitySkillEditBinding
import com.nnbc123.core.skill.entity.SkillPropertyEntity
import com.nnbc123.app.skill.repository.SkillDataManager
import com.nnbc123.app.skill.repository.SkillModel
import com.nnbc123.app.skill.widget.CARD_TYPE_AUDIO
import com.nnbc123.app.ui.widget.dialog.RequestPermissionPromptDialog
import com.nnbc123.core.skill.entity.SkillPropertyEntity
import com.nnbc123.library.annatation.ActLayoutRes
import com.nnbc123.library.utils.ResUtil
@ActLayoutRes(R.layout.activity_skill_edit)
class AddSkillActivity : BaseBindingActivity<ActivitySkillEditBinding>() {
@@ -79,11 +82,24 @@ class AddSkillActivity : BaseBindingActivity<ActivitySkillEditBinding>() {
@SuppressLint("CheckResult")
private fun checkPermissionAndDeal(it: SkillPropertyEntity) {
checkPermission(
val tips = StringBuffer().append("1.")
.append(ResUtil.getString(R.string.permission_denied_tips_mic))
.append("\n2.").append(ResUtil.getString(R.string.permission_denied_tips_image))
.toString()
val params = arrayOf(
Manifest.permission.RECORD_AUDIO,
Manifest.permission.WRITE_EXTERNAL_STORAGE
)
if (RequestPermissionPromptDialog.isNeedPrompt() && !PermissionHelper.isAllGranted(
rxPermissions,
*params
)
) {
RequestPermissionPromptDialog(this, tips).show()
}
checkPermission(*params)
.subscribe { aBoolean: Boolean ->
RequestPermissionPromptDialog.dismissCurrentDialog()
if (aBoolean) {
setSkillViewData(it)
} else {

View File

@@ -1,5 +1,6 @@
package com.nnbc123.app.skill.widget
import androidx.core.util.Consumer
import com.nnbc123.core.skill.entity.PropRefEntity
import java.io.File
@@ -31,6 +32,7 @@ interface ItemEventListener {
fun onItemClick(item: SkillItem) {}
fun onRecordSuccess(audioFile: File?, duration: Int) {}
fun onDeleteRecordClick() {}
fun requestMicPermissions(consumer: Consumer<Boolean>) {}
}

View File

@@ -3,6 +3,7 @@ package com.nnbc123.app.skill.widget
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import androidx.core.util.Consumer
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.netease.nimlib.sdk.media.record.RecordType
import com.nnbc123.app.R
@@ -12,6 +13,7 @@ import com.nnbc123.app.databinding.LayoutSkillAudioBinding
import com.nnbc123.app.ui.widget.dialog.CommonTipDialog
import com.nnbc123.core.utils.TextUtils
import com.nnbc123.core.utils.toast
import com.tbruyelle.rxpermissions2.RxPermissions
import java.io.File
class RecordIResourceItem(private val itemAttribute: ItemAttribute) : SkillItem,
@@ -119,6 +121,13 @@ class RecordIResourceItem(private val itemAttribute: ItemAttribute) : SkillItem,
setItemByState(RECORD_STATE_READY)
}
override fun onClickRecord() {
itemAttribute.itemEventListener?.requestMicPermissions {
if (it) {
binding.recordView.startRecord()
}
}
}
/**
* 根据状态设置View

View File

@@ -50,7 +50,7 @@ class TimerRecorderView(context: Context, @Nullable attrs: AttributeSet?, defSty
setOnClickListener {
when (state) {
STATE_PAUSED -> {
startRecord()
recordListener?.onClickRecord()
}
STATE_PLAYED -> {
endAudioRecord(false)
@@ -82,7 +82,7 @@ class TimerRecorderView(context: Context, @Nullable attrs: AttributeSet?, defSty
//开始录制
private fun startRecord() {
fun startRecord() {
if (audioMessageHelper == null) {
val options = NimUIKitImpl.getOptions()
options.audioRecordMaxTime = recordDuration
@@ -175,5 +175,6 @@ class TimerRecorderView(context: Context, @Nullable attrs: AttributeSet?, defSty
fun onRecordCancel()
fun onRecordSuccess(file: File?)
fun onRecordFail()
fun onClickRecord()
}
}

View File

@@ -10,6 +10,7 @@ import android.graphics.drawable.Drawable;
import com.nnbc123.app.R;
import com.nnbc123.app.vip.VipHelper;
import com.nnbc123.core.gift.bean.GiftInfo;
import com.nnbc123.core.gift.bean.GiftType;
import com.nnbc123.core.gift.bean.SimpleVipInfo;
import com.nnbc123.library.bindinglist.BaseItem;
@@ -28,6 +29,8 @@ public class GiftInfoVm extends BaseItem<GiftInfo> {
public final ObservableField<String> countText = new ObservableField<>();
public final ObservableBoolean isLocked = new ObservableBoolean();
public Drawable nobleDrawable;
public Drawable radishDrawable;
@@ -54,8 +57,6 @@ public class GiftInfoVm extends BaseItem<GiftInfo> {
*/
public boolean isExclusive;
public boolean isLocked;
public String vipIcon;
public boolean isPrivateChat;
@@ -64,13 +65,13 @@ public class GiftInfoVm extends BaseItem<GiftInfo> {
super(context, data);
this.isSelect.set(select);
if (data.getConsumeType() == GiftInfo.CONSUME_TYPE_GOLD) {
radishDrawable = null;
radishDrawableSelected = null;
radishDrawable = context.getResources().getDrawable(R.drawable.gift_dialog_ic_diamond);
radishDrawableSelected = context.getResources().getDrawable(R.drawable.gift_dialog_ic_diamond);
} else {
radishDrawable = context.getResources().getDrawable(R.drawable.icon_radish_transparent);
radishDrawableSelected = context.getResources().getDrawable(R.drawable.icon_radish_transparent_selected);
}
goldText.set(data.getGoldPrice() + "钻石");
goldText.set(String.valueOf(data.getGoldPrice()));
this.isKnap.set(isKnap);
updateCount();
int nobleId = data.getLevel();
@@ -88,8 +89,8 @@ public class GiftInfoVm extends BaseItem<GiftInfo> {
isShowEffect = data.isHasEffect();
isExclusive = data.isRoomExclude();
SimpleVipInfo vipInfo = data.getGiftVipInfo();
isLocked = vipInfo != null && VipHelper.getMyVipLevel() < vipInfo.getVipLevel();
vipIcon = vipInfo == null ? "" : vipInfo.getVipIcon();
isLocked.set(getIsLocked());
}
@Override
@@ -106,4 +107,23 @@ public class GiftInfoVm extends BaseItem<GiftInfo> {
this.countText.set("x" + data.getCount());
}
public void refreshUnlockState() {
isLocked.set(getIsLocked());
}
private boolean getIsLocked() {
if (isKnap.get()) {
return false;
}
SimpleVipInfo vipInfo = data.getGiftVipInfo();
boolean isLocked = vipInfo != null && VipHelper.getMyVipLevel() < vipInfo.getVipLevel();
if (!isLocked) {
if (data.getGiftType() == GiftType.GIFT_TYPE_UNLOCK) {
if (!data.isUnlocked()) {
isLocked = true;
}
}
}
return isLocked;
}
}

View File

@@ -327,7 +327,7 @@ public class MessageFragment extends TFragment implements ModuleProxy, MessageLi
private void requestPermission(Consumer<Boolean> consumer, String tips, String... perms) {
Context context = getContext();
if (context != null && RequestPermissionPromptDialog.Companion.isNeedPrompt()
&& !PermissionHelper.INSTANCE.isAllGender(rxPermissions, perms)) {
&& !PermissionHelper.INSTANCE.isAllGranted(rxPermissions, perms)) {
new RequestPermissionPromptDialog(context, tips).show();
}
Disposable disposable = rxPermissions.request(perms).subscribe(aBoolean -> {
@@ -625,12 +625,16 @@ public class MessageFragment extends TFragment implements ModuleProxy, MessageLi
@Subscribe(threadMode = ThreadMode.MAIN)
@SuppressLint("CheckResult")
public void onNimAudioChatEvent(NimAudioChatEvent event) {
String[] perms = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.RECORD_AUDIO};
String tips = ResUtil.getString(R.string.permission_denied_tips_mic);
String[] perms = new String[]{
Manifest.permission.RECORD_AUDIO,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE};
StringBuffer sb = new StringBuffer();
sb.append("1.").append(ResUtil.getString(R.string.permission_denied_tips_mic))
.append("\n2.").append(ResUtil.getString(R.string.permission_denied_tips_image));
String tips = sb.toString();
if (RequestPermissionPromptDialog.Companion.isNeedPrompt()
&& !PermissionHelper.INSTANCE.isAllGender(rxPermissions, perms)) {
&& !PermissionHelper.INSTANCE.isAllGranted(rxPermissions, perms)) {
new RequestPermissionPromptDialog(requireContext(), tips).show();
}
checkPermission(perms)

View File

@@ -1,5 +1,6 @@
package com.nnbc123.app.ui.login;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
@@ -20,9 +21,11 @@ import com.netease.nim.uikit.StatusBarUtil;
import com.nnbc123.app.R;
import com.nnbc123.app.base.BaseActivity;
import com.nnbc123.app.base.TitleBar;
import com.nnbc123.core.auth.AuthModel;
import com.nnbc123.core.user.UserModel;
import com.nnbc123.core.user.bean.UserInfo;
/**
* Created by zhouxiangfeng on 2017/5/13.
*/
@@ -41,8 +44,7 @@ public class ModifyInfoActivity extends BaseActivity implements View.OnClickList
private TextView tvCountDown;
public static final String CONTENT = "content";
public static final String CONTENT_NICK = "contentNick";
public static final String USER_INFO = "user_info";
private CoordinatorLayout layout_coordinator;
TextWatcher textWatcher = new TextWatcher() {
@@ -117,19 +119,17 @@ public class ModifyInfoActivity extends BaseActivity implements View.OnClickList
// 个人简介允许为空nick不能为空
if (modifyType == CONTENT_MODIFY) {
String content = etEditText.getText().toString();
Intent intent = new Intent();
intent.putExtra(CONTENT, content);
setResult(RESULT_OK, intent);
finish();
UserInfo info = new UserInfo();
info.setUid(AuthModel.get().getCurrentUid());
info.setUserDesc(content);
updateUserInfo(info);
} else if (modifyType == NICK_MODIFY) {
String contentNick = etEditTextNick.getText().toString();
if (!contentNick.trim().isEmpty()) {
Intent intent = new Intent();
intent.putExtra(CONTENT_NICK, contentNick);
setResult(RESULT_OK, intent);
finish();
UserInfo info = new UserInfo();
info.setUid(AuthModel.get().getCurrentUid());
info.setNick(contentNick);
updateUserInfo(info);
} else {
Snackbar.make(layout_coordinator, "所填内容为空!", Snackbar.LENGTH_SHORT).show();
}
@@ -189,4 +189,20 @@ public class ModifyInfoActivity extends BaseActivity implements View.OnClickList
StatusBarUtil.StatusBarLightMode(this);
}
@SuppressLint("CheckResult")
private void updateUserInfo(UserInfo userInfo){
getDialogManager().showProgressDialog(this, "请稍后");
UserModel.get().requestUpdateUserInfo(userInfo)
.compose(bindToLifecycle())
.subscribe(userInfo1 -> {
getDialogManager().dismissDialog();
Intent intent = new Intent();
intent.putExtra(USER_INFO, userInfo1);
setResult(RESULT_OK, intent);
finish();
}, throwable -> {
getDialogManager().dismissDialog();
toast(throwable.getMessage());
});
}
}

View File

@@ -52,7 +52,7 @@ public class AddUserInfoFragment extends BaseFragment
private int gender = -1;
private XRadioGroup rgGender;
private RadioButton rbMale;
private String avatarUrl = "https://image.nnbc123.cn/default_avatar.png";
private String avatarUrl = "https://yinmeng-1318633625.cos.ap-guangzhou.myqcloud.com/default_avatar.png";
public static String INVITE_USER_CODE = "";

View File

@@ -9,8 +9,11 @@ import android.text.SpannableString;
import android.text.TextUtils;
import android.view.View;
import androidx.core.util.Consumer;
import androidx.databinding.DataBindingUtil;
import com.nnbc123.app.ui.setting.invite.InviteInputConfirmDialog;
import com.nnbc123.app.ui.setting.invite.InviteInputDialog;
import com.nnbc123.core.UriProvider;
import com.nnbc123.core.auth.AuthModel;
import com.nnbc123.core.auth.event.LogoutEvent;
@@ -55,6 +58,8 @@ public class SettingActivity extends BaseActivity implements View.OnClickListene
private ActivitySettingBinding settingBinding;
private WithdrawInfo withdrawInfos;
private InviteInputDialog inviteInputDialog;
private InviteInputConfirmDialog inviteInputConfirmDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -76,6 +81,7 @@ public class SettingActivity extends BaseActivity implements View.OnClickListene
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
dismissInviteDialog();
}
@SuppressLint("CheckResult")
@@ -232,6 +238,9 @@ public class SettingActivity extends BaseActivity implements View.OnClickListene
case R.id.rly_permission:
PermissionGuideActivity.Companion.start(context);
break;
case R.id.layout_invite_code:
showInviteInputDialog();
break;
}
}
@@ -285,7 +294,11 @@ public class SettingActivity extends BaseActivity implements View.OnClickListene
} else {
settingBinding.tvPayModify.setText("修改");
}
if (cacheLoginUserInfo.isCanRefillInviteCode()) {
settingBinding.layoutInviteCode.setVisibility(View.VISIBLE);
} else {
settingBinding.layoutInviteCode.setVisibility(View.GONE);
}
}
public static class MissingPermissionException extends RuntimeException {
@@ -311,5 +324,60 @@ public class SettingActivity extends BaseActivity implements View.OnClickListene
finish();
}
public void showInviteInputDialog(){
inviteInputDialog = new InviteInputDialog(this);
inviteInputDialog.setOnNext(new Consumer<String>() {
@Override
public void accept(String s) {
showInviteInputConfirmDialog(s);
}
});
inviteInputDialog.show();
}
public void showInviteInputConfirmDialog(String code) {
inviteInputConfirmDialog = new InviteInputConfirmDialog(this, code);
inviteInputConfirmDialog.setOnNext(new Consumer<String>() {
@Override
public void accept(String s) {
inviteInputConfirmDialog.dismiss();
submitInviteCode(s);
}
});
inviteInputConfirmDialog.show();
}
private void dismissInviteDialog() {
if (inviteInputDialog != null && inviteInputDialog.isShowing()) {
inviteInputDialog.dismiss();
}
if (inviteInputConfirmDialog != null && inviteInputConfirmDialog.isShowing()) {
inviteInputConfirmDialog.dismiss();
}
}
private void submitInviteCode(String code) {
getDialogManager().showProgressDialog(this);
Disposable d = UserModel.get().refillInviteCode(code)
.compose(bindToLifecycle())
.subscribe(info -> {
getDialogManager().dismissDialog();
if (info.isSuccess()) {
dismissInviteDialog();
toast(R.string.invite_input_fill_in_success);
settingBinding.layoutInviteCode.setVisibility(View.GONE);
} else {
String message = info.getMessage();
if (message != null) {
toast(message);
}
// INVITE_CODE_DEVICE_DUPLICATED(211185,"该设备已填写过邀请码"),
// TIME_OUT_TO_REFILL_INVITE_CODE(211186,"超出补充填时间,无法补填邀请码"),
if (info.getCode() == 211185 || info.getCode() == 211186) {
settingBinding.layoutInviteCode.setVisibility(View.GONE);
dismissInviteDialog();
}
}
});
}
}

View File

@@ -0,0 +1,57 @@
package com.nnbc123.app.ui.setting.invite
import android.content.Context
import android.graphics.Typeface
import android.os.Bundle
import android.view.Gravity
import android.view.WindowManager
import android.widget.TextView
import androidx.core.util.Consumer
import com.chuhai.utils.ktx.getColorById
import com.chuhai.utils.spannable.SpannableTextBuilder
import com.nnbc123.app.R
import com.nnbc123.app.databinding.InviteInputConfirmDialogBinding
import com.nnbc123.app.ui.widget.dialog.BaseDialog
import com.nnbc123.app.utils.SpannableBuilder
import java.time.format.TextStyle
/**
* Created by Max on 2024/3/25 20:05
* Desc:
**/
class InviteInputConfirmDialog(context: Context, val code: String) :
BaseDialog(context, R.style.dialog) {
var onNext: Consumer<String>? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setCancelable(false)
val binding = InviteInputConfirmDialogBinding.inflate(layoutInflater)
setContentView(binding.root)
window?.attributes?.let {
it.width = WindowManager.LayoutParams.MATCH_PARENT
it.height = WindowManager.LayoutParams.WRAP_CONTENT
window?.attributes = it
}
SpannableTextBuilder(binding.tvTitle).appendText(context.getString(R.string.invite_input_confirm_title))
.appendText(
text = context.getString(R.string.invite_input_confirm_format).format(code),
textColor = context.getColorById(R.color.color_2B2D33)
)
.appendText("?").apply()
SpannableTextBuilder(binding.tvTips).appendText(context.getString(R.string.invite_input_tips3))
.appendText(
text = "1次",
textSize = 16,
textStyle = Typeface.BOLD,
textColor = context.getColorById(R.color.color_theme)
).apply()
binding.tvCancel.setOnClickListener {
dismiss()
}
binding.tvSave.setOnClickListener {
onNext?.accept(code)
}
}
}

View File

@@ -0,0 +1,49 @@
package com.nnbc123.app.ui.setting.invite
import android.content.Context
import android.os.Bundle
import android.view.View
import android.view.WindowManager
import androidx.core.util.Consumer
import com.chuhai.utils.ktx.setOnInputChangedListener
import com.nnbc123.app.R
import com.nnbc123.app.databinding.InviteInputDialogBinding
import com.nnbc123.app.ui.widget.dialog.BaseDialog
/**
* Created by Max on 2024/3/25 20:05
* Desc:
**/
class InviteInputDialog(context: Context) : BaseDialog(context, R.style.dialog) {
var onNext: Consumer<String>? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = InviteInputDialogBinding.inflate(layoutInflater)
setContentView(binding.root)
window?.attributes?.let {
it.width = WindowManager.LayoutParams.MATCH_PARENT
it.height = WindowManager.LayoutParams.WRAP_CONTENT
window?.attributes = it
}
binding.etCode.setOnInputChangedListener {
resetSaveBtn(binding)
true
}
binding.tvSave.setOnClickListener {
onNext?.accept(binding.etCode.text.toString().trim())
}
resetSaveBtn(binding)
}
private fun resetSaveBtn(binding: InviteInputDialogBinding) {
if (binding.etCode.length() > 0) {
binding.tvSave.isEnabled = true
binding.tvSave.setBackgroundResource(R.drawable.shape_theme_26)
} else {
binding.tvSave.isEnabled = false
binding.tvSave.setBackgroundResource(R.drawable.shape_33ffda24_26)
}
}
}

View File

@@ -30,8 +30,8 @@ public class UserGiftActivity extends BaseActivity {
MagicIndicator magicIndicator = findViewById(R.id.magic_indicator);
List<Fragment> fragmentList = new ArrayList<>(2);
//礼物类型 1:普通礼物;2:辛运礼物
fragmentList.add(UserInfoGiftFragment.newInstance(1,true));
fragmentList.add(UserInfoGiftFragment.newInstance(2,true));
fragmentList.add(UserInfoGiftFragment.newInstance(1));
fragmentList.add(UserInfoGiftFragment.newInstance(2));
UserInfoPagerAdapter pagerAdapter = new UserInfoPagerAdapter(getSupportFragmentManager(), fragmentList);
final List<String> tagList = new ArrayList<>(2);
tagList.add("普通礼物");

View File

@@ -9,6 +9,7 @@ import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -57,6 +58,7 @@ import com.nnbc123.app.ui.utils.ImageLoadUtils;
import com.nnbc123.app.ui.widget.ButtonItem;
import com.nnbc123.app.ui.widget.ObservableScrollView;
import com.nnbc123.app.ui.widget.magicindicator.ViewPagerHelper;
import com.nnbc123.app.ui.widget.magicindicator.buildins.UIUtil;
import com.nnbc123.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator;
import com.nnbc123.app.ui.widget.rollviewpager.HintView;
import com.nnbc123.app.ui.widget.rollviewpager.RollPagerView;
@@ -152,17 +154,12 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
if (userId != AuthModel.get().getCurrentUid() && !VipHelper.isHideLookUser()) {
UserModel.get().visitUserDetail(userId).subscribe();
}
viewModel.getHallData().observe(this, clanAndHallInfo -> {
if (clanAndHallInfo != null && clanAndHallInfo.getClan() != null && clanAndHallInfo.getClan().getId() != 0) {
mBinding.tvHallDesc.setVisibility(View.VISIBLE);
mBinding.tvHallDesc.setOnClickListener(v -> {
ModuleClanActivity.start(context, userId);
});
} else {
mBinding.tvHallDesc.setVisibility(View.GONE);
}
});
if (userId != AuthModel.get().getCurrentUid()) {
ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) mBinding.viewPager.getLayoutParams();
layoutParams.bottomMargin = UIUtil.dip2px(context, 60);
mBinding.viewPager.setLayoutParams(layoutParams);
}
}
@@ -170,7 +167,6 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
protected void onResume() {
super.onResume();
viewModel.getUserInfoDetail();
viewModel.getUserHallAndClan();
viewModel.getUserSkillData(viewModel.getUserId());
}

View File

@@ -47,13 +47,11 @@ public class UserInfoGiftFragment extends BaseBindingFragment<FragmentUserInfoGi
private UserGiftAdapter userGiftAdapter;
private Observer mObserver;
private Observer mUidObserver;
private boolean isDetails = false;
public static UserInfoGiftFragment newInstance(int giftType, boolean isDetails) {
public static UserInfoGiftFragment newInstance(int giftType) {
UserInfoGiftFragment userInfoGiftFragment = new UserInfoGiftFragment();
Bundle args = new Bundle();
args.putInt("giftType", giftType);
args.putBoolean("isDetails", isDetails);
userInfoGiftFragment.setArguments(args);
return userInfoGiftFragment;
}
@@ -89,9 +87,8 @@ public class UserInfoGiftFragment extends BaseBindingFragment<FragmentUserInfoGi
@Override
public void initiate() {
isDetails = requireArguments().getBoolean("isDetails", false);
mBinding.rvGift.setLayoutManager(new GridLayoutManager(mContext, 4));
userGiftAdapter = new UserGiftAdapter(mContext, userInfoItems, isDetails);
userGiftAdapter = new UserGiftAdapter(mContext, userInfoItems);
userGiftAdapter.bindToRecyclerView(mBinding.rvGift);
userGiftAdapter.setSpanSizeLookup(new BaseQuickAdapter.SpanSizeLookup() {
@Override
@@ -155,10 +152,6 @@ public class UserInfoGiftFragment extends BaseBindingFragment<FragmentUserInfoGi
for (int i = 0; i < giftWallInfoList.size(); i++) {
userInfoItem = new UserInfoItem<>(UserInfoItem.TYPE_GIFT_ITEM, giftWallInfoList.get(i));
userInfoItems.add(userInfoItem);
//非礼物详情页主需要12个就够了
if (!isDetails && i == 11){
break;
}
}
}

View File

@@ -139,10 +139,9 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
private fun findViews() {
binding.layoutAvatar.setOnClickListener(this)
binding.tvBirth.setOnClickListener(this)
binding.tvNick.setOnClickListener(this)
binding.layoutBirth.setOnClickListener(this)
binding.layoutNick.setOnClickListener(this)
binding.layoutDesc.setOnClickListener(this)
binding.ivDescMore.setOnClickListener(this)
binding.layoutPhotos.setOnClickListener(this)
binding.rlAudioRecord.setOnClickListener(this)
val mLayoutManager = LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true)
@@ -215,7 +214,7 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
checkStoragePermission()
isAvatar = true
}
R.id.tv_birth -> {
R.id.layout_birth -> {
if (mUserInfo != null) {
val year = TimeUtils.getYear(
mUserInfo?.birth ?: 0L
@@ -236,12 +235,12 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
show(supportFragmentManager, "DATEPICKER_TAG_1")
}
}
R.id.tv_nick -> UIHelper.showModifyInfoAct(
R.id.layout_nick -> UIHelper.showModifyInfoAct(
this@UserInfoModifyActivity,
Method.NICK,
ModifyInfoActivity.NICK_MODIFY
)
R.id.iv_desc_more, R.id.layout_desc -> UIHelper.showModifyInfoAct(
R.id.layout_desc -> UIHelper.showModifyInfoAct(
this@UserInfoModifyActivity,
Method.DESC,
ModifyInfoActivity.CONTENT_MODIFY
@@ -351,34 +350,13 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
checkStoragePermission()
} else if (resultCode == RESULT_OK) {
when (requestCode) {
Method.NICK -> {
Method.NICK, Method.DESC -> {
data?.let {
dialogManager.showProgressDialog(
this@UserInfoModifyActivity,
"请稍后"
)
val stringExtra = it.getStringExtra(ModifyInfoActivity.CONTENT_NICK)
binding.tvNick.text = stringExtra
val user = UserInfo()
user.uid = AuthModel.get().currentUid
user.nick = stringExtra
UserModel.get().requestUpdateUserInfo(user)
.subscribe(userInfoUpdateObserver)
}
}
Method.DESC -> {
data?.let {
dialogManager.showProgressDialog(
this@UserInfoModifyActivity,
"请稍后"
)
val stringExtra = it.getStringExtra(ModifyInfoActivity.CONTENT)
setTvDesc(stringExtra)
val user = UserInfo()
user.uid = AuthModel.get().currentUid
user.userDesc = stringExtra
UserModel.get().requestUpdateUserInfo(user)
.subscribe(userInfoUpdateObserver)
val newUserInfo =
it.getSerializableExtra(ModifyInfoActivity.USER_INFO) as? UserInfo
if (newUserInfo != null) {
loadUserInfo(newUserInfo)
}
}
}
Method.AUDIO -> {
@@ -527,10 +505,7 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
}
override fun onSuccess(info: UserInfo) {
if (info.uid == userId) {
mUserInfo = info
initData(mUserInfo)
}
loadUserInfo(info)
dialogManager.dismissDialog()
if (showAvatarAuditing) {
showAvatarAuditing = false
@@ -544,6 +519,13 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
}
}
private fun loadUserInfo(userInfo: UserInfo) {
if (userInfo.uid == userId) {
mUserInfo = userInfo
initData(mUserInfo)
}
}
private fun showAvatarAuditingDialog() {
toast(R.string.avatar_auditing)
//延迟3秒重新获取用户信息更新状态

View File

@@ -3,24 +3,24 @@ package com.nnbc123.app.ui.user.adapter;
import android.content.Context;
import android.widget.ImageView;
import android.widget.TextView;
import com.chad.library.adapter.base.BaseViewHolder;
import com.nnbc123.app.R;
import com.nnbc123.app.ui.utils.ImageLoadUtils;
import com.nnbc123.core.bean.UserInfoItem;
import com.nnbc123.core.user.bean.GiftWallInfo;
import com.nnbc123.library.utils.ResUtil;
import java.util.List;
public class UserGiftAdapter extends UserTabBaseAdapter {
private final boolean isDetails;
public UserGiftAdapter(Context context, List<UserInfoItem> data, boolean isDetails) {
public UserGiftAdapter(Context context, List<UserInfoItem> data) {
super(context, data);
addItemType(UserInfoItem.TYPE_GIFT_ITEM, R.layout.list_item_gift_wall_info);
addItemType(UserInfoItem.TYPE_GIFT_EMPTY, R.layout.layout_gift_empty);
this.isDetails = isDetails;
}
@Override
@@ -46,17 +46,57 @@ public class UserGiftAdapter extends UserTabBaseAdapter {
GiftWallInfo giftWallInfo = (GiftWallInfo) item.getData();
if (giftWallInfo != null) {
helper.setText(R.id.gift_name, giftWallInfo.getGiftName())
.setGone(R.id.gift_name, isDetails)
.setText(R.id.gift_num, "x" + giftWallInfo.getReciveCount())
.setBackgroundRes(R.id.gift_num, isDetails ? R.drawable.bg_user_gift_item_details : R.drawable.bg_user_gift_item)
.setText(R.id.gift_price, giftWallInfo.getGiftPrice() + "")
.setGone(R.id.gift_price, isDetails);
.setText(R.id.gift_price, giftWallInfo.getGiftPrice() + "");
ImageView giftPic = helper.itemView.findViewById(R.id.gift_img);
ImageLoadUtils.loadImage(mContext, giftWallInfo.getPicUrl(), giftPic);
loadLevelUI(helper, giftWallInfo);
}
}
private void loadLevelUI(BaseViewHolder helper, GiftWallInfo item) {
ImageView bgView = helper.getView(R.id.iv_bg);
TextView nameView = helper.getView(R.id.gift_name);
TextView numView = helper.getView(R.id.gift_num);
TextView priceView = helper.getView(R.id.gift_price);
int bgResId;
switch (item.getGiftLevel()) {
case 2:
bgResId = R.drawable.gift_wall_bg_level_1;
break;
case 3:
bgResId = R.drawable.gift_wall_bg_level_2;
break;
case 4:
bgResId = R.drawable.gift_wall_bg_level_3;
break;
case 5:
bgResId = R.drawable.gift_wall_bg_level_4;
break;
case 6:
bgResId = R.drawable.gift_wall_bg_level_5;
break;
case 7:
bgResId = R.drawable.gift_wall_bg_level_6;
break;
case 8:
bgResId = R.drawable.gift_wall_bg_level_7;
break;
default:
bgResId = R.drawable.gift_wall_bg_level_0;
break;
}
bgView.setImageResource(bgResId);
if (bgResId == R.drawable.gift_wall_bg_level_0) {
nameView.setTextColor(ResUtil.getColor(R.color.color_696D7A));
numView.setTextColor(ResUtil.getColor(R.color.color_7F8494));
priceView.setTextColor(ResUtil.getColor(R.color.color_7F8494));
} else {
nameView.setTextColor(ResUtil.getColor(R.color.color_FFFFFF));
numView.setTextColor(ResUtil.getColor(R.color.color_F5F6FA));
priceView.setTextColor(ResUtil.getColor(R.color.color_F5F6FA));
}
}
}

View File

@@ -1,6 +1,5 @@
package com.nnbc123.app.ui.user.view
import android.content.Intent
import android.graphics.Color
import android.graphics.drawable.GradientDrawable
import android.view.Gravity
@@ -13,6 +12,7 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.viewpager.widget.ViewPager
import com.chuhai.utils.ktx.singleClick
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.nnbc123.app.R
import com.nnbc123.app.base.BaseViewBindingFragment
@@ -21,17 +21,18 @@ import com.nnbc123.app.home.adapter.MainMagicIndicatorAdapter
import com.nnbc123.app.skill.activity.SkillHomeActivity
import com.nnbc123.app.skill.activity.SkillHomeActivity.Companion.PAGE_TYPE_CUSTOM
import com.nnbc123.app.skill.activity.SkillHomeActivity.Companion.PAGE_TYPE_SELF
import com.nnbc123.app.ui.user.UserGiftActivity
import com.nnbc123.app.ui.user.UserInfoActivity
import com.nnbc123.app.ui.user.UserInfoGiftFragment
import com.nnbc123.app.ui.user.adapter.SkillCardAdapter
import com.nnbc123.app.ui.user.adapter.UserInfoPagerAdapter
import com.nnbc123.app.ui.user.decorationsend.UserInfoSkillDecoration
import com.nnbc123.app.ui.user.viewmodel.UserInfoViewModel
import com.nnbc123.app.ui.webview.CommonWebViewActivity
import com.nnbc123.app.ui.widget.magicindicator.MagicIndicator
import com.nnbc123.app.ui.widget.magicindicator.ViewPagerHelper
import com.nnbc123.app.ui.widget.magicindicator.buildins.UIUtil
import com.nnbc123.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
import com.nnbc123.core.UriProvider
import com.nnbc123.core.auth.AuthModel
import com.nnbc123.core.user.bean.UserInfoSkillEntity
import com.nnbc123.library.annatation.ActLayoutRes
@@ -54,14 +55,15 @@ class UserInfoInfoFragment : BaseViewBindingFragment<FragmentUserinfoUserinfoBin
val magicIndicator: MagicIndicator = binding.magicIndicatorGift
val fragmentList: MutableList<Fragment> = ArrayList(2)
//礼物类型 1:普通礼物;2:辛运礼物
fragmentList.add(UserInfoGiftFragment.newInstance(1, false))
fragmentList.add(UserInfoGiftFragment.newInstance(2, false))
fragmentList.add(UserInfoGiftFragment.newInstance(1))
fragmentList.add(UserInfoGiftFragment.newInstance(2))
val pagerAdapter = UserInfoPagerAdapter(childFragmentManager, fragmentList)
val tagList: MutableList<String> = ArrayList(2)
tagList.add("普通礼物")
tagList.add("幸运礼物")
val commonNavigator = CommonNavigator(context)
commonNavigator.setTitleWrapContent(true)
commonNavigator.setTitleGravity(Gravity.CENTER)
commonNavigator.titleMargin = ScreenUtil.dip2px(7.0F)
val magicIndicatorAdapter = MainMagicIndicatorAdapter(context, tagList)
magicIndicatorAdapter.setOnItemSelectListener { position: Int, view: TextView? ->
@@ -115,9 +117,6 @@ class UserInfoInfoFragment : BaseViewBindingFragment<FragmentUserinfoUserinfoBin
}
override fun onClick(v: View) {
when (v.id) {
R.id.iv_more_gift -> startActivity(Intent(mContext, UserGiftActivity::class.java))
}
}
private fun createSkillEmptyView(): View {
@@ -150,11 +149,19 @@ class UserInfoInfoFragment : BaseViewBindingFragment<FragmentUserinfoUserinfoBin
}
override fun init() {
binding.viewPagerGift.post {
val layoutParams = binding.viewPagerGift.layoutParams
val newHeight = binding.layoutRoot.height - binding.viewPagerGift.top
layoutParams.height = newHeight
binding.viewPagerGift.layoutParams = layoutParams
}
binding.tvGiftLevel.singleClick {
CommonWebViewActivity.start(context, UriProvider.getGiftLevelRuleUrl())
}
initGiftList()
vm.userInfoSkillData.observe(this) {
initSkillCardList(it)
}
binding.ivMoreGift.setOnClickListener(this)
}
}

View File

@@ -427,6 +427,14 @@ public class ImageLoadUtils {
GlideApp.with(context.getApplicationContext()).load(url).dontAnimate().into(imageView);
}
public static void loadImage(ImageView imageView, String url, int cornerRadius) {
if (imageView == null) {
return;
}
GlideApp.with(imageView.getContext()).load(url).dontAnimate()
.transform(new CenterCrop(), new RoundedCorners(cornerRadius)).into(imageView);
}
public static void loadImage1(Context context, String url, ImageView imageView) {
GlideApp.with(context).load(url).optionalFitCenter().into(new SimpleTarget<Drawable>() {
@Override

View File

@@ -69,6 +69,15 @@ public class ImageLoadUtilsV2 {
isDontAnim, null);
}
public static void loadImage(ImageView imageView, String url, int defaultRes, int roundDp) {
if (imageView == null) {
return;
}
loadImage(imageView.getContext(), imageView, url, -1, false,
defaultRes, defaultRes, false, null,
new CenterCrop(), new RoundedCorners(UIUtil.dip2px(imageView.getContext(), roundDp)));
}
public static void loadImage(ImageView imageView, String url,
int size, boolean isSquare,
int errorId, int placeholderId,

View File

@@ -1,5 +1,6 @@
package com.nnbc123.app.ui.webview;
import android.Manifest;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity;
@@ -13,6 +14,7 @@ import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
import android.view.View;
import android.webkit.PermissionRequest;
import android.webkit.SslErrorHandler;
import android.webkit.ValueCallback;
import android.webkit.WebBackForwardList;
@@ -31,6 +33,9 @@ import com.google.gson.Gson;
import com.netease.nim.uikit.StatusBarUtil;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.netease.nim.uikit.common.util.string.StringUtil;
import com.nnbc123.app.common.permission.PermissionHelper;
import com.nnbc123.app.ui.widget.dialog.RequestPermissionPromptDialog;
import com.nnbc123.library.utils.ResUtil;
import com.orhanobut.logger.Logger;
import com.trello.rxlifecycle3.android.ActivityEvent;
import com.nnbc123.app.R;
@@ -221,6 +226,8 @@ public class CommonWebViewActivity extends BaseActivity implements ShareDialog.O
jsInterface.setPosition(mPosition);
webView.addJavascriptInterface(jsInterface, "androidJsObj");
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
// 允许自动播放
webView.getSettings().setMediaPlaybackRequiresUserGesture(false);
webView.setWebViewClient(new WebViewClient() {
@@ -312,6 +319,35 @@ public class CommonWebViewActivity extends BaseActivity implements ShareDialog.O
//获取webviewtitle作为titlebar的title
wvcc = new WebChromeClient() {
@Override
public void onPermissionRequest(PermissionRequest request) {
String tips = null;
String[] permissions = null;
for (String item : request.getResources()) {
if (item != null && item.equals(PermissionRequest.RESOURCE_VIDEO_CAPTURE)) {
tips = ResUtil.getString(R.string.permission_denied_tips_camera);
permissions = new String[]{Manifest.permission.CAMERA,
Manifest.permission.RECORD_AUDIO};
}
}
if (permissions == null) {
request.grant(request.getResources());
return;
}
if (RequestPermissionPromptDialog.Companion.isNeedPrompt()
&& !PermissionHelper.INSTANCE.isAllGranted(rxPermissions, permissions)) {
new RequestPermissionPromptDialog(context, tips).show();
}
checkPermission(isGranted -> {
RequestPermissionPromptDialog.Companion.dismissCurrentDialog();
if (isGranted) {
request.grant(request.getResources());
} else {
request.deny();
}
}, permissions);
}
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);

View File

@@ -0,0 +1,98 @@
package com.nnbc123.app.ui.widget
import android.content.Context
import android.graphics.Color
import android.util.AttributeSet
import android.view.ViewGroup
import androidx.cardview.widget.CardView
import androidx.core.util.Consumer
import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView
import com.github.mmin18.widget.RealtimeBlurView
import com.nnbc123.app.R
import com.nnbc123.core.gift.bean.GiftInfo
import com.nnbc123.core.gift.bean.GiftType
import com.nnbc123.core.gift.bean.UnLockBaseGiftInfo
import com.nnbc123.core.gift.bean.UnlockItem
/**
* Created by Max on 2024/1/26 17:16
* Desc:
**/
class GIftDialogUnlockPanel : CardView {
private var recyclerView: RecyclerView? = null
private var adapter: GiftUnLockInfoAdapter = GiftUnLockInfoAdapter(emptyList())
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
context,
attrs,
defStyleAttr
)
init {
inflate(context, R.layout.gift_dialog_unlock_panel, this)
recyclerView = findViewById(R.id.recyclerView)
recyclerView?.adapter = adapter
}
fun update(currentGift: GiftInfo?) {
if (currentGift == null || currentGift.giftType != GiftType.GIFT_TYPE_UNLOCK) {
this.isVisible = false
return
}
val list = ArrayList<UnlockItem>()
val baseGift = currentGift.baseGift
val childGift = currentGift.unlockGiftList
if (baseGift != null) {
list.add(UnLockBaseGiftInfo(baseGift))
}
if (!childGift.isNullOrEmpty()) {
list.addAll(childGift)
}
if (list.isEmpty()) {
this.isVisible = false
return
}
this.isVisible = true
checkAddBlurView()
val index = list.indexOfFirst {
it.getGiftData()?.giftId == currentGift.giftId
}
adapter.selectItemId = currentGift.giftId
adapter.setNewData(baseGift, list)
if (index >= 0) {
recyclerView?.smoothScrollToPosition(index)
}
}
fun refreshState() {
adapter.notifyItemRangeChanged(0, adapter.itemCount, true)
}
fun setOnItemClickListener(listener: Consumer<Int>) {
adapter.setOnItemClickListener { adapter, view, position ->
val item = adapter.getItem(position) as? UnlockItem
val giftId = item?.getGiftData()?.giftId
if (giftId != null) {
listener.accept(giftId)
}
}
}
private fun checkAddBlurView() {
if (getChildAt(0) is RealtimeBlurView) {
return
}
val blurView = RealtimeBlurView(context, null)
blurView.setBlurRadius(25f)
blurView.setDownsampleFactor(4f)
blurView.setOverlayColor(Color.parseColor("#e0161722"))
blurView.layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
)
addView(blurView, 0)
}
}

View File

@@ -31,6 +31,7 @@ import androidx.appcompat.widget.AppCompatTextView;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.constraintlayout.widget.Group;
import androidx.core.content.ContextCompat;
import androidx.core.util.Consumer;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -217,6 +218,9 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
private AppCompatTextView tvNum;
private SuperTextView tvPrivilegeGive;
private Group groupPrivilege;
private GIftDialogUnlockPanel unLockPanel;
private ImageView dressUpBannerView;
private SparseArray<RecyclerViewNoViewpagerScroll> cacheItemView = new SparseArray<>();
private int mPrivilegePosition = 0;
@@ -224,6 +228,9 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
private BaseQuickAdapter<GiftPrivilegeInfo, BaseViewHolder> baseQuickAdapter;
// 需要重新加载背包礼物
private boolean needReloadKnapGift;
public GiftDialog(Context context, int giftId) {
this(context, 0, true, false, true, giftId);
}
@@ -423,6 +430,9 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
ivDrawGiftRemoveLast = findViewById(R.id.iv_draw_gift_remove_last);
ivDrawGiftRemoveAll = findViewById(R.id.iv_draw_gift_remove_all);
ivDrawGiftClose = findViewById(R.id.iv_draw_gift_close);
unLockPanel = findViewById(R.id.panel_unlock);
dressUpBannerView = findViewById(R.id.iv_dress_up_banner);
dressUpBannerView.setOnClickListener(this);
ivDrawGiftClose.setOnClickListener(this);
ivDrawGiftRemoveLast.setOnClickListener(this);
ivDrawGiftRemoveAll.setOnClickListener(this);
@@ -432,8 +442,8 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
giftNumLayout = findViewById(R.id.gift_number_layout);
giftNumLayout.setOnClickListener(this);
List<GiftTab> tabInfoList = new ArrayList<>();
tabInfoList.add(new GiftTab(GiftIndicator.TYPE_NORMAL, "礼物", "礼物"));
tabInfoList.add(new GiftTab(GiftIndicator.TYPE_LUCKY, "幸运", "幸运"));
tabInfoList.add(new GiftTab(GiftIndicator.TYPE_NORMAL, "普通", "普通"));
tabInfoList.add(new GiftTab(GiftIndicator.TYPE_INTEREST, "趣味", "趣味", true));
tabInfoList.add(new GiftTab(GiftIndicator.TYPE_NOBLE, "贵族", "贵族"));
tabInfoList.add(new GiftTab(GiftIndicator.TYPE_WEEK, "星座礼物", "星座礼物"));
tabInfoList.add(new GiftTab(GiftIndicator.TYPE_SING_ROOM, "人气", "人气"));
@@ -446,8 +456,8 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
giftIndicator.initTab(
tabInfoList,
true,
context.getResources().getColor(R.color.color_bdbfd0),
context.getResources().getColor(R.color.color_ffe710)
context.getResources().getColor(R.color.color_CED1DB),
context.getResources().getColor(R.color.color_FFDA24)
);
//noinspection ResultOfMethodCallIgnored
giftIndicator.addClick()
@@ -456,15 +466,15 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
.subscribe(integer -> {
updateGiftView(integer);
//福袋礼物有定时更新逻辑,每次点击都需要刷新福袋礼物信息
if (integer == GiftIndicator.TYPE_LUCKY) {
if (integer == GiftIndicator.TYPE_INTEREST) {
reloadData(false);
} else if (integer == GiftIndicator.TYPE_KNAP && needReloadKnapGift) {
reloadData(false);
}
});
if (isInRoom) {
giftIndicator.showPosition(GiftIndicator.TYPE_LUCKY);
} else {
giftIndicator.hidePosition(GiftIndicator.TYPE_LUCKY);
giftIndicator.hidePosition(GiftIndicator.TYPE_DRAW_GIFT);
llTabType.setVisibility(View.GONE);
lineTabType.setVisibility(View.GONE);
@@ -523,15 +533,17 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
case GiftType.GIFT_TYPE_NORMAL:
indicatorType = GiftIndicator.TYPE_NORMAL;
break;
case GiftType.GIFT_TYPE_LUCKY:
indicatorType = GiftIndicator.TYPE_LUCKY;
break;
case GiftType.GIFT_TYPE_VIP:
indicatorType = GiftIndicator.TYPE_NOBLE;
break;
case GiftType.GIFT_TYPE_WEEK_STAR:
indicatorType = GiftIndicator.TYPE_WEEK;
break;
case GiftType.GIFT_TYPE_UNLOCK:
case GiftType.GIFT_TYPE_LUCKY:
case GiftType.GIFT_TYPE_DRESS_UP:
indicatorType = GiftIndicator.TYPE_INTEREST;
break;
}
}
showGiftTab(indicatorType, giftInfo);
@@ -590,6 +602,15 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
if (DemoCache.readNewGiftTypeTipIndicator()) {
viewNewFeature.setVisibility(View.VISIBLE);
}
unLockPanel.setOnItemClickListener(new Consumer<Integer>() {
@Override
public void accept(Integer integer) {
if (integer == null) {
return;
}
trySelectGift(integer);
}
});
}
private void initVipPager() {
@@ -621,6 +642,33 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
pagerViewVip.setPlayDelay(3000);
}
private boolean trySelectGift(int giftId) {
if (pagerList == null) {
return false;
}
int currentPage = gridView.getCurrentItem();
if (currentPage < 0 || currentPage >= pagerList.size()) {
return false;
}
List<GiftInfoVm> list = pagerList.get(currentPage);
if (list == null) {
return false;
}
for (int i = 0; i < list.size(); i++) {
GiftInfoVm item = list.get(i);
GiftInfo itemInfo = item.data();
if (itemInfo != null && itemInfo.getGiftId() == giftId) {
onGiftClick(item);
RecyclerView recyclerView = cacheItemView.get(currentPage);
if (recyclerView != null) {
recyclerView.smoothScrollToPosition(i);
}
return true;
}
}
return false;
}
private void showLoadingAnimation() {
Animation rotateAnimation = new RotateAnimation(0, 360,
Animation.RELATIVE_TO_SELF, 0.5f,
@@ -689,8 +737,6 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
currentGiftInfoList = nobleGiftInfos;
} else if (position == GiftIndicator.TYPE_NORMAL) {
currentGiftInfoList = getNormalGiftInfos();
} else if (position == GiftIndicator.TYPE_LUCKY) {
currentGiftInfoList = getLuckyGiftInfos();
} else if (position == GiftIndicator.TYPE_WEEK) {
currentGiftInfoList = getWeekStarGiftInfos();
} else if (position == GiftIndicator.TYPE_DRAW_GIFT) {
@@ -699,6 +745,8 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
currentGiftInfoList = getSingleRoomGiftInfos();
} else if (position == GiftIndicator.TYPE_PENALTY) {
currentGiftInfoList = getPenaltyGiftInfos();
} else if (position == GiftIndicator.TYPE_INTEREST) {
currentGiftInfoList = getInterestGiftInfos();
}
//是否背包礼物
final boolean isKnap = (position == GiftIndicator.TYPE_KNAP);
@@ -755,7 +803,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
} else if (isKnap) {
giftIndicator.getBackpackValueView().setVisibility(View.VISIBLE);
showEmptyView();
} else if (position == GiftIndicator.TYPE_LUCKY ||
} else if (position == GiftIndicator.TYPE_INTEREST ||
position == GiftIndicator.TYPE_WEEK ||
position == GiftIndicator.TYPE_DRAW_GIFT ||
position == GiftIndicator.TYPE_SING_ROOM ||
@@ -824,6 +872,8 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
updateWeekStarDesc();
isShowDrawGiftModel = false;
updateDrawGift();
updateUnLockTips();
updateDressUpTips();
}
/**
@@ -877,6 +927,24 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
privilegeView.setAdapter(baseQuickAdapter);
}
private void updateUnLockTips() {
unLockPanel.update(currentGiftInfo);
}
private void updateDressUpTips() {
if (currentGiftInfo == null || currentGiftInfo.getGiftType() != GiftType.GIFT_TYPE_DRESS_UP) {
dressUpBannerView.setVisibility(View.GONE);
return;
}
String banner = currentGiftInfo.getBannerUrl();
if (banner == null || banner.length() == 0) {
dressUpBannerView.setVisibility(View.GONE);
return;
}
dressUpBannerView.setVisibility(View.VISIBLE);
ImageLoadUtils.loadImage(dressUpBannerView, banner, UIUtil.dip2px(context, 8));
}
private void updateLuckyBagIntro() {
if (luckyMsgDisposable != null) luckyMsgDisposable.dispose();
if (currentGiftInfo == null || currentGiftInfo.getGiftType() != GiftType.GIFT_TYPE_LUCKY) {
@@ -908,11 +976,14 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
.flatMap(luckyBagNoticeInfos -> Observable.intervalRange(0, Integer.MAX_VALUE, 0, 5, TimeUnit.SECONDS))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(aLong -> {
int index = aLong.intValue() % luckyMsgAdapter.getItemCount();
if (index == 0) {
rvLuckyMsg.scrollToPosition(index);
} else {
rvLuckyMsg.smoothScrollToPosition(index);
int count = luckyMsgAdapter.getItemCount();
if (count > 0) {
int index = aLong.intValue() % count;
if (index == 0) {
rvLuckyMsg.scrollToPosition(index);
} else {
rvLuckyMsg.smoothScrollToPosition(index);
}
}
});
}
@@ -1130,7 +1201,6 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
layoutEmpty.setVisibility(View.GONE);
gridView.setVisibility(View.VISIBLE);
SparseArray<RecyclerViewNoViewpagerScroll> cacheItemView = new SparseArray<>();
lastSelectedItem = pagerList.get(defaultSelectPage).get(defaultSelectItem);
setGoldOrRadishText(lastSelectedItem);
gridView.setAdapter(new PagerAdapter() {
@@ -1166,22 +1236,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
giftAdapter.addData(pagerList.get(pagePos));
giftAdapter.setOnItemClickListener(item -> {
if (item.data.isSendMsg()) {
etSendMessage.setVisibility(View.VISIBLE);
} else {
etSendMessage.setVisibility(View.GONE);
}
if (lastSelectedItem != null) {
lastSelectedItem.isSelect.set(false);
}
item.isSelect.set(true);
lastSelectedItem = item;
currentGiftInfo = item.data;
setGoldOrRadishText(lastSelectedItem);
updateLuckyBagIntro();
updateWeekStarDesc();
isShowDrawGiftModel = true;
updateDrawGift();
onGiftClick(item);
});
container.addView(recyclerView);
return recyclerView;
@@ -1198,6 +1253,27 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
gridView.setCurrentItem(defaultSelectPage);
}
private void onGiftClick(GiftInfoVm item) {
if (item.data.isSendMsg()) {
etSendMessage.setVisibility(View.VISIBLE);
} else {
etSendMessage.setVisibility(View.GONE);
}
if (lastSelectedItem != null) {
lastSelectedItem.isSelect.set(false);
}
item.isSelect.set(true);
lastSelectedItem = item;
currentGiftInfo = item.data;
setGoldOrRadishText(lastSelectedItem);
updateLuckyBagIntro();
updateWeekStarDesc();
isShowDrawGiftModel = true;
updateDrawGift();
updateUnLockTips();
updateDressUpTips();
}
private List<GiftInfo> loadGiftInfoList() {
List<GiftInfo> giftInfos;
String roomUid = null;
@@ -1237,12 +1313,6 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
GiftType.GIFT_TYPE_WEEK_STAR);
}
private List<GiftInfo> getLuckyGiftInfos() {
return GiftModel.get().getGiftInfosByType(
String.valueOf(AvRoomDataManager.get().getRoomUid()),
GiftType.GIFT_TYPE_LUCKY);
}
private List<GiftInfo> getDrawGiftInfos() {
return GiftModel.get().getGiftInfosByType(
String.valueOf(AvRoomDataManager.get().getRoomUid()),
@@ -1261,6 +1331,12 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
GiftType.GIFT_TYPE_PENALTY);
}
private List<GiftInfo> getInterestGiftInfos() {
return GiftModel.get().getGiftInfosByType(
String.valueOf(AvRoomDataManager.get().getRoomUid()),
GiftType.GIFT_TYPE_INTEREST);
}
private List<GiftInfo> getNobleGiftInfos() {
return GiftModel.get().getGiftInfoList(GiftType.GIFT_TYPE_VIP);
}
@@ -1293,6 +1369,14 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.iv_dress_up_banner:
if (currentGiftInfo != null) {
String skipUrl = currentGiftInfo.getBannerSkipUrl();
if (skipUrl != null && skipUrl.length() > 0) {
CommonWebViewActivity.start(context, skipUrl);
}
}
break;
case R.id.ll_gold:
StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_GIFT_PANEL_TO_RECHARGE, "礼物面板_去充值:" + GIFT_DIALOG_FROM);
ChargeDialog.start(getContext());
@@ -1326,10 +1410,11 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
micMemberInfo.setAccount(String.valueOf(uid));
targetUids.add(micMemberInfo);
Log.e(TAG, "onClick: indicator type: " + giftIndicator.getCurrrentType());
int number = giftNumber == -1 ? finalCurrentGiftInfo.getCount() : giftNumber;
giftDialogBtnClickListener.onSendGiftBtnClick(
finalCurrentGiftInfo,
targetUids,
giftNumber == -1 ? finalCurrentGiftInfo.getCount() : giftNumber,
number,
giftMessage,
giftIndicator.getCurrrentType() == GiftIndicator.TYPE_KNAP,
false,
@@ -1337,7 +1422,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
new SenGiftCallback() {
@Override
public void onSuccess() {
onSendGiftSuccess(finalCurrentGiftInfo);
onSendGiftSuccess(finalCurrentGiftInfo, number, targetUids);
}
@Override
@@ -1356,10 +1441,11 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
micMemberInfo.setAccount(String.valueOf(uid));
targetUids.add(micMemberInfo);
Log.e(TAG, "onClick: indicator type: " + giftIndicator.getCurrrentType());
int number = giftNumber == -1 ? finalCurrentGiftInfo.getCount() : giftNumber;
giftDialogBtnClickListener.onSendGiftBtnClick(
finalCurrentGiftInfo,
targetUids,
giftNumber == -1 ? finalCurrentGiftInfo.getCount() : giftNumber,
number,
giftMessage,
giftIndicator.getCurrrentType() == GiftIndicator.TYPE_KNAP,
false,
@@ -1367,7 +1453,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
new SenGiftCallback() {
@Override
public void onSuccess() {
onSendGiftSuccess(finalCurrentGiftInfo);
onSendGiftSuccess(finalCurrentGiftInfo, number, targetUids);
}
@Override
@@ -1388,10 +1474,11 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
sendGiftButton.setEnabled(true);
return;
}
int number = giftNumber == -1 ? finalCurrentGiftInfo.getCount() : giftNumber;
giftDialogBtnClickListener.onSendGiftBtnClick(
finalCurrentGiftInfo,
selectedMembers,
giftNumber == -1 ? finalCurrentGiftInfo.getCount() : giftNumber,
number,
giftMessage,
giftIndicator.getCurrrentType() == GiftIndicator.TYPE_KNAP,
avatarListAdapter.getSelectType() == GiftAvatarAdapter.SELECT_TYPE_WHOLE_MIC,
@@ -1399,7 +1486,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
new SenGiftCallback() {
@Override
public void onSuccess() {
onSendGiftSuccess(finalCurrentGiftInfo);
onSendGiftSuccess(finalCurrentGiftInfo, number, selectedMembers);
}
@Override
@@ -1511,11 +1598,11 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
tvTabInteraction.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
giftIndicator.hidePosition(GiftIndicator.TYPE_DRAW_GIFT);
giftIndicator.hidePosition(GiftIndicator.TYPE_PENALTY);
giftIndicator.showPosition(GiftIndicator.TYPE_LUCKY);
giftIndicator.showPosition(GiftIndicator.TYPE_NOBLE);
giftIndicator.showPosition(GiftIndicator.TYPE_WEEK);
giftIndicator.showPosition(GiftIndicator.TYPE_NORMAL);
giftIndicator.showPosition(GiftIndicator.TYPE_PRIVILEGE);
giftIndicator.showPosition(GiftIndicator.TYPE_INTEREST);
if (AvRoomDataManager.get().isSingleRoom()) {
giftIndicator.showPosition(GiftIndicator.TYPE_SING_ROOM);
} else {
@@ -1539,18 +1626,18 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
giftIndicator.showPosition(GiftIndicator.TYPE_DRAW_GIFT);
giftIndicator.showPosition(GiftIndicator.TYPE_PENALTY);
giftIndicator.hidePosition(GiftIndicator.TYPE_LUCKY);
giftIndicator.hidePosition(GiftIndicator.TYPE_NOBLE);
giftIndicator.hidePosition(GiftIndicator.TYPE_WEEK);
giftIndicator.hidePosition(GiftIndicator.TYPE_NORMAL);
giftIndicator.hidePosition(GiftIndicator.TYPE_SING_ROOM);
giftIndicator.hidePosition(GiftIndicator.TYPE_PRIVILEGE);
giftIndicator.hidePosition(GiftIndicator.TYPE_INTEREST);
giftIndicator.setPosition(GiftIndicator.TYPE_DRAW_GIFT);
updateGiftView(giftIndicator.getCurrrentType());
}
private void onSendGiftSuccess(GiftInfo giftInfo) {
private void onSendGiftSuccess(GiftInfo giftInfo, int giftNumber, List<MicMemberInfo> receiveUsers) {
if (sendGiftButton == null) return;
sendGiftButton.setText("赠送");
sendGiftButton.setEnabled(true);
@@ -1558,6 +1645,74 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
SingleToastUtil.showToast("发送涂鸦礼物:" + giftInfo.getGiftName() + "成功");
clearDrawGift();
dismiss();
} else if (giftInfo.getGiftType() == GiftType.GIFT_TYPE_UNLOCK) {
int totalNumber = 0;
if (receiveUsers != null) {
totalNumber = receiveUsers.size() * giftNumber;
}
updateUnlockStateSendSuccess(giftInfo, totalNumber);
}
}
// 更新本地解锁礼物的数据状态(解锁状态、送出的数量)
private void updateUnlockStateSendSuccess(GiftInfo giftInfo, int totalNumber) {
if (giftInfo.getGiftType() != GiftType.GIFT_TYPE_UNLOCK) {
return;
}
GiftInfo baseGift = giftInfo.getBaseGift();
if (baseGift == null || baseGift.getGiftId() != giftInfo.getGiftId()) {
// 不是基础礼物
return;
}
// 先更新数据
updateUnlockGiftDataState(giftInfo.getGiftId(), totalNumber);
// 后更新UI
updateUnlockGiftUiState(giftInfo.getGiftId());
// 更新提示面板UI
unLockPanel.refreshState();
}
// 更新解锁礼物数据状态
private void updateUnlockGiftDataState(int giftId, int number) {
//(趣味、背包)都有可能有解锁礼物
ArrayList<GiftInfo> list = new ArrayList<GiftInfo>();
List<GiftInfo> panelGiftList = GiftModel.get().getGiftInfoList(GiftType.GIFT_TYPE_UNLOCK);
List<GiftInfo> knapList = GiftModel.get().getKnapList();
if (panelGiftList != null) {
list.addAll(panelGiftList);
}
if (knapList != null) {
list.addAll(knapList);
}
if (list.isEmpty()) {
return;
}
for (GiftInfo item : list) {
if (item.getGiftType() != GiftType.GIFT_TYPE_UNLOCK) {
continue;
}
if (item.getBaseGift() == null || item.getBaseGift().getGiftId() != giftId) {
continue;
}
item.updateUnlockProgress(number);
}
}
// 更新解锁礼物Ui状态
private void updateUnlockGiftUiState(int giftId) {
if (giftIndicator.getCurrrentType() != GiftIndicator.TYPE_INTEREST) {
return;
}
if (ListUtils.isListEmpty(pagerList)) {
return;
}
for (List<GiftInfoVm> page : pagerList) {
for (GiftInfoVm item : page) {
GiftInfo itemBaseGift = item.data.getBaseGift();
if (itemBaseGift != null && itemBaseGift.getGiftId() == giftId) {
item.refreshUnlockState();
}
}
}
}
@@ -1566,9 +1721,9 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
int currentType = giftIndicator.getCurrrentType();
switch (currentType) {
case GiftIndicator.TYPE_NORMAL:
case GiftIndicator.TYPE_LUCKY:
case GiftIndicator.TYPE_NOBLE:
case GiftIndicator.TYPE_WEEK:
case GiftIndicator.TYPE_INTEREST:
String roomUid = null;
if (isInRoom) {
if (AvRoomDataManager.get().getRoomUid() > 0) {
@@ -1598,6 +1753,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
.requestKnapGiftInfos()
.subscribe((listServiceResult, throwable) -> {
if (throwable == null) {
needReloadKnapGift = false;
if (currentType == giftIndicator.getCurrrentType()) {
updateGiftView(giftIndicator.getCurrrentType());
}
@@ -1695,9 +1851,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
@Subscribe(threadMode = ThreadMode.MAIN)
public void onRecieveGiftKnapMsg(UpdateKnapEvent event) {
//刷新背包礼物
compositeDisposable.add(GiftModel.get().requestKnapGiftInfos()
.compose(RxHelper.handleSchedulers())
.subscribe());
needReloadKnapGift = true;
if (giftIndicator.getCurrrentType() != GiftIndicator.TYPE_KNAP) {
return;
}

View File

@@ -0,0 +1,118 @@
package com.nnbc123.app.ui.widget
import android.view.View
import android.widget.ImageView
import android.widget.ProgressBar
import android.widget.TextView
import androidx.core.view.isVisible
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.chuhai.utils.ktx.getColorById
import com.chuhai.utils.spannable.SpannableTextBuilder
import com.nnbc123.app.R
import com.nnbc123.app.ui.utils.load
import com.nnbc123.core.gift.bean.GiftInfo
import com.nnbc123.core.gift.bean.UnLockGiftInfo
import com.nnbc123.core.gift.bean.UnlockItem
/**
* Created by Max on 2024/1/25 19:41
* Desc:
**/
class GiftUnLockInfoAdapter(list: List<UnlockItem>) :
BaseMultiItemQuickAdapter<UnlockItem, BaseViewHolder>(list) {
var selectItemId: Int = -1
private var baseGiftName: String? = null
init {
addItemType(UnlockItem.ITEM_TYPE_BASE, R.layout.gift_dialog_lock_item_basics)
addItemType(UnlockItem.ITEM_TYPE_CHILD, R.layout.gift_dialog_lock_item_child)
}
override fun convertPayloads(
helper: BaseViewHolder,
item: UnlockItem?,
payloads: MutableList<Any>
) {
super.convertPayloads(helper, item, payloads)
if (item?.itemType == UnlockItem.ITEM_TYPE_CHILD) {
convertChildState(helper, item)
}
}
override fun convert(helper: BaseViewHolder, item: UnlockItem?) {
val giftInfo = item?.getGiftData()
when (item?.itemType) {
UnlockItem.ITEM_TYPE_BASE -> {
if (giftInfo?.giftId == selectItemId) {
helper.setBackgroundRes(
R.id.layout_root,
R.drawable.gift_dialog_bg_lock_item_selected
)
} else {
helper.setBackgroundRes(R.id.layout_root, R.drawable.shape_14ffffff_4dp)
}
helper.getView<ImageView>(R.id.iv_cover).load(giftInfo?.giftUrl)
helper.setText(R.id.tv_name, giftInfo?.giftName ?: "")
helper.setText(R.id.tv_amount, giftInfo?.goldPrice?.toString() ?: "")
}
UnlockItem.ITEM_TYPE_CHILD -> {
if (giftInfo?.giftId == selectItemId) {
helper.setBackgroundRes(
R.id.layout_root,
R.drawable.gift_dialog_bg_lock_item_selected
)
} else {
helper.setBackgroundRes(R.id.layout_root, R.drawable.shape_14ffffff_4dp)
}
helper.getView<ImageView>(R.id.iv_cover).load(giftInfo?.giftUrl)
convertChildState(helper, item)
}
}
}
private fun convertChildState(helper: BaseViewHolder, item: UnlockItem?) {
var unlockItem: UnLockGiftInfo? = null
if (item is UnLockGiftInfo) {
unlockItem = item
}
val total = unlockItem?.condition ?: 0
val progress = (unlockItem?.process ?: 0).coerceAtMost(total)
val progressBar = helper.getView<ProgressBar>(R.id.progress_bar)
progressBar.max = total
progressBar.progress = progress
helper.setText(R.id.tv_count, "$progress/$total")
val lockIconView = helper.getView<View>(R.id.iv_lock)
val alpha: Float
val lockText: String
if (unlockItem?.unlocked == true) {
alpha = 1f
lockIconView.isVisible = false
lockText = "已解锁"
} else {
alpha = 0.5f
lockIconView.isVisible = true
lockText = "可解锁"
}
val nameView = helper.getView<TextView>(R.id.tv_name)
SpannableTextBuilder(nameView)
.appendText("送出")
.appendText(
" ${total}",
textColor = nameView.context.getColorById(R.color.color_FFDA24)
)
.appendText("${baseGiftName ?: ""}${lockText}").apply()
helper.setAlpha(R.id.tv_name, alpha)
helper.setAlpha(R.id.iv_cover, alpha)
helper.setAlpha(R.id.tv_count, alpha)
helper.setAlpha(R.id.progress_bar, alpha)
}
fun setNewData(baseGiftInfo: GiftInfo?, data: MutableList<UnlockItem>?) {
this.baseGiftName = baseGiftInfo?.giftName
super.setNewData(data)
}
}

View File

@@ -0,0 +1,105 @@
package com.nnbc123.app.ui.widget.dialog
import android.content.Context
import android.os.Bundle
import android.view.Gravity
import android.view.LayoutInflater
import android.view.Window
import android.view.WindowManager
import androidx.databinding.DataBindingUtil
import com.chuhai.utils.ktx.singleClick
import com.nnbc123.app.R
import com.nnbc123.app.avroom.activity.AVRoomActivity
import com.nnbc123.app.databinding.AllServiceGiftGoRoomTipsDialogBinding
import com.nnbc123.app.public_chat_hall.activity.PublicChatHallHomeActivity
import com.nnbc123.core.initial.InitialModel
import com.nnbc123.library.common.util.SPUtils
import com.nnbc123.library.utils.JavaUtil
/**
* Created by Max on 2023/10/30 10:29
* Desc:跳转房间提示
**/
class AllServiceGiftGoRoomTipsDialog(
context: Context,
private val roomName: String,
private val roomId: Long
) :
BaseDialog(context, R.style.dialog) {
private var binding: AllServiceGiftGoRoomTipsDialogBinding? = null
companion object {
/**
* 是否需要提示前往房间
*/
fun isNeedTips(): Boolean {
return !SPUtils.getBoolean("all_service_gift_go_room_no_tips", false)
}
/**
* 忽略提示/不在提示
*/
private fun ignoreTips() {
SPUtils.putBoolean("all_service_gift_go_room_no_tips", true)
}
}
private var isCheck: Boolean = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setCancelable(false)
requestWindowFeature(Window.FEATURE_NO_TITLE)
val inflate =
LayoutInflater.from(context)
.inflate(R.layout.all_service_gift_go_room_tips_dialog, null)
setContentView(inflate.rootView)
binding = DataBindingUtil.bind(inflate)
binding?.tvRoomName?.text = roomName
binding?.ivCheckbox?.setOnClickListener {
updateCheckbox(!isCheck)
}
binding?.tvTips?.setOnClickListener {
updateCheckbox(!isCheck)
}
binding?.tvGo?.singleClick {
if (isCheck) {
ignoreTips()
}
if (roomId == JavaUtil.str2long(InitialModel.get().publicChatHallUid)) {
PublicChatHallHomeActivity.openPublicChatHallPage(context)
} else {
AVRoomActivity.start(context, roomId)
}
dismiss()
}
binding?.tvCancel?.singleClick {
if (isCheck) {
ignoreTips()
}
dismiss()
}
updateCheckbox(false)
}
override fun onStart() {
super.onStart()
this.window?.attributes?.let {
it.width = WindowManager.LayoutParams.MATCH_PARENT
it.height = WindowManager.LayoutParams.WRAP_CONTENT
it.gravity = Gravity.CENTER
window?.attributes = it
}
}
private fun updateCheckbox(isCheck: Boolean) {
this.isCheck = isCheck
if (isCheck) {
binding?.ivCheckbox?.setImageResource(R.drawable.base_ic_checkbox_selected)
} else {
binding?.ivCheckbox?.setImageResource(R.drawable.base_ic_checkbox_unselected)
}
}
}

View File

@@ -1,77 +0,0 @@
package com.nnbc123.app.ui.widget.dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Point;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import androidx.databinding.DataBindingUtil;
import com.nnbc123.core.manager.AvRoomDataManager;
import com.nnbc123.core.noble.AllServiceGiftProtocol;
import com.nnbc123.app.R;
import com.nnbc123.app.avroom.activity.AVRoomActivity;
import com.nnbc123.app.databinding.DialogGiftAllServiceCeremonyBinding;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
/**
* Created by MadisonRong on 11/05/2018.
*/
public class AllServiceGiftLevelCeremonyDialog extends AllServiceGiftDialog {
private DialogGiftAllServiceCeremonyBinding binding;
public AllServiceGiftLevelCeremonyDialog(Context context, AllServiceGiftProtocol.DataBean dataBean) {
super(context, R.style.FullScreenDialog, dataBean);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
View inflate = LayoutInflater.from(getContext()).inflate(R.layout.dialog_gift_all_service_ceremony, null);
setContentView(inflate.getRootView());
setCancelable(true);
setCanceledOnTouchOutside(true);
binding = DataBindingUtil.bind(inflate);
Window window = getWindow();
Point point = new Point();
if (window != null) {
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
WindowManager.LayoutParams windowParams = window.getAttributes();
windowParams.width = WindowManager.LayoutParams.MATCH_PARENT;
windowParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
windowParams.dimAmount = 0.0f;
windowParams.gravity = Gravity.TOP;
windowParams.x = 0;
windowParams.y = 0;
window.addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
window.setAttributes(windowParams);
window.setWindowAnimations(R.style.anim_fade);
window.getWindowManager().getDefaultDisplay().getSize(point);
}
if (dataBean != null) {
// 设置定时器
Observable.timer((long) dataBean.getNotifyStaySecond(), TimeUnit.SECONDS)
.subscribe(aLong -> {
dismiss();
});
binding.setGiftBean(dataBean);
binding.tvGoRoom.setVisibility(dataBean.getRoomUid() == 0
|| (AvRoomDataManager.get().mCurrentRoomInfo != null && dataBean.getRoomUid() == AvRoomDataManager.get().mCurrentRoomInfo.getUid())
? View.GONE : View.VISIBLE);
binding.tvGoRoom.setOnClickListener(view -> AVRoomActivity.start(getContext(), dataBean.getRoomUid()));
}
}
}

View File

@@ -0,0 +1,191 @@
package com.nnbc123.app.ui.widget.dialog
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.view.Gravity
import android.view.LayoutInflater
import android.view.ViewConfiguration
import android.view.Window
import android.view.WindowManager
import android.widget.TextView
import androidx.core.view.isVisible
import androidx.databinding.DataBindingUtil
import com.chuhai.utils.ktx.getColorById
import com.chuhai.utils.ktx.singleClick
import com.chuhai.utils.spannable.SpannableTextBuilder
import com.nnbc123.app.R
import com.nnbc123.app.avroom.activity.AVRoomActivity
import com.nnbc123.app.databinding.DialogGiftAllServiceLevelBinding
import com.nnbc123.app.public_chat_hall.activity.PublicChatHallHomeActivity
import com.nnbc123.core.initial.InitialModel
import com.nnbc123.core.noble.AllServiceGiftProtocol
import com.nnbc123.library.utils.JavaUtil
import io.reactivex.Observable
import io.reactivex.disposables.Disposable
import java.util.concurrent.TimeUnit
/**
* Created by Max on 2023/10/27 18:42
* Desc:全服礼物弹窗
**/
class AllServiceGiftLevelDialog : BaseDialog {
private var data: AllServiceGiftProtocol.DataBean? = null
private var binding: DialogGiftAllServiceLevelBinding? = null
private var disposable: Disposable? = null
companion object {
private var marqueeError = false
}
constructor(context: Context?, data: AllServiceGiftProtocol.DataBean) : super(
context, R.style.FullScreenDialog
) {
this.data = data
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
requestWindowFeature(Window.FEATURE_NO_TITLE)
val inflate =
LayoutInflater.from(context).inflate(R.layout.dialog_gift_all_service_level, null)
setContentView(inflate.rootView)
setCancelable(true)
setCanceledOnTouchOutside(true)
binding = DataBindingUtil.bind(inflate)
val window = window
if (window != null) {
window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
val windowParams = window.attributes
windowParams.width = WindowManager.LayoutParams.MATCH_PARENT
//MATCH_PARENT会挡住键盘
// wrap_parent在小米8又会截掉一点在华为测试关闭按钮点击不到
//暂时找不到原因,
windowParams.height = WindowManager.LayoutParams.WRAP_CONTENT
windowParams.dimAmount = 0.0f
windowParams.gravity = Gravity.TOP
windowParams.x = 0
windowParams.y = 0
window.addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL)
window.attributes = windowParams
window.setWindowAnimations(R.style.anim_left)
}
val data = this.data
val binding = this.binding
if (data != null && binding != null) {
init(data, binding)
} else {
dismiss()
}
}
private fun init(
data: AllServiceGiftProtocol.DataBean,
binding: DialogGiftAllServiceLevelBinding
) {
binding.ivAvatar.singleClick {
goRoom(data)
}
binding.tvRoomGo.singleClick {
goRoom(data)
}
binding.giftBean = data
if ((data.giftNum) <= 1) {
binding.tvCount.text = ""
} else {
binding.tvCount.text = "X${data.giftNum}"
}
SpannableTextBuilder(binding.tvMessage)
.appendText(
data.sendUserNick,
binding.tvMessage.context.getColorById(R.color.color_FFE468)
)
.appendText(
" 送给 ",
binding.tvMessage.context.getColorById(R.color.white)
)
.appendText(
data.recvUserNick + " ",
binding.tvMessage.context.getColorById(R.color.color_FFE468)
)
.appendText(
data.giftName,
binding.tvMessage.context.getColorById(R.color.white)
).apply()
when (data.levelNum.toIntOrNull()) {
2 -> {
binding.ivAvatarBg.setImageResource(R.drawable.all_service_gift_bg_avatar_2)
binding.layoutRoot.setBackgroundResource(R.drawable.all_service_gift_bg_2)
binding.tvRoomGo.setBackgroundResource(R.drawable.all_service_gift_bg_room_go2)
}
3 -> {
binding.ivAvatarBg.setImageResource(R.drawable.all_service_gift_bg_avatar_3)
binding.layoutRoot.setBackgroundResource(R.drawable.all_service_gift_bg_3)
binding.tvRoomGo.setBackgroundResource(R.drawable.all_service_gift_bg_room_go3)
}
else -> {
binding.ivAvatarBg.setImageDrawable(null)
binding.layoutRoot.setBackgroundResource(R.drawable.all_service_gift_bg_1)
binding.tvRoomGo.setBackgroundResource(R.drawable.all_service_gift_bg_room_go1)
}
}
setupTextMarquee(binding.tvMessage)
disposable = Observable.timer(data.notifyStaySecond.toLong(), TimeUnit.SECONDS)
.subscribe { dismiss() }
binding.groupRoom.isVisible = data.roomUid != 0L
}
/**
* 添加跑马灯
* 以及反射一些参数影响跑马灯
*/
private fun setupTextMarquee(view: TextView) {
view.isSelected = true
if (marqueeError) {
return
}
try {
val configuration = ViewConfiguration.get(
context
)
val claz: Class<*> = configuration.javaClass
val field = claz.getDeclaredField("mFadingMarqueeEnabled")
field.isAccessible = true
field[configuration] = true
} catch (e: Exception) {
e.printStackTrace()
marqueeError = true
}
}
private fun goRoom(
data: AllServiceGiftProtocol.DataBean
) {
if (data.roomUid <= 0L) {
// 非房间场景送的礼物
return
}
if (AllServiceGiftGoRoomTipsDialog.isNeedTips()) {
AllServiceGiftGoRoomTipsDialog(context, data.roomTitle ?: "", data.roomUid).show()
} else {
if (data.roomUid == JavaUtil.str2long(InitialModel.get().publicChatHallUid)) {
PublicChatHallHomeActivity.openPublicChatHallPage(context)
} else {
AVRoomActivity.start(context, data.roomUid)
}
}
}
override fun dismiss() {
super.dismiss()
if (disposable?.isDisposed != true) {
disposable?.dispose()
}
disposable = null
}
}

View File

@@ -1,85 +0,0 @@
package com.nnbc123.app.ui.widget.dialog;
import android.content.Context;
import androidx.databinding.DataBindingUtil;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import com.nnbc123.app.R;
import com.nnbc123.app.avroom.activity.AVRoomActivity;
import com.nnbc123.app.databinding.DialogGiftAllServiceLevelOneBinding;
import com.nnbc123.app.public_chat_hall.activity.PublicChatHallHomeActivity;
import com.nnbc123.core.initial.InitialModel;
import com.nnbc123.core.noble.AllServiceGiftProtocol;
import com.nnbc123.core.statistic.StatisticManager;
import com.nnbc123.core.statistic.protocol.StatisticsProtocol;
import com.nnbc123.library.utils.JavaUtil;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
/**
* Created by MadisonRong on 11/05/2018.
*/
public class AllServiceGiftLevelOneDialog extends AllServiceGiftDialog {
private DialogGiftAllServiceLevelOneBinding binding;
public AllServiceGiftLevelOneDialog(Context context, AllServiceGiftProtocol.DataBean dataBean) {
super(context, R.style.FullScreenDialog, dataBean);
giftLevel = ALL_SERVICE_GIFT_LEVEL_1;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
View inflate = LayoutInflater.from(getContext()).inflate(R.layout.dialog_gift_all_service_level_one, null);
setContentView(inflate.getRootView());
setCancelable(true);
setCanceledOnTouchOutside(true);
binding = DataBindingUtil.bind(inflate);
Window window = getWindow();
if (window != null) {
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
WindowManager.LayoutParams windowParams = window.getAttributes();
windowParams.width = WindowManager.LayoutParams.MATCH_PARENT;
//MATCH_PARENT会挡住键盘
// wrap_parent在小米8又会截掉一点在华为测试关闭按钮点击不到
//暂时找不到原因,
windowParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
windowParams.dimAmount = 0.0f;
windowParams.gravity = Gravity.TOP;
windowParams.x = 0;
windowParams.y = 0;
window.addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
window.setAttributes(windowParams);
window.setWindowAnimations(R.style.anim_left);
}
if (dataBean != null) {
binding.getRoot().setOnClickListener(v -> {
if (dataBean.getRoomUid() == JavaUtil.str2long(InitialModel.get().getPublicChatHallUid())) {
PublicChatHallHomeActivity.openPublicChatHallPage(getContext());
} else {
AVRoomActivity.start(getContext(), dataBean.getRoomUid());
}
StatisticManager.Instance().onEvent(StatisticsProtocol.FULL_GIFT_WATCHING, "全服礼物-前往围观计数");
});
Observable.timer((long) dataBean.getNotifyStaySecond(), TimeUnit.SECONDS)
.subscribe(aLong -> {
dismiss();
});
binding.setGiftBean(dataBean);
}
binding.ivCloseDialogOne.setOnClickListener(v -> dismiss());
}
}

View File

@@ -1,92 +0,0 @@
package com.nnbc123.app.ui.widget.dialog;
import android.content.Context;
import androidx.databinding.DataBindingUtil;
import android.graphics.Color;
import android.graphics.Point;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import com.nnbc123.app.R;
import com.nnbc123.app.avroom.activity.AVRoomActivity;
import com.nnbc123.app.databinding.DialogGiftAllServiceLevelThreeBinding;
import com.nnbc123.app.public_chat_hall.activity.PublicChatHallHomeActivity;
import com.nnbc123.core.initial.InitialModel;
import com.nnbc123.core.noble.AllServiceGiftProtocol;
import com.nnbc123.core.statistic.StatisticManager;
import com.nnbc123.core.statistic.protocol.StatisticsProtocol;
import com.nnbc123.library.utils.JavaUtil;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
/**
* Created by MadisonRong on 11/05/2018.
*/
public class AllServiceGiftLevelThreeDialog extends AllServiceGiftDialog {
private DialogGiftAllServiceLevelThreeBinding binding;
private float screenWidth;
public AllServiceGiftLevelThreeDialog(Context context, AllServiceGiftProtocol.DataBean dataBean) {
super(context, R.style.FullScreenDialog, dataBean);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
View inflate = LayoutInflater.from(getContext()).inflate(R.layout.dialog_gift_all_service_level_three, null);
setContentView(inflate.getRootView());
setCancelable(true);
setCanceledOnTouchOutside(true);
binding = DataBindingUtil.bind(inflate);
Window window = getWindow();
Point point = new Point();
if (window != null) {
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
WindowManager.LayoutParams windowParams = window.getAttributes();
windowParams.width = WindowManager.LayoutParams.MATCH_PARENT;
windowParams.height =WindowManager.LayoutParams.WRAP_CONTENT;
windowParams.dimAmount = 0.0f;
windowParams.gravity = Gravity.TOP;
windowParams.x = 0;
windowParams.y = 0;
window.addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
window.setAttributes(windowParams);
window.setWindowAnimations(R.style.anim_fade);
window.getWindowManager().getDefaultDisplay().getSize(point);
screenWidth = point.x;
}
if (dataBean != null) {
binding.giftClose.setOnClickListener(v -> {
dismiss();
});
binding.getRoot().setOnClickListener(v -> {
if (dataBean.getRoomUid() == JavaUtil.str2long(InitialModel.get().getPublicChatHallUid())) {
PublicChatHallHomeActivity.openPublicChatHallPage(getContext());
} else {
AVRoomActivity.start(getContext(), dataBean.getRoomUid());
}
StatisticManager.Instance().onEvent(StatisticsProtocol.FULL_GIFT_WATCHING, "全服礼物-前往围观计数");
});
// 设置定时器
Observable.timer((long) dataBean.getNotifyStaySecond(), TimeUnit.SECONDS)
.subscribe(aLong -> {
dismiss();
});
binding.setGiftBean(dataBean);
binding.tvRoomId.setVisibility(dataBean.getRoomUid() == 0 ? View.GONE : View.VISIBLE);
}
}
}

View File

@@ -1,88 +0,0 @@
package com.nnbc123.app.ui.widget.dialog;
import android.content.Context;
import androidx.databinding.DataBindingUtil;
import android.graphics.Color;
import android.graphics.Point;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import com.nnbc123.app.R;
import com.nnbc123.app.avroom.activity.AVRoomActivity;
import com.nnbc123.app.databinding.DialogGiftAllServiceLevelTwoBinding;
import com.nnbc123.app.public_chat_hall.activity.PublicChatHallHomeActivity;
import com.nnbc123.core.initial.InitialModel;
import com.nnbc123.core.noble.AllServiceGiftProtocol;
import com.nnbc123.core.statistic.StatisticManager;
import com.nnbc123.core.statistic.protocol.StatisticsProtocol;
import com.nnbc123.library.utils.JavaUtil;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
/**
* Created by MadisonRong on 11/05/2018.
*/
public class AllServiceGiftLevelTwoDialog extends AllServiceGiftDialog {
private DialogGiftAllServiceLevelTwoBinding binding;
private float screenWidth;
public AllServiceGiftLevelTwoDialog(Context context, AllServiceGiftProtocol.DataBean dataBean) {
super(context, R.style.FullScreenDialog, dataBean);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
View inflate = LayoutInflater.from(getContext()).inflate(R.layout.dialog_gift_all_service_level_two, null);
setContentView(inflate.getRootView());
setCancelable(true);
setCanceledOnTouchOutside(true);
binding = DataBindingUtil.bind(inflate);
Window window = getWindow();
Point point = new Point();
if (window != null) {
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
WindowManager.LayoutParams windowParams = window.getAttributes();
windowParams.width = WindowManager.LayoutParams.MATCH_PARENT;
windowParams.height =WindowManager.LayoutParams.WRAP_CONTENT;
windowParams.dimAmount = 0.0f;
windowParams.gravity = Gravity.TOP;
windowParams.x = 0;
windowParams.y = 0;
window.addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
window.setAttributes(windowParams);
window.setWindowAnimations(R.style.anim_left);
window.getWindowManager().getDefaultDisplay().getSize(point);
screenWidth = point.x;
}
if (dataBean != null) {
binding.getRoot().setOnClickListener(v -> {
if (dataBean.getRoomUid() == JavaUtil.str2long(InitialModel.get().getPublicChatHallUid())) {
PublicChatHallHomeActivity.openPublicChatHallPage(getContext());
} else {
AVRoomActivity.start(getContext(), dataBean.getRoomUid());
}
StatisticManager.Instance().onEvent(StatisticsProtocol.FULL_GIFT_WATCHING, "全服礼物-前往围观计数");
});
// 设置定时器
Observable.timer((long) (dataBean.getNotifyStaySecond()), TimeUnit.SECONDS)
.subscribe(aLong -> dismiss());
binding.setGiftBean(dataBean);
}
binding.ivCloseDialogTwo.setOnClickListener(v -> dismiss());
}
}

View File

@@ -31,7 +31,7 @@ class RequestPermissionPromptDialog(context: Context, private val message: Strin
* 是否需要展示权限申请说明
*/
fun isNeedPrompt(): Boolean {
return (BasicConfig.INSTANCE.channel == "huawei")
return (BasicConfig.INSTANCE.channel == "huawei") || (BasicConfig.INSTANCE.channel == "rongyao")
}
}

View File

@@ -80,7 +80,11 @@ public class GiftIndicator extends LinearLayout {
*/
public static final int TYPE_PRIVILEGE = 8;
private Map<String, String> map = new HashMap<>();
/**
* 趣味(福袋礼物、解锁礼物、装扮礼物)
*/
public static final int TYPE_INTEREST = 9;
private List<GiftTab> tabList = new ArrayList<>();
private int currrentType = TYPE_NORMAL;
@@ -143,10 +147,17 @@ public class GiftIndicator extends LinearLayout {
index.getItemView().setOnClickListener(v -> {
setPosition(index.getType());
emitter.onNext(index.getType());
if (index.isNeedNewTips()) {
View view = index.getItemView().findViewById(R.id.tv_new_tag);
if (view.getVisibility() == VISIBLE) {
view.setVisibility(GONE);
DemoCache.saveNewGiftTypeTip(index.getType(), false);
}
}
if (index.getType() == TYPE_PENALTY) {
ImageView imageView = index.getItemView().findViewById(R.id.iv_new_tag);
if (imageView.getVisibility() == VISIBLE) {
imageView.setVisibility(GONE);
View view = index.getItemView().findViewById(R.id.tv_new_tag);
if (view.getVisibility() == VISIBLE) {
view.setVisibility(GONE);
DemoCache.saveNewGiftTypeTip(false);
}
} else if (index.getType() == TYPE_KNAP) {
@@ -186,10 +197,16 @@ public class GiftIndicator extends LinearLayout {
for (GiftTab tab : tabList) {
if (tab.getType() == type) {
tab.getItemView().setVisibility(VISIBLE);
if (tab.isNeedNewTips()) {
if (DemoCache.readNewGiftTypeTip(tab.getType())) {
View view = tab.getItemView().findViewById(R.id.tv_new_tag);
view.setVisibility(VISIBLE);
}
}
if (type == TYPE_PENALTY) {
if (DemoCache.readNewGiftTypeTip()) {
ImageView imageView = tab.getItemView().findViewById(R.id.iv_new_tag);
imageView.setVisibility(VISIBLE);
View view = tab.getItemView().findViewById(R.id.tv_new_tag);
view.setVisibility(VISIBLE);
}
}
break;

View File

@@ -112,7 +112,7 @@ public class LinePagerIndicator extends View implements IPagerIndicator {
@Override
public void onPageSelected(int position) {
onPageScrolled(position,0,0);
// onPageScrolled(position,0,0);
}
@Override

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 367 B

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 360 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#FF283889" />
<stroke
android:width="1dp"
android:color="#FF66B5FF" />
<corners android:radius="8.5dp" />
</shape>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#FF49157D" />
<stroke
android:width="1dp"
android:color="#FFFE9FFF" />
<corners android:radius="8.5dp" />
</shape>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#87152D" />
<stroke
android:width="1dp"
android:color="#FFED77" />
<corners android:radius="8.5dp" />
</shape>

View File

@@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="20dp"
android:height="20dp"
android:viewportWidth="20"
android:viewportHeight="20">
<path
android:pathData="M12.528,0.898L18.773,5.98C19.55,6.611 20,7.558 20,8.557L20,16.009C20,18.213 18.209,20 16,20L15,20C14.264,20 13.667,19.403 13.667,18.667L13.667,14.346L13.667,14.346C13.667,13.269 12.811,12.391 11.742,12.352L11.667,12.35L8.333,12.35C7.254,12.35 6.374,13.204 6.335,14.271L6.333,14.346L6.333,18.667C6.333,19.403 5.736,20 5,20L4,20L4,20C1.791,20 0,18.213 0,16.009L0,8.557C0,7.558 0.45,6.611 1.227,5.98L7.472,0.898C8.944,-0.299 11.056,-0.299 12.528,0.898Z"
android:strokeWidth="1"
android:fillColor="#FFFFFF"
android:fillType="evenOdd"
android:strokeColor="#00000000"/>
</vector>

View File

@@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="14dp"
android:height="14dp"
android:viewportWidth="14"
android:viewportHeight="14">
<path
android:pathData="M7,7m-7,0a7,7 0,1 1,14 0a7,7 0,1 1,-14 0"
android:strokeWidth="1"
android:fillColor="#141414"
android:fillType="evenOdd"
android:strokeColor="#00000000"/>
<path
android:pathData="M3.576,6.612C3.792,6.373 4.161,6.353 4.4,6.569L6.381,8.353L9.867,4.483C10.098,4.226 10.493,4.205 10.75,4.436C11.006,4.667 11.027,5.062 10.796,5.319L6.948,9.592L6.937,9.604C6.932,9.61 6.926,9.617 6.92,9.623C6.705,9.862 6.336,9.882 6.097,9.666L3.619,7.436C3.38,7.22 3.361,6.851 3.576,6.612Z"
android:strokeWidth="1"
android:fillColor="#FFFFFF"
android:fillType="evenOdd"
android:strokeColor="#00000000"/>
</vector>

View File

@@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="14dp"
android:height="14dp"
android:viewportWidth="14"
android:viewportHeight="14">
<path
android:pathData="M7,7m-6.5,0a6.5,6.5 0,1 1,13 0a6.5,6.5 0,1 1,-13 0"
android:strokeWidth="1"
android:fillColor="#00000000"
android:strokeColor="#B3B3C3"
android:fillType="evenOdd"/>
</vector>

View File

@@ -4,8 +4,8 @@
<gradient
android:angle="180"
android:endColor="@color/color_218eff"
android:startColor="@color/color_7727e4"
android:endColor="#FFDA24"
android:startColor="#FFDA24"
android:type="linear"
android:useLevel="true" />
<corners android:radius="100dp" />

View File

@@ -2,7 +2,7 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true">
<shape android:shape="rectangle">
<solid android:color="#FFE710" />
<solid android:color="#FFDA24" />
<corners android:bottomLeftRadius="0dp" android:bottomRightRadius="100dp" android:topLeftRadius="0dp" android:topRightRadius="100dp" />
</shape>
</item>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#14FFFFFF" />
<corners android:radius="4dp" />
<stroke
android:width="0.5dp"
android:color="#FFDA24" />
</shape>

View File

@@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="8dp"
android:height="8dp"
android:viewportWidth="8"
android:viewportHeight="8">
<path
android:pathData="M6.512,4.3904L2.8123,7.3501C2.5967,7.5226 2.2821,7.4877 2.1096,7.272C2.0386,7.1834 2,7.0732 2,6.9597L2,1.0403C2,0.7642 2.2239,0.5403 2.5,0.5403C2.6135,0.5403 2.7237,0.579 2.8123,0.6499L6.512,3.6096C6.7276,3.7821 6.7625,4.0967 6.59,4.3123C6.567,4.3412 6.5408,4.3674 6.512,4.3904Z"
android:strokeWidth="1"
android:fillColor="#FFFFFF"
android:fillType="evenOdd"
android:strokeColor="#00000000"/>
</vector>

View File

@@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="10dp"
android:height="10dp"
android:viewportWidth="10"
android:viewportHeight="10">
<path
android:pathData="M5.384,2.461L9.317,7.18C9.493,7.392 9.465,7.707 9.253,7.884C9.163,7.959 9.049,8 8.932,8L1.068,8C0.791,8 0.568,7.776 0.568,7.5C0.568,7.383 0.609,7.27 0.683,7.18L4.616,2.461C4.793,2.249 5.108,2.22 5.32,2.397C5.343,2.416 5.365,2.438 5.384,2.461Z"
android:strokeWidth="1"
android:fillColor="#FFFFFF"
android:fillType="evenOdd"
android:strokeColor="#00000000"/>
</vector>

View File

@@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="9dp"
android:height="9dp"
android:viewportWidth="9"
android:viewportHeight="9">
<path
android:pathData="M6.4687,2.7063L2.5313,2.7063C1.531,2.7063 0.72,3.5172 0.72,4.5176L0.72,7.0987C0.72,8.099 1.531,8.91 2.5313,8.91L6.4687,8.91C7.469,8.91 8.28,8.099 8.28,7.0987L8.28,4.5176C8.28,3.5172 7.469,2.7063 6.4687,2.7063ZM4.9529,5.8622L4.9529,7.0909C4.9529,7.348 4.7503,7.5566 4.5,7.5566C4.2498,7.5566 4.0471,7.348 4.0471,7.0909L4.0471,5.8622C3.7766,5.7012 3.5942,5.4009 3.5942,5.0563C3.5942,4.5419 3.9997,4.125 4.5,4.125C5.0003,4.125 5.4059,4.5419 5.4059,5.0563C5.4059,5.4009 5.2236,5.7012 4.9529,5.8622ZM4.5076,0.09C3.106,0.09 1.9696,1.242 1.9696,2.7555L1.9696,4.1615L7.0458,4.1615L7.0458,2.7555C7.0458,1.242 5.9094,0.09 4.5076,0.09ZM2.9572,3.507L2.9572,2.5441C2.9572,1.6578 3.6561,0.9391 4.5182,0.9391C5.3804,0.9391 6.0792,1.6578 6.0792,2.5441L6.0792,3.5296L2.9572,3.507Z"
android:strokeWidth="1"
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 定义轨道的背景 -->
<item android:id="@android:id/background">
<shape android:shape="rectangle">
<solid android:color="#696D7A" />
<corners android:radius="3dp" />
</shape>
</item>
<!-- 定义轨道上已完成部分的样式 -->
<item android:id="@android:id/progress">
<scale android:scaleWidth="100%">
<shape android:shape="rectangle">
<solid android:color="#FFDA24" />
<corners android:radius="3dp" />
</shape>
</scale>
</item>
</layer-list>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="4dp" />
<solid android:color="#14FFFFFF" />
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="26dp"/>
<solid android:color="#33FFDA24"/>
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="21dp"/>
<solid android:color="#FFE6E6F0"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="8dp"/>
<solid android:color="#F3F5FA"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="6dp"/>
<solid android:color="#FFFF425B"/>
</shape>

View File

@@ -1,13 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/white_tran_10" />
<stroke
android:width="1px"
android:color="@color/white_transparent_40" />
<corners android:radius="12dp" />
</shape>

View File

@@ -2,12 +2,12 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="1dp"
android:color="#FFE710"
android:color="#FFDA24"
/>
<solid
android:color="@color/transparent"
/>
<corners
android:radius="50dp"
android:radius="16dp"
/>
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="21dp"/>
<solid android:color="@color/color_theme"/>
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="26dp"/>
<solid android:color="@color/color_theme"/>
</shape>

Some files were not shown because too many files have changed in this diff Show More