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 0000000000..8d9c31832c Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/bg_task_back.webp differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_energy_more.png b/app/src/main/res/drawable-xxhdpi/ic_energy_more.png new file mode 100644 index 0000000000..d102a99d28 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_energy_more.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_exchange_commodity.webp b/app/src/main/res/drawable-xxhdpi/ic_exchange_commodity.webp new file mode 100644 index 0000000000..7327e26c79 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_exchange_commodity.webp differ 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 0000000000..3b05fd9407 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_lottery_paradise.webp differ 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 0000000000..7b1c8668c1 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_sign_remind_close.webp differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_sign_remind_success.webp b/app/src/main/res/drawable-xxhdpi/ic_sign_remind_success.webp new file mode 100644 index 0000000000..9c99bb831d Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_sign_remind_success.webp differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_task_back.png b/app/src/main/res/drawable-xxhdpi/ic_task_back.png new file mode 100644 index 0000000000..2a82a23de7 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_task_back.png differ 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 5bbd33b452..0000000000 Binary files a/app/src/main/res/drawable-xxhdpi/personal_sign_icon_gray.webp and /dev/null differ 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到您未绑定手机(仅限新手机号绑定)