From e386994e4d8d087fdad9ee13bfa7b4b93d6ecb89 Mon Sep 17 00:00:00 2001 From: lyr <15622190878@163.com> Date: Thu, 11 Mar 2021 10:45:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=A7=AF=E5=88=86=E4=BD=93?= =?UTF-8?q?=E7=B3=BB=E7=AC=AC3=E6=9C=9F=EF=BC=9A=201.=E5=85=89=E7=8E=AF?= =?UTF-8?q?=E5=8A=A9=E6=89=8BV4.8.0-=E7=A7=AF=E5=88=86=E4=BD=93=E7=B3=BB?= =?UTF-8?q?=EF=BC=88=E7=AC=AC3=E6=9C=9F=EF=BC=89--=E5=85=89=E8=83=BD?= =?UTF-8?q?=E4=B8=AD=E5=BF=83=20pm/halo-app-issues#1146=202.=E5=85=89?= =?UTF-8?q?=E7=8E=AF=E5=8A=A9=E6=89=8BV4.8.0-=E7=A7=AF=E5=88=86=E4=BD=93?= =?UTF-8?q?=E7=B3=BB=EF=BC=88=E7=AC=AC3=E6=9C=9F=EF=BC=89--=E6=88=91?= =?UTF-8?q?=E7=9A=84=E5=85=89=E7=8E=AF=20=E4=B8=80=E3=80=81=E5=85=89?= =?UTF-8?q?=E8=83=BD=E6=98=8E=E7=BB=86=201=E3=80=81=E6=96=87=E6=A1=88?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=20pm/halo-app-issues#1145=203.=E5=85=89?= =?UTF-8?q?=E8=83=BD=E5=8A=A9=E6=89=8BV4.8.0-=E7=A7=AF=E5=88=86=E4=BD=93?= =?UTF-8?q?=E7=B3=BB=EF=BC=88=E7=AC=AC3=E6=9C=9F=EF=BC=89--=E5=85=89?= =?UTF-8?q?=E8=83=BD=E5=B1=8B=20=E5=9B=9B=E3=80=81=E5=85=89=E8=83=BD?= =?UTF-8?q?=E6=98=8E=E7=BB=86=EF=BC=8C=E4=BB=A5=E5=8F=8A=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=85=91=E6=8D=A2=E5=95=86=E5=93=81=E3=80=81=E6=8A=BD=E5=A5=96?= =?UTF-8?q?=E4=B9=90=E5=9B=AD=E5=85=A5=E5=8F=A3=204.=E5=85=89=E8=83=BD?= =?UTF-8?q?=E5=8A=A9=E6=89=8BV4.8.0-=E7=A7=AF=E5=88=86=E4=BD=93=E7=B3=BB?= =?UTF-8?q?=E5=9F=8B=E7=82=B9=EF=BC=88=E7=AC=AC1=E6=9C=9F=EF=BC=89-=20?= =?UTF-8?q?=E5=AE=89=E5=8D=93=E7=AB=AF=E5=9F=8B=E7=82=B9=20pm/halo-app-iss?= =?UTF-8?q?ues#1149=205.=E5=A2=9E=E5=8A=A0web=E4=B8=8A=E6=8A=A5=E5=9F=8B?= =?UTF-8?q?=E7=82=B9=E3=80=81=E8=B7=B3=E8=BD=AC=E5=A4=B4=E5=83=8F=E6=8C=82?= =?UTF-8?q?=E4=BB=B6=E9=A1=B5=E7=9A=84JS=E8=B0=83=E7=94=A8=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 3 +- .../main/java/com/gh/base/BaseActivity.java | 41 ++++ .../main/java/com/gh/common/DefaultJsApi.kt | 34 +++ .../com/gh/common/constant/Constants.java | 3 + .../java/com/gh/common/util/DialogUtils.java | 13 ++ .../java/com/gh/common/util/DirectUtils.kt | 1 + .../com/gh/common/util/EntranceUtils.java | 2 + .../com/gh/common/util/IntegralLogHelper.kt | 137 ++++++++++++ .../java/com/gh/common/util/LogUtils.java | 1 - .../com/gh/common/util/TimestampUtils.java | 1 + .../java/com/gh/gamecenter/MainActivity.java | 5 +- .../gh/gamecenter/energy/CategoryAdapter.kt | 7 + .../gh/gamecenter/energy/CommodityAdapter.kt | 21 +- .../gh/gamecenter/energy/CommodityFragment.kt | 31 ++- .../gamecenter/energy/EnergyCenterFragment.kt | 67 +++--- .../gamecenter/energy/EnergyHouseFragment.kt | 76 +++++-- .../energy/HorizontalTaskAdapter.kt | 11 + .../com/gh/gamecenter/energy/TaskAdapter.kt | 17 +- .../fragment/MainWrapperFragment.java | 2 + .../fragment/SearchToolbarFragment.java | 4 + .../personal/NewPersonalFragment.java | 80 +------ .../personalhome/UserHomeFragment.kt | 35 ++- .../border/AvatarBorderActivity.kt | 9 +- .../border/AvatarBorderFragment.kt | 205 +++++++++++------- .../border/ChooseAvatarBorderAdapter.kt | 31 ++- .../border/ChooseAvatarBorderFragment.kt | 4 +- .../res/drawable-xxhdpi/bg_task_back.webp | Bin 0 -> 3944 bytes .../res/drawable-xxhdpi/ic_energy_more.png | Bin 0 -> 447 bytes .../ic_exchange_commodity.webp | Bin 0 -> 4676 bytes .../drawable-xxhdpi/ic_lottery_paradise.webp | Bin 0 -> 5324 bytes .../drawable-xxhdpi/ic_sign_remind_close.webp | Bin 0 -> 2104 bytes .../ic_sign_remind_success.webp | Bin 0 -> 3752 bytes .../main/res/drawable-xxhdpi/ic_task_back.png | Bin 0 -> 416 bytes .../personal_sign_icon_gray.webp | Bin 1126 -> 0 bytes .../res/layout/dialog_sign_remind_success.xml | 53 +++++ .../res/layout/fragment_energy_center.xml | 55 +++-- .../main/res/layout/fragment_energy_house.xml | 14 +- .../main/res/layout/fragment_new_personal.xml | 9 - app/src/main/res/layout/layout_task_back.xml | 25 +++ app/src/main/res/values/strings.xml | 4 +- 40 files changed, 736 insertions(+), 265 deletions(-) create mode 100644 app/src/main/java/com/gh/common/util/IntegralLogHelper.kt create mode 100644 app/src/main/res/drawable-xxhdpi/bg_task_back.webp create mode 100644 app/src/main/res/drawable-xxhdpi/ic_energy_more.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_exchange_commodity.webp create mode 100644 app/src/main/res/drawable-xxhdpi/ic_lottery_paradise.webp create mode 100644 app/src/main/res/drawable-xxhdpi/ic_sign_remind_close.webp create mode 100644 app/src/main/res/drawable-xxhdpi/ic_sign_remind_success.webp create mode 100644 app/src/main/res/drawable-xxhdpi/ic_task_back.png delete mode 100644 app/src/main/res/drawable-xxhdpi/personal_sign_icon_gray.webp create mode 100644 app/src/main/res/layout/dialog_sign_remind_success.xml create mode 100644 app/src/main/res/layout/layout_task_back.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0744905b68..f92240befc 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -609,7 +609,8 @@ + android:screenOrientation="portrait" + android:launchMode="singleTask" /> { + startActivity(EnergyCenterActivity.Companion.getIntent(this)); + SPUtils.setBoolean(Constants.SP_SHOW_TASK_FLOAT, false); + mWM.removeView(mTaskBackView); + mHasAddTaskFloat = false; + }); + mWM.addView(mTaskBackView, wmParams); + } + + /** * 此回调可用于确认当前 activity 已经执行了 finish() 方法并处于 isFinishing 状态 */ diff --git a/app/src/main/java/com/gh/common/DefaultJsApi.kt b/app/src/main/java/com/gh/common/DefaultJsApi.kt index c2726fa00e..41cae2f25f 100644 --- a/app/src/main/java/com/gh/common/DefaultJsApi.kt +++ b/app/src/main/java/com/gh/common/DefaultJsApi.kt @@ -8,6 +8,8 @@ import androidx.annotation.Keep import androidx.appcompat.app.AppCompatActivity import com.gh.base.CurrentActivityHolder import com.gh.common.constant.Constants +import com.gh.common.loghub.LoghubUtils +import com.gh.common.tracker.Tracker import com.gh.common.util.* import com.gh.common.view.dsbridge.CompletionHandler import com.gh.gamecenter.BuildConfig @@ -21,6 +23,7 @@ import com.gh.gamecenter.energy.EnergyCenterActivity import com.gh.gamecenter.energy.EnergyHouseActivity import com.gh.gamecenter.help.QaFeedbackDialogFragment import com.gh.gamecenter.manager.UserManager +import com.gh.gamecenter.personalhome.border.AvatarBorderActivity import com.gh.gamecenter.retrofit.BiResponse import com.gh.gamecenter.retrofit.RetrofitManager import com.gh.gamecenter.security.BindPhoneActivity @@ -296,6 +299,35 @@ class DefaultJsApi(var context: Context) { QaFeedbackDialogFragment.show(context as AppCompatActivity, msg.toString()) } + @JavascriptInterface + fun getMetaObject(msg: Any): String { + return LogUtils.getMetaObject().toString() + } + + @JavascriptInterface + fun getLaunchId(msg: Any): String { + return Tracker.launchId + } + + @JavascriptInterface + fun getSessionId(msg: Any): String { + return Tracker.sessionId + } + + @JavascriptInterface + fun postLogEvent(event: Any) { + val logEvent = event.toString().toObject() ?: LogEvent() + debugOnly { + Utils.log("LogUtils->${logEvent.jsonString}") + } + LoghubUtils.log(logEvent.jsonString, logEvent.logStore, false) + } + + @JavascriptInterface + fun startAvatarBorderPage(msg: Any) { + context.startActivity(AvatarBorderActivity.getIntent(context, msg.toString())) + } + @Keep internal data class ImageEvent(var imageList: ArrayList = arrayListOf(), var position: Int = 0) @@ -308,4 +340,6 @@ class DefaultJsApi(var context: Context) { 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 a4d2b7bb78..f23900ba5d 100644 --- a/app/src/main/java/com/gh/common/constant/Constants.java +++ b/app/src/main/java/com/gh/common/constant/Constants.java @@ -180,6 +180,9 @@ public class Constants { // 头像挂件ID public static final String SP_CHOOSE_AVATAR_ID = "choose_avatar_id"; + //是否显示返回任务悬浮图标 + public static final String SP_SHOW_TASK_FLOAT = "show_task_float"; + //手机号码匹配规则 public static final String REGEX_MOBILE = "^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$"; public static final String REGEX_ACCOUNT = "^[a-zA-Z_]\\w{5,17}$"; 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 c6f9bc6454..d0c177d4ed 100644 --- a/app/src/main/java/com/gh/common/util/DialogUtils.java +++ b/app/src/main/java/com/gh/common/util/DialogUtils.java @@ -2161,6 +2161,19 @@ public class DialogUtils { dialog.show(); } + public static void showSignRemindSuccessDialog(Context context) { + context = checkDialogContext(context); + + final Dialog dialog = new Dialog(context, R.style.DialogWindowTransparent); + + View contentView = LayoutInflater.from(context).inflate(R.layout.dialog_sign_remind_success, null); + contentView.findViewById(R.id.closeIv).setOnClickListener(v -> dialog.dismiss()); + + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(contentView); + dialog.show(); + } + /** * @param context may be is application context * @return activity context diff --git a/app/src/main/java/com/gh/common/util/DirectUtils.kt b/app/src/main/java/com/gh/common/util/DirectUtils.kt index ddb91f7280..2b6027337d 100644 --- a/app/src/main/java/com/gh/common/util/DirectUtils.kt +++ b/app/src/main/java/com/gh/common/util/DirectUtils.kt @@ -438,6 +438,7 @@ object DirectUtils { */ @JvmStatic fun directToHomeActivity(context: Context, userId: String?, position: Int, entrance: String? = null, path: String? = null) { + IntegralLogHelper.log("view_homepage", "个人主页") val bundle = Bundle() bundle.putString(KEY_USER_ID, userId) bundle.putString(KEY_TO, UserHomeActivity::class.java.name) diff --git a/app/src/main/java/com/gh/common/util/EntranceUtils.java b/app/src/main/java/com/gh/common/util/EntranceUtils.java index 3c6736752e..bf37005a50 100644 --- a/app/src/main/java/com/gh/common/util/EntranceUtils.java +++ b/app/src/main/java/com/gh/common/util/EntranceUtils.java @@ -150,7 +150,9 @@ public class EntranceUtils { public static final String KEY_CHECK_QUESTION_CONCERN = "check_question_concern"; public static final String KEY_DRAFT_ID = "draft_id"; public static final String KEY_KAIFU_LIST = "kaifuList"; + public static final String KEY_CATEGORY = "category"; public static final String KEY_CATEGORY_ID = "category_id"; + public static final String KEY_CATEGORY_NAME = "category_name"; public static final String KEY_CATEGORY_TITLE = "category_title"; public static final String KEY_CATEGORY_INIT_TITLE = "category_init_title"; public static final String KEY_BLOCK_DATA = "blockData"; diff --git a/app/src/main/java/com/gh/common/util/IntegralLogHelper.kt b/app/src/main/java/com/gh/common/util/IntegralLogHelper.kt new file mode 100644 index 0000000000..2d7ddf75d2 --- /dev/null +++ b/app/src/main/java/com/gh/common/util/IntegralLogHelper.kt @@ -0,0 +1,137 @@ +package com.gh.common.util + +import com.gh.common.loghub.LoghubUtils.log +import com.gh.common.tracker.Tracker.launchId +import com.gh.common.tracker.Tracker.sessionId +import com.lightgame.utils.Utils +import org.json.JSONObject + +object IntegralLogHelper { + + fun log(event: String, location: String) = log(event, location, null) + + fun log(event: String, location: String, entrance: String? = null) { + val json = JSONObject().apply { + tryWithDefaultCatch { + put("meta", LogUtils.getMetaObject()) + put("event", event) + put("location", location) + put("timestamp", System.currentTimeMillis() / 1000) + put("launch_id", launchId) + put("session_id", sessionId) + entrance?.let { + put("entrance", it) + } + } + } + + debugOnly { + Utils.log("LogUtils->$json") + } + log(json, "score", false) + } + + fun logTask(event: String, location: String, jobId: String, jobName: String, jobType: String) { + val json = JSONObject().apply { + tryWithDefaultCatch { + put("meta", LogUtils.getMetaObject()) + put("event", event) + put("location", location) + put("timestamp", System.currentTimeMillis() / 1000) + put("launch_id", launchId) + put("session_id", sessionId) + put("job_id", jobId) + put("job_name", jobName) + put("job_type", jobType) + } + } + + debugOnly { + Utils.log("LogUtils->$json") + } + log(json, "score", false) + } + + fun logCommodityCategory(event: String, location: String, entrance: String, categoryId: String, categoryName: String) { + val json = JSONObject().apply { + tryWithDefaultCatch { + put("meta", LogUtils.getMetaObject()) + put("event", event) + put("location", location) + put("timestamp", System.currentTimeMillis() / 1000) + put("launch_id", launchId) + put("session_id", sessionId) + put("entrance", entrance) + put("goods_species_id", categoryId) + put("goods_species_name", categoryName) + } + } + + debugOnly { + Utils.log("LogUtils->$json") + } + log(json, "score", false) + } + + fun logCommodity(event: String, location: String, commodityId: String, categoryId: String, categoryName: String) { + val json = JSONObject().apply { + tryWithDefaultCatch { + put("meta", LogUtils.getMetaObject()) + put("event", event) + put("location", location) + put("timestamp", System.currentTimeMillis() / 1000) + put("launch_id", launchId) + put("session_id", sessionId) + put("goods_id", commodityId) + put("goods_species_id", categoryId) + put("goods_species_name", categoryName) + } + } + + debugOnly { + Utils.log("LogUtils->$json") + } + log(json, "score", false) + } + + fun logEnergyRange(event: String, location: String, range: String) { + val json = JSONObject().apply { + tryWithDefaultCatch { + put("meta", LogUtils.getMetaObject()) + put("event", event) + put("location", location) + put("timestamp", System.currentTimeMillis() / 1000) + put("launch_id", launchId) + put("session_id", sessionId) + put("energy_range", range) + } + } + + debugOnly { + Utils.log("LogUtils->$json") + } + log(json, "score", false) + } + + fun logPendent(event: String, location: String, pendentId: String, pendentType: String? = null) { + val json = JSONObject().apply { + tryWithDefaultCatch { + put("meta", LogUtils.getMetaObject()) + put("event", event) + put("location", location) + put("timestamp", System.currentTimeMillis() / 1000) + put("launch_id", launchId) + put("session_id", sessionId) + put("pendant_id", pendentId) + pendentType?.run { + put("pendant_type", this) + } + } + } + + debugOnly { + Utils.log("LogUtils->$json") + } + log(json, "score", false) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/util/LogUtils.java b/app/src/main/java/com/gh/common/util/LogUtils.java index 48c44b6971..2b4b10e979 100644 --- a/app/src/main/java/com/gh/common/util/LogUtils.java +++ b/app/src/main/java/com/gh/common/util/LogUtils.java @@ -852,5 +852,4 @@ public class LogUtils { } LoghubUtils.log(object, "event", false); } - } diff --git a/app/src/main/java/com/gh/common/util/TimestampUtils.java b/app/src/main/java/com/gh/common/util/TimestampUtils.java index fdd30823f2..73cd4ddbb0 100644 --- a/app/src/main/java/com/gh/common/util/TimestampUtils.java +++ b/app/src/main/java/com/gh/common/util/TimestampUtils.java @@ -51,6 +51,7 @@ public class TimestampUtils { whiteList.add(".*tasks:check.*"); whiteList.add(".*novice_tasks.*"); whiteList.add(".*daily_tasks.*"); + whiteList.add(".*fixed_tasks.*"); whiteList.add(".*energies.*"); } diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 1cc9dd5329..2bc5b08511 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -97,7 +97,6 @@ import com.lightgame.utils.Utils; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; -import org.jetbrains.annotations.NotNull; import org.json.JSONObject; import java.io.BufferedReader; @@ -106,7 +105,6 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.lang.reflect.Field; -import java.util.ArrayList; import java.util.Enumeration; import java.util.HashMap; import java.util.List; @@ -299,6 +297,9 @@ public class MainActivity extends BaseActivity { //重置首页视频播放进度 SPUtils.setString(Constants.SP_HOME_VIDEO_PLAY_RECORD, ""); + // 重新打开APP重置"显示返回任务悬浮图标"标志位 + SPUtils.setBoolean(Constants.SP_SHOW_TASK_FLOAT, false); + postAttentionVideoRecord(); } diff --git a/app/src/main/java/com/gh/gamecenter/energy/CategoryAdapter.kt b/app/src/main/java/com/gh/gamecenter/energy/CategoryAdapter.kt index f96e4efb0c..4ad6cbd519 100644 --- a/app/src/main/java/com/gh/gamecenter/energy/CategoryAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/energy/CategoryAdapter.kt @@ -42,6 +42,13 @@ class CategoryAdapter(context: Context, root.setOnClickListener { if (position != mCurrentIndex) { + IntegralLogHelper.logCommodityCategory( + "click_tab_goods_catalog", + "光能中心", + "光能中心-商品分类", + entity.id, + entity.name + ) mFragment.updateCategory(entity.id) mCurrentIndex = position notifyDataSetChanged() diff --git a/app/src/main/java/com/gh/gamecenter/energy/CommodityAdapter.kt b/app/src/main/java/com/gh/gamecenter/energy/CommodityAdapter.kt index 0521748440..f8b715f6d8 100644 --- a/app/src/main/java/com/gh/gamecenter/energy/CommodityAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/energy/CommodityAdapter.kt @@ -15,10 +15,13 @@ import com.gh.gamecenter.R import com.gh.gamecenter.adapter.viewholder.FooterViewHolder import com.gh.gamecenter.baselist.ListAdapter import com.gh.gamecenter.databinding.CommodityItemBinding +import com.gh.gamecenter.entity.CommodityCategoryEntity import com.gh.gamecenter.entity.CommodityEntity import io.reactivex.disposables.Disposable -class CommodityAdapter(context: Context, val entrance: String): ListAdapter(context) { +class CommodityAdapter(context: Context, + val entrance: String, + val category: CommodityCategoryEntity): ListAdapter(context) { private val mTimers = ArrayList() @@ -76,7 +79,21 @@ class CommodityAdapter(context: Context, val entrance: String): ListAdapter() { private var mAdapter: CommodityAdapter? = null private lateinit var mBinding: FragmentCommodityListBinding private var mCategoryList: ArrayList? = null + private var mCategory: CommodityCategoryEntity? = null private var mLastPositions: IntArray? = null private var mLastVisibleItemPosition = 0 private var mHaveLoad = false @@ -30,13 +31,17 @@ class CommodityFragment : ListFragment() { override fun provideListViewModel(): CommodityViewModel { mEntrance = requireArguments().getString(EntranceUtils.KEY_ENTRANCE) ?: "" - val categoryId = requireArguments().getString(EntranceUtils.KEY_CATEGORY_ID) ?: "" - val factory = CommodityViewModel.Factory(categoryId, mEntrance) + mCategory = requireArguments().getParcelable(EntranceUtils.KEY_CATEGORY) + val factory = CommodityViewModel.Factory(mCategory?.id ?: "", mEntrance) return viewModelProvider(factory) } override fun provideListAdapter() = mAdapter - ?: CommodityAdapter(requireContext(), mEntrance).apply { mAdapter = this } + ?: CommodityAdapter( + requireContext(), + mEntrance, + mCategory ?: CommodityCategoryEntity() + ).apply { mAdapter = this } override fun getItemDecoration() = null @@ -54,13 +59,29 @@ class CommodityFragment : ListFragment() { header.visibility = View.VISIBLE categoryContainer.layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false) categoryContainer.adapter = CategoryAdapter(requireContext(), this@CommodityFragment, mCategoryList!!) - more.setOnClickListener { requireContext().startActivity(EnergyHouseActivity.getIntent(requireContext())) } + more.setOnClickListener { + IntegralLogHelper.run { + log("click_energy_store", "光能中心", "光能中心-商品更多") + log("click_more", "光能中心", "光能中心-右上角更多") + log("view_energy_store", "光能屋") + } + + requireContext().startActivity(EnergyHouseActivity.getIntent(requireContext())) + } } } mBinding.bottom.run { if (mEntrance == "光能中心") { - setOnClickListener { requireContext().startActivity(EnergyHouseActivity.getIntent(requireContext())) } + setOnClickListener { + IntegralLogHelper.run { + log("click_energy_store", "光能中心", "光能中心-底部更多") + log("click_more", "光能中心", "光能中心-底部更多") + log("view_energy_store", "光能屋") + } + + requireContext().startActivity(EnergyHouseActivity.getIntent(requireContext())) + } } else { visibility = View.GONE } diff --git a/app/src/main/java/com/gh/gamecenter/energy/EnergyCenterFragment.kt b/app/src/main/java/com/gh/gamecenter/energy/EnergyCenterFragment.kt index 8b4cb03368..22fd7faf4a 100644 --- a/app/src/main/java/com/gh/gamecenter/energy/EnergyCenterFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/energy/EnergyCenterFragment.kt @@ -5,10 +5,7 @@ import android.os.Bundle import android.util.DisplayMetrics import android.view.LayoutInflater import android.view.View -import android.widget.CheckedTextView -import android.widget.ImageView -import android.widget.LinearLayout -import android.widget.RelativeLayout +import android.widget.* import androidx.fragment.app.Fragment import butterknife.OnClick import com.gh.base.adapter.FragmentAdapter @@ -121,7 +118,7 @@ class EnergyCenterFragment : BaseLazyFragment() { mUserHomeViewModel?.signStatus?.observeNonNull(this) { mSignStatus = it initSignView(it) - // 未登录且需要自动登录才调用登录接口 + // 今天未签到且需要自动签到才调用签到接口 if (!it.todaySignIn && mAutoSign) { mUserHomeViewModel?.signIn() } @@ -233,7 +230,7 @@ class EnergyCenterFragment : BaseLazyFragment() { val bundle = Bundle() bundle.putString(EntranceUtils.KEY_ENTRANCE, "光能中心") if (mCategoryList.isNotEmpty()) { - bundle.putString(EntranceUtils.KEY_CATEGORY_ID, mCategoryList[0].id) + bundle.putParcelable(EntranceUtils.KEY_CATEGORY, mCategoryList[0]) bundle.putParcelableArrayList(EntranceUtils.KEY_CATEGORY_LIST, mCategoryList) } arguments = bundle @@ -269,6 +266,11 @@ class EnergyCenterFragment : BaseLazyFragment() { // 处理BottomSheetBehavior的ViewPager嵌套RecyclerView滑动冲突问题 viewpager.addOnPageChangeListener { + if (it == 0) { + IntegralLogHelper.log("click_tab_energy_mission", LOCATION) + } else { + IntegralLogHelper.log("click_tab_exchange", LOCATION) + } (mFragmentsList[0] as TaskFragment).setNestedScrollingEnabled(it == 0) (mFragmentsList[1] as CommodityFragment).setNestedScrollingEnabled(it == 1) bottomSheet.requestLayout() @@ -293,37 +295,41 @@ class EnergyCenterFragment : BaseLazyFragment() { } } - @OnClick(R.id.backIv, R.id.energyRecord, R.id.lotteryCenter, R.id.inviteFriends, R.id.signSwitch, R.id.signToday, R.id.signRule, + @OnClick(R.id.backIv, R.id.userEnergyContainer, R.id.energyRuleTv, R.id.inviteFriends, R.id.signSwitch, R.id.signToday, R.id.signRule, R.id.oneDay, R.id.twoDay, R.id.threeDay, R.id.fourDay, R.id.fiveDay, R.id.sixDay, R.id.sevenDay) fun onViewClicked(v: View) { when (v.id) { R.id.backIv -> requireActivity().finish() - R.id.userEnergy -> { - mUserInfo?.run { - DialogUtils.showEnergyDialog(requireContext(), name, mEnergy) + R.id.userEnergyContainer -> { + IntegralLogHelper.run { + log("click_energy_record", LOCATION, "光能中心-光能值") + log("view_energy_record", "光能明细") } - } - - R.id.energyRecord -> { - ifLogin("光能中心-光能记录") { + ifLogin("光能中心-光能值") { DirectUtils.directToEnergyRecord(requireContext()) } } - R.id.lotteryCenter -> { - ifLogin("光能中心-抽奖中心") { - // 抽奖中心 + R.id.energyRuleTv -> { + IntegralLogHelper.run { + log("click_energy_rule", LOCATION) + log("view_energy_rule", "光能规则") } } R.id.inviteFriends -> { + IntegralLogHelper.run { + log("click_invite_friend", LOCATION) + log("view_invite_friend", "邀请好友页") + } ifLogin("光能中心-邀请好友") { DirectUtils.directToInviteFriends(requireContext()) } } R.id.signSwitch -> { + IntegralLogHelper.log("click_sign_remind", LOCATION) ifLogin("光能中心-签到提醒") { if (!ClickUtils.isFastDoubleClick()) { dealSignRemind() @@ -332,12 +338,13 @@ class EnergyCenterFragment : BaseLazyFragment() { } R.id.signRule -> { + IntegralLogHelper.log("click_sign_rule", LOCATION) DialogUtils.showSignRuleDialog(requireContext()) } R.id.signToday -> { ifLogin("光能中心-签到气泡") { - mUserHomeViewModel?.signIn() + dealSignIn() } } @@ -345,7 +352,7 @@ class EnergyCenterFragment : BaseLazyFragment() { ifLogin("光能中心-1天") { mSignStatus?.run { if (!todaySignIn && sevenDaySerialSign == 0) { - mUserHomeViewModel?.signIn() + dealSignIn() } } } @@ -355,7 +362,7 @@ class EnergyCenterFragment : BaseLazyFragment() { ifLogin("光能中心-2天") { mSignStatus?.run { if (!todaySignIn && sevenDaySerialSign == 1) { - mUserHomeViewModel?.signIn() + dealSignIn() } } } @@ -365,7 +372,7 @@ class EnergyCenterFragment : BaseLazyFragment() { ifLogin("光能中心-3天") { mSignStatus?.run { if (!todaySignIn && sevenDaySerialSign == 2) { - mUserHomeViewModel?.signIn() + dealSignIn() } } } @@ -375,7 +382,7 @@ class EnergyCenterFragment : BaseLazyFragment() { ifLogin("光能中心-4天") { mSignStatus?.run { if (!todaySignIn && sevenDaySerialSign == 3) { - mUserHomeViewModel?.signIn() + dealSignIn() } } } @@ -385,7 +392,7 @@ class EnergyCenterFragment : BaseLazyFragment() { ifLogin("光能中心-5天") { mSignStatus?.run { if (!todaySignIn && sevenDaySerialSign == 4) { - mUserHomeViewModel?.signIn() + dealSignIn() } } } @@ -395,7 +402,7 @@ class EnergyCenterFragment : BaseLazyFragment() { ifLogin("光能中心-6天") { mSignStatus?.run { if (!todaySignIn && sevenDaySerialSign == 5) { - mUserHomeViewModel?.signIn() + dealSignIn() } } } @@ -405,7 +412,7 @@ class EnergyCenterFragment : BaseLazyFragment() { ifLogin("光能中心-7天") { mSignStatus?.run { if (!todaySignIn && sevenDaySerialSign == 6) { - mUserHomeViewModel?.signIn() + dealSignIn() } } } @@ -413,6 +420,11 @@ class EnergyCenterFragment : BaseLazyFragment() { } } + private fun dealSignIn() { + IntegralLogHelper.log("click_sign", LOCATION) + mUserHomeViewModel?.signIn() + } + private fun dealSignRemind() { checkCalendarPermissionBeforeAction { if (SPUtils.getBoolean(Constants.SP_SIGN_REMIND)) { @@ -431,6 +443,7 @@ class EnergyCenterFragment : BaseLazyFragment() { "FREQ=DAILY") if (isSuccess) { SPUtils.setBoolean(Constants.SP_SIGN_REMIND, true) + DialogUtils.showSignRemindSuccessDialog(requireContext()) mBinding?.signSwitch?.setImageResource(R.drawable.ic_energy_center_switch_on) } else { ToastUtils.showToast("添加签到提醒失败") @@ -438,4 +451,8 @@ class EnergyCenterFragment : BaseLazyFragment() { } } } + + companion object { + const val LOCATION = "光能中心" + } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/energy/EnergyHouseFragment.kt b/app/src/main/java/com/gh/gamecenter/energy/EnergyHouseFragment.kt index 3774bbef7d..72bf6737e8 100644 --- a/app/src/main/java/com/gh/gamecenter/energy/EnergyHouseFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/energy/EnergyHouseFragment.kt @@ -135,7 +135,7 @@ class EnergyHouseFragment: BaseLazyFragment() { toolbar.setBackgroundColor(R.color.white.toColor()) backIv.setImageResource(R.drawable.ic_back_gamedetail) title.setTextColor(R.color.text_333333.toColor()) - EnergyRuleTv.setTextColor(R.color.text_333333.toColor()) + exchangeRuleTv.setTextColor(R.color.text_333333.toColor()) EnergyRuleIv.setImageResource(R.drawable.icon_doubt_black) tabLayout.setBackgroundColor(R.color.white.toColor()) sizeContainer.setBackgroundColor(R.color.white.toColor()) @@ -144,7 +144,7 @@ class EnergyHouseFragment: BaseLazyFragment() { toolbar.setBackgroundColor(R.color.transparent.toColor()) backIv.setImageResource(R.drawable.ic_toolbar_back_white) title.setTextColor(R.color.white.toColor()) - EnergyRuleTv.setTextColor(R.color.white.toColor()) + exchangeRuleTv.setTextColor(R.color.white.toColor()) EnergyRuleIv.setImageResource(R.drawable.icon_doubt_white) tabLayout.setBackgroundColor(R.color.transparent.toColor()) sizeContainer.setBackgroundColor(R.color.transparent.toColor()) @@ -169,7 +169,15 @@ class EnergyHouseFragment: BaseLazyFragment() { } else { EnergyTaskTitle.visibility = View.VISIBLE EnergyTaskContainer.visibility = View.VISIBLE - EnergyTaskMore.setOnClickListener { requireContext().startActivity(EnergyCenterActivity.getIntent(requireContext())) } + EnergyTaskMore.setOnClickListener { + IntegralLogHelper.run { + log("click_energy_center", LOCATION, "光能屋-更多") + log("view_energy_center", "光能中心") + log("click_more", LOCATION) + } + + requireContext().startActivity(EnergyCenterActivity.getIntent(requireContext())) + } EnergyTaskContainer.layoutManager = LinearLayoutManager(requireContext(), RecyclerView.HORIZONTAL, false) EnergyTaskContainer.adapter = HorizontalTaskAdapter(requireContext(), "光能屋", mTasks) } @@ -190,7 +198,7 @@ class EnergyHouseFragment: BaseLazyFragment() { val commodityListFragment = childFragmentManager.findFragmentByTag("$tag$index") ?: CommodityFragment().with(bundleOf( EntranceUtils.KEY_ENTRANCE to "光能屋", - EntranceUtils.KEY_CATEGORY_ID to entity.id)) + EntranceUtils.KEY_CATEGORY to entity)) mFragments.add(commodityListFragment) } @@ -228,6 +236,17 @@ class EnergyHouseFragment: BaseLazyFragment() { override fun onTabSelected(tab: TabLayout.Tab?) { updateTabStyle(tab, true) + tab?.run { + mCommodityCategories?.get(position)?.run { + IntegralLogHelper.logCommodityCategory( + "click_tab_goods_catalog", + "光能屋", + "光能屋-商品分类", + id, + name + ) + } + } } }) } @@ -273,6 +292,7 @@ class EnergyHouseFragment: BaseLazyFragment() { tv.text = size.text item.setOnClickListener { if (mCurrentSizeIndex != index) { + IntegralLogHelper.logEnergyRange("click_energy_number_filter", LOCATION, size.text ?: "") changeSizeBg(index) (mFragments[viewpager.currentItem] as CommodityFragment).refreshPage(size) mCurrentSizeIndex = index @@ -302,7 +322,8 @@ class EnergyHouseFragment: BaseLazyFragment() { fun getCurrentSize() = mCurrentSize - @OnClick(R.id.backIv, R.id.userIcon, R.id.userName, R.id.userEnergy, R.id.energyRecord, R.id.energyOrder) + @OnClick(R.id.backIv, R.id.userIcon, R.id.userName, R.id.userEnergy, R.id.exchangeRuleTv, R.id.exchangeCommodity, + R.id.lotteryParadise, R.id.rollNotice) fun onViewClicked(v: View) { when (v.id) { R.id.backIv -> requireActivity().finish() @@ -312,22 +333,51 @@ class EnergyHouseFragment: BaseLazyFragment() { R.id.userName -> ifLogin("光能屋-立即登录") R.id.userEnergy -> { - mUserInfo?.run { - DialogUtils.showEnergyDialog(requireContext(), name, mEnergy) + IntegralLogHelper.run { + log("click_energy_record", LOCATION, "光能屋-光能值") + log("view_energy_record", "光能明细") + log("click_energy", LOCATION) + } + + ifLogin("光能屋-光能值") { + DirectUtils.directToEnergyRecord(requireContext()) } } - R.id.energyRecord -> { - ifLogin("光能屋-光能记录") { - DirectUtils.directToEnergyRecord(requireContext(), 1) + R.id.exchangeRuleTv -> { + IntegralLogHelper.run { + log("click_exchange_rule", LOCATION) + log("view_exchange_rule", "兑换规则") } } - R.id.energyOrder -> { - ifLogin("光能屋-订单中心") { - DirectUtils.directToOrderCenter(requireContext()) + R.id.exchangeCommodity -> { + IntegralLogHelper.run { + log("click_exchange_record", LOCATION) + log("view_exchange_record", "兑换商品") } + ifLogin("光能屋-兑换商品") { + + } + } + + R.id.lotteryParadise -> { + IntegralLogHelper.run { + log("click_draw_center", LOCATION) + log("view_raffle_center", "抽奖乐园页") + } + ifLogin("光能屋-抽奖乐园") { + + } + } + + R.id.rollNotice -> { + IntegralLogHelper.log("click_store_scroll_bar", LOCATION) } } } + + companion object { + const val LOCATION = "光能屋" + } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/energy/HorizontalTaskAdapter.kt b/app/src/main/java/com/gh/gamecenter/energy/HorizontalTaskAdapter.kt index 2a27fc44ea..80a09665e5 100644 --- a/app/src/main/java/com/gh/gamecenter/energy/HorizontalTaskAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/energy/HorizontalTaskAdapter.kt @@ -5,6 +5,7 @@ import android.content.Context import android.view.ViewGroup import androidx.databinding.DataBindingUtil import com.gh.base.BaseRecyclerViewHolder +import com.gh.common.constant.Constants import com.gh.common.util.* import com.gh.gamecenter.R import com.gh.gamecenter.databinding.NoviceTaskItemBinding @@ -49,6 +50,15 @@ class HorizontalTaskAdapter(context: Context, } root.setOnClickListener { + task.run { + IntegralLogHelper.logTask( + "click_mission", + entrance, + taskId, + name, + "新手任务") + } + CheckLoginUtils.checkLogin(mContext, entrance) { when (task.status) { "normal" -> { @@ -65,6 +75,7 @@ class HorizontalTaskAdapter(context: Context, } } } else { + SPUtils.setBoolean(Constants.SP_SHOW_TASK_FLOAT, true) DirectUtils.directToLinkPage(mContext, task.link, entrance, "") } } diff --git a/app/src/main/java/com/gh/gamecenter/energy/TaskAdapter.kt b/app/src/main/java/com/gh/gamecenter/energy/TaskAdapter.kt index ba655e7301..9a42ee48a9 100644 --- a/app/src/main/java/com/gh/gamecenter/energy/TaskAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/energy/TaskAdapter.kt @@ -8,6 +8,7 @@ import androidx.databinding.DataBindingUtil import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.gh.base.BaseRecyclerViewHolder +import com.gh.common.constant.Constants import com.gh.common.constant.ItemViewType import com.gh.common.util.* import com.gh.gamecenter.R @@ -19,7 +20,7 @@ import com.gh.gamecenter.manager.UserManager class TaskAdapter(context: Context) : ListAdapter(context) { - private val mEntrance = "光能屋-任务列表" + private val mEntrance = "光能中心-任务列表" override fun getItemCount(): Int { return if (mEntityList.isNullOrEmpty()) 0 else mEntityList.size + FOOTER_ITEM_COUNT @@ -139,6 +140,15 @@ class TaskAdapter(context: Context) : ListAdapter(context) { } root.setOnClickListener { + task.run { + IntegralLogHelper.logTask( + "click_mission", + "光能中心", + taskId, + name, + if (isFixed) "常驻任务" else "日常任务") + } + CheckLoginUtils.checkLogin(mContext, mEntrance) { when (task.status) { "normal" -> { @@ -155,13 +165,12 @@ class TaskAdapter(context: Context) : ListAdapter(context) { } } } else { + SPUtils.setBoolean(Constants.SP_SHOW_TASK_FLOAT, true) DirectUtils.directToLinkPage(mContext, task.link, mEntrance, "") } } - "limiting" -> { - DirectUtils.directToLinkPage(mContext, task.link, mEntrance, "") - } + "limiting" -> ToastUtils.toast(R.string.limiting_tip.toResString()) // "finished" -> {} } diff --git a/app/src/main/java/com/gh/gamecenter/fragment/MainWrapperFragment.java b/app/src/main/java/com/gh/gamecenter/fragment/MainWrapperFragment.java index 8c6f1a51ba..d9b1bacef2 100644 --- a/app/src/main/java/com/gh/gamecenter/fragment/MainWrapperFragment.java +++ b/app/src/main/java/com/gh/gamecenter/fragment/MainWrapperFragment.java @@ -38,6 +38,7 @@ import com.gh.common.util.EntranceUtils; import com.gh.common.util.ExtensionsKt; import com.gh.common.util.HomeBottomBarHelper; import com.gh.common.util.ImageUtils; +import com.gh.common.util.IntegralLogHelper; import com.gh.common.util.LogUtils; import com.gh.common.view.ReserveDialog; import com.gh.common.view.WelcomeDialog; @@ -476,6 +477,7 @@ public class MainWrapperFragment extends BaseFragment_ViewPager_Checkable implem break; case INDEX_PERSONAL: tabText = "我的光环"; + IntegralLogHelper.INSTANCE.log("view_me", "我的光环"); break; } diff --git a/app/src/main/java/com/gh/gamecenter/fragment/SearchToolbarFragment.java b/app/src/main/java/com/gh/gamecenter/fragment/SearchToolbarFragment.java index 12b5afd6f7..0900620a4a 100644 --- a/app/src/main/java/com/gh/gamecenter/fragment/SearchToolbarFragment.java +++ b/app/src/main/java/com/gh/gamecenter/fragment/SearchToolbarFragment.java @@ -26,6 +26,7 @@ import com.gh.common.util.DataCollectionUtils; import com.gh.common.util.DataUtils; import com.gh.common.util.DisplayUtils; import com.gh.common.util.EntranceUtils; +import com.gh.common.util.IntegralLogHelper; import com.gh.common.util.LogUtils; import com.gh.common.util.MtaHelper; import com.gh.download.DownloadManager; @@ -276,6 +277,9 @@ public class SearchToolbarFragment extends BaseLazyFragment implements View.OnCl case R.id.actionbar_sign: MtaHelper.onEvent("首页_点击", "顶栏", "签到"); DataCollectionUtils.uploadClick(getActivity(), "签到图标", "主页"); + if ("首页".equals(mLocation) || "游戏库".equals(mLocation)) { + IntegralLogHelper.INSTANCE.log("click_sign", mLocation); + } startActivity(EnergyCenterActivity.Companion.getIntent(requireContext(), true)); break; diff --git a/app/src/main/java/com/gh/gamecenter/personal/NewPersonalFragment.java b/app/src/main/java/com/gh/gamecenter/personal/NewPersonalFragment.java index 06ebc9b4bd..9b0083c262 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/NewPersonalFragment.java +++ b/app/src/main/java/com/gh/gamecenter/personal/NewPersonalFragment.java @@ -32,6 +32,7 @@ import com.gh.common.util.DirectUtils; import com.gh.common.util.DisplayUtils; import com.gh.common.util.EntranceUtils; import com.gh.common.util.ImageUtils; +import com.gh.common.util.IntegralLogHelper; import com.gh.common.util.LogUtils; import com.gh.common.util.LoginHelper; import com.gh.common.util.MtaHelper; @@ -112,8 +113,6 @@ public class NewPersonalFragment extends BaseLazyFragment { AppBarLayout appbar; @BindView(R.id.toolbar) Toolbar toolbar; - @BindView(R.id.personal_sign) - ImageView mPersonalSign; @BindView(R.id.personal_msg) ImageView mPersonalMsg; @BindView(R.id.login_message_hint) @@ -427,21 +426,6 @@ public class NewPersonalFragment extends BaseLazyFragment { mUnreadViewModel.getAddonsUnreadLiveData().observe(this, entity -> { notifyItemChange("我的收藏", entity.getFavorite() > 0 ? FunctionalMessageType.NEW_MESSAGE : null); }); - - // 微信/签到 - RxView.clicks(mPersonalSign) - .throttleFirst(1, TimeUnit.SECONDS) - .subscribe(aVoid -> { - if (CheckLoginUtils.isLogin()) { - MtaHelper.onEvent("我的光环", "签到"); - MtaHelper.onEvent("我的光环_新", "签到", "点击签到"); - sign(); - } else { - MtaHelper.onEvent("我的光环_新", "功能入口-跳转登录", "签到"); - CheckLoginUtils.checkLogin(getContext(), "我的光环-签到", () -> { - }); - } - }); } @Override @@ -587,6 +571,7 @@ public class NewPersonalFragment extends BaseLazyFragment { DirectUtils.directToBadgeWall(requireContext(), mUserInfoEntity.getUserId(), mUserInfoEntity.getName(), mUserInfoEntity.getIcon()); break; case R.id.personal_receive_energy: + IntegralLogHelper.INSTANCE.log("click_energy", "我的光环"); if (mUserInfoEntity != null) { MtaHelper.onEvent("我的光环_新", "领光能", "点击领光能"); startActivity(EnergyCenterActivity.Companion.getIntent(requireContext(), true)); @@ -595,6 +580,7 @@ public class NewPersonalFragment extends BaseLazyFragment { } break; case R.id.personal_energy: + IntegralLogHelper.INSTANCE.log("click_sign", "我的光环"); if (mUserInfoEntity != null) { MtaHelper.onEvent("我的光环_新", "光能值", "点击光能值"); DialogUtils.showEnergyDialog(requireContext(), mUserInfoEntity.getName(), mEnergy); @@ -604,13 +590,19 @@ public class NewPersonalFragment extends BaseLazyFragment { break; case R.id.personal_energy_center: MtaHelper.onEvent("我的光环_新", "光能中心", "进入光能中心"); + IntegralLogHelper.INSTANCE.log("click_energy_center", "我的光环", "我的光环-光能中心"); + IntegralLogHelper.INSTANCE.log("view_energy_center", "光能中心"); requireContext().startActivity(EnergyCenterActivity.Companion.getIntent(requireContext())); break; case R.id.personal_energy_house: MtaHelper.onEvent("我的光环_新", "光能屋", "进入光能屋"); + IntegralLogHelper.INSTANCE.log("click_energy_store", "我的光环", "我的光环-光能屋"); + IntegralLogHelper.INSTANCE.log("view_energy_store", "光能屋"); requireContext().startActivity(EnergyHouseActivity.Companion.getIntent(requireContext())); break; case R.id.personal_energy_record: + IntegralLogHelper.INSTANCE.log("click_energy_record", "我的光环", "我的光环-光能明细"); + IntegralLogHelper.INSTANCE.log("view_energy_record", "光能明细"); if (mUserInfoEntity != null) { MtaHelper.onEvent("我的光环_新", "光能记录", "进入光能记录"); DirectUtils.directToEnergyRecord(requireContext()); @@ -653,54 +645,6 @@ public class NewPersonalFragment extends BaseLazyFragment { } } - private void sign() { - RetrofitManager.getInstance(getContext()).getApi() - .postSign(UserManager.getInstance().getUserId()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response() { - @Override - public void onResponse(SignEntity signEntity) { - mPersonalSign.setImageDrawable(ContextCompat.getDrawable(requireContext(), R.drawable.personal_sign_icon_yellow)); - if (isCanSign(signEntity.getLastTime())) { - DialogUtils.showSignDialog(getContext(), "签到成功,获得经验:1" - , getString(R.string.sign_dialog_content, signEntity.getSerialSign()) - , getString(R.string.sign_dialog_content2, signEntity.getExperience()) - , getSignSkipText(signEntity.getTitle()), () -> { - signSkip(signEntity); - } - ); - signEntity.setLastTime(System.currentTimeMillis() / 1000); - } else { - DialogUtils.showSignDialog(getContext(), "今天已签到,明天再来吧~" - , getString(R.string.sign_dialog_content, signEntity.getSerialSign()) - , getString(R.string.sign_dialog_content2, signEntity.getExperience()) - , getSignSkipText(signEntity.getTitle()), () -> { - signSkip(signEntity); - } - ); - } - - signEntity.setId(UserManager.getInstance().getUserId()); - if (mDatabase.signDao().updateSignEntity(signEntity) <= 0) { - try { - mDatabase.signDao().addSignEntity(signEntity); - } catch (SQLiteException e) { - e.printStackTrace(); - } - } - } - - @Override - public void onFailure(HttpException e) { - if (e == null || e.code() != 401) { - toast(R.string.loading_network_error); - } - } - }); - - } - private boolean isCanSign(long time) { SimpleDateFormat formatDay = new SimpleDateFormat("dd", Locale.CHINA); @@ -766,12 +710,6 @@ public class NewPersonalFragment extends BaseLazyFragment { private void changeLoginState(boolean isLogin) { if (isLogin) { - SignEntity signEntity = mDatabase.signDao().getSignEntityById(UserManager.getInstance().getUserId()); - if (signEntity != null && !isCanSign(signEntity.getLastTime())) { - mPersonalSign.setImageDrawable(ContextCompat.getDrawable(requireContext(), R.drawable.personal_sign_icon_yellow)); - } else { - mPersonalSign.setImageDrawable(ContextCompat.getDrawable(requireContext(), R.drawable.personal_sign_icon_white)); - } if (mUserInfoEntity != null) { mUserIcon.display(mUserInfoEntity.getIconBorder() == null ? "" : mUserInfoEntity.getIconBorder().getUrl(), mUserInfoEntity.getIcon(), mUserInfoEntity.getAuth() == null ? "" : mUserInfoEntity.getAuth().getIcon()); diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeFragment.kt b/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeFragment.kt index 9c6aeffbc5..3dd252bfff 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeFragment.kt @@ -213,6 +213,10 @@ class UserHomeFragment : NormalFragment() { levelContainer.visibility = View.VISIBLE levelContainer.setOnClickListener { if (mUserHomeViewModel.userId == UserManager.getInstance().userId) { + IntegralLogHelper.run { + log("click_grade_label", LOCATION) + log("view_grade", "等级中心页") + } DirectUtils.directToLevelPage(requireContext()) } } @@ -423,11 +427,13 @@ class UserHomeFragment : NormalFragment() { // 跳转更换背景页 userChangeBgBtn.setOnClickListener { + IntegralLogHelper.log("click_change _background", LOCATION) startActivity(PersonalityBackgroundActivity.getIntent(requireContext())) } // 个性签名 userIntroduce.setOnClickListener { + IntegralLogHelper.log("click_what's_up", LOCATION) startActivity(UserInfoEditActivity.getIntent(context, UserViewModel.TYPE_INTRODUCE)) } } @@ -444,6 +450,7 @@ class UserHomeFragment : NormalFragment() { regulationTestContainer.setOnClickListener { if (::mPersonalEntity.isInitialized && mUserHomeViewModel.userId == UserManager.getInstance().userId) { + IntegralLogHelper.log("click_test_label", LOCATION) DialogUtils.showPassRegulationDialog(requireContext(), mPersonalEntity.icon) } } @@ -451,11 +458,16 @@ class UserHomeFragment : NormalFragment() { // 徽章标签 badgeContainer.setOnClickListener { if (::mPersonalEntity.isInitialized) { + IntegralLogHelper.log("click_badge_label", LOCATION) directToBadgeWall(requireContext(), mPersonalEntity.id, mPersonalEntity.name, mPersonalEntity.icon) } } userIcon.setOnClickListener { + IntegralLogHelper.run { + log("click_profile_photo", LOCATION) + log("view_pendant", "头像挂件页") + } if (mUserHomeViewModel.userId == UserManager.getInstance().userId) { MtaHelper.onEvent("个人主页详情", "个人主页详情", "头像") startActivity(AvatarBorderActivity.getIntent(requireContext())) @@ -465,18 +477,22 @@ class UserHomeFragment : NormalFragment() { } userFollowerContainer.setOnClickListener { + IntegralLogHelper.log("click_follow", LOCATION) MtaHelper.onEvent("个人主页详情", "个人主页详情", "关注数") startActivity(FollowersActivity.getIntent(requireContext(), mUserHomeViewModel.userId, mEntrance, mPath)) } userFansContainer.setOnClickListener { + IntegralLogHelper.log("click_follower", LOCATION) MtaHelper.onEvent("个人主页详情", "个人主页详情", "粉丝数") requireContext().startActivity(FansActivity.getIntent(requireContext(), mUserHomeViewModel.userId, mEntrance, mPath)) } userVoteContainer.setOnClickListener { + IntegralLogHelper.log("click_like", LOCATION) MtaHelper.onEvent("个人主页详情", "个人主页详情", "赞同数") Utils.toast(requireContext(), "共获得 " + NumberUtils.transSimpleCount(entity?.count?.vote!!) + " 赞同") } userEditBtn.setOnClickListener { + IntegralLogHelper.log("click_edit", LOCATION) MtaHelper.onEvent("个人主页详情", "个人主页详情", "编辑按钮") requireContext().startActivity(UserInfoActivity.getIntent(requireContext())) } @@ -523,9 +539,18 @@ class UserHomeFragment : NormalFragment() { when (v.id) { R.id.iv_back -> requireActivity().finish() - R.id.iv_share -> shareUserHome() + R.id.iv_share -> { + IntegralLogHelper.log("click_share", LOCATION) + shareUserHome() + } - R.id.iv_more -> showMorePopup() + R.id.iv_more -> { + IntegralLogHelper.run { + log("click_more", LOCATION) + log("view_panel-more", "更多面板") + } + showMorePopup() + } } } @@ -541,11 +566,13 @@ class UserHomeFragment : NormalFragment() { contentView.run { findViewById(R.id.shareBtn) .setOnClickListener { + IntegralLogHelper.log("click_share", "更多面板") mPopupWindow.dismiss() shareUserHome() } findViewById(R.id.reportBtn).setOnClickListener { + IntegralLogHelper.log("click_report", "更多面板") mPopupWindow.dismiss() DialogUtils.showReportReasonDialog(requireContext()) { reason, desc -> mUserHomeViewModel.postReport(reason, desc) @@ -589,4 +616,8 @@ class UserHomeFragment : NormalFragment() { view.draw(canvas) return bitmap } + + companion object { + const val LOCATION = "个人主页" + } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/border/AvatarBorderActivity.kt b/app/src/main/java/com/gh/gamecenter/personalhome/border/AvatarBorderActivity.kt index 9da71e87d0..85fd85b725 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/border/AvatarBorderActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/border/AvatarBorderActivity.kt @@ -5,6 +5,7 @@ import android.content.Intent import android.os.Bundle import com.gh.base.BaseActivity import com.gh.common.util.DisplayUtils +import com.gh.common.util.EntranceUtils import com.gh.gamecenter.R class AvatarBorderActivity : BaseActivity() { @@ -25,8 +26,12 @@ class AvatarBorderActivity : BaseActivity() { } companion object { - fun getIntent(context: Context): Intent { - return Intent(context, AvatarBorderActivity::class.java) + fun getIntent(context: Context, categoryName: String? = null): Intent { + return Intent(context, AvatarBorderActivity::class.java).apply { + categoryName?.let { + putExtra(EntranceUtils.KEY_CATEGORY_NAME, it) + } + } } } diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/border/AvatarBorderFragment.kt b/app/src/main/java/com/gh/gamecenter/personalhome/border/AvatarBorderFragment.kt index 0c42590f31..31209c6f5f 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/border/AvatarBorderFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/border/AvatarBorderFragment.kt @@ -32,15 +32,18 @@ import org.json.JSONObject class AvatarBorderFragment : NormalFragment() { - private lateinit var mUserViewModel: UserViewModel - private lateinit var mAvatarBorderViewModel: AvatarBorderViewModel - private lateinit var mAvatarBorderCategories: List + private var mUserViewModel: UserViewModel? = null + private var mAvatarBorderViewModel: AvatarBorderViewModel? = null + private var mAvatarBorderCategories: List? = null + private var mBinding: FragmentAvatarBorderBinding? = null - lateinit var mBinding: FragmentAvatarBorderBinding private var mPostDialog: WaitingDialogFragment? = null var selectAvatarBorderEntity: AvatarBorderEntity? = null private val mTitleList = ArrayList() private val mFragments = ArrayList() + private var mCurrentIndex = 0 + private var mInitTabName = "" + private var mInitTabIndex = 0 override fun getLayoutId() = 0 @@ -51,29 +54,36 @@ class AvatarBorderFragment : NormalFragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + mInitTabName = arguments?.getString(EntranceUtils.KEY_CATEGORY_NAME) ?: "" mAvatarBorderViewModel = viewModelProvider() mUserViewModel = viewModelProvider(UserViewModel.Factory(HaloApp.getInstance().application)) - mUserViewModel.loginObsUserinfo.observeNonNull(this) { - if (it.data?.background?.url.isNullOrEmpty()) { - ImageUtils.display(mBinding.forumBackground, R.drawable.bg_avatar_border) - } else { - ImageUtils.display(mBinding.forumBackground, it.data?.background?.url) + mUserViewModel?.loginObsUserinfo?.observeNonNull(this) { + mBinding?.run { + if (it.data?.background?.url.isNullOrEmpty()) { + ImageUtils.display(forumBackground, R.drawable.bg_avatar_border) + } else { + ImageUtils.display(forumBackground, it.data?.background?.url) + } + userAvatar.display(it.data?.iconBorder?.url, it.data?.icon ?: "") } - mBinding.userAvatar.display(it.data?.iconBorder?.url, it.data?.icon ?: "") } - mUserViewModel.editObsUserinfo.observe(this, Observer { - mBinding.userAvatar.displayAvatar(it.data?.icon ?: "") + + mUserViewModel?.editObsUserinfo?.observe(this, Observer { + mBinding?.run { + userAvatar.displayAvatar(it.data?.icon ?: "") + } }) - mUserViewModel.uploadAvatarBorder.observe(this, Observer { + + mUserViewModel?.uploadAvatarBorder?.observe(this, Observer { mPostDialog?.dismiss() if (it) { EnergyTaskHelper.postEnergyTask("wear_avatar_frame") requireActivity().finish() - mUserViewModel.uploadAvatarBorder.value = false + mUserViewModel?.uploadAvatarBorder?.value = false } }) - mAvatarBorderViewModel.pendantCategories.observeNonNull(this) { + mAvatarBorderViewModel?.pendantCategories?.observeNonNull(this) { if (it.isEmpty()) return@observeNonNull mAvatarBorderCategories = it initViewPager() @@ -84,85 +94,107 @@ class AvatarBorderFragment : NormalFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - ViewCompat.setOnApplyWindowInsetsListener(mBinding.appbar) { _, insets -> - (mBinding.toolbar.layoutParams as ViewGroup.MarginLayoutParams).topMargin = insets.systemWindowInsetTop - insets.consumeSystemWindowInsets() - } - - mBinding.toolbar.setNavigationOnClickListener { requireActivity().finish() } - - mBinding.collapsingToolbar.scrimShownAction = { - DisplayUtils.setLightStatusBar(requireActivity(), it) - if (it) { - mBinding.titleTv.alpha = 1F - mBinding.titleTv.setTextColor(ContextCompat.getColor(requireContext(), R.color.black)) - mBinding.toolbar.navigationIcon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_bar_back) - mBinding.toolbar.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.white)) - DisplayUtils.setStatusBarColor(requireActivity(), R.color.white, true) - } else { - mBinding.titleTv.setTextColor(ContextCompat.getColor(requireContext(), R.color.white)) - mBinding.toolbar.navigationIcon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_toolbar_back_white) - mBinding.toolbar.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.transparent)) - DisplayUtils.setStatusBarColor(requireActivity(), R.color.transparent, false) + mBinding?.run { + ViewCompat.setOnApplyWindowInsetsListener(appbar) { _, insets -> + (toolbar.layoutParams as ViewGroup.MarginLayoutParams).topMargin = insets.systemWindowInsetTop + insets.consumeSystemWindowInsets() } - } - mBinding.userAvatar.setOnClickListener { - startActivity(ImageViewerActivity.getIntent(requireContext(), arrayListOf(UserManager.getInstance().userInfoEntity?.icon - ?: ""), 0, mBinding.userAvatar, "$mEntrance+(头像挂件)", true)) - } + toolbar.setNavigationOnClickListener { requireActivity().finish() } - mBinding.changeAvatarTv.setOnClickListener { - startActivity(SelectUserIconActivity.getIntent(context)) - } - - mBinding.commitTv.setOnClickListener { - if (selectAvatarBorderEntity != null) { - mPostDialog = WaitingDialogFragment.newInstance("加载中...") - mPostDialog?.show(childFragmentManager, null) - - val jsonObject = JSONObject() - if (mBinding.commitTv.text == "停用挂件") { - jsonObject.put("_id", "") - jsonObject.put("url", "") - mUserViewModel.changeUserInfo(jsonObject.toString(), UserViewModel.TYPE_ICON_BORDER) + collapsingToolbar.scrimShownAction = { + DisplayUtils.setLightStatusBar(requireActivity(), it) + if (it) { + titleTv.alpha = 1F + titleTv.setTextColor(ContextCompat.getColor(requireContext(), R.color.black)) + toolbar.navigationIcon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_bar_back) + toolbar.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.white)) + DisplayUtils.setStatusBarColor(requireActivity(), R.color.white, true) } else { - jsonObject.put("_id", selectAvatarBorderEntity?.id) - jsonObject.put("url", selectAvatarBorderEntity?.url) - mUserViewModel.changeUserInfo(jsonObject.toString(), UserViewModel.TYPE_ICON_BORDER) + titleTv.setTextColor(ContextCompat.getColor(requireContext(), R.color.white)) + toolbar.navigationIcon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_toolbar_back_white) + toolbar.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.transparent)) + DisplayUtils.setStatusBarColor(requireActivity(), R.color.transparent, false) + } + } + + userAvatar.setOnClickListener { + startActivity(ImageViewerActivity.getIntent(requireContext(), arrayListOf(UserManager.getInstance().userInfoEntity?.icon + ?: ""), 0, userAvatar, "$mEntrance+(头像挂件)", true)) + } + + changeAvatarTv.setOnClickListener { + IntegralLogHelper.log("click_change_profile_photo", "头像挂件页") + startActivity(SelectUserIconActivity.getIntent(context)) + } + + commitTv.setOnClickListener { + if (selectAvatarBorderEntity != null) { + mPostDialog = WaitingDialogFragment.newInstance("加载中...") + mPostDialog?.show(childFragmentManager, null) + + val jsonObject = JSONObject() + if (commitTv.text == "停用挂件") { + IntegralLogHelper.logPendent( + "click_stop", + LOCATION, + selectAvatarBorderEntity!!.id, + mAvatarBorderCategories?.get(mCurrentIndex)?.id ?: "" + ) + + jsonObject.put("_id", "") + jsonObject.put("url", "") + mUserViewModel?.changeUserInfo(jsonObject.toString(), UserViewModel.TYPE_ICON_BORDER) + } else { + IntegralLogHelper.logPendent( + "click_use", + LOCATION, + selectAvatarBorderEntity!!.id, + mAvatarBorderCategories?.get(mCurrentIndex)?.id ?: "" + ) + + jsonObject.put("_id", selectAvatarBorderEntity?.id) + jsonObject.put("url", selectAvatarBorderEntity?.url) + mUserViewModel?.changeUserInfo(jsonObject.toString(), UserViewModel.TYPE_ICON_BORDER) + } } } } } fun choosePendant(entity: AvatarBorderEntity, isSelected: Boolean) { - if (isSelected) { - selectAvatarBorderEntity = entity - mBinding.userAvatar.displayBorder(entity.url) - mBinding.commitTv.isEnabled = true - if (entity.id == UserManager.getInstance().userInfoEntity?.iconBorder?.id) { - mBinding.commitTv.text = "停用挂件" + mBinding?.run { + if (isSelected) { + selectAvatarBorderEntity = entity + userAvatar.displayBorder(entity.url) + commitTv.isEnabled = true + if (entity.id == UserManager.getInstance().userInfoEntity?.iconBorder?.id) { + commitTv.text = "停用挂件" + } else { + commitTv.text = "使用" + } + commitTv.setTextColor(ContextCompat.getColor(requireContext(), R.color.white)) + commitTv.background = ContextCompat.getDrawable(requireContext(), R.drawable.bg_notification_open_btn_style_2) } else { - mBinding.commitTv.text = "使用" + selectAvatarBorderEntity = null + userAvatar.displayBorder("") + commitTv.text = "使用" + commitTv.isEnabled = false + commitTv.setTextColor(ContextCompat.getColor(requireContext(), R.color.text_cccccc)) + commitTv.background = ContextCompat.getDrawable(requireContext(), R.drawable.border_round_eee_999) } - mBinding.commitTv.setTextColor(ContextCompat.getColor(requireContext(), R.color.white)) - mBinding.commitTv.background = ContextCompat.getDrawable(requireContext(), R.drawable.bg_notification_open_btn_style_2) - } else { - selectAvatarBorderEntity = null - mBinding.userAvatar.displayBorder("") - mBinding.commitTv.text = "使用" - mBinding.commitTv.isEnabled = false - mBinding.commitTv.setTextColor(ContextCompat.getColor(requireContext(), R.color.text_cccccc)) - mBinding.commitTv.background = ContextCompat.getDrawable(requireContext(), R.drawable.border_round_eee_999) } } private fun initViewPager() { - mBinding.run { + mBinding?.run { mTitleList.clear() mFragments.clear() val tag = "android:switcher:${viewpager.id}:" - mAvatarBorderCategories.forEachIndexed { index, entity -> + mAvatarBorderCategories?.forEachIndexed { index, entity -> + if (mInitTabName.isNotBlank() && mInitTabName == entity.name) { + mInitTabIndex = index + } mTitleList.add(entity.name) val chooseAvatarBorderFragment = childFragmentManager.findFragmentByTag("$tag$index") ?: ChooseAvatarBorderFragment().with(bundleOf( @@ -192,7 +224,9 @@ class AvatarBorderFragment : NormalFragment() { tab.customView = tabView } - tabLayout.getTabAt(0)?.let { updateTabStyle(it, true) } + viewpager.currentItem = mInitTabIndex + tabLayout.getTabAt(mInitTabIndex)?.let { updateTabStyle(it, true) } + tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { override fun onTabReselected(tab: TabLayout.Tab?) { updateTabStyle(tab, true) @@ -204,8 +238,21 @@ class AvatarBorderFragment : NormalFragment() { override fun onTabSelected(tab: TabLayout.Tab?) { updateTabStyle(tab, true) + tab?.run { + mAvatarBorderCategories?.get(position)?.run { + IntegralLogHelper.logPendent( + "click_tab_pendant_catalog", + LOCATION, + id + ) + } + } } }) + + viewpager.doOnPageSelected { + mCurrentIndex = it + } } } @@ -229,6 +276,10 @@ class AvatarBorderFragment : NormalFragment() { } fun setBottomVisible(visible: Boolean) { - mBinding.bottomContainer.visibility = if (visible) View.VISIBLE else View.GONE + mBinding?.bottomContainer?.visibility = if (visible) View.VISIBLE else View.GONE + } + + companion object { + const val LOCATION = "头像挂件页" } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/border/ChooseAvatarBorderAdapter.kt b/app/src/main/java/com/gh/gamecenter/personalhome/border/ChooseAvatarBorderAdapter.kt index d034019b89..ba87bfc125 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/border/ChooseAvatarBorderAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/border/ChooseAvatarBorderAdapter.kt @@ -16,9 +16,10 @@ import com.lightgame.adapter.BaseRecyclerAdapter import java.util.* class ChooseAvatarBorderAdapter(context: Context, - private val fragment: ChooseAvatarBorderFragment, - private val isFree: Boolean, - private val clickCallback: (entity: AvatarBorderEntity, isSelected: Boolean) -> Unit) + private val mFragment: ChooseAvatarBorderFragment, + private val mIsFree: Boolean, + private val mCategoryId: String, + private val mClickCallback: (entity: AvatarBorderEntity, isSelected: Boolean) -> Unit) : BaseRecyclerAdapter(context) { var entityList: ArrayList = arrayListOf() @@ -44,13 +45,13 @@ class ChooseAvatarBorderAdapter(context: Context, var isEnable = false when { // 普通挂件 - isFree -> { + mIsFree -> { isEnable = true holder.binding.descTv.visibility = View.GONE } // 商品挂件但未兑换或者已过期,显示光能 - !isFree && (borderEntity.expire == null + !mIsFree && (borderEntity.expire == null || (borderEntity.expire != null && borderEntity.expire!! < TimeUtil.currentTime())) -> { isEnable = false @@ -62,7 +63,7 @@ class ChooseAvatarBorderAdapter(context: Context, } // 商品挂件已兑换(expire=0代表永久可使用),显示有效期 - !isFree && borderEntity.expire != null + !mIsFree && borderEntity.expire != null && (borderEntity.expire!! == 0L || borderEntity.expire!! > TimeUtil.currentTime()) -> { isEnable = true @@ -84,29 +85,35 @@ class ChooseAvatarBorderAdapter(context: Context, holder.binding.checkBorderView.visibleIf(SPUtils.getString(Constants.SP_CHOOSE_AVATAR_ID) == borderEntity.id) if (SPUtils.getString(Constants.SP_CHOOSE_AVATAR_ID) == borderEntity.id) { - fragment.setParentBottomVisible(isEnable) + mFragment.setParentBottomVisible(isEnable) if (mIsFirstIn) { - clickCallback.invoke(borderEntity, true) + mClickCallback.invoke(borderEntity, true) mIsFirstIn = false } } holder.itemView.setOnClickListener { + IntegralLogHelper.logPendent( + "click_pendant", + "头像挂件页", + borderEntity.id, + mCategoryId + ) // 根据是否可使用来决定是否显示底部的使用/停用按钮 - fragment.setParentBottomVisible(isEnable) + mFragment.setParentBottomVisible(isEnable) if (isEnable) { if (SPUtils.getString(Constants.SP_CHOOSE_AVATAR_ID) == borderEntity.id) { SPUtils.setString(Constants.SP_CHOOSE_AVATAR_ID, "") - clickCallback.invoke(borderEntity, false) + mClickCallback.invoke(borderEntity, false) } else { SPUtils.setString(Constants.SP_CHOOSE_AVATAR_ID, borderEntity.id) - clickCallback.invoke(borderEntity, true) + mClickCallback.invoke(borderEntity, true) } holder.binding.checkIv.goneIf(SPUtils.getString(Constants.SP_CHOOSE_AVATAR_ID) != borderEntity.id) holder.binding.checkBorderView.goneIf(SPUtils.getString(Constants.SP_CHOOSE_AVATAR_ID) != borderEntity.id) notifyDataSetChanged() } else { - fragment.startActivityForResult( + mFragment.startActivityForResult( EnergyHouseActivity.getIntent(mContext, borderEntity.categoryId), ChooseAvatarBorderFragment.REQUEST_CODE) } diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/border/ChooseAvatarBorderFragment.kt b/app/src/main/java/com/gh/gamecenter/personalhome/border/ChooseAvatarBorderFragment.kt index 97f992e407..3b1285eaed 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/border/ChooseAvatarBorderFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/border/ChooseAvatarBorderFragment.kt @@ -69,7 +69,9 @@ class ChooseAvatarBorderFragment : NormalFragment() { mAdapter = ChooseAvatarBorderAdapter( requireContext(), this@ChooseAvatarBorderFragment, - mIsFree) + mIsFree, + mCategoryId + ) { entity, isSelected -> val avatarPendantFragment = parentFragment as? AvatarBorderFragment avatarPendantFragment?.choosePendant(entity, isSelected) diff --git a/app/src/main/res/drawable-xxhdpi/bg_task_back.webp b/app/src/main/res/drawable-xxhdpi/bg_task_back.webp new file mode 100644 index 0000000000000000000000000000000000000000..8d9c31832c1f17be1c6a8eff9e039c098167a3ea GIT binary patch literal 3944 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 pW6NdcB4L2||r6FXPW8Z)#J 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 GzyJVBJ4`PC literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_lottery_paradise.webp b/app/src/main/res/drawable-xxhdpi/ic_lottery_paradise.webp new file mode 100644 index 0000000000000000000000000000000000000000..3b05fd9407986f39ff7c5ffe303ba4db57d6502c GIT binary patch literal 5324 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 e6dgW4X5a%z literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_sign_remind_close.webp b/app/src/main/res/drawable-xxhdpi/ic_sign_remind_close.webp new file mode 100644 index 0000000000000000000000000000000000000000..7b1c8668c1e412d04c5f7e0e4b89268a3dba9e21 GIT binary patch literal 2104 zcmV-82*>wQNk&F62mkS?nLw-q9jRm8zz)&A3>wnf%pW)Gm)D{ z^XR+9Kiem?jqu%Qvmql&u;_)3g)P&SkU9#w5){{7&aPgVoP?|Lsoz^n|2N z-$#V4*5mu;&1rQY1bY%Cg2q-0tP(^67AitNK&Z)xAAwp_fT_(9Et?X<4XHfB_& zKR41+s?<1ZyC`Q9HHvp~ORVF@KwUJhc|cO#09eDNoZ^wH_C3aLf6Pe6HIGQtjo;Uein`Eqh)~TAWsKmCCd^w`3@6vMmaNp+|hAKW-zSPInS=+g#G=JCk z8iwj!=32=%j#|HK34Oeq(gHx<{RjZN^{!QC9 zeq^O{DW00ZK~q8t3~D+6a9VV%NhSk!-OvI=b^*Y0(xFxiSt37b0^Ein)%*Z}p$dC> zuxb7FD$s2hN?1Q_KCo|ltV0{;=ppSTeQ`Odu=YTVtW z*2?4SI$Jue0~?gCN1SXJo^H9#`6tmr!ws$pE}a^*{5zR?ea+g|xgM`<_-g{MpK#qT zgx4k@8{AFntj*eWtGqZif!U~=SXv#njuxNpaa>-NJ~2wes_PkzN)tGKVHFABu+jBk z)0r7Y7<2brgOcW0qnV6ri8mgaz^p=a>oMsp?B!W!e9TafV1Ce#uOUCES8;P)+s z3a0>iIWAY~_8Xh?XXl_wpKUsl=e|kwn!ss6p$-7&Ii67}^~7#H=ahKmU0W3Ngy&XF z=B(V`p+pt{EIs79R}=ON<`8s@&fVj>5#_@r01J`qR=KCCEZ?K5-g|2^|H7KnJ=jFv z5??k>XQxbHD{EM4tuc*@a?s|^1RbMap71`{u{O)fXa;clJgV{G7<~IAL9m@J&L~6l znYGL25dhmc{#2;mbqL;(4p9%|?~NP*7_lz)iou_;9fR{By8{o=GGwfnz`I2NzjP0F zOwa`n(K1s1Wde(T%I&^qJdOMg`(X*m)A%bh-vRvDDYyHkdYe3^o_=+z@~O9pM_T;` zVCSUV?tQi9jl>;$ADEL~$I9yW08V@=4sGUrDq?;Svq{N>cpa7A0^&VuZ^g_BV&*O} zbF7$SftX{Km}9G;a{w{tDgn-^rajE5M4kJIIY$+9E-mJqU$A$R?h3Yu`3@!MyPlZu zq$K9Mv!L(zVy;Dym}@2^=Gu;+YfxgYm64chdL-uBBl*8Zs=o4Ljg+XWeUGu*A2X71 z%_9;9?K6^l?Ny3La!X*?7^sVS`XH%p0IcCsPVr97#2M?jKHHd4Q<7s(X(?4|oCRxl zHc_Ma!Ik1NtBL(mZ|-3>7L6yE?$T0HJc{hYTyKf(2Usp%QG6mf^xvk6i>0ZyXL&=< zsMVoLF!Hi(YU#pm^?xX-_{ig)b<=^f?Ui5Ozr80J{#x0Flh1n3W5s9m&b1@c6OuZ0 zB>=9yoL#*zISE(g%WD)AdZA-s%l(&-ItscHERmZ=^XR+9Kiem?jqu%QvmqmjX8-_J zP&gpG0ssII766?ADpUYe06sAmi9(_wp%{I1JRk!Ew15im58xe)e<%DNb}6g0R9vHOWXta zr}1Cz-_k#Gf3^Sr|Nr&@<^k*h`VK0`&D{esyUMSJo}w`C^FiZ_mefbWqHYKGK|LkD z-PT=c@dK06c!1Nl3Lwubi`byom5Y$mWJWeh48cJ@8N9Fn0RHuZK<#Yl*Izr?negvo zF+3nDZiYR&i)IS=9lF`vfBmQj=6*XjH;d(;b4bKus>tr$TBdjQYH$kd3cicMjqvan zwD-rXR(IeIS2%lrb!I>R^nzLcZukLDAi(M2Il;F!NsZ)3#(mTvSA+yb@J5%4U>>4> z?@j*|M!r>gHLFh>EWQ>ecRz2N(`S=Z2}Eh%7Vi5_KKSqP&P9kD3#I&FMJrZd>s}ax z-Am*BN=hYBy`5feZ#D4J+vpTpy}X=V6qbQdzfDqt^WMu!)?QxJq9^3>gxLKjUIgbk zJdwr)C0G;4BlCOHqgKR_xjoooj!kX>+}0Kb@RbaMmpl76|K=gxu%$zcIRF0+&v+1} zMu{Gd_RaCVYkq0UneS^1n)G#Eo`qm+u8FAhU-y40dB%_Zwo->{M_Z2eRL7q#pf+ZLzM17vV$=ur1I z!8T~9ySux)w`?-3*0FVHpq`{|ct{0jaSQYODw28UmH8gg{|Nx*W98}jdkc&I^HhHy z8fvcgR+Kt-bb94wgPgAwFBon(0Uz3bOUE#FVV4C`?tE$k03&3bkSm zGbwHq>p@|==TI?Mpuo$`6eI|3k_|KAbkrXsQN2DIBMvP!&wGN3-(GVXekX=-bLA^kf z?ni@cv=T^8G|U1?TXw&3^k-|kg$DY&CR>M*w5MyigMuCG9HD`~YDoJgmbZJSC)uv| zQfRV-I*3C3V)2AOE43StRlEAe%2!5S{D>0Z|6-eKKa0r0APQpTgw(8o%9c~xvP-Y$1Dh%cw47;3xPEGZ)DV2LaBKTgf#!9%fA*N zjVeM`%PJ@pfW{e>I+RTT(uga_>_ZQou`DexMnG(LAMgTv&9{2M^AkX$A+s)Oq@Fx=i9959=oT@9wx?)Q`p{#Tzcf#A||jSU$=#=$Y)V3TwnvAPtqy% z6LNY1VBIJicsELy>^I2i=sEz4kCEZ6dQ5(Ty!tEvQI(9K&q9`PAGxiJ0sto~ST2*q z+(mw!003JDSy8VOgq=fv2e*z(s$&IvR%kmp#!+3;IJn6SeweA{*a&ib6N1`RX7FA_ zs15zdv1$*NSjo=FsSqohkmt(8U~rHf?Ajh=<5%SRAcRc&#twG>w${4b*@awxOA7^e z7(yHij3MWDK%=dLCH^~XTHuzE+yc$n{l?Lstxa+ohf~r9>3*Z|rvvFl)fm)^K%Dr* z7@j1O!Kx7>7+D26N{SIEk{%$x5Z?_y4EG2_u+up0*66&NfDbO=?CTtkyV(1 z=3I}sJad7r)h#Nw6=>UiV)EI6{`w{nHLV90^W5Tb=K-53Zqc|?fYo^}vAE^|yRxE+ zLsev8*>t2$6m3UL!1&VVVtBq3*iTl5`5RV}fk)Hor@TE~Z30dcF8X=$UrYdw)0F{U z29$K*J0j;+I}h!*aw33#+nukheZ6A?L1r9usqCn(gBc)Dv%R3cpN0PV0=pSRYu@T` zHPUHxIkuWX%#wB8xgu}39^KxebL*@U2t8Jwp1-%Sq}*HmeQ4-=wYR*aaBu!}ITn}) z09H^qAod6V0FW^NodGI%0C)gCF&2qJq9Gv`Nd2TB0|c@JI0isC{QHf8{Xeu)zjj~7 z|Hkg2jo0umJ;~|yL)zcN{%HTl`T^(z%meg$`=3w`Fdw0xyI%Xhz&&t(#PtCFSNsG2 z&;9>-pYxu;9)RD%0(^3eO2Wf?04Szhq22rtO!8kt$GSmEgX>)BrGlfS5{NYgKZs z(Iv#3n(AWW6W6XPu4e4-$pu<9v%30uiMg2N&b%w1C9|gTq``YlJP?8zxeUc9#ddKY z3i^qAO%JVxiq@r8z6?^=OPUY-#R_7I0jt{hodcJ`F~jfPVl;65@rG1>=lfyIr%5`?9sJ{UR#W}=;^hs^!hxFVrn z#Ye_}?to??%LHW9h?JV1Q*USdscb>;ijDB;OPkyEEuBx96x>>K6w#h`YS2rxhTsp4 zXaBqpq(r+-RmyW;l=;9ZTX#!_o>>#!vn=53 zs+>VkD`1fYT6ivd0xpSB#ZV5%LK=y1!VK8b2}PITDV1C|W5nmADVbHJu79D9yLynF z;;$Aensv^0IJY1k`**SyCB2Sl-mh@M%u-cQ>JNeB;H#xM<=mtUQf8b0YW*bz79c#Q zNuZBr^h*1@8kt`PP?O%_2Q|#(fB;8d^x9j@jr26Elk+IHY30`-Q4s6@Oj%-nYg1gv}Ohfp% z=cbBNxLcCd+eEWV=J;DL|03kYQ2By3d2(s-)4tFrvA;Qcz%yr3q{%A0GmoNuHnia`*G#=VNYHQ zc4{}bal@Mb4_Q6e*!#8IchTj|onxs&rLf1E)Z?_Sv4B|LdY>s&NlCG774}*zMo^5| zDA;^#vm1xbZ3;HC^_)(}FCI@3-gw`4?f1|4|tuwZc@1=x0e*$!Gl) zX`TNA$>X0B80~*vniV!bx*L;HRP+lahDyu2`F0ok6gERF3-yBjntkPKzT$XwNVi(xCq*`I(7wN%=gX2ph+|WgqBo zB!z4p;i2D1OPtxLJSZOuf-2{rf1IE*9HQBcs3jF!*}Z2+ENz?}rd1i*WL*1#kypd* zOV)H8mUhKCDua6X>MLGb(u=UQ^~Pui>^4>y@3T+&pUd8-lh~XMFvAD%ok>D+AZ6Ye z{fo=3Zt9&G|NnA0$#MY&xx>ImgNF}5PcIrg%7TCTI=oqqgm_yPQ}H*On9W74LOght z4&;a|p+~DntXl8KSX1-JzxCk1g@uL1!Be2^%BT7=nOz+j%2d0#tmM=&G5wHSFPJ|9 zIm^FTiKrFg+B}<@Mq0vJc(<|MLfo~JzwiW0C{#N=arqKD8Go#_21SJMAGZsZgdfeGaFDvdm3#FUL0#) z|BtNO@)OJX}VfgyUHO&rof@^${ELsG){i=z@M;_Xnf{a0f@x+^s}kf&Wx+M`XN z5jB{Ee{3NgAR&-8-YeoZD`%Wa_B9A!J%BK~0+o!Zi&6bpR0lTF>)md25s5P!ci|b& z_}L3Evuc5Fo72ID4bd;C|7f4)>pe3#)zi;_pZyv**@A_mbe2w})HgUQ?ocAeP$mEFI=rRl06MRG$&39d^RrtnzzuCJsL9(v4FkS#k`m*(Fqk7}S;0D> zA>B#fI+IQ80?lB6RvG`@wAeS47(yJ{n`O_qNB_n|DVA|dKbWSA0r%1yqu5*7)m-XE zxujvl?5q7ub6`1wrZ#{80001Px$T1iAfR7ef&maj`gQ545Fi(#Nkic?%&vN_{c#5$AJDhh@zt(sP6H(Cs0a9wQL z`~zf3u!up6qHmuA9ymOnW&7SD9{6(3<8eRV`|i8HN~QluJpx&lZJ`@0pm7=49&jUMiGWiW1sNiK_C+Hhle4%4hRv8=t`#>H; z3K@JG*o%|N7pS7@c^lYM4qjEkHvm5d_&xQi3cdpDF2K!bQw3iFHVW`(>Xr�d^kX zHrMx6a9c=&0RN=!O5g?owu5W|dGu$2&&|?!s4IsX|9gJq=`wI%deaK?K}Zw(PgYr{-d%00000< KMNUMnLSTaM1+xkO literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/personal_sign_icon_gray.webp b/app/src/main/res/drawable-xxhdpi/personal_sign_icon_gray.webp deleted file mode 100644 index 5bbd33b4528242038a2976eefb87a42f64456882..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1126 zcmV-s1eyC%Nk&Fq1ONb6MM6+kP&il$0000G0000-002h-06|PpNVow200DQxxNRfH zxs$v(y)Po-0|HtA1IB_A(^^GV2BbJus6`5Z#sE>FdH*+RYk)0DvT3W1u5H`4t>g9o z-*eZjv)AdpFP|d%&&X{gMP&_~mZ9eh{BJ5A*J{T_A_T`HbnHGI6CpSrp_)I=8WDoy z5po6*g5%NoPBM2}Z8(WW^>&Unj8&XeWsF#}bthJzCC-?r60I8dkfrO&9Q6uIc9(k{B$0*g8*|)8Wn(Q*B3f7wp z+Zn3=v$Gx{JL@A*uh;%50aj2rAb*lu6QDl5B3pDLA$I|OtHx30&-Z>CK66=^{Ga@9urKQWqj#;J*neOT(b9*RO7uUs zBr=A2)0DmnF(iCW2(~(*_FUP7oc26whhd4443O7FdXwMD5s zo-TL?`$eeT^B#I*ue9bklC?9&WC8v-y~BovKfILDU-13|E99&VBTJjt>r`5kxN4S^ z+5i2fsaUj7EPdylUIIefd)@Si*%?GIZd3)hrXNow*maD3aZBDL2>oR~#P8*}cjqAL zG0pz(RWP|q39({<58gFy{oJwrVt)@sCpNXlJhXs?uUB048nUyKEKh zB_#uJl)I-X-?Tt`m^uluVu2Dqttdrc{7xMJ-OqT(*C6Vdr$Ie?dr0BlMY)qL6o$BO zy!3Tydz=06+4(Q%=~0W1Oh5(sZFUcw9a4$>%e!dw3HiVEac=w^>$lrJ9q$i2+3qh~ z;(^7mll0g_q;UH9jE5c!`-=U}h!p5W0zK7kwCQubo;}e7GfFjK_&V^#wh6Uk*MTRs z<-{KvG2`{_j0oH0a#LGD?JnVz)ijIGQG?W8ht!m`qdS_=QDr+f=@tWWnTxz`BicBHj;C`Au}W0o8tNaUvRGz sD$`ie|MC?297=~$*F$24%Qp6M>#xR1I5C!29$W>9A{;`;(SQH|04S~=Z2$lO diff --git a/app/src/main/res/layout/dialog_sign_remind_success.xml b/app/src/main/res/layout/dialog_sign_remind_success.xml new file mode 100644 index 0000000000..07e9671afb --- /dev/null +++ b/app/src/main/res/layout/dialog_sign_remind_success.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_energy_center.xml b/app/src/main/res/layout/fragment_energy_center.xml index 1dd1f9881a..3cd942428e 100644 --- a/app/src/main/res/layout/fragment_energy_center.xml +++ b/app/src/main/res/layout/fragment_energy_center.xml @@ -41,23 +41,37 @@ android:layout_centerVertical="true" android:src="@drawable/ic_toolbar_back_white" /> - + android:orientation="horizontal" + android:background="@drawable/button_round_806f9cef"> + + + + + - - - - + app:layout_constraintTop_toBottomOf="@+id/exchangeCommodity" /> diff --git a/app/src/main/res/layout/fragment_new_personal.xml b/app/src/main/res/layout/fragment_new_personal.xml index 123f4a11d8..eb74349e78 100644 --- a/app/src/main/res/layout/fragment_new_personal.xml +++ b/app/src/main/res/layout/fragment_new_personal.xml @@ -372,15 +372,6 @@ android:textSize="14sp" tools:text="姓名" /> - - + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2315633acc..81aa3e14af 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -779,7 +779,7 @@ 领光能 光能中心 光能屋 - 光能记录 + 光能明细 光能规则 赚光能 兑换规则 @@ -790,6 +790,8 @@ 2、连续签满7天可额外奖励1次免费抽奖机会 又有光能可以收了 收能量兑大奖 + 开启成功 + 系统日历将准时提醒您签到 提示 填写邀请码需验证手机号绑定信息,检测\n到您未绑定手机(仅限新手机号绑定)