1.宝箱相关逻辑

2.关闭第三方推送
3.去掉读取手机信息权限
This commit is contained in:
huangjian
2020-05-05 17:06:10 +08:00
parent 3f8705a812
commit 72c6569fc1
24 changed files with 459 additions and 672 deletions

View File

@@ -22,7 +22,9 @@
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission
android:name="android.permission.READ_PHONE_STATE"
tools:node="remove" />
<!-- 云信权限声明 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
@@ -74,7 +76,7 @@
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />
<!--vivo Push需要的权限-->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name=".application.XChatApplication"
@@ -82,10 +84,10 @@
android:icon="@mipmap/app_logo"
android:label="@string/app_name"
android:largeHeap="true"
android:requestLegacyExternalStorage="true"
android:resizeableActivity="true"
android:theme="@style/MyMaterialTheme"
android:usesCleartextTraffic="true"
android:requestLegacyExternalStorage="true"
tools:replace="android:name, android:allowBackup">
<!-- 高德地图 begin -->
<meta-data
@@ -289,25 +291,25 @@
<!--配置的service, activity, receiver-->
<service
android:name="com.vivo.push.sdk.service.CommandClientService"
android:exported="true"/>
android:exported="true" />
<activity
android:name="com.vivo.push.sdk.LinkProxyClientActivity"
android:exported="false"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<receiver android:name="com.netease.nimlib.mixpush.vivo.VivoPushReceiver">
<intent-filter>
<!-- 接收 push 消息 -->
<action android:name="com.vivo.pushclient.action.RECEIVE"/>
<action android:name="com.vivo.pushclient.action.RECEIVE" />
</intent-filter>
</receiver>
<!--Vivo Push开放平台中应用的appid 和api key-->
<meta-data
android:name="com.vivo.push.api_key"
android:value="1a9cace2-da8a-4b49-a70d-9beefacf6096"/>
android:value="1a9cace2-da8a-4b49-a70d-9beefacf6096" />
<meta-data
android:name="com.vivo.push.app_id"
android:value="16517"/>
android:value="16517" />
<meta-data
android:name="design_width"
@@ -318,9 +320,9 @@
<!-- Autolayout####################################################配置 -->
<!-- LinkedMe ####################################################配置 -->
<!-- <meta-data-->
<!-- android:name="linkedme.sdk.key"-->
<!-- android:value="978cd79c98264f836450afda1228762e" /> &lt;!&ndash; LinkedMe####################################################配置 &ndash;&gt;-->
<!-- <meta-data-->
<!-- android:name="linkedme.sdk.key"-->
<!-- android:value="978cd79c98264f836450afda1228762e" /> &lt;!&ndash; LinkedMe####################################################配置 &ndash;&gt;-->
<!-- TakePhoto申明 -->
<activity
android:name="com.soundcloud.android.crop.CropImageActivity"
@@ -335,12 +337,12 @@
android:resource="@xml/provider_paths" />
</provider> <!-- 支付宝支付需要注册 -->
<!-- 注释这个声明禁用支付宝h5支付 -->
<!-- <activity-->
<!-- android:name="com.alipay.sdk.app.H5PayActivity"-->
<!-- android:configChanges="orientation|keyboardHidden|navigation|screenSize"-->
<!-- android:exported="false"-->
<!-- android:screenOrientation="behind"-->
<!-- android:windowSoftInputMode="adjustResize|stateHidden" />-->
<!-- <activity-->
<!-- android:name="com.alipay.sdk.app.H5PayActivity"-->
<!-- android:configChanges="orientation|keyboardHidden|navigation|screenSize"-->
<!-- android:exported="false"-->
<!-- android:screenOrientation="behind"-->
<!-- android:windowSoftInputMode="adjustResize|stateHidden" />-->
<activity
android:name="com.alipay.sdk.auth.AuthActivity"
android:configChanges="orientation|keyboardHidden|navigation"
@@ -393,17 +395,17 @@
</activity>
<!-- <activity xmlns:tools="http://schemas.android.com/tools"-->
<!-- android:name="cn.sharesdk.wechat.utils.WechatHandlerActivity"-->
<!-- android:configChanges="keyboardHidden|orientation|screenSize"-->
<!-- android:exported="false"-->
<!-- tools:node="merge" />-->
<!-- <activity xmlns:tools="http://schemas.android.com/tools"-->
<!-- android:name="cn.sharesdk.wechat.utils.WechatHandlerActivity"-->
<!-- android:configChanges="keyboardHidden|orientation|screenSize"-->
<!-- android:exported="false"-->
<!-- tools:node="merge" />-->
<!-- <activity-alias xmlns:tools="http://schemas.android.com/tools"-->
<!-- android:name="${applicationId}.wxapi.WXEntryActivity"-->
<!-- android:exported="true"-->
<!-- android:targetActivity="cn.sharesdk.wechat.utils.WechatHandlerActivity"-->
<!-- tools:node="merge" />-->
<!-- <activity-alias xmlns:tools="http://schemas.android.com/tools"-->
<!-- android:name="${applicationId}.wxapi.WXEntryActivity"-->
<!-- android:exported="true"-->
<!-- android:targetActivity="cn.sharesdk.wechat.utils.WechatHandlerActivity"-->
<!-- tools:node="merge" />-->
<!-- 为了兼容小程序返回的问题声明WXEntryActivity并把之前的 WechatHandlerActivity注释 -->
<activity
android:name="com.xuanyi.accompany.wxapi.WXEntryActivity"
@@ -414,8 +416,6 @@
<service
android:name=".service.DaemonService"
android:enabled="true" />
<service android:name=".treasure_box.service.OpenBoxService" />
<service android:name=".treasure_box.service.OpenHonourBoxService" />
<activity
android:name=".other.activity.SplashActivity"
@@ -1141,14 +1141,14 @@
<!-- 社区 -->
<activity
android:name=".community.publish.view.PublishActivity"
android:windowSoftInputMode="stateHidden|adjustNothing"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustNothing" />
<activity
android:name=".community.dynamic.view.DynamicDetailActivity"
android:windowSoftInputMode="adjustResize"
android:screenOrientation="portrait" />
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<activity
android:name=".community.photo.PreviewPhotoActivity"
@@ -1169,13 +1169,12 @@
<activity
android:name="com.zhihu.matisse.internal.ui.SelectedPreviewActivity"
android:screenOrientation="portrait"
/>
android:screenOrientation="portrait" />
<activity
android:name=".ui.wallet.sendgold.SendGoldActivity"
android:windowSoftInputMode="stateHidden|adjustResize"
android:screenOrientation="portrait" />
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<!-- 隐私设置 -->
<activity
@@ -1192,8 +1191,9 @@
android:label="一键登录"
android:launchMode="singleTask"
android:screenOrientation="portrait" />
<activity android:name=".ui.webview.DialogWebViewActivity"
android:theme="@style/dialog_web_view_activity"/>
<activity
android:name=".ui.webview.DialogWebViewActivity"
android:theme="@style/dialog_web_view_activity" />
</application>

View File

