From a821915a1ab02cc016d6e135484c36c310feab93 Mon Sep 17 00:00:00 2001 From: jack Date: Fri, 14 Jan 2022 10:49:26 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E5=85=89=E7=8E=AF=E5=8A=A9=E6=89=8BV5?= =?UTF-8?q?.6.0=E3=80=91=E6=B8=B8=E6=88=8F=E9=A2=84=E7=BA=A6=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=88=E7=AC=AC=E5=9B=9B=E6=9C=9F=EF=BC=89https://g?= =?UTF-8?q?it.shanqu.cc/pm/halo-app-issues/-/issues/1637?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/gh/common/DefaultJsApi.kt | 45 +++++----- .../com/gh/common/constant/Constants.java | 4 +- .../gh/common/databind/BindingAdapters.java | 15 +--- .../gh/common/dialog/ReserveDialogFragment.kt | 1 + .../java/com/gh/common/util/DialogUtils.java | 48 ++++++++++ .../com/gh/common/util/DownloadItemUtils.kt | 19 +--- .../com/gh/common/util/ReservationHelper.kt | 85 ++++++++++++------ .../com/gh/common/util/WechatBindHelper.kt | 51 +++++++++++ .../java/com/gh/gamecenter/MainActivity.java | 2 + .../adapter/viewholder/DetailViewHolder.java | 27 ++---- .../gamecenter/entity/WechatConfigEntity.kt | 11 +++ .../gamedetail/GameDetailFragment.kt | 18 +--- .../retrofit/service/ApiService.java | 6 ++ .../gh/gamecenter/user/UserRepository.java | 2 + .../assistant/fragment/SettingsFragment.java | 73 ++++----------- .../drawable-xxxhdpi/bg_reserve_success.webp | Bin 0 -> 64476 bytes .../drawable-xxxhdpi/ic_reserve_success.webp | Bin 0 -> 1670 bytes .../ic_reserve_success_close.png | Bin 0 -> 710 bytes .../main/res/layout/dialog_alert_default.xml | 3 +- .../layout/dialog_wecaht_reserve_success.xml | 69 ++++++++++++++ app/src/main/res/layout/fragment_setting.xml | 39 +++++++- app/src/main/res/values/strings.xml | 1 + 22 files changed, 344 insertions(+), 175 deletions(-) create mode 100644 app/src/main/java/com/gh/common/util/WechatBindHelper.kt create mode 100644 app/src/main/java/com/gh/gamecenter/entity/WechatConfigEntity.kt create mode 100644 app/src/main/res/drawable-xxxhdpi/bg_reserve_success.webp create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_reserve_success.webp create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_reserve_success_close.png create mode 100644 app/src/main/res/layout/dialog_wecaht_reserve_success.xml diff --git a/app/src/main/java/com/gh/common/DefaultJsApi.kt b/app/src/main/java/com/gh/common/DefaultJsApi.kt index 7a0907f696..9907a142eb 100644 --- a/app/src/main/java/com/gh/common/DefaultJsApi.kt +++ b/app/src/main/java/com/gh/common/DefaultJsApi.kt @@ -125,24 +125,16 @@ class DefaultJsApi(var context: Context) { wechatLoginInfoMap["access_token"] = jsonContent.getString("access_token") wechatLoginInfoMap["refresh_token"] = jsonContent.getString("refresh_token") - RetrofitManager.getInstance() - .api - .postBindWechat(wechatLoginInfoMap.createRequestBody()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(object : BiResponse() { - override fun onSuccess(data: ResponseBody) { - EnergyTaskHelper.postEnergyTask("bind_wechat") - handler.complete(true) - } + WechatBindHelper.bindWechat(wechatLoginInfoMap, object : BiCallback { + override fun onFirst(first: Boolean) { + EnergyTaskHelper.postEnergyTask("bind_wechat") + handler.complete(true) + } - override fun onFailure(exception: Exception) { - handler.complete(false) - if (exception is HttpException) { - ErrorHelper.handleError(HaloApp.getInstance().application, exception.response().errorBody()?.string()) - } - } - }) + override fun onSecond(second: Boolean) { + handler.complete(false) + } + }) } override fun onLoginFailure(loginType: LoginTag, error: String) { @@ -152,9 +144,16 @@ class DefaultJsApi(var context: Context) { } } + @JavascriptInterface + fun refreshWechatBindData(msg: Any){ + WechatBindHelper.getWechatConfig() + } + @JavascriptInterface fun copyText(msg: Any) { - msg.toString().copyTextAndToast() + runOnUiThread { + msg.toString().copyTextAndToast() + } } @JavascriptInterface @@ -404,10 +403,12 @@ class DefaultJsApi(var context: Context) { internal data class ImageShareEvent(var image: String = "", var type: String = "") @Keep - internal data class InviteFriendsEvent(var type: String = "", - var way: String = "", - var url: String = "", - var poster: String = "") + internal data class InviteFriendsEvent( + var type: String = "", + var way: String = "", + var url: String = "", + var poster: String = "" + ) @Keep internal data class LogEvent(var jsonString: String = "", var logStore: String = "") diff --git a/app/src/main/java/com/gh/common/constant/Constants.java b/app/src/main/java/com/gh/common/constant/Constants.java index bf9160c809..7ed05543b1 100644 --- a/app/src/main/java/com/gh/common/constant/Constants.java +++ b/app/src/main/java/com/gh/common/constant/Constants.java @@ -238,6 +238,8 @@ public class Constants { public static final String SP_TEENAGER_MODE = "teenager_mode"; // 我的游戏引导 public static final String SP_MY_GAME_GUIDE = "my_game_guide"; + //微信绑定配置信息 + public static final String SP_WECHAT_CONFIG = "wechat_config"; //手机号码匹配规则 public static final String REGEX_MOBILE = "^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$"; @@ -248,7 +250,7 @@ public class Constants { public static final String INPUT_RULE = "0123456789abcdefghijklnmopqrstuvwxyzABCDEFGHIJKLNMOPQRSTUVWXYZ_"; // 微信绑定地址 - public static final String WECHAT_BIND_ADDRESS_DEV = "https://resource.ghzs.com/page/wechat_dev/index.html#/"; + public static final String WECHAT_BIND_ADDRESS_DEV = "https://dev-and-static.ghzs.com/web/wechat_bind/index.html#/"; public static final String WECHAT_BIND_ADDRESS = "https://resource.ghzs.com/page/wechat_pro/index.html#/"; // 礼仪考试地址 diff --git a/app/src/main/java/com/gh/common/databind/BindingAdapters.java b/app/src/main/java/com/gh/common/databind/BindingAdapters.java index 18ad963217..75c6c4b89e 100644 --- a/app/src/main/java/com/gh/common/databind/BindingAdapters.java +++ b/app/src/main/java/com/gh/common/databind/BindingAdapters.java @@ -24,7 +24,6 @@ import com.gh.base.OnViewClickListener; import com.gh.common.constant.Config; import com.gh.common.dialog.CertificationDialog; import com.gh.common.dialog.PackageCheckDialogFragment; -import com.gh.common.dialog.ReserveDialogFragment; import com.gh.common.exposure.ExposureEvent; import com.gh.common.history.HistoryHelper; import com.gh.common.repository.ReservationRepository; @@ -475,11 +474,10 @@ public class BindingAdapters { RealNameHelper.checkIfAuth(v.getContext(), gameEntity, () -> { GamePermissionDialogFragment.show((AppCompatActivity) v.getContext(), gameEntity, gameEntity.getInfo(), () -> { CheckLoginUtils.checkLogin(progressBar.getContext(), "", () -> { - ReserveDialogFragment dialogFragment = ReserveDialogFragment.getInstance(gameEntity, () -> { + ReservationHelper.reserve(v.getContext(), gameEntity.getId(), () -> { LogUtils.logReservation(gameEntity, traceEvent); updateReservation(progressBar, gameEntity); }); - dialogFragment.show(((AppCompatActivity) progressBar.getContext()).getSupportFragmentManager(), "reserve"); }); }); }); @@ -617,17 +615,8 @@ public class BindingAdapters { * 而arguments无法传递回调),或者dismiss该DialogFragment */ private static void restoreDialogFragment(DownloadProgressBar progressBar, GameEntity gameEntity, ExposureEvent traceEvent) { - ReserveDialogFragment reserveDialogFragment = - ((ReserveDialogFragment)((AppCompatActivity) progressBar.getContext()).getSupportFragmentManager().findFragmentByTag("reserve")); - if (reserveDialogFragment != null) { - reserveDialogFragment.setSuccessCallback(() -> { - LogUtils.logReservation(gameEntity, traceEvent); - updateReservation(progressBar, gameEntity); - }); - } - GamePermissionDialogFragment gamePermissionDialogFragment = - ((GamePermissionDialogFragment)((AppCompatActivity) progressBar.getContext()).getSupportFragmentManager().findFragmentByTag(GamePermissionDialogFragment.class.getSimpleName())); + ((GamePermissionDialogFragment) ((AppCompatActivity) progressBar.getContext()).getSupportFragmentManager().findFragmentByTag(GamePermissionDialogFragment.class.getSimpleName())); if (gamePermissionDialogFragment != null) { gamePermissionDialogFragment.dismissAllowingStateLoss(); } diff --git a/app/src/main/java/com/gh/common/dialog/ReserveDialogFragment.kt b/app/src/main/java/com/gh/common/dialog/ReserveDialogFragment.kt index 24b8b92644..670c676155 100644 --- a/app/src/main/java/com/gh/common/dialog/ReserveDialogFragment.kt +++ b/app/src/main/java/com/gh/common/dialog/ReserveDialogFragment.kt @@ -35,6 +35,7 @@ import org.json.JSONArray import org.json.JSONObject // 预约弹窗 +@Deprecated("v5.6.0废弃") class ReserveDialogFragment : BaseDialogFragment(), KeyboardHeightObserver { // : BaseTrackableDialogFragment() { diff --git a/app/src/main/java/com/gh/common/util/DialogUtils.java b/app/src/main/java/com/gh/common/util/DialogUtils.java index 49daa78fdb..9ebab7a1a5 100644 --- a/app/src/main/java/com/gh/common/util/DialogUtils.java +++ b/app/src/main/java/com/gh/common/util/DialogUtils.java @@ -66,6 +66,7 @@ import com.gh.gamecenter.R; import com.gh.gamecenter.SuggestionActivity; import com.gh.gamecenter.adapter.ReportReasonAdapter; import com.gh.gamecenter.adapter.viewholder.PrivacyPolicyItemViewHolder; +import com.gh.gamecenter.databinding.DialogAlertDefaultBinding; import com.gh.gamecenter.databinding.DialogBindPhoneBinding; import com.gh.gamecenter.databinding.DialogEnergySignBinding; import com.gh.gamecenter.databinding.DialogOverseaConfirmationBinding; @@ -73,6 +74,7 @@ import com.gh.gamecenter.databinding.DialogPackageParseErrorBinding; import com.gh.gamecenter.databinding.DialogQuickLoginPermissionBinding; import com.gh.gamecenter.databinding.DialogReceiveLibaoSuccessBinding; import com.gh.gamecenter.databinding.DialogReportReasonBinding; +import com.gh.gamecenter.databinding.DialogWecahtReserveSuccessBinding; import com.gh.gamecenter.databinding.ImprintContentItemBinding; import com.gh.gamecenter.databinding.PrivacyItemBinding; import com.gh.gamecenter.entity.ApkEntity; @@ -2207,6 +2209,52 @@ public class DialogUtils { dialog.show(); } + public static void showReserveSuccess2WechatBindDialog(Context context, ConfirmListener callback) { + context = checkDialogContext(context); + + final Dialog dialog = new Dialog(context, R.style.DialogWindowTransparent); + DialogWecahtReserveSuccessBinding binding = DialogWecahtReserveSuccessBinding.inflate(LayoutInflater.from(context)); + binding.closeBtn.setOnClickListener(v -> dialog.dismiss()); + binding.openBtn.setOnClickListener(v -> { + callback.onConfirm(); + dialog.dismiss(); + }); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(binding.getRoot()); + dialog.show(); + Window window = dialog.getWindow(); + if (window != null) { + window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + WindowManager.LayoutParams params = window.getAttributes(); + params.width = DisplayUtils.dip2px(300f); + window.setAttributes(params); + } + } + + public static void showReserveSuccessDialog(Context context) { + context = checkDialogContext(context); + + final Dialog dialog = new Dialog(context, R.style.DialogWindowTransparent); + DialogAlertDefaultBinding binding = DialogAlertDefaultBinding.inflate(LayoutInflater.from(context)); + binding.titleTv.setText("游戏预约成功"); + binding.contentTv.setText("游戏上线时,您将在消息中心和微信公众号收到通知,不会错过任何预约的游戏"); + binding.confirmTv.setText("我知道了"); + binding.centerDivider.setVisibility(View.GONE); + binding.cancelTv.setVisibility(View.GONE); + binding.titleTv.setCompoundDrawablesWithIntrinsicBounds(ExtensionsKt.toDrawable(R.drawable.ic_reserve_success), null, null, null); + binding.confirmTv.setOnClickListener(v -> dialog.dismiss()); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(binding.getRoot()); + dialog.show(); + Window window = dialog.getWindow(); + if (window != null) { + window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + WindowManager.LayoutParams params = window.getAttributes(); + params.width = DisplayUtils.dip2px(300f); + window.setAttributes(params); + } + } + /** * @param context may be is application context * @return activity context diff --git a/app/src/main/java/com/gh/common/util/DownloadItemUtils.kt b/app/src/main/java/com/gh/common/util/DownloadItemUtils.kt index 798ed485e6..1e6dd0d391 100644 --- a/app/src/main/java/com/gh/common/util/DownloadItemUtils.kt +++ b/app/src/main/java/com/gh/common/util/DownloadItemUtils.kt @@ -15,8 +15,6 @@ import com.gh.common.constant.Constants import com.gh.common.dialog.CertificationDialog import com.gh.common.dialog.DeviceRemindDialog import com.gh.common.dialog.PackageCheckDialogFragment -import com.gh.common.dialog.ReserveDialogFragment -import com.gh.common.dialog.ReserveDialogFragment.SuccessCallback import com.gh.common.exposure.ExposureEvent import com.gh.common.history.HistoryHelper import com.gh.common.repository.ReservationRepository @@ -506,17 +504,7 @@ object DownloadItemUtils { refreshCallback: EmptyCallback?, allStateClickCallback: EmptyCallback? ) { - val reserveDialogFragment = (context as AppCompatActivity).supportFragmentManager.findFragmentByTag("reserve") as ReserveDialogFragment? - if (reserveDialogFragment != null) { - reserveDialogFragment.successCallback = object : SuccessCallback { - override fun onSuccess() { - LogUtils.logReservation(gameEntity, traceEvent) - adapter?.notifyItemChanged(position) - refreshCallback?.onCallback() - } - } - } - val gamePermissionDialogFragment = context.supportFragmentManager.findFragmentByTag( + val gamePermissionDialogFragment = (context as AppCompatActivity).supportFragmentManager.findFragmentByTag( GamePermissionDialogFragment::class.java.simpleName ) as GamePermissionDialogFragment? gamePermissionDialogFragment?.dismissAllowingStateLoss() @@ -544,14 +532,13 @@ object DownloadItemUtils { allStateClickCallback?.onCallback() CheckLoginUtils.checkLogin(context, entrance) { clickCallback?.onCallback() - val dialogFragment = ReserveDialogFragment.getInstance(gameEntity, object : SuccessCallback { - override fun onSuccess() { + ReservationHelper.reserve(context, gameEntity.id, object : EmptyCallback { + override fun onCallback() { LogUtils.logReservation(gameEntity, traceEvent) adapter?.notifyItemChanged(position) refreshCallback?.onCallback() } }) - dialogFragment.show(context.supportFragmentManager, "reserve") } } } else { diff --git a/app/src/main/java/com/gh/common/util/ReservationHelper.kt b/app/src/main/java/com/gh/common/util/ReservationHelper.kt index b805ec4ce8..9e1ab06459 100644 --- a/app/src/main/java/com/gh/common/util/ReservationHelper.kt +++ b/app/src/main/java/com/gh/common/util/ReservationHelper.kt @@ -2,8 +2,11 @@ package com.gh.common.util import android.annotation.SuppressLint import android.content.Context +import com.gh.common.constant.Constants import com.gh.common.repository.ReservationRepository +import com.gh.gamecenter.WebActivity import com.gh.gamecenter.entity.GameEntity +import com.gh.gamecenter.entity.WechatConfigEntity import com.gh.gamecenter.retrofit.BiResponse import com.gh.gamecenter.retrofit.RetrofitManager import com.halo.assistant.HaloApp @@ -32,26 +35,19 @@ object ReservationHelper { val single = if (deleteReservation) { retrofit.api - .deleteGameReservation(requestMap.createRequestBody()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) + .deleteGameReservation(requestMap.createRequestBody()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) } else { retrofit.api - .cancelGameReservation(requestMap.createRequestBody()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) + .cancelGameReservation(requestMap.createRequestBody()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) } single.subscribe(object : BiResponse() { override fun onSuccess(data: ResponseBody) { ReservationRepository.removeReservationFromMemoryAndRefresh(game.id) - - if (deleteReservation) { -// MtaHelper.onEvent("预约游戏", "取消预约", game.name) - } else { -// MtaHelper.onEvent("预约游戏", "删除预约", game.name) - } - refreshCallback.onCallback() } @@ -62,26 +58,61 @@ object ReservationHelper { }) } + @JvmStatic + @SuppressLint("CheckResult") + fun reserve(context: Context, gameId: String, callback: EmptyCallback) { + val requestMap = hashMapOf() + requestMap["game_id"] = gameId + RetrofitManager.getInstance().api + .createNewGameReservation(requestMap.createRequestBody()) + .compose(singleToMain()) + .subscribe(object : BiResponse() { + + override fun onSuccess(data: ResponseBody) { + ReservationRepository.addReservationToMemoryAndRefresh(gameId) + callback.onCallback() + val wechatConfig = SPUtils.getString(Constants.SP_WECHAT_CONFIG).toObject() + wechatConfig?.run { + if (bind && follow && notice) { + DialogUtils.showReserveSuccessDialog(context) + } else { + DialogUtils.showReserveSuccess2WechatBindDialog(context) { + context.startActivity(WebActivity.getBindWechatIntent(context)) + } + } + } + } + + override fun onFailure(exception: Exception) { + ToastUtils.showToast(exception.message ?: "") + } + }) + } + @JvmStatic fun showDeleteReservationDialog(context: Context, emptyCallback: EmptyCallback) { - DialogUtils.showCancelOrDeleteReservationDialog(context, - "删除预约", - "游戏已上线,你可以删除此预约记录,确定删除吗?", - "确定删除", - "暂不删除", { - emptyCallback.onCallback() - }, null) + DialogUtils.showCancelOrDeleteReservationDialog( + context, + "删除预约", + "游戏已上线,你可以删除此预约记录,确定删除吗?", + "确定删除", + "暂不删除", { + emptyCallback.onCallback() + }, null + ) } @JvmStatic fun showCancelReservationDialog(context: Context, emptyCallback: EmptyCallback) { - DialogUtils.showCancelOrDeleteReservationDialog(context, - "取消预约", - "取消之后你将无法收到游戏上线的通知,确定取消预约吗?", - "确定取消", - "暂不取消", { - emptyCallback.onCallback() - }, null) + DialogUtils.showCancelOrDeleteReservationDialog( + context, + "取消预约", + "取消之后你将无法收到游戏上线的通知,确定取消预约吗?", + "确定取消", + "暂不取消", { + emptyCallback.onCallback() + }, null + ) } diff --git a/app/src/main/java/com/gh/common/util/WechatBindHelper.kt b/app/src/main/java/com/gh/common/util/WechatBindHelper.kt new file mode 100644 index 0000000000..36d8e51015 --- /dev/null +++ b/app/src/main/java/com/gh/common/util/WechatBindHelper.kt @@ -0,0 +1,51 @@ +package com.gh.common.util + +import android.annotation.SuppressLint +import com.gh.common.constant.Constants +import com.gh.gamecenter.entity.WechatConfigEntity +import com.gh.gamecenter.manager.UserManager +import com.gh.gamecenter.retrofit.BiResponse +import com.gh.gamecenter.retrofit.RetrofitManager +import com.halo.assistant.HaloApp +import io.reactivex.schedulers.Schedulers +import okhttp3.ResponseBody +import retrofit2.HttpException + +object WechatBindHelper { + + @JvmStatic + @SuppressLint("CheckResult") + fun getWechatConfig() { + if (!UserManager.getInstance().isLoggedIn) return + RetrofitManager.getInstance() + .api + .wechatConfig + .subscribeOn(Schedulers.io()) + .subscribe(object : BiResponse() { + override fun onSuccess(data: WechatConfigEntity) { + SPUtils.setString(Constants.SP_WECHAT_CONFIG, data.toJson()) + } + }) + } + + @SuppressLint("CheckResult") + fun bindWechat(wechatLoginInfoMap: Map, callback: BiCallback) { + RetrofitManager.getInstance() + .api + .postBindWechat(wechatLoginInfoMap.createRequestBody()) + .compose(singleToMain()) + .subscribe(object : BiResponse() { + override fun onSuccess(data: ResponseBody) { + callback.onFirst(true) + getWechatConfig() + } + + override fun onFailure(exception: Exception) { + callback.onSecond(true) + if (exception is HttpException) { + ErrorHelper.handleError(HaloApp.getInstance().application, exception.response().errorBody()?.string()) + } + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 7ccb8fb1f5..97ef557065 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -66,6 +66,7 @@ import com.gh.common.util.SentryHelper; import com.gh.common.util.ShareUtils; import com.gh.common.util.ToastUtils; import com.gh.common.util.UrlFilterUtils; +import com.gh.common.util.WechatBindHelper; import com.gh.download.DownloadManager; import com.gh.gamecenter.download.DownloadFragment; import com.gh.gamecenter.entity.CommunityEntity; @@ -333,6 +334,7 @@ public class MainActivity extends BaseActivity { deleteSimulatorGame(); QuickLoginHelper.getPhoneInfo(this); + WechatBindHelper.getWechatConfig(); initWBSDK(); } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.java b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.java index b5e2066e9b..7f81fb4d70 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.java @@ -14,7 +14,6 @@ import com.gh.common.dialog.CertificationDialog; import com.gh.common.dialog.DeviceRemindDialog; import com.gh.common.dialog.GameOffServiceDialogFragment; import com.gh.common.dialog.PackageCheckDialogFragment; -import com.gh.common.dialog.ReserveDialogFragment; import com.gh.common.exposure.ExposureEvent; import com.gh.common.history.HistoryHelper; import com.gh.common.simulator.SimulatorDownloadManager; @@ -96,26 +95,13 @@ public class DetailViewHolder { } private void restoreDialogFragment() { - ReserveDialogFragment reserveDialogFragment = - ((ReserveDialogFragment)((AppCompatActivity) context).getSupportFragmentManager().findFragmentByTag("reserve")); - if (reserveDialogFragment != null) { - reserveDialogFragment.setSuccessCallback(getCallback()); - } - GamePermissionDialogFragment gamePermissionDialogFragment = - ((GamePermissionDialogFragment)((AppCompatActivity) context).getSupportFragmentManager().findFragmentByTag(GamePermissionDialogFragment.class.getSimpleName())); + ((GamePermissionDialogFragment) ((AppCompatActivity) context).getSupportFragmentManager().findFragmentByTag(GamePermissionDialogFragment.class.getSimpleName())); if (gamePermissionDialogFragment != null) { gamePermissionDialogFragment.dismissAllowingStateLoss(); } } - private ReserveDialogFragment.SuccessCallback getCallback() { - return () -> { - LogUtils.logReservation(gameEntity, traceEvent); - DetailDownloadUtils.detailInitDownload(this, false); - }; - } - static class OnDetailDownloadClickListener implements View.OnClickListener { private DetailViewHolder mViewHolder; private GameEntity mGameEntity; @@ -296,13 +282,10 @@ public class DetailViewHolder { case RESERVABLE: GamePermissionDialogFragment.show((AppCompatActivity) mViewHolder.context, mGameEntity, mGameEntity.getInfo(), () -> { CheckLoginUtils.checkLogin(mViewHolder.context, mEntrance, () -> { - ReserveDialogFragment dialogFragment = ReserveDialogFragment.getInstance( - mGameEntity, - () -> { - LogUtils.logReservation(mGameEntity, mTraceEvent); - DetailDownloadUtils.detailInitDownload(mViewHolder, false); - }); - dialogFragment.show(((AppCompatActivity) mViewHolder.context).getSupportFragmentManager(), "reserve"); + ReservationHelper.reserve(mViewHolder.context, mGameEntity.getId(), () -> { + LogUtils.logReservation(mGameEntity, mTraceEvent); + DetailDownloadUtils.detailInitDownload(mViewHolder, false); + }); }); }); break; diff --git a/app/src/main/java/com/gh/gamecenter/entity/WechatConfigEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/WechatConfigEntity.kt new file mode 100644 index 0000000000..4452af17d3 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/entity/WechatConfigEntity.kt @@ -0,0 +1,11 @@ +package com.gh.gamecenter.entity + +import com.google.gson.annotations.SerializedName + +data class WechatConfigEntity( + var bind: Boolean = false,//用户是否绑定微信 + var follow: Boolean = false,//绑定的微信是否关注光环助手 + var notice: Boolean = false,//是否打开微信通知开关 + @SerializedName("nickname") + var nickName: String = "", +) diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt index 4e0e730508..2c3067b2fe 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt @@ -21,8 +21,6 @@ import com.gh.base.fragment.BaseFragment_TabLayout import com.gh.common.constant.Config import com.gh.common.constant.Constants import com.gh.common.databind.BindingAdapters -import com.gh.common.dialog.ReserveDialogFragment -import com.gh.common.dialog.ReserveDialogFragment.SuccessCallback import com.gh.common.exposure.ExposureEvent import com.gh.common.iinterface.IScrollable import com.gh.common.repository.ReservationRepository @@ -468,7 +466,6 @@ class GameDetailFragment : NormalFragment() { controlReserveBtn() mSkeleton?.hide() - restoreDialogFragment() } else if (detailResource.status == Status.ERROR) { loadErrorControl(detailResource.exception) } @@ -988,8 +985,7 @@ class GameDetailFragment : NormalFragment() { } CheckLoginUtils.checkLogin(requireContext(), "游戏详情") { if (!ReservationRepository.thisGameHasBeenReserved(mGameEntity?.id ?: "")) { - val dialogFragment = ReserveDialogFragment.getInstance(mGameEntity!!, getCallback()) - dialogFragment.show(childFragmentManager, "reserve") + ReservationHelper.reserve(requireContext(), mGameEntity?.id ?: "", getCallback()) } else { if ("download" == mGameEntity?.reserveStatus) { ReservationHelper.showDeleteReservationDialog( @@ -1431,9 +1427,9 @@ class GameDetailFragment : NormalFragment() { DownloadManager.getInstance().removeObserver(dataWatcher) } - private fun getCallback(): SuccessCallback { - return object : SuccessCallback { - override fun onSuccess() { + private fun getCallback(): EmptyCallback { + return object : EmptyCallback { + override fun onCallback() { LogUtils.logReservation(mGameEntity, mTraceEvent) DetailDownloadUtils.detailInitDownload(detailViewHolder, false) if (mDownloadBinding.ivReserve.visibility == View.VISIBLE) { @@ -1443,12 +1439,6 @@ class GameDetailFragment : NormalFragment() { } } - private fun restoreDialogFragment() { - (childFragmentManager.findFragmentByTag("reserve") as? ReserveDialogFragment)?.run { - successCallback = getCallback() - } - } - companion object { const val INDEX_DESC = 0 const val INDEX_TRENDES = 1 diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java index 82e662810b..07026709e9 100644 --- a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java +++ b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java @@ -2297,6 +2297,12 @@ public interface ApiService { @POST("./wechat:bind") Single postBindWechat(@Body RequestBody body); + /** + * 获取公众号配置信息 + */ + @GET("wechat/config") + Single getWechatConfig(); + /** * 用户是否已对游戏评分 */ diff --git a/app/src/main/java/com/gh/gamecenter/user/UserRepository.java b/app/src/main/java/com/gh/gamecenter/user/UserRepository.java index 1f79cb8b55..94787fa522 100644 --- a/app/src/main/java/com/gh/gamecenter/user/UserRepository.java +++ b/app/src/main/java/com/gh/gamecenter/user/UserRepository.java @@ -28,6 +28,7 @@ import com.gh.common.util.LoginHelper; import com.gh.common.util.LoginUtils; import com.gh.common.util.NewLogUtils; import com.gh.common.util.SPUtils; +import com.gh.common.util.WechatBindHelper; import com.gh.download.DownloadManager; import com.gh.gamecenter.BuildConfig; import com.gh.gamecenter.R; @@ -240,6 +241,7 @@ public class UserRepository { PushManager.getAndSetAlias(); GameSubstituteRepositoryHelper.updateSubstitutableGames(); + WechatBindHelper.getWechatConfig(); if (callback != null) { callback.onFirst(response); diff --git a/app/src/main/java/com/halo/assistant/fragment/SettingsFragment.java b/app/src/main/java/com/halo/assistant/fragment/SettingsFragment.java index f2ff41c25e..ee4b29bdaa 100644 --- a/app/src/main/java/com/halo/assistant/fragment/SettingsFragment.java +++ b/app/src/main/java/com/halo/assistant/fragment/SettingsFragment.java @@ -24,8 +24,9 @@ import com.gh.common.history.HistoryHelper; import com.gh.common.util.CheckLoginUtils; import com.gh.common.util.DialogHelper; import com.gh.common.util.DialogUtils; -import com.gh.common.util.EntranceUtils; import com.gh.common.util.EnergyTaskHelper; +import com.gh.common.util.EntranceUtils; +import com.gh.common.util.GsonUtils; import com.gh.common.util.LoginUtils; import com.gh.common.util.MtaHelper; import com.gh.common.util.NotificationHelper; @@ -42,6 +43,7 @@ import com.gh.gamecenter.R; import com.gh.gamecenter.ShellActivity; import com.gh.gamecenter.WebActivity; import com.gh.gamecenter.entity.LoginTokenEntity; +import com.gh.gamecenter.entity.WechatConfigEntity; import com.gh.gamecenter.eventbus.EBReuse; import com.gh.gamecenter.fragment.MainWrapperFragment; import com.gh.gamecenter.game.upload.GameSubmissionActivity; @@ -51,7 +53,6 @@ import com.gh.gamecenter.security.SecurityActivity; import com.gh.gamecenter.setting.GameDownloadSettingActivity; import com.gh.gamecenter.setting.VideoSettingActivity; import com.gh.gamecenter.user.UserRepository; -import com.halo.assistant.HaloApp; import com.lightgame.download.FileUtils; import com.lightgame.utils.Utils; import com.lightgame.view.CheckableImageView; @@ -94,6 +95,8 @@ public class SettingsFragment extends NormalFragment { View mSettingInstallMethodContainer; @BindView(R.id.setting_install_method_tv) TextView mSettingInstallMethodTv; + @BindView(R.id.setting_wechat_remind_tv) + TextView mSettingWechatRemindTv; public static final String AUTO_INSTALL_SP_KEY = "autoinstall"; public static final String CONCERN_GAME_SP_KEY = "concerngame"; @@ -189,6 +192,8 @@ public class SettingsFragment extends NormalFragment { initLoginStatus(); initUsageStats(); + + initWechatBindStatus(); } private boolean checkPrivacyIsSame() { @@ -222,6 +227,12 @@ public class SettingsFragment extends NormalFragment { } } + private void initWechatBindStatus() { + String json = SPUtils.getString(Constants.SP_WECHAT_CONFIG); + WechatConfigEntity entity = GsonUtils.fromJson(json, WechatConfigEntity.class); + mSettingWechatRemindTv.setText(entity.getNotice() ? "已开启" : "已关闭"); + } + private void initUsageStats() { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1) { return; @@ -318,11 +329,11 @@ public class SettingsFragment extends NormalFragment { R.id.setting_privacy_policy, R.id.setting_user_protocol, R.id.setting_game_submission, R.id.setting_usage_stats, R.id.setting_notification_authority, R.id.setting_personal_recommend, - R.id.setting_game_download, R.id.setting_video + R.id.setting_game_download, R.id.setting_video, + R.id.setting_rl_wechat_remind }) @Override public void onClick(final View v) { -// String dirPath = null; switch (v.getId()) { case R.id.setting_game_download: startActivity(GameDownloadSettingActivity.getIntent(requireContext(), "设置")); @@ -343,11 +354,6 @@ public class SettingsFragment extends NormalFragment { EventBus.getDefault().post(new EBReuse("Refresh")); MainActivity.skipToMainActivity(getContext(), MainWrapperFragment.INDEX_HOME); break; -// case R.id.setting_rl_autoinstall: -// MtaHelper.onEvent("我的光环_设置", "设置功能", "下载完成自动安装游戏"); -// MtaHelper.onEvent("我的光环_设置", "自动安装游戏", mSettingAutoinstallSb.isChecked() ? "关闭" : "打开"); -// mSettingAutoinstallSb.performClick(); -// break; case R.id.setting_rl_cache: MtaHelper.onEvent("我的光环_设置", "设置功能", "清除缓存"); DialogHelper.showCenterWarningDialog(requireContext(), "清除缓存", "确定要清除缓存吗?", @@ -357,19 +363,10 @@ public class SettingsFragment extends NormalFragment { clearCache(); }); break; - /*case R.id.setting_cv_font_size: - MtaHelper.onEvent("我的光环_设置", "设置功能", "正文字号"); - fontSize(); - break;*/ case setting_rl_about: MtaHelper.onEvent("我的光环_设置", "设置功能", "关于"); startActivity(AboutActivity.getIntent(getContext(), mIsUpdate)); break; -// case R.id.setting_rl_concerngame: -// MtaHelper.onEvent("我的光环_设置", "设置功能", "安装完成自动关注游戏"); -// MtaHelper.onEvent("我的光环_设置", "自动关注游戏", mSettingConcerngameSb.isChecked() ? "关闭" : "打开"); -// mSettingConcerngameSb.performClick(); -// break; case R.id.setting_logout: MtaHelper.onEvent("我的光环_设置", "设置功能", "退出账号"); DialogUtils.showForceDialog(getContext(), "退出登录", "退出账号即会回到游客状态,很多功能将无法使用(例如评论、客服消息),确定退出吗?", @@ -382,26 +379,6 @@ public class SettingsFragment extends NormalFragment { }); }, null); break; -// case R.id.setting_rl_pic_path: -// MtaHelper.onEvent("我的光环_设置", "设置功能", "图片保存目录"); -// if (TextUtils.isEmpty(dirPath)) -// dirPath = Environment.getExternalStorageDirectory().getPath() + "/pictures/ghzhushou"; -// break; -// case R.id.setting_rl_download_path: -// MtaHelper.onEvent("我的光环_设置", "设置功能", "游戏下载目录"); -// if (TextUtils.isEmpty(dirPath)) -// dirPath = Environment.getExternalStorageDirectory().getPath() + "/gh-files"; -// Intent intent = new Intent(Intent.ACTION_GET_CONTENT); -// intent.setDataAndType(Uri.fromFile(new File(dirPath)), "file/*"); -// intent.addCategory(Intent.CATEGORY_OPENABLE); -// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); -// try { -// startActivity(intent); -// } catch (Exception e) { -// toast("无法找到文件管理器"); -// e.printStackTrace(); -// } -// break; case R.id.setting_network_diagnosis: MtaHelper.onEvent("我的光环_设置", "设置功能", "网络诊断"); startActivity(new Intent(getContext(), NetworkDiagnosisActivity.class)); @@ -454,21 +431,7 @@ public class SettingsFragment extends NormalFragment { } } break; -// case R.id.setting_clean_package: -//// MtaHelper.onEvent("发现", "安装包清理"); -//// DataCollectionUtils.uploadClick(requireContext(), "安装包清理", "发现"); -// MtaHelper.onEvent("我的光环_设置", "设置功能", "安装包清理"); -// startActivity(CleanApkActivity.getIntent(requireContext())); -// break; -// case R.id.setting_rl_traffic: -// mSettingTrafficSb.performClick(); -// break; -// case R.id.setting_rl_traffic_video: -// mSettingTrafficVideoSb.performClick(); -// break; case R.id.setting_notification_authority: -// boolean notificationIsEnable = NotificationHelper.notificationIsEnable(); -// if (notificationIsEnable) return; MtaHelper.onEvent("我的光环_设置", "设置功能", "通知权限"); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { //这种方案适用于 API 26, 即8.0(含8.0)以上可以用 @@ -485,9 +448,9 @@ public class SettingsFragment extends NormalFragment { mSettingPersonalRecommendSb.setChecked(!mSettingPersonalRecommendSb.isChecked()); SPUtils.setBoolean(PERSONAL_RECOMMEND_SP_KEY, mSettingPersonalRecommendSb.isChecked()); break; -// case R.id.setting_rl_home_video: -// mSettingHomeVideoSb.performClick(); -// break; + case R.id.setting_rl_wechat_remind: + requireContext().startActivity(WebActivity.getBindWechatIntent(requireContext())); + break; default: break; } diff --git a/app/src/main/res/drawable-xxxhdpi/bg_reserve_success.webp b/app/src/main/res/drawable-xxxhdpi/bg_reserve_success.webp new file mode 100644 index 0000000000000000000000000000000000000000..6d59da51de440e43eb4f83f6b69b7f525d14e7e1 GIT binary patch literal 64476 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 Qx{nruJX+lh#$+h~0I$qRE&u=k literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_reserve_success_close.png b/app/src/main/res/drawable-xxxhdpi/ic_reserve_success_close.png new file mode 100644 index 0000000000000000000000000000000000000000..8c49e487b1c0d1185933ee01384582d08d79f47a GIT binary patch literal 710 zcmV;%0y+JOP)@~0drDELIAGL9O(c600d`2O+f$vv5yPHDN0A*$xtiT_YN z|1JSy$oqbPoj6u15{X12k%&|h-GPZ4&U>{4tX8Wp+6*sV&W^|9Xg;5RtAH#Pi+c*cqldlo*XfJeOeT{N_x_Y? zfNx&?4i8{`hXPa}{t6H1*D$PVuZ0!R>2$_5yL+J|)P+Amzk(t6IjjH;yi3ptUvb0i z=LHl+u~$6aBp8HO)M;mI8?FKUmp*87P(02hn1ol=NX0c`1z@P7-hQA0OE3(7zzC%? zOlzM9G$>$TYlw7tY;6Iq3kh{hBLO}N@_j600lo_JCAyIS;IcrUzp};xfQv$X_cN^o z0GkDe=ww?905%E_HOyKO0NMlyd5&RC0B8~f4?=|pRs{f43Dq`8cwk)sFqEK!lkmWa z0ANvqv+%%~0AN9a)9}El0MJ5$^YFmA0MI~!m+-*GoZ!DE{sojnM0bLshe6RNLZVNF zMPCewz8n@kAtHK8O!TCv=xK4$H%3I?8WVkURP^ofkl|g|zzV=3#57HD;J)Hpfc+hn;;k|Zx&Bb_O+zD65wb9jal?zjdz0=NTt3xC2;LM^O- zJkPf^yS;}$p(CLz%e7)?vsgM<_;ad`5%u*ic5SB9DZ5zOXt_LfD&y+u9t$Y1X}LUY s-l)D?+8(I3t?qL9NF)-8L?Uwe0WRvR3C@APDgXcg07*qoM6N<$g14S8*8l(j literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/dialog_alert_default.xml b/app/src/main/res/layout/dialog_alert_default.xml index 29beb74966..5fd9b04d2e 100644 --- a/app/src/main/res/layout/dialog_alert_default.xml +++ b/app/src/main/res/layout/dialog_alert_default.xml @@ -36,6 +36,7 @@ android:layout_marginLeft="24dp" android:layout_marginTop="24dp" android:layout_marginRight="24dp" + android:drawablePadding="4dp" android:textColor="@color/text_title" android:textSize="16sp" android:textStyle="bold" @@ -68,8 +69,8 @@ android:textSize="14sp" android:visibility="gone" app:layout_constraintLeft_toLeftOf="@id/contentTv" - app:layout_constraintTop_toBottomOf="@id/contentTv" app:layout_constraintRight_toRightOf="@id/contentTv" + app:layout_constraintTop_toBottomOf="@id/contentTv" tools:text="查看权限应用场景" tools:visibility="visible" /> diff --git a/app/src/main/res/layout/dialog_wecaht_reserve_success.xml b/app/src/main/res/layout/dialog_wecaht_reserve_success.xml new file mode 100644 index 0000000000..dd74712374 --- /dev/null +++ b/app/src/main/res/layout/dialog_wecaht_reserve_success.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_setting.xml b/app/src/main/res/layout/fragment_setting.xml index d0320e80c2..d65f1ed8b1 100644 --- a/app/src/main/res/layout/fragment_setting.xml +++ b/app/src/main/res/layout/fragment_setting.xml @@ -225,13 +225,44 @@ android:id="@+id/usageStatsSwitch" android:layout_width="40dp" android:layout_height="20dp" - android:layout_centerVertical="true" android:layout_alignParentRight="true" + android:layout_centerVertical="true" android:src="@drawable/selector_ic_setting_switch" /> + + + + + + + + + 下载完成自动安装游戏 安装完成自动关注游戏 切换安装方式 + 微信提醒 1.光环助手下载应用后,通过跳转默认浏览器安装已下载的应用(不会重复消耗流量),即可完成免密码安装2.内存较大的游戏在浏览器解压时间较长,需要等待片刻,您也可以通过浏览器的“下载记录”查看解压进度 以上未能解决安装需要密码的,可查看使用教程> 直接使用光环助手下载应用,但%s手机自身安全性检测,下载后需要进行验证账户密码、指纹等解锁后安装