diff --git a/app/src/main/java/com/gh/base/BaseRichEditorActivity.kt b/app/src/main/java/com/gh/base/BaseRichEditorActivity.kt index 83fb1d0cfa..76b3efde5c 100644 --- a/app/src/main/java/com/gh/base/BaseRichEditorActivity.kt +++ b/app/src/main/java/com/gh/base/BaseRichEditorActivity.kt @@ -678,6 +678,7 @@ abstract class BaseRichEditorActivity : ToolBarAct } open fun getSelectedLabel(): Int = 0 + open fun onActivityDialogResult(requestCode: Int, resultCode: Int, data: Intent?) {} abstract fun mtaEventName(): String abstract fun provideViewModel(): VM abstract fun getVideoGuideKey(): String diff --git a/app/src/main/java/com/gh/common/databind/BindingAdapters.java b/app/src/main/java/com/gh/common/databind/BindingAdapters.java index 4a16b96b71..7c81133f92 100644 --- a/app/src/main/java/com/gh/common/databind/BindingAdapters.java +++ b/app/src/main/java/com/gh/common/databind/BindingAdapters.java @@ -429,20 +429,8 @@ public class BindingAdapters { @Nullable String entrance, @Nullable String location) { - ReserveDialogFragment reserveDialogFragment = - ((ReserveDialogFragment)((AppCompatActivity) progressBar.getContext()).getSupportFragmentManager().findFragmentByTag("reserve")); - if (reserveDialogFragment != null) { - reserveDialogFragment.setSuccessCallback(() -> { - LogUtils.logReservation(gameEntity, traceEvent); - updateReservation(progressBar, gameEntity); - }); - } - - GamePermissionDialogFragment gamePermissionDialogFragment = - ((GamePermissionDialogFragment)((AppCompatActivity) progressBar.getContext()).getSupportFragmentManager().findFragmentByTag(GamePermissionDialogFragment.class.getSimpleName())); - if (gamePermissionDialogFragment != null) { - gamePermissionDialogFragment.dismissAllowingStateLoss(); - } + // 恢复DialogFragment + restoreDialogFragment(progressBar, gameEntity, traceEvent); // 判断是否显示按钮 if (gameEntity != null @@ -690,6 +678,27 @@ public class BindingAdapters { } } + /** + * 当页面完全重建时,若存在重建的DialogFragment,则需要手动恢复该DialogFragment之前配置的回调(因为DialogFragment重建时只会从arguments中获取之前的配置内容, + * 而arguments无法传递回调),或者dismiss该DialogFragment + */ + private static void restoreDialogFragment(DownloadProgressBar progressBar, GameEntity gameEntity, ExposureEvent traceEvent) { + ReserveDialogFragment reserveDialogFragment = + ((ReserveDialogFragment)((AppCompatActivity) progressBar.getContext()).getSupportFragmentManager().findFragmentByTag("reserve")); + if (reserveDialogFragment != null) { + reserveDialogFragment.setSuccessCallback(() -> { + LogUtils.logReservation(gameEntity, traceEvent); + updateReservation(progressBar, gameEntity); + }); + } + + GamePermissionDialogFragment gamePermissionDialogFragment = + ((GamePermissionDialogFragment)((AppCompatActivity) progressBar.getContext()).getSupportFragmentManager().findFragmentByTag(GamePermissionDialogFragment.class.getSimpleName())); + if (gamePermissionDialogFragment != null) { + gamePermissionDialogFragment.dismissAllowingStateLoss(); + } + } + /*private static void download(DownloadProgressBar progressBar, GameEntity gameEntity, ExposureEvent traceEvent, @Nullable String entrance, @Nullable String location, View v) { if (gameEntity.getApk().size() == 1) { ApkEntity apk = gameEntity.getApk().get(0); diff --git a/app/src/main/java/com/gh/common/dialog/ApplyModeratorDialogFragment.kt b/app/src/main/java/com/gh/common/dialog/ApplyModeratorDialogFragment.kt index f0aecb6e88..4c1b76cebf 100644 --- a/app/src/main/java/com/gh/common/dialog/ApplyModeratorDialogFragment.kt +++ b/app/src/main/java/com/gh/common/dialog/ApplyModeratorDialogFragment.kt @@ -1,31 +1,34 @@ package com.gh.common.dialog +import android.app.Activity import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity -import androidx.fragment.app.FragmentTransaction import com.gh.base.fragment.BaseDialogFragment import com.gh.common.util.DirectUtils +import com.gh.common.util.EntranceUtils import com.gh.common.util.SpanBuilder import com.gh.common.util.dip2px import com.gh.common.view.CustomLinkMovementMethod import com.gh.gamecenter.R import com.gh.gamecenter.databinding.DialogApplyModeratorBinding +import com.gh.gamecenter.qa.dialog.MoreFunctionPanelDialog class ApplyModeratorDialogFragment : BaseDialogFragment() { private lateinit var binding: DialogApplyModeratorBinding - private var groupNumber = "" - private var groupKey = "" - var callBack: (() -> Unit)? = null + private var mGroupNumber = "" + private var mGroupKey = "" + private var mParentTag = "" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) requireArguments().run { - groupNumber = getString(KEY_GROUP_NUMBER) ?: "" - groupKey = getString(KEY_GROUP_KEY) ?: "" + mGroupNumber = getString(KEY_GROUP_NUMBER) ?: "" + mGroupKey = getString(KEY_GROUP_KEY) ?: "" + mParentTag = getString(EntranceUtils.KEY_PARENT_TAG) ?: "" } } @@ -41,19 +44,20 @@ class ApplyModeratorDialogFragment : BaseDialogFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val startText = "版主考核群:" - val text = "$startText$groupNumber\n感谢你对论坛建设的支持\n请加入版主考核群并联系群主进行版主资格考核" + val text = "$startText$mGroupNumber\n感谢你对论坛建设的支持\n请加入版主考核群并联系群主进行版主资格考核" binding.desTv.text = SpanBuilder(text) - .click(startText.length, startText.length + groupNumber.length, R.color.theme_font,true) { + .click(startText.length, startText.length + mGroupNumber.length, R.color.theme_font,true) { DirectUtils.directToQqGroup( requireContext(), - groupKey + mGroupKey ) } .build() binding.desTv.movementMethod = CustomLinkMovementMethod.getInstance() binding.confirmTv.setOnClickListener { dismissAllowingStateLoss() - callBack?.invoke() + activity?.supportFragmentManager?.findFragmentByTag(mParentTag) + ?.onActivityResult(MoreFunctionPanelDialog.REQUEST_CODE, Activity.RESULT_OK, null) } } @@ -67,39 +71,25 @@ class ApplyModeratorDialogFragment : BaseDialogFragment() { companion object { const val KEY_GROUP_NUMBER = "group_number" const val KEY_GROUP_KEY = "group_key" + const val REQUEST_CODE = 1103 @JvmStatic fun show( activity: AppCompatActivity, number: String, key: String, - callBack: (() -> Unit)? + tag: String ) { - var dialogFragment = - activity.supportFragmentManager.findFragmentByTag(ApplyModeratorDialogFragment::class.java.simpleName) as? ApplyModeratorDialogFragment - if (dialogFragment != null) { - dialogFragment.arguments = Bundle().apply { + ApplyModeratorDialogFragment().apply { + arguments = Bundle().apply { putString(KEY_GROUP_NUMBER, number) putString(KEY_GROUP_KEY, key) + putString(EntranceUtils.KEY_PARENT_TAG, tag) } - dialogFragment.callBack = callBack - val transaction: FragmentTransaction = - activity.supportFragmentManager.beginTransaction() - transaction.show(dialogFragment) - transaction.commit() - } else { - dialogFragment = ApplyModeratorDialogFragment().apply { - arguments = Bundle().apply { - putString(KEY_GROUP_NUMBER, number) - putString(KEY_GROUP_KEY, key) - } - this.callBack = callBack - } - dialogFragment.show( - activity.supportFragmentManager, - PrivacyDialogFragment::class.java.simpleName - ) - } + }.show( + activity.supportFragmentManager, + PrivacyDialogFragment::class.java.simpleName + ) } } } \ No newline at end of file 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 15d894fdb3..43564b1e02 100644 --- a/app/src/main/java/com/gh/common/util/EntranceUtils.java +++ b/app/src/main/java/com/gh/common/util/EntranceUtils.java @@ -244,6 +244,7 @@ public class EntranceUtils { public static final String KEY_CHOOSE_MAX_COUNT = "choose_max_count"; public static final String KEY_COMMENT_COUNT = "comment_count"; public static final String KEY_IS_COMMENT_CONVERSATION = "is_comment_conversation"; + public static final String KEY_PARENT_TAG = "parent_tag"; public static void jumpActivity(Context context, Bundle bundle) { bundle.putBoolean(KEY_REQUIRE_REDIRECT, true); diff --git a/app/src/main/java/com/gh/gamecenter/entity/ForumShareEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/ForumShareEntity.kt new file mode 100644 index 0000000000..fda128ebcb --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/entity/ForumShareEntity.kt @@ -0,0 +1,15 @@ +package com.gh.gamecenter.entity + +import android.os.Parcelable +import com.gh.common.util.ShareUtils +import kotlinx.android.parcel.Parcelize + +@Parcelize +data class ForumShareEntity( + var id: String = "", + var shareUrl: String = "", + var shareIcon: String = "", + var shareTitle: String = "", + var shareSummary: String = "", + var shareEntrance: ShareUtils.ShareEntrance = ShareUtils.ShareEntrance.game, +) : Parcelable \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/forum/moderator/ApplyModeratorFragment.kt b/app/src/main/java/com/gh/gamecenter/forum/moderator/ApplyModeratorFragment.kt index 7115043f1d..b7a7819914 100644 --- a/app/src/main/java/com/gh/gamecenter/forum/moderator/ApplyModeratorFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/forum/moderator/ApplyModeratorFragment.kt @@ -1,5 +1,6 @@ package com.gh.gamecenter.forum.moderator +import android.app.Activity import android.content.Intent import android.os.Bundle import android.view.View @@ -73,8 +74,6 @@ class ApplyModeratorFragment : NormalFragment() { if (mStatus.status == "todo") { changeToAudit() } - - restoreDialogFragment() } private fun getModeratorTaskList(): ArrayList { @@ -190,7 +189,7 @@ class ApplyModeratorFragment : NormalFragment() { requireActivity() as AppCompatActivity, mStatus.qqGroup, mStatus.qqGroupKey, - getCallBack() + tag ?: "" ) } } @@ -209,11 +208,10 @@ class ApplyModeratorFragment : NormalFragment() { } } - private fun restoreDialogFragment() { - (activity?.supportFragmentManager?.findFragmentByTag( - ApplyModeratorDialogFragment::class.java.name - ) as? ApplyModeratorDialogFragment)?.run { - callBack = getCallBack() + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + if (requestCode == ApplyModeratorDialogFragment.REQUEST_CODE && resultCode == Activity.RESULT_OK) { + getCallBack().invoke() } } diff --git a/app/src/main/java/com/gh/gamecenter/game/upload/GameUploadFragment.kt b/app/src/main/java/com/gh/gamecenter/game/upload/GameUploadFragment.kt index 9f611cbb54..1d1cb7b02d 100644 --- a/app/src/main/java/com/gh/gamecenter/game/upload/GameUploadFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/game/upload/GameUploadFragment.kt @@ -151,7 +151,7 @@ class GameUploadFragment : NormalFragment() { val policyDialogFragment = GameResourcePolicyDialogFragment() policyDialogFragment.show(childFragmentManager, "GameResourcePolicyDialogFragment") - restoreDialogFragment() + dismissDialogFragment() } private fun initListener() { @@ -290,11 +290,10 @@ class GameUploadFragment : NormalFragment() { } } - private fun restoreDialogFragment() { + private fun dismissDialogFragment() { (childFragmentManager.findFragmentByTag("upload") as? UploadScheduleDialog)?.run { - mUploadDialog = this - onClickListener = getUploadClickListener() + dismissAllowingStateLoss() } } diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt index 151bcbd630..583d3ff302 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt @@ -1670,7 +1670,7 @@ class GameDetailFragment : NormalFragment() { } private fun restoreDialogFragment() { - (activity?.supportFragmentManager?.findFragmentByTag("reserve") + (childFragmentManager.findFragmentByTag("reserve") as? ReserveDialogFragment)?.run { successCallback = getCallback() } diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/dialog/GameDetailMoreDialog.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/dialog/GameDetailMoreDialog.kt index 747d2b9489..18da2e0c9d 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/dialog/GameDetailMoreDialog.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/dialog/GameDetailMoreDialog.kt @@ -3,7 +3,6 @@ package com.gh.gamecenter.gamedetail.dialog import android.os.Bundle import android.view.* import androidx.appcompat.app.AppCompatActivity -import androidx.fragment.app.FragmentTransaction import com.gh.common.dialog.BaseDraggableDialogFragment import com.gh.common.util.* import com.gh.common.util.EnergyTaskHelper.postEnergyTask @@ -125,24 +124,12 @@ class GameDetailMoreDialog : BaseDraggableDialogFragment() { @JvmStatic fun showMoreDialog(activity: AppCompatActivity, gameEntity: GameEntity?, shareCode: String) { if (gameEntity == null) return - var fragment = activity.supportFragmentManager.findFragmentByTag(GameDetailMoreDialog::class.java.name) as? GameDetailMoreDialog - if (fragment == null) { - fragment = GameDetailMoreDialog().apply { - arguments = Bundle().apply { - putParcelable(KEY_GAME, gameEntity) - putString(KEY_SHARE_CODE, shareCode) - } - } - fragment.show(activity.supportFragmentManager, GameDetailMoreDialog::class.java.name) - } else { - fragment.arguments = Bundle().apply { + GameDetailMoreDialog().apply { + arguments = Bundle().apply { putParcelable(KEY_GAME, gameEntity) putString(KEY_SHARE_CODE, shareCode) } - val transaction: FragmentTransaction = activity.supportFragmentManager.beginTransaction() - transaction.show(fragment) - transaction.commit() - } + }.show(activity.supportFragmentManager, GameDetailMoreDialog::class.java.name) } } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/dialog/GamePermissionDialogFragment.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/dialog/GamePermissionDialogFragment.kt index f6963afb9b..b5439c631f 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/dialog/GamePermissionDialogFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/dialog/GamePermissionDialogFragment.kt @@ -5,7 +5,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity -import androidx.fragment.app.FragmentTransaction import androidx.recyclerview.widget.LinearLayoutManager import com.gh.base.fragment.BaseDialogFragment import com.gh.common.DefaultUrlHandler @@ -84,28 +83,12 @@ class GamePermissionDialogFragment : BaseDialogFragment() { gameInfo: GameInfo?, callBack: DialogUtils.ConfirmListener? = null) { if (callBack == null || game?.permissionDialogStatus == "on") { - var permissionDialogFragment = activity.supportFragmentManager.findFragmentByTag(GamePermissionDialogFragment::class.java.simpleName) as? GamePermissionDialogFragment - if (permissionDialogFragment == null) { - permissionDialogFragment = GamePermissionDialogFragment().apply { - arguments = Bundle().apply { - putParcelable(KEY_GAME, game) - putParcelable(KEY_GAME_INFO, gameInfo) - } - } - permissionDialogFragment.callback = callBack - - permissionDialogFragment.show(activity.supportFragmentManager, GamePermissionDialogFragment::class.java.simpleName) - } else { - permissionDialogFragment.arguments = Bundle().apply { + GamePermissionDialogFragment().apply { + arguments = Bundle().apply { putParcelable(KEY_GAME, game) putParcelable(KEY_GAME_INFO, gameInfo) } - permissionDialogFragment.callback = callBack - - val transaction: FragmentTransaction = activity.supportFragmentManager.beginTransaction() - transaction.show(permissionDialogFragment) - transaction.commit() - } + }.show(activity.supportFragmentManager, GamePermissionDialogFragment::class.java.simpleName) } else { callBack.onConfirm() } diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/dialog/InviteCodeDialog.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/dialog/InviteCodeDialog.kt index f2c2cb3368..b0051ed15e 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/dialog/InviteCodeDialog.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/dialog/InviteCodeDialog.kt @@ -4,7 +4,6 @@ import android.annotation.SuppressLint import android.os.Bundle import android.view.* import androidx.appcompat.app.AppCompatActivity -import androidx.fragment.app.FragmentTransaction import com.gh.common.dialog.BaseDraggableDialogFragment import com.gh.common.util.EnergyTaskHelper import com.gh.common.util.ToastUtils @@ -131,28 +130,14 @@ class InviteCodeDialog : BaseDraggableDialogFragment() { @JvmStatic fun showInviteCodeDialog(activity: AppCompatActivity, isBind: Boolean, from: String, isHorizontal: Boolean, position: Int) { - var fragment = activity.supportFragmentManager.findFragmentByTag(InviteCodeDialog::class.java.name) as? InviteCodeDialog - if (fragment == null) { - fragment = InviteCodeDialog().apply { - arguments = Bundle().apply { - putBoolean(KEY_IS_BIND, isBind) - putBoolean(KEY_IS_HORIZONTAL, isHorizontal) - putString(KEY_FROM, from) - putInt(KEY_POSITION, position) - } - } - fragment.show(activity.supportFragmentManager, InviteCodeDialog::class.java.name) - } else { - fragment.arguments = Bundle().apply { + InviteCodeDialog().apply { + arguments = Bundle().apply { putBoolean(KEY_IS_BIND, isBind) putBoolean(KEY_IS_HORIZONTAL, isHorizontal) putString(KEY_FROM, from) putInt(KEY_POSITION, position) } - val transaction: FragmentTransaction = activity.supportFragmentManager.beginTransaction() - transaction.show(fragment) - transaction.commit() - } + }.show(activity.supportFragmentManager, InviteCodeDialog::class.java.name) } } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailFragment.kt index 6d499d0799..eba42ccb11 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailFragment.kt @@ -248,6 +248,10 @@ open class AnswerDetailFragment : NormalFragment() { mViewModel.answerDetail?.let { updateView(it) } + } else if (requestCode == MoreFunctionPanelDialog.REQUEST_CODE && resultCode == Activity.RESULT_OK) { + mViewModel.answerDetail?.run { + getItemClickCallback(this).invoke(data.getParcelableExtra(EntranceUtils.KEY_DATA)) + } } } @@ -275,8 +279,6 @@ open class AnswerDetailFragment : NormalFragment() { } }, if (fragmentIsVisible()) 0 else 1000L) - restoreDialogFragment(answerDetail) - // GdtHelper.logAction(ActionType.PAGE_VIEW, GdtHelper.CONTENT_TYPE, "ANSWER", GdtHelper.CONTENT_ID, mAnswerId) } else if (apiResponse.httpException != null) { val e = apiResponse.httpException @@ -628,39 +630,37 @@ open class AnswerDetailFragment : NormalFragment() { } MoreFunctionPanelDialog.showMoreDialog(requireActivity() as AppCompatActivity, entities, answer.question.title - ?: "", getShareUtils(answer), getItemClickCallback(answer)) + ?: "", getShareEntity(answer), tag ?: "") } } - private fun getShareUtils(answer: AnswerDetailEntity): ShareUtils { - val shareIcon: String = if (mAnswersImages!!.size > 0) { - mAnswersImages[0] - } else { - getString(R.string.share_ghzs_logo) - } - var shareSummary = mBinding.richEditor.text - if (TextUtils.isEmpty(shareSummary)) { - shareSummary = getString(R.string.ask_share_default_summary) - } - val shareUrl = if (isPublishEnv()) { - getString(R.string.share_answers_url, mAnswerId) - } else { - getString(R.string.share_answers_url_dev, answer.question.id, mAnswerId) - } - val shareUtils = ShareUtils.getInstance(context) - shareUtils.shareParamsDetail(activity, - shareUrl, - shareIcon, - getString(R.string.ask_share_answers_title, answer.user.name, answer.question.title, answer.vote), - shareSummary, - ShareUtils.ShareEntrance.answerNormal, mAnswerId, null) - return shareUtils + private fun getShareEntity(answer: AnswerDetailEntity): ForumShareEntity { + return ForumShareEntity( + id = mAnswerId, + shareUrl = if (isPublishEnv()) { + getString(R.string.share_answers_url, mAnswerId) + } else { + getString(R.string.share_answers_url_dev, answer.question.id, mAnswerId) + }, + shareIcon = if (mAnswersImages!!.size > 0) { + mAnswersImages[0] + } else { + getString(R.string.share_ghzs_logo) + }, + shareTitle = getString(R.string.ask_share_answers_title, answer.user.name, answer.question.title, answer.vote), + shareSummary = if (TextUtils.isEmpty(mBinding.richEditor.text)) { + getString(R.string.ask_share_default_summary) + } else { + mBinding.richEditor.text + }, + shareEntrance = ShareUtils.ShareEntrance.answerNormal + ) } - private fun getItemClickCallback(answer: AnswerDetailEntity): (menuItem: MenuItemEntity) -> Unit { + private fun getItemClickCallback(answer: AnswerDetailEntity): (menuItem: MenuItemEntity?) -> Unit { return { - when (it.text) { + when (it?.text) { "投诉" -> { SuggestionActivity.startSuggestionActivity(context, SuggestType.normal, "report", "回答投诉($mAnswerId):") } @@ -688,15 +688,6 @@ open class AnswerDetailFragment : NormalFragment() { } } - private fun restoreDialogFragment(answerDetail: AnswerDetailEntity) { - (activity?.supportFragmentManager?.findFragmentByTag( - MoreFunctionPanelDialog::class.java.name - ) as? MoreFunctionPanelDialog)?.run { - shareUtils = getShareUtils(answerDetail) - onItemClickCallback = getItemClickCallback(answerDetail) - } - } - private fun addEssenceForum(answer: AnswerDetailEntity) { val reporterHint = "你的操作将提交给小编审核,确定提交吗?" val adminHint = "你的操作将立即生效,确定提交吗?(你的管理权限为:高级)" diff --git a/app/src/main/java/com/gh/gamecenter/qa/article/detail/ArticleDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/article/detail/ArticleDetailFragment.kt index a547a8445c..e085a85515 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/article/detail/ArticleDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/article/detail/ArticleDetailFragment.kt @@ -138,6 +138,10 @@ class ArticleDetailFragment : BaseCommentFragment { if (it == BaseCommentViewModel.LoadResult.DELETED) { @@ -549,53 +551,45 @@ class ArticleDetailFragment : BaseCommentFragment Unit { + private fun getItemClickCallback(): (menuItem: MenuItemEntity?) -> Unit { return { val bbsType = if (mViewModel.detailEntity?.type == "game_bbs") "游戏论坛" else "综合论坛" - when (it.text) { + when (it?.text) { "修改" -> { startActivityForResult( ArticleEditActivity.getPatchIntent( @@ -651,7 +645,7 @@ class ArticleDetailFragment : BaseCommentFragment { @@ -697,21 +691,6 @@ class ArticleDetailFragment : BaseCommentFragment(), Keyb } } + override fun onActivityDialogResult(requestCode: Int, resultCode: Int, data: Intent?) { + if (requestCode == ChooseActivityDialogFragment.REQUEST_CODE && resultCode == Activity.RESULT_OK) { + getChooseSelectCallback().invoke(data?.getParcelableExtra(EntranceUtils.KEY_DATA)) + } + } + @SuppressLint("ClickableViewAccessibility") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -154,8 +160,6 @@ class ArticleEditActivity : BaseRichEditorActivity(), Keyb } observeData() - - restoreDialogFragment() } override fun provideViewModel(): ArticleEditViewModel { @@ -300,7 +304,7 @@ class ArticleEditActivity : BaseRichEditorActivity(), Keyb } else 0L AppExecutor.uiExecutor.executeWithDelay(Runnable { ChooseActivityDialogFragment.show(this, ChooseActivityDialogFragment.ActivityLabelLocation.BBS_ARTICLE, - mViewModel.selectActivityLabelEntity?.id, getChooseSelectCallback()) + mViewModel.selectActivityLabelEntity?.id, "editorActivity") }, delayTime) } } @@ -314,14 +318,6 @@ class ArticleEditActivity : BaseRichEditorActivity(), Keyb } } - private fun restoreDialogFragment() { - (supportFragmentManager.findFragmentByTag( - ChooseActivityDialogFragment::class.java.name - ) as? ChooseActivityDialogFragment)?.run { - onSelectCallback = getChooseSelectCallback() - } - } - private fun setArticleDraft() { val community = mViewModel.draftEntity?.community if (!community?.id.isNullOrEmpty() && !community?.name.isNullOrEmpty()) { diff --git a/app/src/main/java/com/gh/gamecenter/qa/dialog/ChooseActivityDialogFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/dialog/ChooseActivityDialogFragment.kt index 1521913054..6afa65637d 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/dialog/ChooseActivityDialogFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/dialog/ChooseActivityDialogFragment.kt @@ -1,6 +1,8 @@ package com.gh.gamecenter.qa.dialog +import android.app.Activity import android.app.Dialog +import android.content.Intent import android.os.Bundle import android.view.Gravity import android.view.LayoutInflater @@ -8,18 +10,16 @@ import android.view.View import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity import androidx.core.os.bundleOf -import androidx.fragment.app.FragmentTransaction +import com.gh.base.BaseRichEditorActivity import com.gh.base.fragment.BaseDialogFragment import com.gh.common.util.EntranceUtils import com.gh.gamecenter.R import com.gh.gamecenter.databinding.DialogChooseActivityBinding -import com.gh.gamecenter.entity.ActivityLabelEntity import com.gh.gamecenter.video.label.VideoLabelFragment import com.halo.assistant.HaloApp class ChooseActivityDialogFragment : BaseDialogFragment() { private lateinit var binding: DialogChooseActivityBinding - var onSelectCallback: ((entity: ActivityLabelEntity?) -> Unit)? = null override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { binding = DialogChooseActivityBinding.inflate(inflater, null, false) @@ -36,7 +36,17 @@ class ChooseActivityDialogFragment : BaseDialogFragment() { beginTransaction.commitAllowingStateLoss() binding.confirmTv.setOnClickListener { val activityLabelEntity = fragment.getSelectedActivity() - onSelectCallback?.invoke(activityLabelEntity) + val tag = requireArguments().getString(EntranceUtils.KEY_PARENT_TAG) + val intent = Intent().apply { + putExtra(EntranceUtils.KEY_DATA, activityLabelEntity) + } + if (tag == "editorActivity") { + (activity as? BaseRichEditorActivity<*>) + ?.onActivityDialogResult(REQUEST_CODE, Activity.RESULT_OK, intent) + } else { + activity?.supportFragmentManager?.findFragmentByTag(tag) + ?.onActivityResult(REQUEST_CODE, Activity.RESULT_OK, intent) + } dismissAllowingStateLoss() } } @@ -59,21 +69,16 @@ class ChooseActivityDialogFragment : BaseDialogFragment() { companion object { const val TAG_ACTIVITY_ID = "tagActivityId" + const val REQUEST_CODE = 1102 - fun show(activity: AppCompatActivity, location: ActivityLabelLocation, tagActivityId: String? = "", callback: (entity: ActivityLabelEntity?) -> Unit) { - var fragment = activity.supportFragmentManager.findFragmentByTag(ChooseActivityDialogFragment::class.java.name) as? ChooseActivityDialogFragment - if (fragment == null) { - fragment = ChooseActivityDialogFragment().also { - it.arguments = bundleOf(TAG_ACTIVITY_ID to tagActivityId, EntranceUtils.KEY_LOCATION to location.value) - } - fragment.onSelectCallback = callback - fragment.show(activity.supportFragmentManager, ChooseActivityDialogFragment::class.java.name) - } else { - val transaction: FragmentTransaction = activity.supportFragmentManager.beginTransaction() - fragment.onSelectCallback = callback - transaction.show(fragment) - transaction.commit() - } + fun show(activity: AppCompatActivity, location: ActivityLabelLocation, tagActivityId: String? = "", parentTag: String) { + ChooseActivityDialogFragment().apply { + arguments = bundleOf( + TAG_ACTIVITY_ID to tagActivityId, + EntranceUtils.KEY_LOCATION to location.value, + EntranceUtils.KEY_PARENT_TAG to parentTag + ) + }.show(activity.supportFragmentManager, ChooseActivityDialogFragment::class.java.name) } } diff --git a/app/src/main/java/com/gh/gamecenter/qa/dialog/InputUrlDialogFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/dialog/InputUrlDialogFragment.kt index 09d81212cb..7981593a0c 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/dialog/InputUrlDialogFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/dialog/InputUrlDialogFragment.kt @@ -1,6 +1,8 @@ package com.gh.gamecenter.qa.dialog +import android.app.Activity import android.app.Dialog +import android.content.Intent import android.os.Bundle import android.view.Gravity import android.view.LayoutInflater @@ -9,12 +11,10 @@ import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity import androidx.core.os.bundleOf import androidx.core.widget.doOnTextChanged -import androidx.fragment.app.FragmentTransaction import com.gh.base.fragment.BaseDialogFragment import com.gh.common.util.EntranceUtils import com.gh.common.util.ToastUtils import com.gh.common.util.dip2px -import com.gh.gamecenter.R import com.gh.gamecenter.databinding.DialogInputUrlBinding import com.halo.assistant.HaloApp import com.lightgame.utils.Util_System_Keyboard @@ -22,7 +22,6 @@ import com.lightgame.utils.Util_System_Keyboard class InputUrlDialogFragment : BaseDialogFragment() { private lateinit var mBinding: DialogInputUrlBinding - var callback: ((url: String) -> Unit)? = null override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { mBinding = DialogInputUrlBinding.inflate(LayoutInflater.from(requireContext()), null, false) @@ -48,7 +47,12 @@ class InputUrlDialogFragment : BaseDialogFragment() { ToastUtils.showToast("请输入正确的链接") return@setOnClickListener } - callback?.invoke(reprintUrl) + val parentTag = requireArguments().getString(EntranceUtils.KEY_PARENT_TAG) + val intent = Intent().apply { + putExtra(EntranceUtils.KEY_DATA, reprintUrl) + } + activity?.supportFragmentManager?.findFragmentByTag(parentTag) + ?.onActivityResult(MoreFunctionPanelDialog.REQUEST_CODE, Activity.RESULT_OK, intent) dismissAllowingStateLoss() } } @@ -68,20 +72,15 @@ class InputUrlDialogFragment : BaseDialogFragment() { } companion object { - fun show(activity: AppCompatActivity, url: String, callback: ((url: String) -> Unit)) { - var fragment = activity.supportFragmentManager.findFragmentByTag(InputUrlDialogFragment::class.java.name) as? InputUrlDialogFragment - if (fragment == null) { - fragment = InputUrlDialogFragment().also { - it.arguments = bundleOf(EntranceUtils.KEY_URL to url) - } - fragment.callback = callback - fragment.show(activity.supportFragmentManager, InputUrlDialogFragment::class.java.name) - } else { - val transaction: FragmentTransaction = activity.supportFragmentManager.beginTransaction() - fragment.callback = callback - transaction.show(fragment) - transaction.commit() - } + const val REQUEST_CODE = 1104 + + fun show(activity: AppCompatActivity, url: String, tag: String) { + InputUrlDialogFragment().also { + it.arguments = bundleOf( + EntranceUtils.KEY_URL to url, + EntranceUtils.KEY_PARENT_TAG to tag + ) + }.show(activity.supportFragmentManager, InputUrlDialogFragment::class.java.name) } } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/dialog/MoreFunctionPanelDialog.kt b/app/src/main/java/com/gh/gamecenter/qa/dialog/MoreFunctionPanelDialog.kt index b438331f05..47c4ead5e4 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/dialog/MoreFunctionPanelDialog.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/dialog/MoreFunctionPanelDialog.kt @@ -1,5 +1,7 @@ package com.gh.gamecenter.qa.dialog +import android.app.Activity +import android.content.Intent import android.os.Bundle import android.view.Gravity import android.view.LayoutInflater @@ -9,11 +11,11 @@ import android.widget.LinearLayout import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat -import androidx.fragment.app.FragmentTransaction import com.gh.common.dialog.BaseDraggableDialogFragment import com.gh.common.util.* import com.gh.gamecenter.R import com.gh.gamecenter.databinding.DialogGameDetailMoreBinding +import com.gh.gamecenter.entity.ForumShareEntity import com.gh.gamecenter.entity.MenuItemEntity class MoreFunctionPanelDialog : BaseDraggableDialogFragment() { @@ -21,15 +23,19 @@ class MoreFunctionPanelDialog : BaseDraggableDialogFragment() { private lateinit var binding: DialogGameDetailMoreBinding private var mMenuItems: ArrayList = arrayListOf() private var mTitle: String = "" - var shareUtils: ShareUtils? = null - var onItemClickCallback: ((menuItem: MenuItemEntity) -> Unit)? = null + private var mParentTag: String = "" + private var mShareEntity: ForumShareEntity? = null + private var mShareUtils: ShareUtils? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) requireArguments().run { mMenuItems = getParcelableArrayList(KEY_MENU_ITEMS) ?: arrayListOf() mTitle = getString(KEY_TITLE) ?: "" + mShareEntity = getParcelable(KEY_SHARE) + mParentTag = getString(EntranceUtils.KEY_PARENT_TAG) ?: "" } + mShareUtils = getShareUtils() } override fun onCreateView( inflater: LayoutInflater, @@ -49,31 +55,31 @@ class MoreFunctionPanelDialog : BaseDraggableDialogFragment() { binding.copyrightTv.visibility = View.GONE binding.shareWechatTv.setOnClickListener { - shareUtils?.wechatShare() + mShareUtils?.wechatShare() NewLogUtils.logShareTypeClick("微信好友") } binding.sharePyquanTv.setOnClickListener { - shareUtils?.wechatMomentsShare() + mShareUtils?.wechatMomentsShare() NewLogUtils.logShareTypeClick("朋友圈") } binding.shareQqTv.setOnClickListener { - shareUtils?.qqShare() + mShareUtils?.qqShare() NewLogUtils.logShareTypeClick("QQ好友") } binding.shareQqzoneTv.setOnClickListener { - shareUtils?.qZoneShare() + mShareUtils?.qZoneShare() NewLogUtils.logShareTypeClick("QQ空间") } binding.shareWeiboTv.setOnClickListener { - shareUtils?.sinaWeiboShare() + mShareUtils?.sinaWeiboShare() NewLogUtils.logShareTypeClick("新浪微博") } binding.shareSmsTv.setOnClickListener { - shareUtils?.shortMessageShare() + mShareUtils?.shortMessageShare() NewLogUtils.logShareTypeClick("短信") } binding.copyLinkTv.setOnClickListener { - shareUtils?.copyLink(shareUtils?.shareUrl ?: "") + mShareUtils?.copyLink(mShareUtils?.shareUrl ?: "") NewLogUtils.logShareTypeClick("复制链接") } binding.cancelTv.setOnClickListener { @@ -88,7 +94,11 @@ class MoreFunctionPanelDialog : BaseDraggableDialogFragment() { val itemView = createItemView(menuItemEntity) itemView.setOnClickListener { if (menuItemEntity.isEnable) { - onItemClickCallback?.invoke(menuItemEntity) + val intent = Intent().apply { + putExtra(EntranceUtils.KEY_DATA, menuItemEntity) + } + activity?.supportFragmentManager?.findFragmentByTag(mParentTag) + ?.onActivityResult(REQUEST_CODE, Activity.RESULT_OK, intent) dismissAllowingStateLoss() } } @@ -124,49 +134,52 @@ class MoreFunctionPanelDialog : BaseDraggableDialogFragment() { } } + private fun getShareUtils(): ShareUtils { + val shareUtils = ShareUtils.getInstance(requireContext()) + mShareEntity?.run { + shareUtils.shareParamsDetail( + requireActivity(), + shareUrl, + shareIcon, + shareTitle, + shareSummary, + shareEntrance, + id, + null + ) + } + return shareUtils + } + override fun getRootView(): View = binding.root override fun getDragCloseView(): View = binding.dragClose companion object { const val KEY_MENU_ITEMS = "menu_items" const val KEY_TITLE = "title" + const val KEY_SHARE = "share" + const val REQUEST_CODE = 1101 @JvmStatic fun showMoreDialog( activity: AppCompatActivity, menuItems: ArrayList, title: String, - shareUtils: ShareUtils, - onItemClickCallback: (menuItem: MenuItemEntity) -> Unit + share: ForumShareEntity, + parentTag: String ) { if (menuItems.isNullOrEmpty()) return - var fragment = - activity.supportFragmentManager.findFragmentByTag(MoreFunctionPanelDialog::class.java.name) as? MoreFunctionPanelDialog - if (fragment == null) { - fragment = MoreFunctionPanelDialog().apply { - arguments = Bundle().apply { - putParcelableArrayList(KEY_MENU_ITEMS, menuItems) - putString(KEY_TITLE, title) - } - } - fragment.shareUtils = shareUtils - fragment.onItemClickCallback = onItemClickCallback - fragment.show( - activity.supportFragmentManager, - MoreFunctionPanelDialog::class.java.name - ) - } else { - fragment.arguments = Bundle().apply { + MoreFunctionPanelDialog().apply { + arguments = Bundle().apply { putParcelableArrayList(KEY_MENU_ITEMS, menuItems) putString(KEY_TITLE, title) + putParcelable(KEY_SHARE, share) + putString(EntranceUtils.KEY_PARENT_TAG, parentTag) } - fragment.shareUtils = shareUtils - fragment.onItemClickCallback = onItemClickCallback - val transaction: FragmentTransaction = - activity.supportFragmentManager.beginTransaction() - transaction.show(fragment) - transaction.commit() - } + }.show( + activity.supportFragmentManager, + MoreFunctionPanelDialog::class.java.name + ) } } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailFragment.kt index 0913de727c..85393f1814 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailFragment.kt @@ -33,6 +33,7 @@ import com.gh.gamecenter.SuggestionActivity import com.gh.gamecenter.baselist.ListAdapter import com.gh.gamecenter.baselist.ListFragment import com.gh.gamecenter.baselist.LoadType +import com.gh.gamecenter.entity.ForumShareEntity import com.gh.gamecenter.entity.MenuItemEntity import com.gh.gamecenter.entity.Permissions import com.gh.gamecenter.entity.SpecialColumn @@ -145,6 +146,10 @@ class QuestionsDetailFragment : onPermissionError() } else if (requestCode == QUESTIONS_MODERATOR_HISTORY_REQUEST && resultCode == Activity.RESULT_OK) { onLoadRefresh() + } else if (requestCode == MoreFunctionPanelDialog.REQUEST_CODE && resultCode == Activity.RESULT_OK) { + mQuestionsDetailEntity?.run { + getItemClickCallback(this).invoke(data?.getParcelableExtra(EntranceUtils.KEY_DATA)) + } } } @@ -186,8 +191,6 @@ class QuestionsDetailFragment : setNavigationTitle(mQuestionsDetailEntity!!.community.name + " - 问题详情") MtaHelper.onEvent("详情页面", "问题详情", it.title) - - restoreDialogFragment(it) } } else if (detailResource.status == Status.ERROR) { try { @@ -438,41 +441,37 @@ class QuestionsDetailFragment : } MoreFunctionPanelDialog.showMoreDialog(requireActivity() as AppCompatActivity, entities, questionEntity.title - ?: "", getShareUtils(questionEntity), getItemClickCallback(questionEntity)) + ?: "", getShareEntity(questionEntity), tag ?: "") } } } - private fun getShareUtils(questionEntity: QuestionsDetailEntity): ShareUtils { - val shareIcon = if (questionEntity.images.isNotEmpty()) { - questionEntity.images[0] - } else { - getString(R.string.share_ghzs_logo) - } - var description = questionEntity.description - if (TextUtils.isEmpty(description)) { - description = getString(R.string.ask_share_default_summary) - } - val shareUrl = if (isPublishEnv()) { - getString(R.string.share_questions_url, questionEntity.id) - } else { - getString(R.string.share_questions_url_dev, questionEntity.id) - } - val shareUtils = ShareUtils.getInstance(activity) - shareUtils.shareParamsDetail( - activity, - shareUrl, - shareIcon, - getString(R.string.ask_share_questions_title, questionEntity.title, questionEntity.answersCount), - description, - ShareUtils.ShareEntrance.askNormal, - questionEntity.id, null) - return shareUtils + private fun getShareEntity(questionEntity: QuestionsDetailEntity): ForumShareEntity { + return ForumShareEntity( + id = questionEntity.id ?: "", + shareUrl = if (isPublishEnv()) { + getString(R.string.share_questions_url, questionEntity.id) + } else { + getString(R.string.share_questions_url_dev, questionEntity.id) + }, + shareIcon = if (questionEntity.images.isNotEmpty()) { + questionEntity.images[0] + } else { + getString(R.string.share_ghzs_logo) + }, + shareTitle = getString(R.string.ask_share_questions_title, questionEntity.title, questionEntity.answersCount), + shareSummary = if (TextUtils.isEmpty(questionEntity.description)) { + getString(R.string.ask_share_default_summary) + } else { + questionEntity.description!! + }, + shareEntrance = ShareUtils.ShareEntrance.askNormal, + ) } - private fun getItemClickCallback(questionEntity: QuestionsDetailEntity): (menuItem: MenuItemEntity) -> Unit { + private fun getItemClickCallback(questionEntity: QuestionsDetailEntity): (menuItem: MenuItemEntity?) -> Unit { return { - when (it.text) { + when (it?.text) { "投诉" -> { SuggestionActivity.startSuggestionActivity(context, SuggestType.normal, "report", "问题投诉(" + questionEntity.id + "):") @@ -491,15 +490,6 @@ class QuestionsDetailFragment : } } - private fun restoreDialogFragment(questionsDetail: QuestionsDetailEntity) { - (activity?.supportFragmentManager?.findFragmentByTag( - MoreFunctionPanelDialog::class.java.name - ) as? MoreFunctionPanelDialog)?.run { - shareUtils = getShareUtils(questionsDetail) - onItemClickCallback = getItemClickCallback(questionsDetail) - } - } - private fun createMenuItem(index: Int, item: MenuItemEntity): View { val view = LayoutInflater.from(requireContext()).inflate(R.layout.item_detail_more_menu, null, false) val iconIv = view.findViewById(R.id.iconIv) diff --git a/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditActivity.kt b/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditActivity.kt index 694ec05b00..b8a3a7df37 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditActivity.kt @@ -105,6 +105,12 @@ class QuestionEditActivity : BaseRichEditorActivity(), } } + override fun onActivityDialogResult(requestCode: Int, resultCode: Int, data: Intent?) { + if (requestCode == ChooseActivityDialogFragment.REQUEST_CODE && resultCode == Activity.RESULT_OK) { + getChooseSelectCallback().invoke(data?.getParcelableExtra(EntranceUtils.KEY_DATA)) + } + } + override fun handleMessage(msg: Message) { super.handleMessage(msg) if (msg.what == 1) { @@ -209,7 +215,7 @@ class QuestionEditActivity : BaseRichEditorActivity(), ChooseActivityDialogFragment.show( this, ChooseActivityDialogFragment.ActivityLabelLocation.BBS_QUESTION, mViewModel.selectActivityLabelEntity?.id, - getChooseSelectCallback() + "editorActivity" ) }, delayTime) } @@ -264,8 +270,6 @@ class QuestionEditActivity : BaseRichEditorActivity(), } } observeData() - - restoreDialogFragment() } private fun getChooseSelectCallback(): (entity: ActivityLabelEntity?) -> Unit { @@ -276,14 +280,6 @@ class QuestionEditActivity : BaseRichEditorActivity(), } } - private fun restoreDialogFragment() { - (supportFragmentManager.findFragmentByTag( - ChooseActivityDialogFragment::class.java.name - ) as? ChooseActivityDialogFragment)?.run { - onSelectCallback = getChooseSelectCallback() - } - } - override fun provideViewModel(): QuestionEditViewModel { mViewModel = ViewModelProviders.of(this).get(QuestionEditViewModel::class.java) return mViewModel diff --git a/app/src/main/java/com/gh/gamecenter/qa/questions/newdetail/NewQuestionDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/questions/newdetail/NewQuestionDetailFragment.kt index 75f46c59c8..bbaeba1a34 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/questions/newdetail/NewQuestionDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/questions/newdetail/NewQuestionDetailFragment.kt @@ -21,6 +21,7 @@ import com.gh.gamecenter.baselist.ListAdapter import com.gh.gamecenter.baselist.LoadType import com.gh.gamecenter.databinding.FragmentArticleDetailBinding import com.gh.gamecenter.entity.CommunityEntity +import com.gh.gamecenter.entity.ForumShareEntity import com.gh.gamecenter.entity.MenuItemEntity import com.gh.gamecenter.entity.Permissions import com.gh.gamecenter.eventbus.EBDeleteDetail @@ -36,7 +37,6 @@ import com.gh.gamecenter.qa.questions.detail.QuestionsDetailFragment import com.gh.gamecenter.qa.questions.edit.QuestionEditActivity import com.gh.gamecenter.qa.questions.invite.QuestionsInviteActivity import com.halo.assistant.HaloApp -import com.lightgame.utils.Utils import org.greenrobot.eventbus.EventBus import java.util.* import kotlin.collections.ArrayList @@ -128,6 +128,10 @@ class NewQuestionDetailFragment : } mViewModel.load(LoadType.REFRESH) } + } else if (requestCode == MoreFunctionPanelDialog.REQUEST_CODE && resultCode == Activity.RESULT_OK) { + mViewModel.questionDetail?.run { + getItemClickCallback(this).invoke(data.getParcelableExtra(EntranceUtils.KEY_DATA)) + } } } @@ -226,8 +230,6 @@ class NewQuestionDetailFragment : when (it) { BaseCommentViewModel.LoadResult.SUCCESS -> { updateView() - - restoreDialogFragment() } else -> { if (it == BaseCommentViewModel.LoadResult.DELETED) { @@ -509,48 +511,43 @@ class NewQuestionDetailFragment : MoreFunctionPanelDialog.showMoreDialog( requireActivity() as AppCompatActivity, entities, questionEntity.title - ?: "", getShareUtils(questionEntity), getItemClickCallback(questionEntity) + ?: "", getShareEntity(questionEntity), tag ?: "" ) } } } - private fun getShareUtils(questionEntity: QuestionsDetailEntity): ShareUtils { - val shareIcon = if (questionEntity.images.isNotEmpty()) { - questionEntity.images[0] - } else { - getString(R.string.share_ghzs_logo) - } - var description = questionEntity.description - if (TextUtils.isEmpty(description)) { - description = getString(R.string.ask_share_default_summary) - } - val shareUrl = if (isPublishEnv()) { - getString(R.string.share_questions_url, questionEntity.id) - } else { - getString(R.string.share_questions_url_dev, questionEntity.id) - } - val shareUtils = ShareUtils.getInstance(activity) - shareUtils.shareParamsDetail( - activity, - shareUrl, - shareIcon, - getString( + private fun getShareEntity(questionEntity: QuestionsDetailEntity): ForumShareEntity { + return ForumShareEntity( + id = questionEntity.id ?: "", + shareUrl = if (isPublishEnv()) { + getString(R.string.share_questions_url, questionEntity.id) + } else { + getString(R.string.share_questions_url_dev, questionEntity.id) + }, + shareIcon = if (questionEntity.images.isNotEmpty()) { + questionEntity.images[0] + } else { + getString(R.string.share_ghzs_logo) + }, + shareTitle = getString( R.string.ask_share_questions_title, questionEntity.title, questionEntity.count.answer ), - description, - ShareUtils.ShareEntrance.askNormal, - questionEntity.id, null + shareSummary = if (TextUtils.isEmpty(questionEntity.description)) { + getString(R.string.ask_share_default_summary) + } else { + questionEntity.description!! + }, + shareEntrance = ShareUtils.ShareEntrance.askNormal, ) - return shareUtils } - private fun getItemClickCallback(questionEntity: QuestionsDetailEntity): (menuItem: MenuItemEntity) -> Unit { + private fun getItemClickCallback(questionEntity: QuestionsDetailEntity): (menuItem: MenuItemEntity?) -> Unit { return { val bbsType = if (mViewModel.questionDetail?.type == "game_bbs") "游戏论坛" else "综合论坛" - when (it.text) { + when (it?.text) { "投诉" -> { ifLogin("提问贴") { BbsReportHelper.showReportDialog( @@ -623,17 +620,6 @@ class NewQuestionDetailFragment : } } - private fun restoreDialogFragment() { - (activity?.supportFragmentManager?.findFragmentByTag( - MoreFunctionPanelDialog::class.java.name - ) as? MoreFunctionPanelDialog)?.run { - mViewModel.questionDetail?.run { - shareUtils = getShareUtils(this) - onItemClickCallback = getItemClickCallback(this) - } - } - } - override fun onStop() { super.onStop() val stayTime = (System.currentTimeMillis() - startPageTime) / 1000 diff --git a/app/src/main/java/com/gh/gamecenter/qa/video/detail/ForumVideoDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/video/detail/ForumVideoDetailFragment.kt index c0764608ee..2b692fde5f 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/video/detail/ForumVideoDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/video/detail/ForumVideoDetailFragment.kt @@ -20,7 +20,6 @@ import androidx.core.os.bundleOf import androidx.core.view.ViewCompat import androidx.fragment.app.Fragment import androidx.lifecycle.Lifecycle -import androidx.lifecycle.Observer import com.ethanhua.skeleton.Skeleton import com.ethanhua.skeleton.ViewSkeletonScreen import com.gh.base.fragment.BaseFragment_TabLayout @@ -213,8 +212,6 @@ class ForumVideoDetailFragment : BaseFragment_TabLayout() { updateToolbarParams(mVideoHeight / 2) } mViewModel.addHistoryRecord(entity) - - restoreDialogFragment() } else { mBinding.container.visibility = View.GONE if (it.exception != null && it.exception.code() == 404) { @@ -622,40 +619,34 @@ class ForumVideoDetailFragment : BaseFragment_TabLayout() { MoreFunctionPanelDialog.showMoreDialog( requireActivity() as AppCompatActivity, entities, mForumVideoEntity?.title - ?: "", getShareUtils(), getItemClickCallback() + ?: "", getShareEntity(), tag ?: "" ) } } - private fun getShareUtils(): ShareUtils { - val shareUrl = if (isPublishEnv()) { - "https://m.ghzs666.com/video/${mForumVideoEntity?.id}" - } else { - "https://resource.ghzs.com/page/video_play/video/video.html?video=${mForumVideoEntity?.id}" - } - - val shareIcon: String = if (mForumVideoEntity?.poster?.isNotEmpty() == true) { - mForumVideoEntity?.poster ?: "" - } else { - requireContext().getString(R.string.share_ghzs_logo) - } - val shareUtils = ShareUtils.getInstance(requireContext()) - shareUtils.shareParamsDetail( - requireActivity(), - shareUrl, - shareIcon, - mForumVideoEntity?.title ?: "", - mForumVideoEntity?.des ?: "", - ShareUtils.ShareEntrance.video, - mForumVideoEntity?.id, null + private fun getShareEntity(): ForumShareEntity { + return ForumShareEntity( + id = mForumVideoEntity?.id ?: "", + shareUrl = if (isPublishEnv()) { + "https://m.ghzs666.com/video/${mForumVideoEntity?.id}" + } else { + "https://resource.ghzs.com/page/video_play/video/video.html?video=${mForumVideoEntity?.id}" + }, + shareIcon = if (mForumVideoEntity?.poster?.isNotEmpty() == true) { + mForumVideoEntity?.poster ?: "" + } else { + requireContext().getString(R.string.share_ghzs_logo) + }, + shareTitle = mForumVideoEntity?.title ?: "", + shareSummary = mForumVideoEntity?.des ?: "", + shareEntrance = ShareUtils.ShareEntrance.video, ) - return shareUtils } - private fun getItemClickCallback(): (menuItem: MenuItemEntity) -> Unit { + private fun getItemClickCallback(): (menuItem: MenuItemEntity?) -> Unit { return { val bbsType = if (mForumVideoEntity?.type == "game_bbs") "游戏论坛" else "综合论坛" - when (it.text) { + when (it?.text) { "修改" -> { startActivityForResult( VideoPublishActivity.getIntent( @@ -711,7 +702,7 @@ class ForumVideoDetailFragment : BaseFragment_TabLayout() { requireActivity() as AppCompatActivity, ChooseActivityDialogFragment.ActivityLabelLocation.BBS_ARTICLE, mForumVideoEntity?.tagActivityId, - getChooseSelectCallback() + tag ?: "" ) } "删除", "隐藏" -> { @@ -747,21 +738,6 @@ class ForumVideoDetailFragment : BaseFragment_TabLayout() { } } - private fun restoreDialogFragment() { - (activity?.supportFragmentManager?.findFragmentByTag( - MoreFunctionPanelDialog::class.java.name - ) as? MoreFunctionPanelDialog)?.run { - shareUtils = getShareUtils() - onItemClickCallback = getItemClickCallback() - } - - (activity?.supportFragmentManager?.findFragmentByTag( - ChooseActivityDialogFragment::class.java.name - ) as? ChooseActivityDialogFragment)?.run { - onSelectCallback = getChooseSelectCallback() - } - } - private fun addEssenceForum() { if (mForumVideoEntity == null) return var highlightDialogHintContent = "" @@ -794,6 +770,14 @@ class ForumVideoDetailFragment : BaseFragment_TabLayout() { mViewModel.updateDetailLiveData.postValue(it) } } + + if (requestCode == MoreFunctionPanelDialog.REQUEST_CODE) { + getItemClickCallback().invoke(data.getParcelableExtra(EntranceUtils.KEY_DATA)) + } + + if (requestCode == ChooseActivityDialogFragment.REQUEST_CODE) { + getChooseSelectCallback().invoke(data.getParcelableExtra(EntranceUtils.KEY_DATA)) + } } //下载被删除事件 diff --git a/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishFragment.kt index c554767449..e5a38de5c4 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishFragment.kt @@ -145,7 +145,7 @@ class VideoPublishFragment : NormalFragment(), KeyboardHeightObserver { requireActivity() as AppCompatActivity, ChooseActivityDialogFragment.ActivityLabelLocation.BBS_VIDEO, mViewModel.selectActivityLabelEntity?.id, - getChooseSelectCallback() + tag ?: "" ) }, delayTime) } @@ -174,11 +174,9 @@ class VideoPublishFragment : NormalFragment(), KeyboardHeightObserver { InputUrlDialogFragment.show( requireActivity() as AppCompatActivity, mBinding.reprintUrlTv.text.toString(), - getCallBack() + tag ?: "" ) } - - restoreDialogFragment() } private fun getCallBack(): (url: String) -> Unit { @@ -195,20 +193,6 @@ class VideoPublishFragment : NormalFragment(), KeyboardHeightObserver { } } - private fun restoreDialogFragment() { - (activity?.supportFragmentManager?.findFragmentByTag( - InputUrlDialogFragment::class.java.name - ) as? InputUrlDialogFragment)?.run { - callback = getCallBack() - } - - (activity?.supportFragmentManager?.findFragmentByTag( - ChooseActivityDialogFragment::class.java.name - ) as? ChooseActivityDialogFragment)?.run { - onSelectCallback = getChooseSelectCallback() - } - } - private fun initData() { val videoPatch = mViewModel.videoPatch val videoDraft = mViewModel.videoDraft @@ -347,6 +331,10 @@ class VideoPublishFragment : NormalFragment(), KeyboardHeightObserver { mViewModel.videoDraft = draftEntity setVideoDraft() } + } else if (requestCode == ChooseActivityDialogFragment.REQUEST_CODE) { + getChooseSelectCallback().invoke(data.getParcelableExtra(EntranceUtils.KEY_DATA)) + } else if (requestCode == InputUrlDialogFragment.REQUEST_CODE) { + getCallBack().invoke(data.getStringExtra(EntranceUtils.KEY_DATA) ?: "") } }