@@ -9,9 +9,6 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import android.text.TextUtils;
import android.util.Log;
import android.util.LongSparseArray;
@@ -21,6 +18,10 @@ import android.view.animation.LinearInterpolator;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import com.mcxiaoke.packer.helper.PackerNg;
import com.microquation.linkedme.android.LinkedME;
import com.netease.nim.uikit.api.NimUIKit;
@@ -82,8 +83,6 @@ import com.yizhuan.erban.quick_pass.QuickPassLoginAct;
import com.yizhuan.erban.radish.signin.SignDialogTimeManager;
import com.yizhuan.erban.service.DaemonService;
import com.yizhuan.erban.share.viewholder.InAppSharingMsgViewHolder;
import com.yizhuan.erban.treasure_box.service.OpenBoxService;
import com.yizhuan.erban.treasure_box.service.OpenHonourBoxService;
import com.yizhuan.erban.ui.im.RouterHandler;
import com.yizhuan.erban.ui.im.actions.GiftAction;
import com.yizhuan.erban.ui.im.avtivity.NimP2PMessageActivity;
@@ -994,12 +993,6 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
@Override
public void exitRoom(RoomInfo roomInfo) {
closeOpenRoomAnimation();
if (OpenBoxService.isAutoOpenBox) {
OpenBoxService.stop(this);
}
if (OpenHonourBoxService.isAutoOpenBox) {
OpenHonourBoxService.stop(this);
}
//ktv退出的时候需要用到
if (RtcEngineManager.get().isOpenKtv() && roomInfo != null) {
KtvMusicManager.INSTANCE.deleteUserAllChooseMusic(roomInfo.getUid()).subscribe();

View File

@@ -313,7 +313,7 @@ public class XChatApplication extends Application {
// // save cache留做切换账号备用
DemoCache.setNotificationConfig(config);
MixPushConfig mixPushConfig = new MixPushConfig();
/* MixPushConfig mixPushConfig = new MixPushConfig();
mixPushConfig.hwCertificateName = "tutuHuaweiAndroid";
mixPushConfig.mzAppId = "125242";
@@ -327,12 +327,12 @@ public class XChatApplication extends Application {
mixPushConfig.vivoCertificateName = "qingxunVivoAndroid";
// 下架状态,没有完成接入
// mixPushConfig.oppoAppId = "30156338";
// mixPushConfig.oppoAppKey = "4659eff1cab747c48fb6f44e2f522e83";
// mixPushConfig.oppoAppSercet = "8c6a21854c8045068247c7e1168e29a8";
// mixPushConfig.oppoCertificateName = "qingxunOppoAndroid";
mixPushConfig.oppoAppId = "30156338";
mixPushConfig.oppoAppKey = "4659eff1cab747c48fb6f44e2f522e83";
mixPushConfig.oppoAppSercet = "8c6a21854c8045068247c7e1168e29a8";
mixPushConfig.oppoCertificateName = "qingxunOppoAndroid";
options.mixPushConfig = mixPushConfig;
options.mixPushConfig = mixPushConfig;*/
return options;
}

View File

@@ -7,10 +7,6 @@ import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
import androidx.core.content.ContextCompat;
import androidx.viewpager.widget.ViewPager;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextUtils;
@@ -23,6 +19,11 @@ import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.netease.nim.uikit.common.util.log.LogUtil;
@@ -50,9 +51,7 @@ import com.yizhuan.erban.common.widget.CustomImageSpan;
import com.yizhuan.erban.common.widget.dialog.DialogManager;
import com.yizhuan.erban.home.adapter.FragmentViewPagerAdapter;
import com.yizhuan.erban.monsterhunting.MonsterHuntingActivity;
import com.yizhuan.erban.treasure_box.service.OpenHonourBoxService;
import com.yizhuan.erban.ui.patriarch.help.LimitEnterRoomHelper;
import com.yizhuan.erban.treasure_box.service.OpenBoxService;
import com.yizhuan.erban.ui.pay.ChargeActivity;
import com.yizhuan.erban.ui.user.UserInfoActivity;
import com.yizhuan.erban.ui.utils.ImageLoadUtils;
@@ -96,13 +95,10 @@ import com.yizhuan.xchat_android_core.room.event.RoomClearScreenEvent;
import com.yizhuan.xchat_android_core.room.game.GameInfo;
import com.yizhuan.xchat_android_core.room.game.GameModel;
import com.yizhuan.xchat_android_core.room.pk.event.PKStateEvent;
import com.yizhuan.xchat_android_core.statistic.StatisticManager;
import com.yizhuan.xchat_android_core.statistic.protocol.StatisticsProtocol;
import com.yizhuan.xchat_android_core.super_admin.util.SuperAdminUtil;
import com.yizhuan.xchat_android_core.super_admin.util.SAdminOptUtil;
import com.yizhuan.xchat_android_core.super_admin.util.SuperAdminUtil;
import com.yizhuan.xchat_android_core.user.UserModel;
import com.yizhuan.xchat_android_core.user.bean.UserInfo;
import com.yizhuan.xchat_android_core.utils.SharedPreferenceUtils;
@@ -828,12 +824,6 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
@Override
public void exitRoom(RoomInfo currentRoomInfo) {
if (OpenBoxService.isAutoOpenBox) {
OpenBoxService.stop(this);
}
if (OpenHonourBoxService.isAutoOpenBox) {
OpenHonourBoxService.stop(this);
}
if (currentRoomInfo != null && currentRoomInfo.getUid() == roomUid) {
finish();
}

View File

@@ -7,6 +7,7 @@ import android.widget.RadioGroup;
import com.yizhuan.erban.R;
import com.yizhuan.erban.base.BaseActivity;
import com.yizhuan.erban.ui.webview.CommonWebViewActivity;
import com.yizhuan.xchat_android_core.DemoCache;
import com.yizhuan.xchat_android_core.Env;
import com.yizhuan.xchat_android_core.auth.AuthModel;
@@ -26,7 +27,10 @@ public class LabActivity extends BaseActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lab);
//h5测试地址
findViewById(R.id.rb_h5_test).setOnClickListener(v -> CommonWebViewActivity.start(context, "http://192.168.10.7:5503/"));
//vue测试地址
findViewById(R.id.rb_vue_test).setOnClickListener(v -> CommonWebViewActivity.start(context, "http://192.168.10.7:8080/"));
int enviroment = CommonPref.instance(BasicConfig.INSTANCE.getAppContext()).getInt(Env.KEY_ENVIRONMENT);
//根据ID找到RadioGroup实例
RadioGroup group = (RadioGroup) this.findViewById(R.id.radioGroup);

View File

@@ -0,0 +1,62 @@
package com.yizhuan.erban.ui.widget;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Path;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.widget.LinearLayout;
import com.netease.nim.uikit.common.util.sys.ScreenUtil;
/**
* 顶部圆角的LinearLayout,用户半屏的web view界面
* 注意需要设置背景才有效,没有背景ViewGroup不会调用draw方法
*/
public class TopRoundLinearLayout extends LinearLayout {
private Path mPath;
private int mRadius;
private int mWidth;
private int mHeight;
private int mLastRadius;
public TopRoundLinearLayout(Context context) {
super(context);
init();
}
public TopRoundLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
mPath = new Path();
mPath.setFillType(Path.FillType.EVEN_ODD);
mRadius = ScreenUtil.dip2px(10);
}
private void checkPathChanged() {
if (getWidth() == mWidth && getHeight() == mHeight && mLastRadius == mRadius) {
return;
}
mWidth = getWidth();
mHeight = getHeight();
mLastRadius = mRadius;
mPath.reset();
mPath.addRoundRect(new RectF(0, 0, mWidth, mHeight),
new float[]{mRadius, mRadius, mRadius, mRadius, 0, 0, 0, 0},
Path.Direction.CW);
}
@Override
public void draw(Canvas canvas) {
int saveCount = canvas.save();
checkPathChanged();
canvas.clipPath(mPath);
super.draw(canvas);
canvas.restoreToCount(saveCount);
}
}

View File

@@ -1,17 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<com.yizhuan.erban.ui.widget.TopRoundLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/shape_white_top_10dp"
android:orientation="vertical"
android:paddingTop="10dp">
android:background="@color/white"
android:orientation="vertical">
<FrameLayout
android:id="@+id/layout_title_bar"
android:layout_width="match_parent"
android:layout_height="48dp">
<androidx.cardview.widget.CardView
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
@@ -80,4 +84,4 @@
android:layout_height="match_parent">
</WebView>
</LinearLayout>
</com.yizhuan.erban.ui.widget.TopRoundLinearLayout>

View File

@@ -35,5 +35,30 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="测试环境" />
</RadioGroup>
<TextView
android:id="@+id/rb_h5_test"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center_vertical"
android:paddingStart="10dp"
android:text="h5测试入口"
android:layout_marginTop="10dp"
android:background="@color/color_f5f5f5"
android:textColor="@color/color_333333"
android:textSize="15sp" />
<TextView
android:id="@+id/rb_vue_test"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center_vertical"
android:paddingStart="10dp"
android:text="vue测试入口"
android:layout_marginTop="10dp"
android:background="@color/color_f5f5f5"
android:textColor="@color/color_333333"
android:textSize="15sp" />
</LinearLayout>

View File

@@ -51,7 +51,7 @@ public class QuickPassLoginAct extends BaseLoginAct implements View.OnClickListe
* 基本权限管理
*/
private final String[] BASIC_PERMISSIONS = new String[]{
Manifest.permission.READ_PHONE_STATE,
// Manifest.permission.READ_PHONE_STATE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
// Manifest.permission.CAMERA,

View File

@@ -1,164 +1,133 @@
package com.yizhuan.erban.treasure_box.activity;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.transition.Transition;
import com.netease.nim.uikit.common.util.sys.ScreenUtil;
import com.netease.nim.uikit.support.glide.GlideApp;
import com.yizhuan.erban.R;
import com.yizhuan.erban.base.BaseBindingActivity;
import com.yizhuan.erban.databinding.ActivityTreasureBoxBinding;
import com.yizhuan.erban.treasure_box.service.OpenBoxService;
import com.yizhuan.erban.treasure_box.widget.PrizeFactor;
import com.yizhuan.erban.treasure_box.widget.dialog.BaseBindingDialog;
import com.yizhuan.erban.treasure_box.widget.dialog.BoxMoreDialog;
import com.yizhuan.erban.treasure_box.widget.dialog.BuyKeyDialog;
import com.yizhuan.erban.treasure_box.widget.dialog.KeyDeficiencyDialog;
import com.yizhuan.erban.ui.pay.ChargeActivity;
import com.yizhuan.erban.ui.utils.ImageLoadUtils;
import com.yizhuan.erban.ui.widget.magicindicator.buildins.UIUtil;
import com.yizhuan.erban.ui.webview.DialogWebViewActivity;
import com.yizhuan.treasure_box.bean.PrizeInfo;
import com.yizhuan.treasure_box.model.BoxModel;
import com.yizhuan.xchat_android_core.auth.AuthModel;
import com.yizhuan.xchat_android_core.exception.FailReasonException;
import com.yizhuan.xchat_android_core.manager.AvRoomDataManager;
import com.yizhuan.treasure_box.model.IBoxModel;
import com.yizhuan.xchat_android_core.UriProvider;
import com.yizhuan.xchat_android_core.manager.IMNetEaseManager;
import com.yizhuan.xchat_android_core.manager.RoomEvent;
import com.yizhuan.xchat_android_core.pay.PayModel;
import com.yizhuan.xchat_android_core.pay.bean.WalletInfo;
import com.yizhuan.treasure_box.bean.KeyInfo;
import com.yizhuan.treasure_box.bean.OpenBoxResult;
import com.yizhuan.treasure_box.event.AutoOpenBoxEvent;
import com.yizhuan.treasure_box.event.BoxBuyKeyEvent;
import com.yizhuan.xchat_android_core.statistic.StatisticManager;
import com.yizhuan.xchat_android_core.statistic.protocol.StatisticsProtocol;
import com.yizhuan.xchat_android_core.utils.StringUtils;
import com.yizhuan.xchat_android_core.utils.net.BalanceNotEnoughExeption;
import com.yizhuan.xchat_android_library.annatation.ActLayoutRes;
import com.yizhuan.xchat_android_library.utils.FormatUtils;
import com.yizhuan.xchat_android_library.utils.SingleToastUtil;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
@ActLayoutRes(R.layout.activity_treasure_box)
public class TreasureBoxActivity extends BaseBindingDialog<ActivityTreasureBoxBinding> implements View.OnClickListener {
private volatile double gold;
public class TreasureBoxActivity extends BaseBindingActivity<ActivityTreasureBoxBinding> implements View.OnClickListener {
private int price = 20;
private ImageView ivBox;
private volatile int keyNum;
private AnimationDrawable eggAnim;
private ArrayList<PrizeInfo> cacheList = new ArrayList<>();
private Disposable disposable;
private ObjectAnimator translationXAnimator;
private ObjectAnimator translationYAnimator;
private int boxType = IBoxModel.BOX_TYPE_NORMAL;
public TreasureBoxActivity(Context context) {
super(context);
width = WindowManager.LayoutParams.MATCH_PARENT;
//这里用MATCH_PARENT 通知栏会变黑.......
height = ScreenUtil.screenHeight;
}
public static void start(Context context) {
new TreasureBoxActivity(context).openDialog();
/* Intent starter = new Intent(context, TreasureBoxActivity.class);
//starter.putExtra();
context.startActivity(starter);*/
Intent starter = new Intent(context, TreasureBoxActivity.class);
context.startActivity(starter);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// requestWindowFeature(Window.FEATURE_NO_TITLE);
// getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
// getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, ScreenUtil.screenHeight);
getWindow().setGravity(Gravity.CENTER);
subscribeEvent();
}
ObjectAnimator objectAnimator;
ObjectAnimator objectAnimator1;
@SuppressLint("CheckResult")
@Override
protected void init() {
binding.setClick(this);
ivBox = binding.ivBox;
mBinding.setClick(this);
translationXAnimator = ObjectAnimator.ofFloat(mBinding.ivGiftAnim, "translationX", 0,
ScreenUtil.screenWidth / 2f - ScreenUtil.dip2px(15 + 19)).setDuration(500);
translationXAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
translationXAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
mBinding.ivGiftAnim.setVisibility(View.GONE);
}
});
mBinding.ivBox.post(() -> {
translationYAnimator = ObjectAnimator.ofFloat(mBinding.ivGiftAnim, "translationY", 0,
ScreenUtil.screenHeight - (mBinding.ivBox.getBottom() + mBinding.ivBox.getTop()) / 2f - ScreenUtil.dip2px(55)).setDuration(500);
translationYAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
});
WalletInfo walletInfo = PayModel.get().getCurrentWalletInfo();
if (walletInfo != null) {
mBinding.tvDiamondNum.setText(FormatUtils.formatBigDecimal(walletInfo.getDiamondNum()));
}
loadKeyInfo();
looperPrize();
}
objectAnimator = ObjectAnimator.ofFloat(binding.ivGiftAnim,
"translationX", 0, ScreenUtil.screenWidth / 2f).setDuration(500);
objectAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
objectAnimator1 = ObjectAnimator.ofFloat(binding.ivGiftAnim,
"translationY", 0, ScreenUtil.screenHeight / 2f + 100).setDuration(500);
objectAnimator1.setInterpolator(new AccelerateDecelerateInterpolator());
@SuppressLint("CheckResult")
private void loadKeyInfo(){
BoxModel.get()
.getKeyInfo()
//.compose(bindToLifecycle())
.doOnError(throwable -> SingleToastUtil.showToast(throwable.getMessage()))
.getKeyInfo(boxType)
.compose(bindToLifecycle())
.subscribe(keyInfo -> {
changeKeyNum(keyInfo.getKeyNum());
price = keyInfo.getKeyPrice();
});
WalletInfo walletInfo = PayModel.get().getCurrentWalletInfo();
if (walletInfo != null) gold = walletInfo.getGoldNum();
binding.tvDiamondNum.setText(FormatUtils.formatBigDecimal(gold));
binding.randomLayout.start();
EventBus.getDefault().register(this);
looperPrize();
}
/* @Override
@SuppressLint("CheckResult")
protected void onResume() {
super.onResume();
}
*/
@Override
public void onClick(View v) {
switch (v.getId()) {
/* case R.id.stv_help:
BoxHelpActivity.start(this, binding.getRoot().getHeight(), binding.getRoot().getWidth());
case R.id.root_view:
finish();
break;
case R.id.stv_jackpot:
BoxPrizeActivity.start(this, binding.getRoot().getHeight(), binding.getRoot().getWidth());
break;
case R.id.stv_record:
BoxPrizeRecordActivity.start(this, binding.getRoot().getHeight(), binding.getRoot().getWidth());
break;*/
case R.id.iv_more:
new BoxMoreDialog(context).openDialog();
break;
case R.id.tv_rank:
DialogWebViewActivity.start(context, UriProvider.getBoxRank(), false);
break;
case R.id.iv_open:
binding.svgaOpen.startAnimation();
binding.ivOpen.setEnabled(false);
ivBox.setImageResource(R.drawable.box_close_normal);
openBox(StringUtils.toInt(binding.editNum.getText().toString()));
openBox(StringUtils.toInt(mBinding.editNum.getText().toString(), 0));
break;
case R.id.iv_sub:
mBinding.editNum.setText(String.valueOf(Math.max(StringUtils.toInt(mBinding.editNum.getText().toString(), 0) - 1, 0)));
break;
case R.id.iv_add:
mBinding.editNum.setText(String.valueOf(StringUtils.toInt(mBinding.editNum.getText().toString(), 0) + 1));
break;
case R.id.view_bg:
case R.id.iv_title:
//do nothing
break;
default:
break;
@@ -166,16 +135,9 @@ public class TreasureBoxActivity extends BaseBindingDialog<ActivityTreasureBoxBi
}
private void showBuyDialog() {
new BuyKeyDialog(getContext(), price).show();
new BuyKeyDialog(this, price).show();
}
/* @Override
protected void onPause() {
super.onPause();
binding.randomLayout.stop();
}
*/
/**
* 检查钥匙(锤子)数量
*
@@ -184,76 +146,56 @@ public class TreasureBoxActivity extends BaseBindingDialog<ActivityTreasureBoxBi
* false 表示数量没问题,可以继续操作
*/
private boolean checkKeyNum(int count) {
if (count == 0) {
SingleToastUtil.showToast("开启数量不能为0!");
return true;
}
if (keyNum == 0) {
showBuyDialog();
return true;
}
if (keyNum < count) {
new KeyDeficiencyDialog(getContext(), count, count - keyNum).show();
new KeyDeficiencyDialog(this, count, count - keyNum).show();
return true;
}
return false;
}
private Runnable runnableClose = () -> binding.ivBox.setImageResource(R.drawable.box_close_normal);
private Runnable runnableOpen = () -> {
if (eggAnim == null) {
eggAnim = (AnimationDrawable) getContext().getResources().getDrawable(R.drawable.anim_egg);
} else {
eggAnim.stop();
}
binding.ivBox.setImageDrawable(eggAnim);
eggAnim.start();
};
@SuppressLint("CheckResult")
private void openBox(int count) {
/* if (checkKeyNum(count)) {
binding.ivOpen.setEnabled(true);
mBinding.ivOpen.setEnabled(false);
if (checkKeyNum(count)) {
mBinding.ivOpen.setEnabled(true);
return;
}*/
// changeBoxStatus();
BoxModel.get()
.openBox(count, true)
//.compose(bindToLifecycle())
//.delay(1, TimeUnit.SECONDS)
//delay后让转回主线程不然刷新view会有问题
.observeOn(AndroidSchedulers.mainThread())
}
mBinding.svgaOpen.startAnimation();
BoxModel.get().openBox(boxType, count, true)
.compose(bindToLifecycle())
.doOnError(throwable -> {
binding.ivOpen.setEnabled(true);
if (throwable instanceof FailReasonException) {
FailReasonException failReasonException = (FailReasonException) throwable;
switch (failReasonException.getCode()) {
case BoxModel.ERROR_CODE_KEY_NUM_NOT_ENOUGH:
break;
case BalanceNotEnoughExeption.code:
break;
}
}
mBinding.ivOpen.setEnabled(true);
SingleToastUtil.showToast(throwable.getMessage());
})
.subscribe(openBoxResult -> {
//binding.svgaOpen.stopAnimation();
//binding.randomLayout.addPrize(openBoxResult.getPrizeItemList());
changeKeyNum(openBoxResult.getRemainKeyNum());
binding.ivOpen.setEnabled(true);
mBinding.ivOpen.setEnabled(true);
cacheList.addAll(openBoxResult.getPrizeItemList());
});
}
@SuppressLint("CheckResult")
private void looperPrize() {
disposable = Observable.interval(0, 600, TimeUnit.MILLISECONDS)
Observable.interval(0, 600, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.filter(aLong -> cacheList.size() > 0)
.subscribe(aLong -> {
String url = cacheList.get(0).getPrizeImgUrl();
if (cacheList.size() > 0) cacheList.remove(0);
if (!TextUtils.isEmpty(url)) {
objectAnimator.start();
objectAnimator1.start();
binding.svgaGiftBg.startAnimation();
ImageLoadUtils.loadImage(context, url, binding.ivGiftAnim);
translationXAnimator.start();
if (translationYAnimator != null) translationYAnimator.start();
mBinding.ivGiftAnim.setVisibility(View.VISIBLE);
mBinding.svgaGiftBg.startAnimation();
ImageLoadUtils.loadImage(context, url, mBinding.ivGiftAnim);
}
}
, e -> looperPrize());//出错了继续looper......
@@ -261,13 +203,6 @@ public class TreasureBoxActivity extends BaseBindingDialog<ActivityTreasureBoxBi
}
private void changeBoxStatus() {
ivBox.removeCallbacks(runnableClose);
ivBox.removeCallbacks(runnableOpen);
ivBox.postDelayed(runnableOpen, 100);
ivBox.postDelayed(runnableClose, 3000);
}
/**
* 更新钥匙(锤子)数量
*
@@ -275,8 +210,7 @@ public class TreasureBoxActivity extends BaseBindingDialog<ActivityTreasureBoxBi
*/
private void changeKeyNum(int num) {
keyNum = num;
binding.tvKeyNum.setText(keyNum + "");
mBinding.tvKeyNum.setText(keyNum + "");
}
/**
@@ -285,71 +219,26 @@ public class TreasureBoxActivity extends BaseBindingDialog<ActivityTreasureBoxBi
* @param g
*/
private void setGold(double g) {
gold = g;
binding.tvDiamondNum.setText(FormatUtils.formatBigDecimal(gold));
PayModel.get().getCurrentWalletInfo().setGoldNum(g);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void handleAutoOpenBoxEvent(AutoOpenBoxEvent event) {
if (event.isRunning()) {
OpenBoxResult openBoxResult = event.getOpenBoxResult();
binding.randomLayout.addPrize(openBoxResult.getPrizeItemList());
changeKeyNum(openBoxResult.getRemainKeyNum());
if (openBoxResult.getRemainKeyNum() == 0)
binding.ivOpen.setImageResource(R.drawable.auto_open_box_normal);
} else {
binding.ivOpen.setImageResource(R.drawable.auto_open_box_normal);
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void handleBuyKeyEvent(BoxBuyKeyEvent event) {
if (event.isSuccess()) {
KeyInfo keyInfo = event.getKeyInfo();
int goldNum = keyInfo.getGoldNum();
changeKeyNum(keyInfo.getKeyNum());
setGold(goldNum);
if (event.isKeyDeficiency()) {
openBox(event.getCount());
}
} else {
switch (event.getCode()) {
case BalanceNotEnoughExeption.code:
// 刷新钱包
PayModel.get()
.getWalletInfo(AuthModel.get().getCurrentUid())
.subscribe(walletInfo -> setGold(walletInfo.getGoldNum()));
break;
}
}
mBinding.tvDiamondNum.setText(FormatUtils.formatBigDecimal(g));
PayModel.get().getCurrentWalletInfo().setDiamondNum(g);
}
@SuppressLint("CheckResult")
private void subscribeEvent() {
//更新金币数量和被踢出房间退出
IMNetEaseManager.get().getChatRoomEventObservable()
//.compose(bindToLifecycle())
.compose(bindToLifecycle())
.subscribe(roomEvent -> {
switch (roomEvent.getEvent()) {
case RoomEvent.WALLET_UPDATE:
setGold(roomEvent.getWalletInfo().getGoldNum());
loadKeyInfo();
setGold(roomEvent.getWalletInfo().getDiamondNum());
break;
case RoomEvent.KICK_OUT_ROOM:
closeDialog();
finish();
break;
}
});
}
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
EventBus.getDefault().unregister(this);
binding.randomLayout.stop();
ivBox.removeCallbacks(runnableOpen);
ivBox.removeCallbacks(runnableClose);
}
}

View File

@@ -1,121 +1,133 @@
package com.yizhuan.erban.treasure_box.activity;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.view.animation.AccelerateDecelerateInterpolator;
import com.netease.nim.uikit.common.util.sys.ScreenUtil;
import com.yizhuan.erban.R;
import com.yizhuan.erban.base.BaseBindingActivity;
import com.yizhuan.erban.databinding.ActivityTreasureBoxHonourBinding;
import com.yizhuan.erban.treasure_box.service.OpenBoxService;
import com.yizhuan.erban.treasure_box.service.OpenHonourBoxService;
import com.yizhuan.erban.treasure_box.widget.dialog.BoxMoreDialog;
import com.yizhuan.erban.treasure_box.widget.dialog.BuyKeyDialog;
import com.yizhuan.erban.treasure_box.widget.dialog.KeyDeficiencyDialog;
import com.yizhuan.erban.ui.pay.ChargeActivity;
import com.yizhuan.treasure_box.bean.HonourBuyKeyResultInfo;
import com.yizhuan.treasure_box.bean.OpenBoxHonourResult;
import com.yizhuan.treasure_box.bean.OpenBoxResult;
import com.yizhuan.treasure_box.event.AutoOpenHonourBoxEvent;
import com.yizhuan.treasure_box.event.HonourBoxBuyKeyEvent;
import com.yizhuan.erban.ui.utils.ImageLoadUtils;
import com.yizhuan.erban.ui.webview.DialogWebViewActivity;
import com.yizhuan.treasure_box.bean.PrizeInfo;
import com.yizhuan.treasure_box.model.BoxModel;
import com.yizhuan.treasure_box.model.IBoxModel;
import com.yizhuan.xchat_android_core.auth.AuthModel;
import com.yizhuan.xchat_android_core.exception.FailReasonException;
import com.yizhuan.xchat_android_core.manager.AvRoomDataManager;
import com.yizhuan.xchat_android_core.UriProvider;
import com.yizhuan.xchat_android_core.manager.IMNetEaseManager;
import com.yizhuan.xchat_android_core.manager.RoomEvent;
import com.yizhuan.xchat_android_core.pay.PayModel;
import com.yizhuan.xchat_android_core.pay.bean.WalletInfo;
import com.yizhuan.treasure_box.event.AutoOpenBoxEvent;
import com.yizhuan.xchat_android_core.statistic.StatisticManager;
import com.yizhuan.xchat_android_core.statistic.protocol.StatisticsProtocol;
import com.yizhuan.xchat_android_core.utils.StringUtils;
import com.yizhuan.xchat_android_core.utils.net.BalanceNotEnoughExeption;
import com.yizhuan.xchat_android_library.annatation.ActLayoutRes;
import com.yizhuan.xchat_android_library.utils.FormatUtils;
import com.yizhuan.xchat_android_library.utils.SingleToastUtil;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
@ActLayoutRes(R.layout.activity_treasure_box_honour)
public class TreasureBoxHonourActivity extends BaseBindingActivity<ActivityTreasureBoxHonourBinding> {
private volatile double gold;
private int price = 20;
private ImageView ivBox;
private volatile int keyNum;
private AnimationDrawable eggAnim;
private ArrayList<PrizeInfo> cacheList = new ArrayList<>();
private ObjectAnimator translationXAnimator;
private ObjectAnimator translationYAnimator;
private int boxType = IBoxModel.BOX_TYPE_HONOUR;
public static void start(Context context) {
Intent starter = new Intent(context, TreasureBoxHonourActivity.class);
//starter.putExtra();
context.startActivity(starter);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, ScreenUtil.screenHeight);
getWindow().setGravity(Gravity.CENTER);
subscribeEvent();
}
@Override
protected void init() {
mBinding.setClick(this);
ivBox = mBinding.ivBox;
translationXAnimator = ObjectAnimator.ofFloat(mBinding.ivGiftAnim, "translationX", 0,
ScreenUtil.screenWidth / 2f - ScreenUtil.dip2px(15 + 19)).setDuration(500);
translationXAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
translationXAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
mBinding.ivGiftAnim.setVisibility(View.GONE);
}
});
mBinding.ivBox.post(() -> {
translationYAnimator = ObjectAnimator.ofFloat(mBinding.ivGiftAnim, "translationY", 0,
ScreenUtil.screenHeight - (mBinding.ivBox.getBottom() + mBinding.ivBox.getTop()) / 2f - ScreenUtil.dip2px(55)).setDuration(500);
translationYAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
});
WalletInfo walletInfo = PayModel.get().getCurrentWalletInfo();
if (walletInfo != null) {
mBinding.tvDiamondNum.setText(FormatUtils.formatBigDecimal(walletInfo.getGoldNum()));
}
loadKeyInfo();
looperPrize();
}
@SuppressLint("CheckResult")
@Override
protected void onResume() {
super.onResume();
private void loadKeyInfo() {
BoxModel.get()
.getHonourKeyInfo(AuthModel.get().getCurrentUid())
.getKeyInfo(boxType)
.compose(bindToLifecycle())
.doOnError(throwable -> toast(throwable.getMessage()))
.subscribe(keyInfo -> {
changeKeyNum(keyInfo.getKeyNum());
price = keyInfo.getKeyPrice();
});
WalletInfo walletInfo = PayModel.get().getCurrentWalletInfo();
if (walletInfo != null) gold = walletInfo.getGoldNum();
mBinding.tvDiamondNum.setText(FormatUtils.formatBigDecimal(gold));
mBinding.ivOpen.setImageResource(OpenHonourBoxService.isAutoOpenBox ? R.drawable.stop_open_box : R.drawable.auto_open_box);
mBinding.randomLayout.start();
EventBus.getDefault().register(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.ib_close:
case R.id.root_view:
finish();
break;
case R.id.iv_open:
mBinding.ivOpen.setEnabled(false);
ivBox.setImageResource(R.drawable.box_close_normal);
openBox(StringUtils.toInt(mBinding.editNum.getText().toString()));
break;
case R.id.iv_more:
new BoxMoreDialog(context).openDialog();
break;
case R.id.tv_rank:
DialogWebViewActivity.start(context, UriProvider.getBoxRank(), false);
break;
case R.id.iv_sub:
mBinding.editNum.setText(String.valueOf(Math.max(StringUtils.toInt(mBinding.editNum.getText().toString(), 0) - 1, 0)));
break;
case R.id.iv_add:
mBinding.editNum.setText(String.valueOf(StringUtils.toInt(mBinding.editNum.getText().toString(), 0) + 1));
break;
case R.id.view_bg:
case R.id.iv_title:
//do nothing
break;
default:
break;
}
@@ -125,13 +137,6 @@ public class TreasureBoxHonourActivity extends BaseBindingActivity<ActivityTreas
new BuyKeyDialog(this, price, IBoxModel.BOX_TYPE_HONOUR).show();
}
@Override
protected void onPause() {
super.onPause();
mBinding.randomLayout.stop();
EventBus.getDefault().unregister(this);
}
/**
* 检查钥匙(锤子)数量
*
@@ -140,6 +145,11 @@ public class TreasureBoxHonourActivity extends BaseBindingActivity<ActivityTreas
* false 表示数量没问题,可以继续操作
*/
private boolean checkKeyNum(int count) {
if (count == 0) {
SingleToastUtil.showToast("开启数量不能为0!");
return true;
}
if (keyNum == 0) {
showBuyDialog();
return true;
@@ -151,60 +161,47 @@ public class TreasureBoxHonourActivity extends BaseBindingActivity<ActivityTreas
return false;
}
private Runnable runnableClose = () -> mBinding.ivBox.setImageResource(R.drawable.box_close);
private Runnable runnableOpen = () -> {
if (eggAnim == null) {
eggAnim = (AnimationDrawable) getResources().getDrawable(R.drawable.anim_honour_egg);
} else {
eggAnim.stop();
}
mBinding.ivBox.setImageDrawable(eggAnim);
eggAnim.start();
};
@SuppressLint("CheckResult")
private void openBox(int count) {
mBinding.ivOpen.setEnabled(false);
if (checkKeyNum(count)) {
mBinding.ivOpen.setEnabled(true);
return;
}
changeBoxStatus();
mBinding.svgaOpen.startAnimation();
BoxModel.get()
.openHonourBox(AuthModel.get().getCurrentUid(), false,
AvRoomDataManager.get().mCurrentRoomInfo.getUid(), count,
AuthModel.get().getTicket())
.openBox(boxType, count, false)
.compose(bindToLifecycle())
.delay(1, TimeUnit.SECONDS)
//delay后让转回主线程不然刷新view会有问题
.observeOn(AndroidSchedulers.mainThread())
.doOnError(throwable -> {
mBinding.ivOpen.setEnabled(true);
if (throwable instanceof FailReasonException) {
FailReasonException failReasonException = (FailReasonException) throwable;
switch (failReasonException.getCode()) {
case BoxModel.ERROR_CODE_KEY_NUM_NOT_ENOUGH:
break;
case BalanceNotEnoughExeption.code:
break;
}
}
toast(throwable.getMessage());
})
.subscribe(openBoxResult -> {
mBinding.randomLayout.addPrize(openBoxResult.getPrizeItemList());
changeKeyNum(openBoxResult.getRemainKeyNum());
mBinding.ivOpen.setEnabled(true);
cacheList.addAll(openBoxResult.getPrizeItemList());
});
}
@SuppressLint("CheckResult")
private void looperPrize() {
Observable.interval(0, 600, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.filter(aLong -> cacheList.size() > 0)
.subscribe(aLong -> {
String url = cacheList.get(0).getPrizeImgUrl();
if (cacheList.size() > 0) cacheList.remove(0);
if (!TextUtils.isEmpty(url)) {
translationXAnimator.start();
if (translationYAnimator != null) translationYAnimator.start();
mBinding.ivGiftAnim.setVisibility(View.VISIBLE);
mBinding.svgaGiftBg.startAnimation();
ImageLoadUtils.loadImage(context, url, mBinding.ivGiftAnim);
}
}
, e -> looperPrize());//出错了继续looper......
private void changeBoxStatus() {
ivBox.removeCallbacks(runnableClose);
ivBox.removeCallbacks(runnableOpen);
ivBox.postDelayed(runnableOpen, 100);
ivBox.postDelayed(runnableClose, 3000);
}
/**
@@ -215,7 +212,6 @@ public class TreasureBoxHonourActivity extends BaseBindingActivity<ActivityTreas
private void changeKeyNum(int num) {
keyNum = num;
mBinding.tvKeyNum.setText(keyNum + "");
}
/**
@@ -224,44 +220,8 @@ public class TreasureBoxHonourActivity extends BaseBindingActivity<ActivityTreas
* @param g
*/
private void setGold(double g) {
gold = g;
mBinding.tvDiamondNum.setText(FormatUtils.formatBigDecimal(gold));
PayModel.get().getCurrentWalletInfo().setGoldNum(g);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void handleAutoOpenBoxEvent(AutoOpenHonourBoxEvent event) {
if (event.isRunning()) {
OpenBoxHonourResult openBoxResult = event.getOpenBoxResult();
mBinding.randomLayout.addPrize(openBoxResult.getPrizeItemList());
changeKeyNum(openBoxResult.getRemainKeyNum());
if (openBoxResult.getRemainKeyNum() == 0)
mBinding.ivOpen.setImageResource(R.drawable.auto_open_box);
} else {
mBinding.ivOpen.setImageResource(R.drawable.auto_open_box);
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void handleBuyKeyEvent(HonourBoxBuyKeyEvent event) {
if (event.isSuccess()) {
HonourBuyKeyResultInfo keyInfo = event.getKeyInfo();
int goldNum = keyInfo.getGoldNum();
changeKeyNum(keyInfo.getKeyNum());
setGold(goldNum);
if (event.isKeyDeficiency()) {
openBox(event.getCount());
}
} else {
switch (event.getCode()) {
case BalanceNotEnoughExeption.code:
// 刷新钱包
PayModel.get()
.getWalletInfo(AuthModel.get().getCurrentUid())
.subscribe(walletInfo -> setGold(walletInfo.getGoldNum()));
break;
}
}
mBinding.tvDiamondNum.setText(FormatUtils.formatBigDecimal(g));
PayModel.get().getCurrentWalletInfo().setDiamondNum(g);
}
@SuppressLint("CheckResult")
@@ -272,7 +232,8 @@ public class TreasureBoxHonourActivity extends BaseBindingActivity<ActivityTreas
.subscribe(roomEvent -> {
switch (roomEvent.getEvent()) {
case RoomEvent.WALLET_UPDATE:
setGold(roomEvent.getWalletInfo().getGoldNum());
loadKeyInfo();
setGold(roomEvent.getWalletInfo().getDiamondNum());
break;
case RoomEvent.KICK_OUT_ROOM:
finish();
@@ -281,12 +242,5 @@ public class TreasureBoxHonourActivity extends BaseBindingActivity<ActivityTreas
});
}
@Override
protected void onDestroy() {
super.onDestroy();
mBinding.randomLayout.stop();
ivBox.removeCallbacks(runnableOpen);
ivBox.removeCallbacks(runnableClose);
}
}

View File

@@ -1,98 +0,0 @@
package com.yizhuan.erban.treasure_box.service;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import androidx.annotation.Nullable;
import com.yizhuan.treasure_box.model.BoxModel;
import com.yizhuan.xchat_android_core.exception.FailReasonException;
import com.yizhuan.treasure_box.event.AutoOpenBoxEvent;
import com.yizhuan.xchat_android_library.utils.SingleToastUtil;
import com.yizhuan.xchat_android_library.utils.config.BasicConfig;
import org.greenrobot.eventbus.EventBus;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.disposables.Disposable;
public class OpenBoxService extends Service {
public static boolean isAutoOpenBox;
public static boolean isPublic;
private Disposable disposable;
private Disposable disposable2;
private int keyNum;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
public static void start(Context context) {
Intent starter = new Intent(context, OpenBoxService.class);
context.startActivity(starter);
}
public static void stop(Context context) {
Intent stop = new Intent(context, OpenBoxService.class);
context.stopService(stop);
}
@Override
public void onCreate() {
super.onCreate();
isAutoOpenBox = true;
disposable = Observable.interval(0, 2, TimeUnit.SECONDS)
.subscribe(this::openBox);
}
private void openBox(Long aLong) {
disposable2 = BoxModel.get()
.openBox(1, isPublic)
.doOnError(throwable -> {
if (throwable instanceof FailReasonException) {
FailReasonException failReasonException = (FailReasonException) throwable;
switch (failReasonException.getCode()) {
case BoxModel.ERROR_CODE_KEY_NUM_NOT_ENOUGH:
EventBus.getDefault().post(new AutoOpenBoxEvent().setRunning(false));
stopAutoOpenBox();
break;
}
}
SingleToastUtil.showToast(BasicConfig.INSTANCE.getAppContext(),throwable.getMessage());
})
.subscribe(openBoxResult -> {
keyNum = openBoxResult.getRemainKeyNum();
EventBus.getDefault().post(new AutoOpenBoxEvent().setRunning(true).setOpenBoxResult(openBoxResult));
if (keyNum == 0) {
stopAutoOpenBox();
}
});
}
private void stopAutoOpenBox() {
disposable.dispose();
stopSelf();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
isAutoOpenBox = false;
if (disposable != null) disposable.dispose();
if (disposable2 != null) disposable2.dispose();
}
}

View File

@@ -1,102 +0,0 @@
package com.yizhuan.erban.treasure_box.service;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import androidx.annotation.Nullable;
import com.yizhuan.treasure_box.event.AutoOpenHonourBoxEvent;
import com.yizhuan.treasure_box.model.BoxModel;
import com.yizhuan.xchat_android_core.auth.AuthModel;
import com.yizhuan.xchat_android_core.exception.FailReasonException;
import com.yizhuan.xchat_android_core.manager.AvRoomDataManager;
import com.yizhuan.xchat_android_library.utils.SingleToastUtil;
import com.yizhuan.xchat_android_library.utils.config.BasicConfig;
import org.greenrobot.eventbus.EventBus;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.disposables.Disposable;
public class OpenHonourBoxService extends Service {
public static boolean isAutoOpenBox;
public static boolean isPublic;
private Disposable disposable;
private Disposable disposable2;
private int keyNum;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
public static void start(Context context) {
Intent starter = new Intent(context, OpenHonourBoxService.class);
context.startActivity(starter);
}
public static void stop(Context context) {
Intent stop = new Intent(context, OpenHonourBoxService.class);
context.stopService(stop);
}
@Override
public void onCreate() {
super.onCreate();
isAutoOpenBox = true;
disposable = Observable.interval(0, 2, TimeUnit.SECONDS)
.subscribe(this::openBox);
}
private void openBox(Long aLong) {
disposable2 = BoxModel.get()
.openHonourBox(AuthModel.get().getCurrentUid(), isPublic,
AvRoomDataManager.get().mCurrentRoomInfo.getUid(), 1,
AuthModel.get().getTicket())
.doOnError(throwable -> {
if (throwable instanceof FailReasonException) {
FailReasonException failReasonException = (FailReasonException) throwable;
switch (failReasonException.getCode()) {
case BoxModel.ERROR_CODE_KEY_NUM_NOT_ENOUGH:
EventBus.getDefault().post(new AutoOpenHonourBoxEvent().setRunning(false));
stopAutoOpenBox();
break;
}
}
SingleToastUtil.showToast(BasicConfig.INSTANCE.getAppContext(),throwable.getMessage());
})
.subscribe(openBoxResult -> {
keyNum = openBoxResult.getRemainKeyNum();
EventBus.getDefault().post(new AutoOpenHonourBoxEvent().setRunning(true).setOpenBoxResult(openBoxResult));
if (keyNum == 0) {
stopAutoOpenBox();
}
});
}
private void stopAutoOpenBox() {
disposable.dispose();
stopSelf();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
isAutoOpenBox = false;
if (disposable != null) disposable.dispose();
if (disposable2 != null) disposable2.dispose();
}
}

View File

@@ -7,6 +7,8 @@ import android.view.WindowManager;
import com.yizhuan.erban.R;
import com.yizhuan.erban.databinding.DialogBoxMoreBinding;
import com.yizhuan.erban.ui.webview.DialogWebViewActivity;
import com.yizhuan.xchat_android_core.UriProvider;
import com.yizhuan.xchat_android_library.annatation.ActLayoutRes;
@ActLayoutRes(R.layout.dialog_box_more)
@@ -33,9 +35,11 @@ public class BoxMoreDialog extends BaseBindingDialog<DialogBoxMoreBinding> {
@Override
protected void init() {
binding.tvHistory.setOnClickListener(v -> {
DialogWebViewActivity.start(context, UriProvider.getBoxHistory(),false);
closeDialog();
});
binding.tvBoxRule.setOnClickListener(v -> {
DialogWebViewActivity.start(context, UriProvider.getBoxHelp(),false);
closeDialog();
});
binding.tvGetKey.setOnClickListener(v -> {

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -13,7 +13,8 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/root_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:onClick="@{click}">
<View
android:id="@+id/view_bg"
@@ -23,6 +24,7 @@
android:layout_marginTop="17dp"
android:layout_marginEnd="@dimen/dp_30"
android:background="@drawable/treasure_box_bg_normal"
android:onClick="@{click}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
@@ -32,6 +34,7 @@
android:id="@+id/iv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="@{click}"
android:src="@drawable/treasure_box_title_normal"
app:layout_constraintBottom_toTopOf="@id/view_bg"
app:layout_constraintEnd_toEndOf="parent"
@@ -75,12 +78,12 @@
android:layout_marginTop="18dp"
android:drawableTop="@drawable/treasure_box_diamond"
android:gravity="center"
android:text="200"
android:textColor="#ffffffff"
android:textSize="11sp"
app:layout_constraintEnd_toEndOf="@id/iv_more"
app:layout_constraintStart_toStartOf="@id/iv_more"
app:layout_constraintTop_toBottomOf="@id/iv_more" />
app:layout_constraintTop_toBottomOf="@id/iv_more"
tools:text="200" />
<TextView
android:id="@+id/tv_key_num"
@@ -89,12 +92,12 @@
android:layout_marginTop="10dp"
android:drawableTop="@drawable/treasure_box_meteor"
android:gravity="center"
android:text="200"
android:textColor="#ffffffff"
android:textSize="11sp"
app:layout_constraintEnd_toEndOf="@id/iv_more"
app:layout_constraintStart_toStartOf="@id/iv_more"
app:layout_constraintTop_toBottomOf="@id/tv_diamond_num" />
app:layout_constraintTop_toBottomOf="@id/tv_diamond_num"
tools:text="200" />
<ImageView
android:id="@+id/iv_box"
@@ -160,35 +163,27 @@
android:id="@+id/iv_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="@{click}"
android:src="@drawable/treasure_box_add_normal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/edit_num"
app:layout_constraintTop_toTopOf="@id/iv_sub" />
<ImageView
android:id="@+id/iv_open"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="25dp"
android:layout_marginTop="15dp"
android:layout_marginEnd="25dp"
android:layout_marginBottom="22dp"
android:onClick="@{click}"
android:src="@drawable/auto_open_box_normal"
app:layout_constraintBottom_toBottomOf="@id/view_bg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="@id/view_bg"
app:layout_constraintStart_toStartOf="@id/view_bg"
app:layout_constraintTop_toBottomOf="@id/iv_sub" />
<com.yizhuan.erban.treasure_box.widget.PrizeCover
android:id="@+id/random_layout"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_marginTop="60dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@id/view_bg"
tools:visibility="gone" />
<com.opensource.svgaplayer.SVGAImageView
android:id="@+id/svga_open"
android:layout_width="200dp"

View File

@@ -13,27 +13,33 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/root_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_15"
android:layout_marginEnd="@dimen/dp_15">
android:layout_height="match_parent"
android:onClick="@{click}">
<View
android:id="@+id/view_bg"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_width="0dp"
android:layout_height="387dp"
android:layout_marginStart="@dimen/dp_30"
android:layout_marginTop="17dp"
android:layout_marginEnd="@dimen/dp_30"
android:background="@drawable/treasure_box_bg_normal"
android:onClick="@{click}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/iv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="@{click}"
android:src="@drawable/treasure_box_title"
app:layout_constraintBottom_toTopOf="@id/view_bg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="@id/view_bg" />
<TextView
android:id="@+id/tv_rank"
@@ -72,12 +78,12 @@
android:layout_marginTop="18dp"
android:drawableTop="@drawable/treasure_box_diamond"
android:gravity="center"
android:text="200"
android:textColor="#ffffffff"
android:textSize="11sp"
app:layout_constraintEnd_toEndOf="@id/iv_more"
app:layout_constraintStart_toStartOf="@id/iv_more"
app:layout_constraintTop_toBottomOf="@id/iv_more" />
app:layout_constraintTop_toBottomOf="@id/iv_more"
tools:text="200" />
<TextView
android:id="@+id/tv_key_num"
@@ -86,25 +92,33 @@
android:layout_marginTop="10dp"
android:drawableTop="@drawable/treasure_box_meteor"
android:gravity="center"
android:text="200"
android:textColor="#ffffffff"
android:textSize="11sp"
app:layout_constraintEnd_toEndOf="@id/iv_more"
app:layout_constraintStart_toStartOf="@id/iv_more"
app:layout_constraintTop_toBottomOf="@id/tv_diamond_num" />
app:layout_constraintTop_toBottomOf="@id/tv_diamond_num"
tools:text="200" />
<ImageView
android:id="@+id/iv_box"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="60dp"
android:layout_marginTop="45dp"
android:onClick="@{click}"
android:src="@drawable/box_close_normal"
android:src="@drawable/box_close"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="@id/view_bg" />
<ImageView
android:id="@+id/iv_gift_anim"
android:layout_width="50dp"
android:layout_height="50dp"
app:layout_constraintBottom_toBottomOf="@id/iv_box"
app:layout_constraintEnd_toEndOf="@id/iv_box"
app:layout_constraintStart_toStartOf="@id/iv_box"
app:layout_constraintTop_toTopOf="@id/iv_box" />
<TextView
android:id="@+id/tv_continuous_open"
@@ -137,7 +151,7 @@
android:background="@color/white_transparent_12"
android:gravity="center"
android:minWidth="40dp"
android:text="9999"
android:text="1"
android:textColor="#ffc33c98"
android:textSize="13sp"
app:layout_constraintBottom_toBottomOf="@id/iv_sub"
@@ -160,24 +174,45 @@
android:id="@+id/iv_open"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="25dp"
android:layout_marginTop="15dp"
android:layout_marginEnd="25dp"
android:layout_marginBottom="22dp"
android:onClick="@{click}"
android:src="@drawable/auto_open_box"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="@id/view_bg"
app:layout_constraintEnd_toEndOf="@id/view_bg"
app:layout_constraintStart_toStartOf="@id/view_bg"
app:layout_constraintTop_toBottomOf="@id/iv_sub" />
<com.yizhuan.erban.treasure_box.widget.PrizeCover
android:id="@+id/random_layout"
<com.opensource.svgaplayer.SVGAImageView
android:id="@+id/svga_open"
android:layout_width="200dp"
android:layout_height="175dp"
android:layout_height="200dp"
android:layout_marginTop="60dp"
app:autoPlay="false"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="invisible" />
app:layout_constraintTop_toTopOf="@id/view_bg"
app:loopCount="1"
app:source="svga/bubble_pack.svga"
tools:visibility="gone" />
<com.opensource.svgaplayer.SVGAImageView
android:id="@+id/svga_gift_bg"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="80dp"
android:layout_marginTop="60dp"
app:autoPlay="false"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@id/iv_box"
app:layout_constraintTop_toTopOf="@id/iv_box"
app:loopCount="1"
app:source="svga/bubble_tran_bg.svga"
tools:background="@color/white"
tools:visibility="gone" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -54,13 +54,17 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/iv_title" />
<ImageView
<TextView
android:id="@+id/iv_open"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:layout_marginBottom="12dp"
android:src="@drawable/bg_treasure_box_dialog_button"
android:background="@drawable/choose_box_bg_normal"
android:gravity="center"
android:text="立即开启"
android:textColor="@color/white"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
@@ -110,13 +114,18 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/iv_title_honour" />
<ImageView
<TextView
android:id="@+id/iv_open_honour"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:layout_marginBottom="12dp"
android:src="@drawable/bg_treasure_box_dialog_button"
android:background="@drawable/choose_box_bg"
android:gravity="center"
android:text="立即开启"
android:textColor="@color/white"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />

View File

@@ -301,5 +301,26 @@ public class UriProvider {
public static String getPersonalCharismaRank() {
return JAVA_WEB_URL.concat("/accompany/modules/charm/index.html");
}
/**
* 宝箱排行
*
*/
public static String getBoxRank() {
return JAVA_WEB_URL.concat("/accompany/modules/rank/index.html#/wishingWellRank");
}
/**
* 宝箱帮助
*
*/
public static String getBoxHelp() {
return JAVA_WEB_URL.concat("/accompany/modules/rank/index.html#/wishingWellRule");
}
/**
* 宝箱记录
*
*/
public static String getBoxHistory() {
return JAVA_WEB_URL.concat("/accompany/modules/rank/index.html#/wishingWellRecord");
}
}

View File

@@ -1273,8 +1273,8 @@ public class AuthModel extends BaseModel implements IAuthModel {
//更新消息提醒配置
initNotificationConfig();
Log.e(TAG, "onSuccess: ready to open push");
NIMClient.getService(MixPushService.class).enable(true).setCallback(new RequestCallbackWrapper<Void>() {
//暂时关闭云信第三方推送,以后再开
NIMClient.getService(MixPushService.class).enable(false).setCallback(new RequestCallbackWrapper<Void>() {
@Override
public void onResult(int code, Void result, Throwable exception) {
Log.e(TAG, "onResult() called with: code = [" + code + "], result = [" + result + "], exception = [" + exception + "]");

View File

@@ -57,11 +57,11 @@ public class BoxModel extends BaseModel implements IBoxModel {
}
@Override
public Single<OpenBoxResult> openBox(int keyNum, boolean sendMessage) {
public Single<OpenBoxResult> openBox(int boxType,int keyNum, boolean sendMessage) {
if (AvRoomDataManager.get().mCurrentRoomInfo == null) {
return Single.error(new Throwable("当前房间信息为空."));
}
return api.openBox(keyNum, sendMessage, AuthModel.get().getCurrentUid(),
return api.openBox(boxType,keyNum, sendMessage, AuthModel.get().getCurrentUid(),
AvRoomDataManager.get().mCurrentRoomInfo.getUid())
.compose(RxHelper.handleSchedulers())
.flatMap(openBoxResultServiceResult -> {
@@ -110,8 +110,8 @@ public class BoxModel extends BaseModel implements IBoxModel {
}
@Override
public Single<KeyInfo> getKeyInfo() {
return api.getKeyInfo(AuthModel.get().getCurrentUid())
public Single<KeyInfo> getKeyInfo(int boxType) {
return api.getKeyInfo(boxType,AuthModel.get().getCurrentUid())
.compose(RxHelper.handleSchedulers())
.compose(RxHelper.handleBeanData());
}
@@ -184,7 +184,8 @@ public class BoxModel extends BaseModel implements IBoxModel {
*/
@FormUrlEncoded
@POST("box/draw")
Single<ServiceResult<OpenBoxResult>> openBox(@Field("keyNum") int keyNum,
Single<ServiceResult<OpenBoxResult>> openBox(@Field("boxType") int boxType,
@Field("keyNum") int keyNum,
@Field("sendMessage") boolean sendMessage,
@Field("uid") long uid,
@Field("roomUid") long roomUid);
@@ -208,7 +209,8 @@ public class BoxModel extends BaseModel implements IBoxModel {
* @return
*/
@GET("box/userkey")
Single<ServiceResult<KeyInfo>> getKeyInfo(@Query("uid") long uid);
Single<ServiceResult<KeyInfo>> getKeyInfo(@Query("boxType") int boxType,
@Query("uid") long uid);
/**
* 获取开箱子配置图片

View File

@@ -31,7 +31,7 @@ public interface IBoxModel extends IModel {
* @param sendMessage
* @return
*/
Single<OpenBoxResult> openBox(int keyNum, boolean sendMessage);
Single<OpenBoxResult> openBox(int boxType,int keyNum, boolean sendMessage);
/**
* 获取中奖记录
@@ -60,7 +60,7 @@ public interface IBoxModel extends IModel {
*
* @return
*/
Single<KeyInfo> getKeyInfo();
Single<KeyInfo> getKeyInfo(int boxType);
/**
* 获取奖品列表

View File

@@ -57,7 +57,7 @@ public class ScreenUtil {
DisplayMetrics dm = context.getApplicationContext().getResources().getDisplayMetrics();
screenWidth = dm.widthPixels;
screenHeight = dm.heightPixels;
screenMin = (screenWidth > screenHeight) ? screenHeight : screenWidth;
screenMin = Math.min(screenWidth, screenHeight);
density = dm.density;
scaleDensity = dm.scaledDensity;
xdpi = dm.xdpi;