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 8d7777e9ba..0c3a2a5d20 100644 --- a/app/src/main/java/com/gh/common/constant/Constants.java +++ b/app/src/main/java/com/gh/common/constant/Constants.java @@ -413,4 +413,6 @@ public class Constants { public static final String SP_BROWSER_HINT_URL = "browser_hint_url"; public static final String DEFAULT_OPPO_BROWSER_HINT_URL = "https://static-web.ghzs.com/ghzs_help/help.html?content=5fa90fe143d91a022e0d33ff"; public static final String DEFAULT_VIVO_BROWSER_HINT_URL = "https://static-web.ghzs.com/ghzs_help/help.html?content=618112ce04796e63e97643a4&from=ghzs"; + + public static final int FOLLOW_HINT_TRIGGER_HEIGHT = 10; } diff --git a/app/src/main/java/com/gh/common/syncpage/example/ExampleAdapter.kt b/app/src/main/java/com/gh/common/syncpage/example/ExampleAdapter.kt index 8c291adbe8..695739b7b1 100644 --- a/app/src/main/java/com/gh/common/syncpage/example/ExampleAdapter.kt +++ b/app/src/main/java/com/gh/common/syncpage/example/ExampleAdapter.kt @@ -16,7 +16,6 @@ import com.gh.gamecenter.qa.answer.detail.AnswerDetailActivity import com.gh.gamecenter.qa.article.detail.ArticleDetailActivity import com.gh.gamecenter.qa.entity.AnswerEntity import com.gh.gamecenter.qa.entity.Questions -import com.gh.gamecenter.qa.questions.detail.QuestionsDetailActivity class ExampleAdapter(context: Context) : ListAdapter(context), ISyncAdapterHandler { @@ -65,7 +64,7 @@ class ExampleAdapter(context: Context) : ListAdapter(context), ISy mContext.startActivity(ArticleDetailActivity.getIntent(mContext, UserManager.getInstance().community, answer.id!!, "", getPath())) } else { val questions = answer.questions - mContext.startActivity(QuestionsDetailActivity.getIntent(mContext, questions.id, "", getPath())) +// mContext.startActivity(QuestionsDetailActivity.getIntent(mContext, questions.id, "", getPath())) } } 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 4f2aff2333..25fc4f5256 100644 --- a/app/src/main/java/com/gh/common/util/DirectUtils.kt +++ b/app/src/main/java/com/gh/common/util/DirectUtils.kt @@ -49,11 +49,8 @@ import com.gh.gamecenter.personalhome.background.PersonalityBackgroundActivity import com.gh.gamecenter.personalhome.border.AvatarBorderActivity import com.gh.gamecenter.personalhome.home.UserHistoryViewModel import com.gh.gamecenter.qa.answer.detail.SimpleAnswerDetailActivity -import com.gh.gamecenter.qa.article.SimpleArticleListActivity import com.gh.gamecenter.qa.article.detail.ArticleDetailActivity -import com.gh.gamecenter.qa.column.detail.AskColumnDetailActivity import com.gh.gamecenter.qa.questions.newdetail.NewQuestionDetailActivity -import com.gh.gamecenter.qa.subject.CommunitySubjectActivity import com.gh.gamecenter.qa.video.detail.ForumVideoDetailActivity import com.gh.gamecenter.retrofit.Response import com.gh.gamecenter.retrofit.RetrofitManager @@ -901,14 +898,14 @@ object DirectUtils { */ @JvmStatic fun directToCommunityColumn(context: Context, community: CommunityEntity?, subjectId: String, entrance: String?, path: String?) { - if (subjectId.isEmpty()) return - val bundle = Bundle() - bundle.putString(KEY_PATH, path) - bundle.putString(KEY_TO, CommunitySubjectActivity::class.java.name) - bundle.putString(KEY_ENTRANCE, BaseActivity.mergeEntranceAndPath(entrance, path)) - bundle.putString(KEY_COLUMN_ID, subjectId) - bundle.putParcelable(KEY_COMMUNITY_DATA, community) - jumpActivity(context, bundle) +// if (subjectId.isEmpty()) return +// val bundle = Bundle() +// bundle.putString(KEY_PATH, path) +// bundle.putString(KEY_TO, CommunitySubjectActivity::class.java.name) +// bundle.putString(KEY_ENTRANCE, BaseActivity.mergeEntranceAndPath(entrance, path)) +// bundle.putString(KEY_COLUMN_ID, subjectId) +// bundle.putParcelable(KEY_COMMUNITY_DATA, community) +// jumpActivity(context, bundle) } @JvmStatic @@ -1175,13 +1172,13 @@ object DirectUtils { */ @JvmStatic fun directAskColumnLabelDetail(context: Context, tag: String, community: CommunityEntity, entrance: String? = null, path: String? = "") { - val bundle = Bundle() - bundle.putString(KEY_TO, AskColumnDetailActivity::class.java.name) - bundle.putString(KEY_ASK_TAG, tag) - bundle.putParcelable(KEY_COMMUNITY_DATA, community) - bundle.putString(KEY_ENTRANCE, entrance ?: ENTRANCE_BROWSER) - bundle.putString(KEY_PATH, path) - jumpActivity(context, bundle) +// val bundle = Bundle() +// bundle.putString(KEY_TO, AskColumnDetailActivity::class.java.name) +// bundle.putString(KEY_ASK_TAG, tag) +// bundle.putParcelable(KEY_COMMUNITY_DATA, community) +// bundle.putString(KEY_ENTRANCE, entrance ?: ENTRANCE_BROWSER) +// bundle.putString(KEY_PATH, path) +// jumpActivity(context, bundle) } /** @@ -1189,14 +1186,14 @@ object DirectUtils { */ @JvmStatic fun directAskColumnDetail(context: Context, columnId: String, community: CommunityEntity, entrance: String? = null, path: String? = "") { - if (columnId.isEmpty()) return - val bundle = Bundle() - bundle.putString(KEY_TO, AskColumnDetailActivity::class.java.name) - bundle.putString(KEY_COLUMN_ID, columnId) - bundle.putParcelable(KEY_COMMUNITY_DATA, community) - bundle.putString(KEY_ENTRANCE, entrance ?: ENTRANCE_BROWSER) - bundle.putString(KEY_PATH, path) - jumpActivity(context, bundle) +// if (columnId.isEmpty()) return +// val bundle = Bundle() +// bundle.putString(KEY_TO, AskColumnDetailActivity::class.java.name) +// bundle.putString(KEY_COLUMN_ID, columnId) +// bundle.putParcelable(KEY_COMMUNITY_DATA, community) +// bundle.putString(KEY_ENTRANCE, entrance ?: ENTRANCE_BROWSER) +// bundle.putString(KEY_PATH, path) +// jumpActivity(context, bundle) } /** @@ -1239,13 +1236,13 @@ object DirectUtils { */ @JvmStatic fun directSimpleArticleList(context: Context, sortType: String, entrance: String? = null, path: String? = "") { - if (sortType.isEmpty()) return - val bundle = Bundle() - bundle.putString(KEY_TO, SimpleArticleListActivity::class.java.name) - bundle.putString(KEY_TYPE, sortType) - bundle.putString(KEY_ENTRANCE, entrance ?: ENTRANCE_BROWSER) - bundle.putString(KEY_PATH, path) - jumpActivity(context, bundle) +// if (sortType.isEmpty()) return +// val bundle = Bundle() +// bundle.putString(KEY_TO, SimpleArticleListActivity::class.java.name) +// bundle.putString(KEY_TYPE, sortType) +// bundle.putString(KEY_ENTRANCE, entrance ?: ENTRANCE_BROWSER) +// bundle.putString(KEY_PATH, path) +// jumpActivity(context, bundle) } @JvmStatic diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 97681f284f..bdfe037cd6 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -30,7 +30,6 @@ import android.os.SystemClock; import android.preference.PreferenceManager; import android.text.Html; import android.text.TextUtils; -import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.widget.TextView; @@ -99,7 +98,6 @@ import com.gh.gamecenter.manager.UpdateManager; import com.gh.gamecenter.manager.UserManager; import com.gh.gamecenter.normal.NormalFragment; import com.gh.gamecenter.packagehelper.PackageViewModel; -import com.gh.gamecenter.qa.CommunityFragment; import com.gh.gamecenter.retrofit.BiResponse; import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; @@ -815,10 +813,10 @@ public class MainActivity extends BaseActivity { } private void switchToCommunityTabAndRefresh() { - getIntent().putExtra(SWITCH_TO_COMMUNITY, false); - Log.e("Switch", "true"); - EventBus.getDefault().post(new EBSkip(MainActivity.EB_SKIP_MAIN, MainWrapperFragment.INDEX_BBS)); - EventBus.getDefault().post(new EBReuse(CommunityFragment.EB_RETRY_PAGE)); +// getIntent().putExtra(SWITCH_TO_COMMUNITY, false); +// Log.e("Switch", "true"); +// EventBus.getDefault().post(new EBSkip(MainActivity.EB_SKIP_MAIN, MainWrapperFragment.INDEX_BBS)); +// EventBus.getDefault().post(new EBReuse(CommunityFragment.EB_RETRY_PAGE)); } private void checkTinkerPath() { diff --git a/app/src/main/java/com/gh/gamecenter/forum/detail/ForumArticleAskListFragment.kt b/app/src/main/java/com/gh/gamecenter/forum/detail/ForumArticleAskListFragment.kt index f4e707f436..352d60e790 100644 --- a/app/src/main/java/com/gh/gamecenter/forum/detail/ForumArticleAskListFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/forum/detail/ForumArticleAskListFragment.kt @@ -18,7 +18,6 @@ import com.gh.gamecenter.eventbus.EBDeleteDetail import com.gh.gamecenter.eventbus.EBTypeChange import com.gh.gamecenter.eventbus.EBUserFollow import com.gh.gamecenter.forum.home.ForumScrollCalculatorHelper -import com.gh.gamecenter.qa.CommunityFragment import com.gh.gamecenter.qa.entity.AnswerEntity import com.gh.gamecenter.video.detail.CustomManager import com.shuyu.gsyvideoplayer.video.base.GSYVideoView @@ -108,9 +107,9 @@ class ForumArticleAskListFragment : LazyListFragment CommunityFragment.FOLLOW_HINT_TRIGGER_HEIGHT) { + if (dy > Constants.FOLLOW_HINT_TRIGGER_HEIGHT) { EventBus.getDefault().post(EBTypeChange(ForumDetailFragment.EB_HIDE_QUESTION_BUTTON, 0)) - } else if (dy < -CommunityFragment.FOLLOW_HINT_TRIGGER_HEIGHT) { + } else if (dy < -Constants.FOLLOW_HINT_TRIGGER_HEIGHT) { EventBus.getDefault().post(EBTypeChange(ForumDetailFragment.EB_SHOW_QUESTION_BUTTON, 0)) } if (dy != 0) scroll() diff --git a/app/src/main/java/com/gh/gamecenter/forum/detail/ForumDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/forum/detail/ForumDetailFragment.kt index 7a585a2a8e..71af5ccf74 100644 --- a/app/src/main/java/com/gh/gamecenter/forum/detail/ForumDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/forum/detail/ForumDetailFragment.kt @@ -20,11 +20,8 @@ import androidx.core.os.bundleOf import androidx.core.view.ViewCompat import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment -import androidx.fragment.app.FragmentStatePagerAdapter import androidx.lifecycle.Observer import androidx.recyclerview.widget.LinearLayoutManager -import androidx.viewpager.widget.PagerAdapter -import butterknife.OnClick import com.ethanhua.skeleton.Skeleton import com.ethanhua.skeleton.ViewSkeletonScreen import com.facebook.drawee.drawable.ScalingUtils @@ -200,6 +197,7 @@ class ForumDetailFragment : BaseLazyTabFragment() { .gradientCenterColorWidth(Constants.GRADIENT_CENTER_COLOR_WIDTH) .load(R.layout.fragment_forum_detail_skeleton) .show() + onViewClick() } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -381,118 +379,111 @@ class ForumDetailFragment : BaseLazyTabFragment() { } } - @OnClick( - R.id.filterContainer, R.id.videoFilterContainer, R.id.community_edit, R.id.moderatorTv, R.id.reuse_no_connection, R.id.gameZoneTv, - R.id.followTv, R.id.forumThumbBig, R.id.searchIv, R.id.forumRuleContainer - ) - fun onViewClick(view: View) { - when (view.id) { - R.id.searchIv -> { - NewLogUtils.logForumSearchEnter("论坛详情页搜索按钮") - NewLogUtils.logForumDetailEnterOrClick("click_forum_detail_search") - requireContext().startActivity(ForumOrUserSearchActivity.getIntent(requireContext(), bbsId, "论坛详情")) - } - R.id.filterContainer -> { - MtaHelper.onEvent("论坛详情", "全部Tab", "过滤选项") - showFilterPopupWindow(arrayListOf("最新发布", "最新回复")) { - mFilter = it - mBinding.forumFilter.text = mFilter - if (mAllForumArticleAskListFragment != null && mViewPager.currentItem == 0) { - mAllForumArticleAskListFragment?.onRefresh(mFilter) - } + fun onViewClick() { + mBinding.searchIv.setOnClickListener { + NewLogUtils.logForumSearchEnter("论坛详情页搜索按钮") + NewLogUtils.logForumDetailEnterOrClick("click_forum_detail_search") + requireContext().startActivity(ForumOrUserSearchActivity.getIntent(requireContext(), bbsId, "论坛详情")) + } + mBinding.filterContainer.setOnClickListener { + MtaHelper.onEvent("论坛详情", "全部Tab", "过滤选项") + showFilterPopupWindow(arrayListOf("最新发布", "最新回复")) { + mFilter = it + mBinding.forumFilter.text = mFilter + if (mAllForumArticleAskListFragment != null && mViewPager.currentItem == 0) { + mAllForumArticleAskListFragment?.onRefresh(mFilter) } } - R.id.videoFilterContainer -> { - MtaHelper.onEvent("论坛详情", "视频Tab", "过滤选项") - showFilterPopupWindow(arrayListOf("推荐", "最新发布")) { - mVideoFilter = it - mBinding.videoForumFilter.text = mVideoFilter - if (mVideoForumArticleAskListFragment != null && mViewPager.currentItem == 3) { - mVideoForumArticleAskListFragment?.onRefresh(mVideoFilter) - } + } + mBinding.videoFilterContainer.setOnClickListener { + MtaHelper.onEvent("论坛详情", "视频Tab", "过滤选项") + showFilterPopupWindow(arrayListOf("推荐", "最新发布")) { + mVideoFilter = it + mBinding.videoForumFilter.text = mVideoFilter + if (mVideoForumArticleAskListFragment != null && mViewPager.currentItem == 3) { + mVideoForumArticleAskListFragment?.onRefresh(mVideoFilter) } } - R.id.community_edit -> { - mForumDetail?.run { - val entrance = if (type == "game_bbs") "游戏论坛详情页" else "综合论坛详情页" - NewLogUtils.logForumDetailPublishClick(entrance) - } - showCommunityEditWindow() + } + mBinding.communityEdit.setOnClickListener { + mForumDetail?.run { + val entrance = if (type == "game_bbs") "游戏论坛详情页" else "综合论坛详情页" + NewLogUtils.logForumDetailPublishClick(entrance) } - R.id.moderatorTv -> { - NewLogUtils.logForumDetailEnterOrClick("click_forum_member", bbsId, bbsType) - NewLogUtils.logForumModeratorEnter(bbsId, bbsType) - requireContext().startActivity( - ModeratorListActivity.getIntent( - requireContext(), mForumDetail?.id - ?: "", mForumDetail?.name ?: "", mForumDetail?.type ?: "", mEntrance, "论坛详情" - ) + showCommunityEditWindow() + } + mBinding.moderatorTv.setOnClickListener { + NewLogUtils.logForumDetailEnterOrClick("click_forum_member", bbsId, bbsType) + NewLogUtils.logForumModeratorEnter(bbsId, bbsType) + requireContext().startActivity( + ModeratorListActivity.getIntent( + requireContext(), mForumDetail?.id + ?: "", mForumDetail?.name ?: "", mForumDetail?.type ?: "", mEntrance, "论坛详情" + ) + ) + } + mBinding.reuseNoConnection.root.setOnClickListener { + mBinding.reuseLoading.reuseLlLoading.visibility = View.VISIBLE + mBinding.reuseNoConnection.reuseNoConnection.visibility = View.GONE + mSkeleton.show() + mViewModel?.getForumDetail() + } + mBinding.gameZoneTv.setOnClickListener { + NewLogUtils.logForumDetailEnterOrClick("click_strategy_zone", bbsId, bbsType) + if (mForumDetail?.zone != null) { + MtaHelper.onEvent("论坛详情", "顶部区域", "游戏专区") + GameDetailActivity.startGameDetailActivity( + requireContext(), mForumDetail?.game?.id ?: "", mEntrance, GameDetailFragment.INDEX_TRENDES ) } - R.id.reuse_no_connection -> { - mBinding.reuseLoading.reuseLlLoading.visibility = View.VISIBLE - mBinding.reuseNoConnection.reuseNoConnection.visibility = View.GONE - mSkeleton.show() - mViewModel?.getForumDetail() + } + mBinding.forumThumbBig.setOnClickListener { + NewLogUtils.logForumDetailEnterOrClick("click_forum_detail_forum_icon", bbsId) + MtaHelper.onEvent("论坛详情", "顶部区域", "游戏图标") + if (mForumDetail?.game?.active == true) { + GameDetailActivity.startGameDetailActivity( + requireContext(), mForumDetail?.game?.id + ?: "", "(论坛详情)" + ) } - R.id.gameZoneTv -> { - NewLogUtils.logForumDetailEnterOrClick("click_strategy_zone", bbsId, bbsType) - if (mForumDetail?.zone != null) { - MtaHelper.onEvent("论坛详情", "顶部区域", "游戏专区") - GameDetailActivity.startGameDetailActivity( - requireContext(), mForumDetail?.game?.id ?: "", mEntrance, GameDetailFragment.INDEX_TRENDES + } + mBinding.followTv.setOnClickListener { + debounceActionWithInterval(R.id.followTv) { + ifLogin(mEntrance) { + val forumEntity = ForumEntity( + id = mForumDetail?.id ?: "", + game = mForumDetail?.game!!, + name = mForumDetail?.name ?: "", + type = mForumDetail?.type ?: "", + icon = mForumDetail?.icon ?: "" ) - } - } - R.id.forumThumbBig -> { - NewLogUtils.logForumDetailEnterOrClick("click_forum_detail_forum_icon", bbsId) - MtaHelper.onEvent("论坛详情", "顶部区域", "游戏图标") - if (mForumDetail?.game?.active == true) { - GameDetailActivity.startGameDetailActivity( - requireContext(), mForumDetail?.game?.id - ?: "", "(论坛详情)" - ) - } - } - R.id.followTv -> { - debounceActionWithInterval(R.id.followTv) { - ifLogin(mEntrance) { - val forumEntity = ForumEntity( - id = mForumDetail?.id ?: "", - game = mForumDetail?.game!!, - name = mForumDetail?.name ?: "", - type = mForumDetail?.type ?: "", - icon = mForumDetail?.icon ?: "" - ) - if (mForumDetail?.me?.isFollower == true) { - mViewModel?.unFollowForum { - MtaHelper.onEvent("论坛详情", "顶部区域", "取消关注") - mForumDetail?.me?.isFollower = false - ToastUtils.showToast("取消成功") - initUI() - EventBus.getDefault().post(EBForumFollowChange(forumEntity, false)) - } - } else { - mViewModel?.followForum { - val userId = UserManager.getInstance().userId - NewLogUtils.logForumDetailEnterOrClick("click_forum_detail_follow", bbsId, bbsType, userId) - MtaHelper.onEvent("论坛详情", "顶部区域", "关注") - mForumDetail?.me?.isFollower = true - ToastUtils.showToast("关注成功") - initUI() - EventBus.getDefault().post(EBForumFollowChange(forumEntity, true)) - } + if (mForumDetail?.me?.isFollower == true) { + mViewModel?.unFollowForum { + MtaHelper.onEvent("论坛详情", "顶部区域", "取消关注") + mForumDetail?.me?.isFollower = false + ToastUtils.showToast("取消成功") + initUI() + EventBus.getDefault().post(EBForumFollowChange(forumEntity, false)) + } + } else { + mViewModel?.followForum { + val userId = UserManager.getInstance().userId + NewLogUtils.logForumDetailEnterOrClick("click_forum_detail_follow", bbsId, bbsType, userId) + MtaHelper.onEvent("论坛详情", "顶部区域", "关注") + mForumDetail?.me?.isFollower = true + ToastUtils.showToast("关注成功") + initUI() + EventBus.getDefault().post(EBForumFollowChange(forumEntity, true)) } } } } - - R.id.forumRuleContainer -> { - NewLogUtils.logForumDetailEnterOrClick("click_layout_description", bbsId, bbsType) - NewLogUtils.logForumRuleEnter(bbsId, bbsType) - startActivity(NewsDetailActivity.getIntentById(requireContext(), Constants.FORUM_REGULATIONS_NEWS_ID, "论坛详情")) - } + } + mBinding.forumRuleContainer.setOnClickListener { + NewLogUtils.logForumDetailEnterOrClick("click_layout_description", bbsId, bbsType) + NewLogUtils.logForumRuleEnter(bbsId, bbsType) + startActivity(NewsDetailActivity.getIntentById(requireContext(), Constants.FORUM_REGULATIONS_NEWS_ID, "论坛详情")) } } diff --git a/app/src/main/java/com/gh/gamecenter/forum/home/CommunityHomeFragment.kt b/app/src/main/java/com/gh/gamecenter/forum/home/CommunityHomeFragment.kt index d269bbf4ea..201f17f0d6 100644 --- a/app/src/main/java/com/gh/gamecenter/forum/home/CommunityHomeFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/forum/home/CommunityHomeFragment.kt @@ -27,7 +27,6 @@ import com.gh.gamecenter.eventbus.EBUISwitch import com.gh.gamecenter.forum.search.ForumOrUserSearchActivity import com.gh.gamecenter.fragment.MainWrapperFragment import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.qa.CommunityFragment import com.gh.gamecenter.qa.article.edit.ArticleEditActivity import com.gh.gamecenter.qa.entity.ArticleEntity import com.gh.gamecenter.qa.questions.edit.QuestionEditActivity @@ -325,9 +324,9 @@ class CommunityHomeFragment : LazyFragment() { fun onEventMainThread(status: EBTypeChange) { if (mBinding?.viewPager?.currentItem != 0) return - if (status.type == CommunityFragment.EB_SHOW_QUESTION_BUTTON) { + if (status.type == EB_SHOW_QUESTION_BUTTON) { setPutQuestionButtonStatus(View.VISIBLE) - } else if (status.type == CommunityFragment.EB_HIDE_QUESTION_BUTTON) { + } else if (status.type == EB_HIDE_QUESTION_BUTTON) { setPutQuestionButtonStatus(View.GONE) } } @@ -376,5 +375,7 @@ class CommunityHomeFragment : LazyFragment() { const val QUESTION_REQUEST_CODE = 201 const val VIDEO_REQUEST_CODE = 202 const val LAST_SELECTED_POSITION = "last_selected_position" + const val EB_SHOW_QUESTION_BUTTON = "EB_SHOW_QUESTION_BUTTON" + const val EB_HIDE_QUESTION_BUTTON = "EB_HIDE_QUESTION_BUTTON" } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/forum/home/ForumArticleListFragment.kt b/app/src/main/java/com/gh/gamecenter/forum/home/ForumArticleListFragment.kt index 6c9edfc986..17221eb519 100644 --- a/app/src/main/java/com/gh/gamecenter/forum/home/ForumArticleListFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/forum/home/ForumArticleListFragment.kt @@ -20,7 +20,6 @@ import com.gh.gamecenter.eventbus.EBTypeChange import com.gh.gamecenter.eventbus.EBUserFollow import com.gh.gamecenter.forum.home.ForumScrollCalculatorHelper.Companion.getPlaySchedule import com.gh.gamecenter.forum.home.ForumScrollCalculatorHelper.Companion.savePlaySchedule -import com.gh.gamecenter.qa.CommunityFragment import com.gh.gamecenter.qa.entity.ArticleEntity import com.gh.gamecenter.user.UserViewModel import com.gh.gamecenter.video.detail.CustomManager @@ -99,10 +98,10 @@ class ForumArticleListFragment : LazyListFragment CommunityFragment.FOLLOW_HINT_TRIGGER_HEIGHT) { - EventBus.getDefault().post(EBTypeChange(CommunityFragment.EB_HIDE_QUESTION_BUTTON, 0)) - } else if (dy < -CommunityFragment.FOLLOW_HINT_TRIGGER_HEIGHT) { - EventBus.getDefault().post(EBTypeChange(CommunityFragment.EB_SHOW_QUESTION_BUTTON, 0)) + if (dy > Constants.FOLLOW_HINT_TRIGGER_HEIGHT) { + EventBus.getDefault().post(EBTypeChange(CommunityHomeFragment.EB_HIDE_QUESTION_BUTTON, 0)) + } else if (dy < -Constants.FOLLOW_HINT_TRIGGER_HEIGHT) { + EventBus.getDefault().post(EBTypeChange(CommunityHomeFragment.EB_SHOW_QUESTION_BUTTON, 0)) } if (dy != 0) scroll() } 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 0b7f402561..350bae68ab 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 @@ -23,6 +23,7 @@ import com.gh.common.util.* import com.gh.gamecenter.CleanApkActivity import com.gh.gamecenter.R import com.gh.gamecenter.WebActivity +import com.gh.gamecenter.databinding.FragmentGameUploadBinding import com.gh.gamecenter.entity.InstallGameEntity import com.gh.gamecenter.normal.NormalFragment import com.gh.gamecenter.suggest.SuggestPicAdapter @@ -31,7 +32,6 @@ import com.halo.assistant.HaloApp import com.lightgame.utils.Util_System_Keyboard import com.lightgame.utils.Utils import io.reactivex.disposables.Disposable -import kotlinx.android.synthetic.main.fragment_game_upload.* import okhttp3.MediaType import okhttp3.RequestBody import java.io.File @@ -47,6 +47,7 @@ class GameUploadFragment : NormalFragment() { private var mAdapter: SuggestPicAdapter? = null private var mIconAdapter: SuggestPicAdapter? = null private var mSelectGameDialog: Dialog? = null + private lateinit var mBinding: FragmentGameUploadBinding private lateinit var mInstallGameEntity: InstallGameEntity private lateinit var mUploadDialog: UploadScheduleDialog private lateinit var mViewModel: GameUploadViewModel @@ -61,7 +62,13 @@ class GameUploadFragment : NormalFragment() { private var mApkUrl: String = "" private var mUploadProgressDisposable: Disposable? = null - override fun getLayoutId(): Int = R.layout.fragment_game_upload + override fun getLayoutId(): Int = 0 + + override fun getInflatedLayout(): View { + return FragmentGameUploadBinding.inflate(LayoutInflater.from(requireContext()), null, false).apply { + mBinding = this + }.root + } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -80,21 +87,21 @@ class GameUploadFragment : NormalFragment() { } }) - gameLabelTv.text = getString(R.string.upload_game_label).fromHtml() - gameIconTitleTv.text = getString(R.string.upload_game_icon).fromHtml() - tv_installation_package.text = getString(R.string.upload_game_pkg).fromHtml() - tv_game_name.text = getString(R.string.suggestion_game_name).fromHtml() - tv_game_intro.text = getString(R.string.upload_game_intro).fromHtml() - tv_screenshot.text = getString(R.string.upload_game_pic).fromHtml() + mBinding.gameLabelTv.text = getString(R.string.upload_game_label).fromHtml() + mBinding.gameIconTitleTv.text = getString(R.string.upload_game_icon).fromHtml() + mBinding.tvInstallationPackage.text = getString(R.string.upload_game_pkg).fromHtml() + mBinding.tvGameName.text = getString(R.string.suggestion_game_name).fromHtml() + mBinding.tvGameIntro.text = getString(R.string.upload_game_intro).fromHtml() + mBinding.tvScreenshot.text = getString(R.string.upload_game_pic).fromHtml() mViewModel.uploadGameTips.observe(viewLifecycleOwner, Observer { - remindTv.visibility = View.VISIBLE + mBinding.remindTv.visibility = View.VISIBLE val remindText = " $it" - remindTv.text = SpanBuilder(remindText).image(0, 1, R.drawable.ic_game_upload_remind).build() + mBinding.remindTv.text = SpanBuilder(remindText).image(0, 1, R.drawable.ic_game_upload_remind).build() }) mViewModel.getUploadGamesTips() - rv_screenshot.apply { + mBinding.rvScreenshot.apply { layoutManager = object : GridLayoutManager(requireContext(), 5) { override fun canScrollVertically(): Boolean { return false @@ -112,7 +119,7 @@ class GameUploadFragment : NormalFragment() { adapter = mAdapter } - gameIconRv.apply { + mBinding.gameIconRv.apply { layoutManager = object : GridLayoutManager(requireContext(), 5) { override fun canScrollVertically(): Boolean { return false @@ -144,8 +151,8 @@ class GameUploadFragment : NormalFragment() { } }, 7, privacyContent.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) - tv_protocol.text = privacyContent - tv_protocol.movementMethod = LinkMovementMethod() + mBinding.tvProtocol.text = privacyContent + mBinding.tvProtocol.movementMethod = LinkMovementMethod() initListener() @@ -157,11 +164,11 @@ class GameUploadFragment : NormalFragment() { private fun initListener() { - chooseGameLl.setOnClickListener { + mBinding.chooseGameLl.setOnClickListener { MtaHelper.onEvent("游戏上传", "安装包", "点我选择") showSelectDialog() } - gameIsNetworkingRg.setOnCheckedChangeListener { group, checkedId -> + mBinding.gameIsNetworkingRg.setOnCheckedChangeListener { group, checkedId -> when (checkedId) { R.id.gameNetworkingRb -> { mIsOnline = "yes" @@ -173,7 +180,7 @@ class GameUploadFragment : NormalFragment() { } } } - gameLanguageRg.setOnCheckedChangeListener { group, checkedId -> + mBinding.gameLanguageRg.setOnCheckedChangeListener { group, checkedId -> when (checkedId) { R.id.gameLanguageChineseRb -> { mGameLanguage = "中文" @@ -189,7 +196,7 @@ class GameUploadFragment : NormalFragment() { } } } - gameTypeRg.setOnCheckedChangeListener { group, checkedId -> + mBinding.gameTypeRg.setOnCheckedChangeListener { group, checkedId -> when (checkedId) { R.id.gameTypeLocalRb -> { mGameType = "local" @@ -206,7 +213,7 @@ class GameUploadFragment : NormalFragment() { } } - addGameLabeTv.setOnClickListener { + mBinding.addGameLabeTv.setOnClickListener { MtaHelper.onEvent("游戏上传", "游戏标签", "添加标签") if (mTags.size < mMaxTagSize) { showAddTagDialog() @@ -214,14 +221,14 @@ class GameUploadFragment : NormalFragment() { ToastUtils.showToast("游戏标签最多添加${mMaxTagSize}个") } } - suggest_post_btn.setOnClickListener { + mBinding.suggestPostBtn.setOnClickListener { commit() } } private fun commit() { MtaHelper.onEvent("游戏上传", "提交", "提交") - if (TextUtils.isEmpty(tv_choose.text.toString())) { + if (TextUtils.isEmpty(mBinding.tvChoose.text.toString())) { ToastUtils.showToast("请先选择游戏安装包") return } @@ -229,7 +236,7 @@ class GameUploadFragment : NormalFragment() { ToastUtils.showToast("请先选择游戏图标") return } - if (TextUtils.isEmpty(et_game_name.text.toString())) { + if (TextUtils.isEmpty(mBinding.etGameName.text.toString())) { ToastUtils.showToast("请先填写游戏名字") return } @@ -237,7 +244,7 @@ class GameUploadFragment : NormalFragment() { ToastUtils.showToast("请先填写游戏标签") return } - if (TextUtils.isEmpty(et_game_intro.text.toString())) { + if (TextUtils.isEmpty(mBinding.etGameIntro.text.toString())) { ToastUtils.showToast("请先填写游戏简介") return } @@ -245,7 +252,7 @@ class GameUploadFragment : NormalFragment() { ToastUtils.showToast("请先选择游戏截图") return } - if (!tv_protocol.isChecked) { + if (!mBinding.tvProtocol.isChecked) { ToastUtils.showToast("请先同意开发者协议") return } @@ -279,7 +286,8 @@ class GameUploadFragment : NormalFragment() { }, { mUploadDialog.dismiss() activity?.finish() - }, extraConfig = DialogHelper.Config(centerTitle = true, centerContent = true)) + }, extraConfig = DialogHelper.Config(centerTitle = true, centerContent = true) + ) } 1 -> { mUploadDialog.dismiss() @@ -318,24 +326,24 @@ class GameUploadFragment : NormalFragment() { private fun uploadPicture(fileList: List) { if (fileList.isEmpty()) return mDisposable = UploadImageUtils.uploadImageListOneByOne(UploadImageUtils.UploadType.game_upload, fileList, false, - object : UploadImageUtils.OnUploadImageListCountListener { - override fun onSuccess(map: Map) { - mPathMap.putAll(map) - // 从90%开始增加 - val progress = 324 + 36 / (mIconAdapter!!.fileList.size + mAdapter!!.fileList.size + 1) * (mPathMap.size + 1) - mUploadDialog.updateProgress(progress) - } + object : UploadImageUtils.OnUploadImageListCountListener { + override fun onSuccess(map: Map) { + mPathMap.putAll(map) + // 从90%开始增加 + val progress = 324 + 36 / (mIconAdapter!!.fileList.size + mAdapter!!.fileList.size + 1) * (mPathMap.size + 1) + mUploadDialog.updateProgress(progress) + } - override fun onFinish() { - mDisposable?.dispose() - uploadGames() - } + override fun onFinish() { + mDisposable?.dispose() + uploadGames() + } - override fun onError() { - mPathMap.clear() - mUploadDialog.uploadFail() - } - }) + override fun onError() { + mPathMap.clear() + mUploadDialog.uploadFail() + } + }) } //上传apk @@ -382,14 +390,14 @@ class GameUploadFragment : NormalFragment() { requestMap["icon"] = mGameIcon requestMap["package_url"] = mApkUrl requestMap["tags"] = mTags - requestMap["package_name"] = tv_choose.text.toString() + requestMap["package_name"] = mBinding.tvChoose.text.toString() requestMap["size"] = mInstallGameEntity.gameSize requestMap["version"] = mInstallGameEntity.gameVersion ?: "" - requestMap["name"] = et_game_name.text.toString() - requestMap["des"] = et_game_intro.text.toString() + requestMap["name"] = mBinding.etGameName.text.toString() + requestMap["des"] = mBinding.etGameIntro.text.toString() requestMap["images"] = imageList - requestMap["video"] = gameVideoPathEt.text.toString() - requestMap["developer_say"] = gameDeveloperWordsEt.text.toString() + requestMap["video"] = mBinding.gameVideoPathEt.text.toString() + requestMap["developer_say"] = mBinding.gameDeveloperWordsEt.text.toString() if (mIsOnline.isNotEmpty()) { requestMap["is_online"] = mIsOnline } @@ -400,8 +408,10 @@ class GameUploadFragment : NormalFragment() { requestMap["type"] = mGameType } - val body = RequestBody.create(MediaType.parse("application/json"), - GsonUtils.toJson(requestMap)) + val body = RequestBody.create( + MediaType.parse("application/json"), + GsonUtils.toJson(requestMap) + ) mViewModel.uploadGames(body) } @@ -442,10 +452,10 @@ class GameUploadFragment : NormalFragment() { mSelectGameDialog?.cancel() if (obj is InstallGameEntity) run { mInstallGameEntity = obj - chooseGameLl.background = null - chooseGameLl.setPadding(0, 0, 0, 0) - chooseGameIconIv.visibility = View.GONE - tv_choose.text = mInstallGameEntity.packageName + mBinding.chooseGameLl.background = null + mBinding.chooseGameLl.setPadding(0, 0, 0, 0) + mBinding.chooseGameIconIv.visibility = View.GONE + mBinding.tvChoose.text = mInstallGameEntity.packageName } } @@ -457,7 +467,7 @@ class GameUploadFragment : NormalFragment() { val filePathColumn = arrayOf(MediaStore.Images.Media.DATA) val cursor = requireContext().contentResolver.query(selectedImage, filePathColumn, null, null, null) - ?: return + ?: return cursor.moveToFirst() try { @@ -500,17 +510,18 @@ class GameUploadFragment : NormalFragment() { } override fun onBackPressed(): Boolean { - if (!TextUtils.isEmpty(tv_choose.text.toString()) || - !TextUtils.isEmpty(et_game_name.text.toString()) || - !TextUtils.isEmpty(et_game_intro.text.toString()) || - !TextUtils.isEmpty(gameDeveloperWordsEt.text.toString()) || - !TextUtils.isEmpty(gameVideoPathEt.text.toString()) || - mIsOnline.isNotEmpty() || - mGameLanguage.isNotEmpty() || - mGameType.isNotEmpty() || - mIconAdapter!!.fileList.size > 0 || - mTags.size > 0 || - mAdapter!!.fileList.size > 0) { + if (!TextUtils.isEmpty(mBinding.tvChoose.text.toString()) || + !TextUtils.isEmpty(mBinding.etGameName.text.toString()) || + !TextUtils.isEmpty(mBinding.etGameIntro.text.toString()) || + !TextUtils.isEmpty(mBinding.gameDeveloperWordsEt.text.toString()) || + !TextUtils.isEmpty(mBinding.gameVideoPathEt.text.toString()) || + mIsOnline.isNotEmpty() || + mGameLanguage.isNotEmpty() || + mGameType.isNotEmpty() || + mIconAdapter!!.fileList.size > 0 || + mTags.size > 0 || + mAdapter!!.fileList.size > 0 + ) { DialogHelper.showDialog( requireContext(), "提示", @@ -564,16 +575,16 @@ class GameUploadFragment : NormalFragment() { labelView.findViewById(R.id.picDelIv).setOnClickListener { if (mTags.contains(tag)) { MtaHelper.onEvent("游戏上传", "游戏标签", "删除标签") - gameLabelFl.removeView(labelView) + mBinding.gameLabelFl.removeView(labelView) mTags.remove(tag) - gameLabelFl.goneIf(mTags.isEmpty()) - addGameLabeTv.goneIf(mTags.size == mMaxTagSize) + mBinding.gameLabelFl.goneIf(mTags.isEmpty()) + mBinding.addGameLabeTv.goneIf(mTags.size == mMaxTagSize) } } - gameLabelFl.visibility = View.VISIBLE + mBinding.gameLabelFl.visibility = View.VISIBLE mTags.add(tag) - gameLabelFl.addView(labelView) - addGameLabeTv.goneIf(mTags.size == mMaxTagSize) + mBinding.gameLabelFl.addView(labelView) + mBinding.addGameLabeTv.goneIf(mTags.size == mMaxTagSize) } else { ToastUtils.showToast("标签已存在") } diff --git a/app/src/main/java/com/gh/gamecenter/gamecollection/square/GameCollectionSquareFragment.kt b/app/src/main/java/com/gh/gamecenter/gamecollection/square/GameCollectionSquareFragment.kt index 6ed0452a8d..c731a5df6f 100644 --- a/app/src/main/java/com/gh/gamecenter/gamecollection/square/GameCollectionSquareFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/gamecollection/square/GameCollectionSquareFragment.kt @@ -12,6 +12,7 @@ import android.widget.RelativeLayout import android.widget.TextView import androidx.core.view.ViewCompat import androidx.recyclerview.widget.RecyclerView +import com.gh.common.constant.Constants import com.gh.common.exposure.ExposureListener import com.gh.common.exposure.ExposureSource import com.gh.common.util.* @@ -30,7 +31,6 @@ import com.gh.gamecenter.gamecollection.publish.GameCollectionEditActivity import com.gh.gamecenter.gamecollection.tag.GameCollectionTagSelectActivity import com.gh.gamecenter.gamecollection.tag.GameCollectionTagSelectFragment import com.gh.gamecenter.personal.PersonalFragment -import com.gh.gamecenter.qa.CommunityFragment import com.google.android.material.appbar.AppBarLayout import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode @@ -218,9 +218,9 @@ class GameCollectionSquareFragment : LazyListFragment CommunityFragment.FOLLOW_HINT_TRIGGER_HEIGHT) { + if (dy > Constants.FOLLOW_HINT_TRIGGER_HEIGHT) { setFabStatus(mDefaultBinding.fab, View.GONE) - } else if (dy < -CommunityFragment.FOLLOW_HINT_TRIGGER_HEIGHT) { + } else if (dy < -Constants.FOLLOW_HINT_TRIGGER_HEIGHT) { setFabStatus(mDefaultBinding.fab, View.VISIBLE) } } @@ -257,9 +257,9 @@ class GameCollectionSquareFragment : LazyListFragment CommunityFragment.FOLLOW_HINT_TRIGGER_HEIGHT) { + if (dy > Constants.FOLLOW_HINT_TRIGGER_HEIGHT) { setFabStatus(fabView, View.GONE) - } else if (dy < -CommunityFragment.FOLLOW_HINT_TRIGGER_HEIGHT) { + } else if (dy < -Constants.FOLLOW_HINT_TRIGGER_HEIGHT) { setFabStatus(fabView, View.VISIBLE) } } diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/InstalledGameAdapter.kt b/app/src/main/java/com/gh/gamecenter/personalhome/InstalledGameAdapter.kt index a6c29f0491..7e3ee9b506 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/InstalledGameAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/InstalledGameAdapter.kt @@ -3,12 +3,12 @@ package com.gh.gamecenter.personalhome import android.content.Context import android.view.View import android.view.ViewGroup +import android.widget.TextView import androidx.recyclerview.widget.RecyclerView -import com.gh.common.util.ImageUtils +import com.gh.common.view.GameIconView import com.gh.gamecenter.R import com.gh.gamecenter.entity.GameInstall import com.lightgame.adapter.BaseRecyclerAdapter -import kotlinx.android.synthetic.main.dialog_select_game_item.view.* class InstalledGameAdapter(mContext: Context, val games: ArrayList) : BaseRecyclerAdapter(mContext) { @@ -22,8 +22,8 @@ class InstalledGameAdapter(mContext: Context, val games: ArrayList) override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { val gameInstall = games[position] holder.itemView.apply { - game_icon.displayGameIcon(gameInstall.icon, gameInstall.iconSubScript) - game_name.text = gameInstall.name + findViewById(R.id.game_icon).displayGameIcon(gameInstall.icon, gameInstall.iconSubScript) + findViewById(R.id.game_name).text = gameInstall.name } } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/home/UserVideoHistoryFragment.kt b/app/src/main/java/com/gh/gamecenter/personalhome/home/UserVideoHistoryFragment.kt index 36588cf620..76c2391e92 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/home/UserVideoHistoryFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/home/UserVideoHistoryFragment.kt @@ -1,116 +1,116 @@ -package com.gh.gamecenter.personalhome.home - -import android.os.Bundle -import android.view.View -import androidx.core.content.ContextCompat -import androidx.core.os.bundleOf -import androidx.recyclerview.widget.GridLayoutManager -import androidx.recyclerview.widget.RecyclerView -import com.gh.common.util.dip2px -import com.gh.common.util.viewModelProvider -import com.gh.common.view.FixGridLayoutManager -import com.gh.common.view.GridSpacingItemDecoration -import com.gh.gamecenter.R -import com.gh.gamecenter.baselist.ListAdapter -import com.gh.gamecenter.baselist.ListFragment -import com.gh.gamecenter.entity.PersonalEntity -import com.gh.gamecenter.entity.PersonalHistoryEntity -import com.halo.assistant.HaloApp -import kotlinx.android.synthetic.main.fragment_user_history.* - -class UserVideoHistoryFragment : ListFragment() { - - private var mCount = PersonalEntity.Count() - private var mUserId: String = "" - - private var mAdapter: UserVideoHistoryAdapter? = null - private lateinit var mViewModel: UserVideoHistoryViewModel - - override fun getLayoutId(): Int { - return R.layout.fragment_user_history - } - - override fun onCreate(savedInstanceState: Bundle?) { - arguments?.apply { - mUserId = getString(USER_ID, "") - mCount = getParcelable(COUNT) ?: PersonalEntity.Count() - } - super.onCreate(savedInstanceState) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - - filterHint.text = "全部视频(${mCount.video})" - filterContainer.visibility = View.INVISIBLE - - val gridLayoutManager = FixGridLayoutManager(requireContext(), 2) - gridLayoutManager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() { - override fun getSpanSize(position: Int): Int { - return if (position == mAdapter!!.itemCount - 1) { - 2 - } else { - 1 - } - } - } - mListRv.layoutManager = gridLayoutManager - mListRv.setPadding(8F.dip2px(), 0, 8F.dip2px(), 0) - filter.setPadding(8F.dip2px(), 0, 8F.dip2px(), 0) - filterContainer.setPadding(0, 10F.dip2px(), 0, 10F.dip2px()) - } - - override fun getItemDecoration(): RecyclerView.ItemDecoration? { - return GridSpacingItemDecoration(2, 8F.dip2px(), false) - } - - override fun provideListViewModel(): UserVideoHistoryViewModel { - mViewModel = viewModelProvider(UserVideoHistoryViewModel.Factory(HaloApp.getInstance().application, mUserId)) - - return mViewModel - } - - override fun provideListAdapter(): ListAdapter<*> { - if (mAdapter == null) { - mAdapter = UserVideoHistoryAdapter(requireContext(), mListViewModel) - } - return mAdapter!! - } - - override fun onLoadEmpty() { - super.onLoadEmpty() - - // RecyclerView 被隐藏的话会导致不能 AppBar 不能滑动 - mListRv.visibility = View.VISIBLE - mReuseNoData?.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.background)) - } - - override fun onLoadError() { - super.onLoadError() - - mListRv.visibility = View.VISIBLE - mReuseNoConn?.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.background)) - } - - override fun onLoadDone() { - super.onLoadDone() - - filter.visibility = View.VISIBLE - } - - companion object { - - const val USER_ID = "user_id" - const val COUNT = "count" - - fun getInstance(userId: String, count: PersonalEntity.Count): UserVideoHistoryFragment { - return UserVideoHistoryFragment().apply { - with(bundleOf( - UserHistoryFragment.USER_ID to userId, - UserHistoryFragment.COUNT to count - )) - } - } - } - -} \ No newline at end of file +//package com.gh.gamecenter.personalhome.home +// +//import android.os.Bundle +//import android.view.View +//import androidx.core.content.ContextCompat +//import androidx.core.os.bundleOf +//import androidx.recyclerview.widget.GridLayoutManager +//import androidx.recyclerview.widget.RecyclerView +//import com.gh.common.util.dip2px +//import com.gh.common.util.viewModelProvider +//import com.gh.common.view.FixGridLayoutManager +//import com.gh.common.view.GridSpacingItemDecoration +//import com.gh.gamecenter.R +//import com.gh.gamecenter.baselist.ListAdapter +//import com.gh.gamecenter.baselist.ListFragment +//import com.gh.gamecenter.entity.PersonalEntity +//import com.gh.gamecenter.entity.PersonalHistoryEntity +//import com.halo.assistant.HaloApp +//import kotlinx.android.synthetic.main.fragment_user_history.* +// +//class UserVideoHistoryFragment : ListFragment() { +// +// private var mCount = PersonalEntity.Count() +// private var mUserId: String = "" +// +// private var mAdapter: UserVideoHistoryAdapter? = null +// private lateinit var mViewModel: UserVideoHistoryViewModel +// +// override fun getLayoutId(): Int { +// return R.layout.fragment_user_history +// } +// +// override fun onCreate(savedInstanceState: Bundle?) { +// arguments?.apply { +// mUserId = getString(USER_ID, "") +// mCount = getParcelable(COUNT) ?: PersonalEntity.Count() +// } +// super.onCreate(savedInstanceState) +// } +// +// override fun onViewCreated(view: View, savedInstanceState: Bundle?) { +// super.onViewCreated(view, savedInstanceState) +// +// filterHint.text = "全部视频(${mCount.video})" +// filterContainer.visibility = View.INVISIBLE +// +// val gridLayoutManager = FixGridLayoutManager(requireContext(), 2) +// gridLayoutManager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() { +// override fun getSpanSize(position: Int): Int { +// return if (position == mAdapter!!.itemCount - 1) { +// 2 +// } else { +// 1 +// } +// } +// } +// mListRv.layoutManager = gridLayoutManager +// mListRv.setPadding(8F.dip2px(), 0, 8F.dip2px(), 0) +// filter.setPadding(8F.dip2px(), 0, 8F.dip2px(), 0) +// filterContainer.setPadding(0, 10F.dip2px(), 0, 10F.dip2px()) +// } +// +// override fun getItemDecoration(): RecyclerView.ItemDecoration? { +// return GridSpacingItemDecoration(2, 8F.dip2px(), false) +// } +// +// override fun provideListViewModel(): UserVideoHistoryViewModel { +// mViewModel = viewModelProvider(UserVideoHistoryViewModel.Factory(HaloApp.getInstance().application, mUserId)) +// +// return mViewModel +// } +// +// override fun provideListAdapter(): ListAdapter<*> { +// if (mAdapter == null) { +// mAdapter = UserVideoHistoryAdapter(requireContext(), mListViewModel) +// } +// return mAdapter!! +// } +// +// override fun onLoadEmpty() { +// super.onLoadEmpty() +// +// // RecyclerView 被隐藏的话会导致不能 AppBar 不能滑动 +// mListRv.visibility = View.VISIBLE +// mReuseNoData?.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.background)) +// } +// +// override fun onLoadError() { +// super.onLoadError() +// +// mListRv.visibility = View.VISIBLE +// mReuseNoConn?.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.background)) +// } +// +// override fun onLoadDone() { +// super.onLoadDone() +// +// filter.visibility = View.VISIBLE +// } +// +// companion object { +// +// const val USER_ID = "user_id" +// const val COUNT = "count" +// +// fun getInstance(userId: String, count: PersonalEntity.Count): UserVideoHistoryFragment { +// return UserVideoHistoryFragment().apply { +// with(bundleOf( +// UserHistoryFragment.USER_ID to userId, +// UserHistoryFragment.COUNT to count +// )) +// } +// } +// } +// +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/home/game/UserCommentHistoryAdapter.kt b/app/src/main/java/com/gh/gamecenter/personalhome/home/game/UserCommentHistoryAdapter.kt index 4c381c65f7..64ebdc964f 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/home/game/UserCommentHistoryAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/home/game/UserCommentHistoryAdapter.kt @@ -17,13 +17,14 @@ import com.gh.gamecenter.databinding.ItemUserCommentHistoryBinding import com.gh.gamecenter.gamedetail.rating.RatingReplyActivity import com.gh.gamecenter.gamedetail.rating.edit.RatingEditActivity import com.gh.gamecenter.personalhome.rating.MyRating -import kotlinx.android.synthetic.main.item_my_game_rating.view.* import java.util.regex.Pattern -class UserCommentHistoryAdapter(context: Context, - private val mEntrance: String, - private val mFragment: Fragment, - private val mListViewModel: UserCommentHistoryViewModel) : ListAdapter(context) { +class UserCommentHistoryAdapter( + context: Context, + private val mEntrance: String, + private val mFragment: Fragment, + private val mListViewModel: UserCommentHistoryViewModel +) : ListAdapter(context) { private var mExpandSparseBooleanArray = SparseBooleanArray() @@ -80,7 +81,7 @@ class UserCommentHistoryAdapter(context: Context, } else { holder.binding.tvComment.setTextWithHighlightedTextWrappedInsideWrapper(text = rating.content, copyClickedText = true) } - holder.itemView.tv_comment.setExpandCallback { + holder.binding.tvComment.setExpandCallback { mExpandSparseBooleanArray.put(holder.adapterPosition, true) } diff --git a/app/src/main/java/com/gh/gamecenter/qa/CommunityFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/CommunityFragment.kt index c85a6f0137..312b8c2f6f 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/CommunityFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/CommunityFragment.kt @@ -1,517 +1,517 @@ -package com.gh.gamecenter.qa - -import android.app.Activity -import android.app.Dialog -import android.content.Intent -import android.content.SharedPreferences -import android.os.Bundle -import android.preference.PreferenceManager -import android.text.TextUtils -import android.view.Gravity -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.view.animation.AnimationUtils -import android.widget.FrameLayout -import android.widget.TextView -import androidx.fragment.app.Fragment -import androidx.fragment.app.FragmentStatePagerAdapter -import androidx.lifecycle.Observer -import androidx.lifecycle.ViewModelProviders -import androidx.viewpager.widget.PagerAdapter -import butterknife.OnClick -import com.gh.base.fragment.BaseLazyTabFragment -import com.gh.common.dialog.TrackableDialog -import com.gh.common.util.* -import com.gh.common.view.GameIconView -import com.gh.gamecenter.R -import com.gh.gamecenter.entity.ResultEntity -import com.gh.gamecenter.eventbus.EBReuse -import com.gh.gamecenter.eventbus.EBTypeChange -import com.gh.gamecenter.eventbus.EBUISwitch -import com.gh.gamecenter.fragment.MainWrapperFragment -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.personal.PersonalFragment -import com.gh.gamecenter.qa.all.AskAllFragment -import com.gh.gamecenter.qa.article.edit.ArticleEditActivity -import com.gh.gamecenter.qa.column.AskColumnFragment -import com.gh.gamecenter.qa.column.AskColumnViewModel -import com.gh.gamecenter.qa.follow.AskFollowFragment -import com.gh.gamecenter.qa.questions.edit.QuestionEditActivity -import com.gh.gamecenter.qa.recommends.AskRecommendWrapperFragment -import com.gh.gamecenter.qa.search.AskSearchActivity -import com.gh.gamecenter.qa.select.CommunitiesSelectActivity -import com.gh.gamecenter.qa.select.CommunitiesSelectWrapperFragment -import com.google.android.material.tabs.TabLayout -import com.halo.assistant.HaloApp -import kotterknife.bindView -import org.greenrobot.eventbus.Subscribe -import org.greenrobot.eventbus.ThreadMode - -class CommunityFragment : BaseLazyTabFragment() { - - private val mAskSelectCommunity by bindView(R.id.community_icon) - private val mNoConn by bindView(R.id.reuse_no_connection) - private val mTabBarContainer by bindView(R.id.fragment_tab_container) - private val mLoading by bindView(R.id.reuse_ll_loading) - private val mSelectGameHint by bindView(R.id.community_select_hint) - private val mCommunitiesSelectContainer by bindView(R.id.communities_select_container) - private val mEditButton by bindView(R.id.community_edit) - private val mSearchInput by bindView(R.id.actionbar_search_input) - - private lateinit var mFollowHint: View - - private var mAskFollowFragment: AskFollowFragment? = null - private var mRecommendsFragment: AskRecommendWrapperFragment? = null - private var mColumnFragment: AskColumnFragment? = null - private var mAskAllFragment: AskAllFragment? = null - - private lateinit var mColumnViewModel: AskColumnViewModel - private lateinit var mViewModel: CommunityViewModel - - private lateinit var sp: SharedPreferences - - private var mHasClickedSelectGame: Boolean = false - private var mCommunitiesSelectFragment: CommunitiesSelectWrapperFragment? = null - - override fun initFragmentList(fragments: MutableList) { - //不要做任何操作 - } - - override fun initTabTitleList(tabTitleList: MutableList) { - tabTitleList.add(TAB_TITLE_FOLLOW) - tabTitleList.add(TAB_TITLE_RECOMMEND) - tabTitleList.add(TAB_TITLE_COLUMN) - tabTitleList.add(TAB_TITLE_ALL) - } - - override fun provideTabView(position: Int, tabTitle: String?): View? { - if (position == INDEX_FOLLOW) { - val container = LayoutInflater.from(context).inflate(R.layout.community_follow_tab_item, null) - container.findViewById(R.id.tab_title).text = tabTitle - mFollowHint = container.findViewById(R.id.hint) - return container - } - return super.provideTabView(position, tabTitle) - } - - override fun getLayoutId(): Int { - return R.layout.fragment_community - } - - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - if (requestCode == COMMUNITIES_SELECT_REQUEST && resultCode == Activity.RESULT_OK) { - mViewModel.checkCommunity(ResultEntity(requestCode, resultCode, data)) - mColumnViewModel.retry() - } - } - - override fun onFragmentFirstVisible() { - super.onFragmentFirstVisible() - - if (UserManager.getInstance().isLoggedIn) { - mViewModel.checkUnreadFollowTimeline() - } - - mViewModel.unreadCommunity.observe(this, Observer { community -> - community?.let { - if (it) { - mFollowHint.visibility = View.VISIBLE - } else { - mFollowHint.visibility = View.GONE - } - } - }) - mViewModel.communityStatus.observe(this, Observer { status -> - status?.let { - val channel = HaloApp.getInstance().channel - // MARK:只要是测试社区都忽略隐藏判断 - if (TextUtils.isEmpty(UserManager.getInstance().community.id) - || (!status.isActive && !channel.contains("TEST"))) { - showCommunitySelectFragment() - } else { - mAskSelectCommunity.displayGameIcon(UserManager.getInstance().community.icon, UserManager.getInstance().community.iconSubscript) - showAvailableInfo() - mViewPager.currentItem = INDEX_RECOMMEND - - if (mCommunitiesSelectFragment != null) hideCommunitySelectFragmentAndShowCommunityWithHint() - - val result = status.data - if (result != null) { - val fragments = childFragmentManager.fragments - for (fragment in fragments) { - fragment.onActivityResult(result.requestCode, result.resultCode, result.data) - } - } - } - } - }) - mViewModel.defaultSearchName.observe(this, Observer { - mSearchInput.text = it - }) - mColumnViewModel.tagGroupsObservable.observe(this, Observer { - // 如果专栏数据为空,则隐藏专栏模块 - if (it.isNullOrEmpty() && mTabTitleList.size == 4) { - mColumnFragment?.let { fragment -> - val fragmentView = getFragmentView(fragment) - fragmentView.tag = NEED_DESTROY_FRAGMENT_TAG - mViewPager.adapter?.destroyItem(fragmentView, INDEX_COLUMN, fragment) - } - mAskAllFragment?.let { fragment -> - val fragmentView = getFragmentView(fragment) - fragmentView.tag = NEED_DESTROY_FRAGMENT_TAG - mViewPager.adapter?.destroyItem(fragmentView, INDEX_ALL, fragment) - } - - // remove - mTabTitleList.remove(TAB_TITLE_COLUMN) - mViewPager.adapter!!.notifyDataSetChanged() - } else if (!it.isNullOrEmpty() && mTabTitleList.size == 3) { - mAskAllFragment?.let { fragment -> - val fragmentView = getFragmentView(fragment) - fragmentView.tag = NEED_DESTROY_FRAGMENT_TAG - mViewPager.adapter?.destroyItem(fragmentView, INDEX_COLUMN, fragment) - } - - // add - mTabTitleList.add(INDEX_COLUMN, TAB_TITLE_COLUMN) - mViewPager.adapter!!.notifyDataSetChanged() - } - - mBaseHandler.postDelayed({ - // reset tab indicator offset - mTabIndicatorView.generatePath(mViewPager.currentItem, 0F) - }, 10) - }) - - mTabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { - - override fun onTabSelected(tab: TabLayout.Tab) { - if (tab.position == INDEX_FOLLOW && mAskFollowFragment?.isVisible == true) { - // 关注 tab 存在未读红点,刷新一下 - val isRefreshing = mAskFollowFragment?.load() ?: false - if (mFollowHint.visibility == View.VISIBLE && !isRefreshing) { - mAskFollowFragment?.onRefresh() - } - } - - if (tab.text == TAB_TITLE_ALL) mViewPager.currentItem = INDEX_ALL - MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, tab.text.toString() + "Tab") - } - - override fun onTabUnselected(tab: TabLayout.Tab) {} - - override fun onTabReselected(tab: TabLayout.Tab) { - when (tab.text) { - TAB_TITLE_FOLLOW -> mAskFollowFragment?.scrollToTop(true) - TAB_TITLE_RECOMMEND -> mRecommendsFragment?.scrollToTop(true) - TAB_TITLE_COLUMN -> mColumnFragment?.scrollToTop(true) - TAB_TITLE_ALL -> mAskAllFragment?.scrollToTop(true) - } - } - }) - } - - private fun getFragmentView(fragment: Fragment): ViewGroup { - val view = fragment.view - if (view is ViewGroup) { - return view - } - return FrameLayout(requireContext()) - } - - override fun providePagerAdapter(): PagerAdapter? { - return object : FragmentStatePagerAdapter(childFragmentManager) { - override fun getItem(position: Int): Fragment { - return when (mTabTitleList[position]) { - TAB_TITLE_FOLLOW -> { - mAskFollowFragment = AskFollowFragment() - mAskFollowFragment!! - } - TAB_TITLE_RECOMMEND -> { - mRecommendsFragment = AskRecommendWrapperFragment() - mRecommendsFragment!! - } - TAB_TITLE_ALL -> { - mAskAllFragment = AskAllFragment() - mAskAllFragment!! - } - else -> { - mColumnFragment = AskColumnFragment() - mColumnFragment!! - } - } - } - - override fun getCount(): Int { - return mTabTitleList.size - } - - override fun getItemPosition(any: Any): Int { - return PagerAdapter.POSITION_NONE - } - - override fun getPageTitle(position: Int): CharSequence? { - return mTabTitleList[position] - } - - override fun destroyItem(container: ViewGroup, position: Int, any: Any) { - if (container.tag == NEED_DESTROY_FRAGMENT_TAG) { - tryCatchInRelease { - super.destroyItem(container, position, any) - } - } - } - } - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - sp = PreferenceManager.getDefaultSharedPreferences(context) - mHasClickedSelectGame = sp.getBoolean(SP_KEY_CLICKED_SELECT_GAME, false) - - val factory = AskColumnViewModel.Factory(HaloApp.getInstance().application) - mColumnViewModel = ViewModelProviders.of(this, factory).get(AskColumnViewModel::class.java) - - mViewModel = ViewModelProviders.of(this).get(CommunityViewModel::class.java) - } - - override fun onResume() { - super.onResume() - if (!TextUtils.isEmpty(UserManager.getInstance().community.id)) { - mSelectGameHint.visibility = if (!mHasClickedSelectGame) View.VISIBLE else View.GONE - } - DisplayUtils.setLightStatusBar(requireActivity(), true) - } - - override fun onPageSelected(position: Int) { - mEditButton.visibility = if (mTabTitleList[position] == TAB_TITLE_COLUMN) { - View.GONE - } else { - View.VISIBLE - } - } - - // 社区没有被隐藏,正常显示社区信息 - private fun showAvailableInfo() { - mTabBarContainer.visibility = View.VISIBLE - mViewPager.visibility = View.VISIBLE - mCommunitiesSelectContainer.visibility = View.GONE - mLoading.visibility = View.GONE - } - - @OnClick(R.id.community_icon, - R.id.community_search_container, - R.id.reuse_no_connection, - R.id.community_edit) - fun onViewClicked(view: View) { - when (view.id) { - R.id.community_icon -> { - if (!mHasClickedSelectGame) { - mHasClickedSelectGame = true - sp.edit().putBoolean(SP_KEY_CLICKED_SELECT_GAME, mHasClickedSelectGame).apply() - } - - MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, "选择游戏") - startActivityForResult(CommunitiesSelectActivity.getIntent(context), COMMUNITIES_SELECT_REQUEST) - } - R.id.community_search_container -> { - MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, "搜索") - startActivity(AskSearchActivity.getIntent(context, "(首页-问答)")) - } - R.id.reuse_no_connection -> { - mNoConn.visibility = View.GONE - mLoading.visibility = View.VISIBLE - } - R.id.community_edit -> { - val positionType = when { - mViewPager.currentItem == INDEX_FOLLOW -> "关注-发布" - mViewPager.currentItem == INDEX_RECOMMEND -> "推荐-发布" - else -> "推荐-发布" - } - MtaHelper.onEvent("问答页面", "问答页面", positionType) - MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, positionType) - - showCommunityEditWindow() - } - } - } - - private fun setPutQuestionButtonStatus(visibility: Int) { - if (mEditButton.visibility == visibility) return - if (visibility == View.GONE) { - val animation = AnimationUtils.loadAnimation(context, R.anim.button_anim_exit) - mEditButton.startAnimation(animation) - } else { - val animation = AnimationUtils.loadAnimation(context, R.anim.button_anim_enter) - mEditButton.startAnimation(animation) - } - mEditButton.visibility = visibility - } - - @Subscribe(threadMode = ThreadMode.MAIN) - fun onEventMainThread(reuse: EBReuse) { - when (reuse.type) { - EB_SELECT_KEY -> { - onActivityResult(COMMUNITIES_SELECT_REQUEST, Activity.RESULT_OK, Intent()) - mSelectGameHint.visibility = if (!mHasClickedSelectGame) View.VISIBLE else View.GONE - } - - EB_RETRY_PAGE -> onActivityResult(COMMUNITIES_SELECT_REQUEST, Activity.RESULT_OK, Intent()) - - EB_HIDE_FOLLOW_HINT -> { - if (mFollowHint.visibility != View.GONE) { - mViewModel.checkUnreadFollowTimeline() - } - } - - PersonalFragment.LOGIN_TAG -> { - mAskFollowFragment?.onRefresh() - } - - PersonalFragment.LOGOUT_TAG -> { - mAskFollowFragment?.onRefresh() - mFollowHint.visibility = View.GONE - } - } - } - - @Subscribe(threadMode = ThreadMode.MAIN) - fun onEventMainThread(status: EBTypeChange) { - if (status.position == mViewPager.currentItem) { - if (status.type == EB_SHOW_QUESTION_BUTTON) { - setPutQuestionButtonStatus(View.VISIBLE) - } else if (status.type == EB_HIDE_QUESTION_BUTTON) { - setPutQuestionButtonStatus(View.GONE) - } - } - } - - @Subscribe(threadMode = ThreadMode.MAIN) - fun onEventMainThread(busNine: EBUISwitch) { - if (MainWrapperFragment.EB_MAIN_SCROLL_TOP == busNine.from - && MainWrapperFragment.INDEX_BBS == busNine.position) { - when (mTabLayout.getTabAt(mViewPager.currentItem)?.text) { - TAB_TITLE_FOLLOW -> mAskFollowFragment?.scrollToTop(false) - TAB_TITLE_RECOMMEND -> mRecommendsFragment?.scrollToTop(false) - TAB_TITLE_COLUMN -> mColumnFragment?.scrollToTop(false) - TAB_TITLE_ALL -> mAskAllFragment?.scrollToTop(false) - } - } - } - - private fun showCommunitySelectFragment() { - mEditButton.visibility = View.GONE - mTabBarContainer.visibility = View.GONE - mLoading.visibility = View.GONE - mCommunitiesSelectContainer.visibility = View.VISIBLE - mCommunitiesSelectFragment = CommunitiesSelectWrapperFragment() - childFragmentManager.beginTransaction().replace(R.id.communities_select_layout, mCommunitiesSelectFragment!!).commitNowAllowingStateLoss() - } - - private fun hideCommunitySelectFragmentAndShowCommunityWithHint() { - childFragmentManager.beginTransaction().remove(mCommunitiesSelectFragment!!).commitNowAllowingStateLoss() - showHintDialog(true) - mCommunitiesSelectFragment = null - } - - private fun showHintDialog(firstDialog: Boolean) { - val isShowCommunityHint = sp.getBoolean("isShowCommunityHint", true) - if (!isShowCommunityHint) { - return - } - - if (!firstDialog) { - sp.edit().putBoolean("isShowCommunityHint", false).apply() - } - - val dialog = Dialog(requireContext(), R.style.DialogWindowTransparent) - dialog.setCancelable(false) - val window = dialog.window - if (firstDialog) { - window?.setGravity(Gravity.TOP) - } else { - window?.setGravity(Gravity.BOTTOM) - } - dialog.show() - val inflater = LayoutInflater.from(context) - val viewDialog = if (firstDialog) { - inflater.inflate(R.layout.dialog_communities_select_hint, null) - } else { - inflater.inflate(R.layout.dialog_communities_edit_hint, null) - } - val cancel = viewDialog.findViewById(R.id.communities_hint_cancel) - cancel.setOnClickListener { - dialog.dismiss() - if (firstDialog) showHintDialog(false) - } - val params = ViewGroup.LayoutParams(resources.displayMetrics.widthPixels, ViewGroup.LayoutParams.WRAP_CONTENT) - dialog.setContentView(viewDialog, params) - } - - private fun showCommunityEditWindow() { - val contentView = LayoutInflater.from(context).inflate(R.layout.community_edit_window, null) - val params = ViewGroup.LayoutParams(resources.displayMetrics.widthPixels, ViewGroup.LayoutParams.WRAP_CONTENT) - val dialog = TrackableDialog( - requireContext(), - R.style.DialogWindowTransparent, - "问答页面", - UserManager.getInstance().community.name, - null, - "发布-空白", - "发布-返回", - false) - val window = dialog.window - window?.setGravity(Gravity.BOTTOM) - window?.setWindowAnimations(R.style.community_publication_animation) - dialog.setContentView(contentView, params) - dialog.show() - contentView.findViewById(R.id.community_edit_article).setOnClickListener { - context?.ifLogin("(首页-问答)", action = { - checkStoragePermissionBeforeAction { - MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, "发布-发文章") - startActivity(ArticleEditActivity.getIntent(requireContext(), UserManager.getInstance().community)) - dialog.dismiss() - } - }) - } - contentView.findViewById(R.id.community_edit_question).setOnClickListener { - context?.ifLogin("(首页-问答)", action = { - checkStoragePermissionBeforeAction { - MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, "发布-提问题") - startActivity(QuestionEditActivity.getIntent(requireContext())) - dialog.dismiss() - } - }) - } - contentView.findViewById(R.id.community_edit_close).setOnClickListener { - MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, "发布-关闭") - dialog.dismiss() - } - } - - companion object { - const val INDEX_FOLLOW = 0 - const val INDEX_RECOMMEND = 1 - const val INDEX_COLUMN = 2 - const val INDEX_ALL = 3 // communities - const val COMMUNITIES_SELECT_REQUEST = 103 - - const val FOLLOW_HINT_TRIGGER_HEIGHT = 10 - - const val EB_SELECT_KEY = "EB_SELECT_KEY" - const val EB_RETRY_PAGE = "EB_RETRY_PAGE" - const val EB_HIDE_FOLLOW_HINT = "EB_HIDE_FOLLOW_HINT" - const val SP_KEY_CLICKED_SELECT_GAME = "has_clicked_select_game" - const val EB_SHOW_QUESTION_BUTTON = "EB_SHOW_QUESTION_BUTTON" - const val EB_HIDE_QUESTION_BUTTON = "EB_HIDE_QUESTION_BUTTON" - - const val TAB_TITLE_FOLLOW = "关注" - const val TAB_TITLE_RECOMMEND = "推荐" - const val TAB_TITLE_COLUMN = "专栏" - const val TAB_TITLE_ALL = "全部" - - const val NEED_DESTROY_FRAGMENT_TAG = "READY_DESTROY_FRAGMENT_TAG" - } - -} \ No newline at end of file +//package com.gh.gamecenter.qa +// +//import android.app.Activity +//import android.app.Dialog +//import android.content.Intent +//import android.content.SharedPreferences +//import android.os.Bundle +//import android.preference.PreferenceManager +//import android.text.TextUtils +//import android.view.Gravity +//import android.view.LayoutInflater +//import android.view.View +//import android.view.ViewGroup +//import android.view.animation.AnimationUtils +//import android.widget.FrameLayout +//import android.widget.TextView +//import androidx.fragment.app.Fragment +//import androidx.fragment.app.FragmentStatePagerAdapter +//import androidx.lifecycle.Observer +//import androidx.lifecycle.ViewModelProviders +//import androidx.viewpager.widget.PagerAdapter +//import butterknife.OnClick +//import com.gh.base.fragment.BaseLazyTabFragment +//import com.gh.common.dialog.TrackableDialog +//import com.gh.common.util.* +//import com.gh.common.view.GameIconView +//import com.gh.gamecenter.R +//import com.gh.gamecenter.entity.ResultEntity +//import com.gh.gamecenter.eventbus.EBReuse +//import com.gh.gamecenter.eventbus.EBTypeChange +//import com.gh.gamecenter.eventbus.EBUISwitch +//import com.gh.gamecenter.fragment.MainWrapperFragment +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.personal.PersonalFragment +//import com.gh.gamecenter.qa.all.AskAllFragment +//import com.gh.gamecenter.qa.article.edit.ArticleEditActivity +//import com.gh.gamecenter.qa.column.AskColumnFragment +//import com.gh.gamecenter.qa.column.AskColumnViewModel +//import com.gh.gamecenter.qa.follow.AskFollowFragment +//import com.gh.gamecenter.qa.questions.edit.QuestionEditActivity +//import com.gh.gamecenter.qa.recommends.AskRecommendWrapperFragment +//import com.gh.gamecenter.qa.search.AskSearchActivity +//import com.gh.gamecenter.qa.select.CommunitiesSelectActivity +//import com.gh.gamecenter.qa.select.CommunitiesSelectWrapperFragment +//import com.google.android.material.tabs.TabLayout +//import com.halo.assistant.HaloApp +//import kotterknife.bindView +//import org.greenrobot.eventbus.Subscribe +//import org.greenrobot.eventbus.ThreadMode +// +//class CommunityFragment : BaseLazyTabFragment() { +// +// private val mAskSelectCommunity by bindView(R.id.community_icon) +// private val mNoConn by bindView(R.id.reuse_no_connection) +// private val mTabBarContainer by bindView(R.id.fragment_tab_container) +// private val mLoading by bindView(R.id.reuse_ll_loading) +// private val mSelectGameHint by bindView(R.id.community_select_hint) +// private val mCommunitiesSelectContainer by bindView(R.id.communities_select_container) +// private val mEditButton by bindView(R.id.community_edit) +// private val mSearchInput by bindView(R.id.actionbar_search_input) +// +// private lateinit var mFollowHint: View +// +// private var mAskFollowFragment: AskFollowFragment? = null +// private var mRecommendsFragment: AskRecommendWrapperFragment? = null +// private var mColumnFragment: AskColumnFragment? = null +// private var mAskAllFragment: AskAllFragment? = null +// +// private lateinit var mColumnViewModel: AskColumnViewModel +// private lateinit var mViewModel: CommunityViewModel +// +// private lateinit var sp: SharedPreferences +// +// private var mHasClickedSelectGame: Boolean = false +// private var mCommunitiesSelectFragment: CommunitiesSelectWrapperFragment? = null +// +// override fun initFragmentList(fragments: MutableList) { +// //不要做任何操作 +// } +// +// override fun initTabTitleList(tabTitleList: MutableList) { +// tabTitleList.add(TAB_TITLE_FOLLOW) +// tabTitleList.add(TAB_TITLE_RECOMMEND) +// tabTitleList.add(TAB_TITLE_COLUMN) +// tabTitleList.add(TAB_TITLE_ALL) +// } +// +// override fun provideTabView(position: Int, tabTitle: String?): View? { +// if (position == INDEX_FOLLOW) { +// val container = LayoutInflater.from(context).inflate(R.layout.community_follow_tab_item, null) +// container.findViewById(R.id.tab_title).text = tabTitle +// mFollowHint = container.findViewById(R.id.hint) +// return container +// } +// return super.provideTabView(position, tabTitle) +// } +// +// override fun getLayoutId(): Int { +// return R.layout.fragment_community +// } +// +// override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { +// if (requestCode == COMMUNITIES_SELECT_REQUEST && resultCode == Activity.RESULT_OK) { +// mViewModel.checkCommunity(ResultEntity(requestCode, resultCode, data)) +// mColumnViewModel.retry() +// } +// } +// +// override fun onFragmentFirstVisible() { +// super.onFragmentFirstVisible() +// +// if (UserManager.getInstance().isLoggedIn) { +// mViewModel.checkUnreadFollowTimeline() +// } +// +// mViewModel.unreadCommunity.observe(this, Observer { community -> +// community?.let { +// if (it) { +// mFollowHint.visibility = View.VISIBLE +// } else { +// mFollowHint.visibility = View.GONE +// } +// } +// }) +// mViewModel.communityStatus.observe(this, Observer { status -> +// status?.let { +// val channel = HaloApp.getInstance().channel +// // MARK:只要是测试社区都忽略隐藏判断 +// if (TextUtils.isEmpty(UserManager.getInstance().community.id) +// || (!status.isActive && !channel.contains("TEST"))) { +// showCommunitySelectFragment() +// } else { +// mAskSelectCommunity.displayGameIcon(UserManager.getInstance().community.icon, UserManager.getInstance().community.iconSubscript) +// showAvailableInfo() +// mViewPager.currentItem = INDEX_RECOMMEND +// +// if (mCommunitiesSelectFragment != null) hideCommunitySelectFragmentAndShowCommunityWithHint() +// +// val result = status.data +// if (result != null) { +// val fragments = childFragmentManager.fragments +// for (fragment in fragments) { +// fragment.onActivityResult(result.requestCode, result.resultCode, result.data) +// } +// } +// } +// } +// }) +// mViewModel.defaultSearchName.observe(this, Observer { +// mSearchInput.text = it +// }) +// mColumnViewModel.tagGroupsObservable.observe(this, Observer { +// // 如果专栏数据为空,则隐藏专栏模块 +// if (it.isNullOrEmpty() && mTabTitleList.size == 4) { +// mColumnFragment?.let { fragment -> +// val fragmentView = getFragmentView(fragment) +// fragmentView.tag = NEED_DESTROY_FRAGMENT_TAG +// mViewPager.adapter?.destroyItem(fragmentView, INDEX_COLUMN, fragment) +// } +// mAskAllFragment?.let { fragment -> +// val fragmentView = getFragmentView(fragment) +// fragmentView.tag = NEED_DESTROY_FRAGMENT_TAG +// mViewPager.adapter?.destroyItem(fragmentView, INDEX_ALL, fragment) +// } +// +// // remove +// mTabTitleList.remove(TAB_TITLE_COLUMN) +// mViewPager.adapter!!.notifyDataSetChanged() +// } else if (!it.isNullOrEmpty() && mTabTitleList.size == 3) { +// mAskAllFragment?.let { fragment -> +// val fragmentView = getFragmentView(fragment) +// fragmentView.tag = NEED_DESTROY_FRAGMENT_TAG +// mViewPager.adapter?.destroyItem(fragmentView, INDEX_COLUMN, fragment) +// } +// +// // add +// mTabTitleList.add(INDEX_COLUMN, TAB_TITLE_COLUMN) +// mViewPager.adapter!!.notifyDataSetChanged() +// } +// +// mBaseHandler.postDelayed({ +// // reset tab indicator offset +// mTabIndicatorView.generatePath(mViewPager.currentItem, 0F) +// }, 10) +// }) +// +// mTabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { +// +// override fun onTabSelected(tab: TabLayout.Tab) { +// if (tab.position == INDEX_FOLLOW && mAskFollowFragment?.isVisible == true) { +// // 关注 tab 存在未读红点,刷新一下 +// val isRefreshing = mAskFollowFragment?.load() ?: false +// if (mFollowHint.visibility == View.VISIBLE && !isRefreshing) { +// mAskFollowFragment?.onRefresh() +// } +// } +// +// if (tab.text == TAB_TITLE_ALL) mViewPager.currentItem = INDEX_ALL +// MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, tab.text.toString() + "Tab") +// } +// +// override fun onTabUnselected(tab: TabLayout.Tab) {} +// +// override fun onTabReselected(tab: TabLayout.Tab) { +// when (tab.text) { +// TAB_TITLE_FOLLOW -> mAskFollowFragment?.scrollToTop(true) +// TAB_TITLE_RECOMMEND -> mRecommendsFragment?.scrollToTop(true) +// TAB_TITLE_COLUMN -> mColumnFragment?.scrollToTop(true) +// TAB_TITLE_ALL -> mAskAllFragment?.scrollToTop(true) +// } +// } +// }) +// } +// +// private fun getFragmentView(fragment: Fragment): ViewGroup { +// val view = fragment.view +// if (view is ViewGroup) { +// return view +// } +// return FrameLayout(requireContext()) +// } +// +// override fun providePagerAdapter(): PagerAdapter? { +// return object : FragmentStatePagerAdapter(childFragmentManager) { +// override fun getItem(position: Int): Fragment { +// return when (mTabTitleList[position]) { +// TAB_TITLE_FOLLOW -> { +// mAskFollowFragment = AskFollowFragment() +// mAskFollowFragment!! +// } +// TAB_TITLE_RECOMMEND -> { +// mRecommendsFragment = AskRecommendWrapperFragment() +// mRecommendsFragment!! +// } +// TAB_TITLE_ALL -> { +// mAskAllFragment = AskAllFragment() +// mAskAllFragment!! +// } +// else -> { +// mColumnFragment = AskColumnFragment() +// mColumnFragment!! +// } +// } +// } +// +// override fun getCount(): Int { +// return mTabTitleList.size +// } +// +// override fun getItemPosition(any: Any): Int { +// return PagerAdapter.POSITION_NONE +// } +// +// override fun getPageTitle(position: Int): CharSequence? { +// return mTabTitleList[position] +// } +// +// override fun destroyItem(container: ViewGroup, position: Int, any: Any) { +// if (container.tag == NEED_DESTROY_FRAGMENT_TAG) { +// tryCatchInRelease { +// super.destroyItem(container, position, any) +// } +// } +// } +// } +// } +// +// override fun onCreate(savedInstanceState: Bundle?) { +// super.onCreate(savedInstanceState) +// sp = PreferenceManager.getDefaultSharedPreferences(context) +// mHasClickedSelectGame = sp.getBoolean(SP_KEY_CLICKED_SELECT_GAME, false) +// +// val factory = AskColumnViewModel.Factory(HaloApp.getInstance().application) +// mColumnViewModel = ViewModelProviders.of(this, factory).get(AskColumnViewModel::class.java) +// +// mViewModel = ViewModelProviders.of(this).get(CommunityViewModel::class.java) +// } +// +// override fun onResume() { +// super.onResume() +// if (!TextUtils.isEmpty(UserManager.getInstance().community.id)) { +// mSelectGameHint.visibility = if (!mHasClickedSelectGame) View.VISIBLE else View.GONE +// } +// DisplayUtils.setLightStatusBar(requireActivity(), true) +// } +// +// override fun onPageSelected(position: Int) { +// mEditButton.visibility = if (mTabTitleList[position] == TAB_TITLE_COLUMN) { +// View.GONE +// } else { +// View.VISIBLE +// } +// } +// +// // 社区没有被隐藏,正常显示社区信息 +// private fun showAvailableInfo() { +// mTabBarContainer.visibility = View.VISIBLE +// mViewPager.visibility = View.VISIBLE +// mCommunitiesSelectContainer.visibility = View.GONE +// mLoading.visibility = View.GONE +// } +// +// @OnClick(R.id.community_icon, +// R.id.community_search_container, +// R.id.reuse_no_connection, +// R.id.community_edit) +// fun onViewClicked(view: View) { +// when (view.id) { +// R.id.community_icon -> { +// if (!mHasClickedSelectGame) { +// mHasClickedSelectGame = true +// sp.edit().putBoolean(SP_KEY_CLICKED_SELECT_GAME, mHasClickedSelectGame).apply() +// } +// +// MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, "选择游戏") +// startActivityForResult(CommunitiesSelectActivity.getIntent(context), COMMUNITIES_SELECT_REQUEST) +// } +// R.id.community_search_container -> { +// MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, "搜索") +// startActivity(AskSearchActivity.getIntent(context, "(首页-问答)")) +// } +// R.id.reuse_no_connection -> { +// mNoConn.visibility = View.GONE +// mLoading.visibility = View.VISIBLE +// } +// R.id.community_edit -> { +// val positionType = when { +// mViewPager.currentItem == INDEX_FOLLOW -> "关注-发布" +// mViewPager.currentItem == INDEX_RECOMMEND -> "推荐-发布" +// else -> "推荐-发布" +// } +// MtaHelper.onEvent("问答页面", "问答页面", positionType) +// MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, positionType) +// +// showCommunityEditWindow() +// } +// } +// } +// +// private fun setPutQuestionButtonStatus(visibility: Int) { +// if (mEditButton.visibility == visibility) return +// if (visibility == View.GONE) { +// val animation = AnimationUtils.loadAnimation(context, R.anim.button_anim_exit) +// mEditButton.startAnimation(animation) +// } else { +// val animation = AnimationUtils.loadAnimation(context, R.anim.button_anim_enter) +// mEditButton.startAnimation(animation) +// } +// mEditButton.visibility = visibility +// } +// +// @Subscribe(threadMode = ThreadMode.MAIN) +// fun onEventMainThread(reuse: EBReuse) { +// when (reuse.type) { +// EB_SELECT_KEY -> { +// onActivityResult(COMMUNITIES_SELECT_REQUEST, Activity.RESULT_OK, Intent()) +// mSelectGameHint.visibility = if (!mHasClickedSelectGame) View.VISIBLE else View.GONE +// } +// +// EB_RETRY_PAGE -> onActivityResult(COMMUNITIES_SELECT_REQUEST, Activity.RESULT_OK, Intent()) +// +// EB_HIDE_FOLLOW_HINT -> { +// if (mFollowHint.visibility != View.GONE) { +// mViewModel.checkUnreadFollowTimeline() +// } +// } +// +// PersonalFragment.LOGIN_TAG -> { +// mAskFollowFragment?.onRefresh() +// } +// +// PersonalFragment.LOGOUT_TAG -> { +// mAskFollowFragment?.onRefresh() +// mFollowHint.visibility = View.GONE +// } +// } +// } +// +// @Subscribe(threadMode = ThreadMode.MAIN) +// fun onEventMainThread(status: EBTypeChange) { +// if (status.position == mViewPager.currentItem) { +// if (status.type == EB_SHOW_QUESTION_BUTTON) { +// setPutQuestionButtonStatus(View.VISIBLE) +// } else if (status.type == EB_HIDE_QUESTION_BUTTON) { +// setPutQuestionButtonStatus(View.GONE) +// } +// } +// } +// +// @Subscribe(threadMode = ThreadMode.MAIN) +// fun onEventMainThread(busNine: EBUISwitch) { +// if (MainWrapperFragment.EB_MAIN_SCROLL_TOP == busNine.from +// && MainWrapperFragment.INDEX_BBS == busNine.position) { +// when (mTabLayout.getTabAt(mViewPager.currentItem)?.text) { +// TAB_TITLE_FOLLOW -> mAskFollowFragment?.scrollToTop(false) +// TAB_TITLE_RECOMMEND -> mRecommendsFragment?.scrollToTop(false) +// TAB_TITLE_COLUMN -> mColumnFragment?.scrollToTop(false) +// TAB_TITLE_ALL -> mAskAllFragment?.scrollToTop(false) +// } +// } +// } +// +// private fun showCommunitySelectFragment() { +// mEditButton.visibility = View.GONE +// mTabBarContainer.visibility = View.GONE +// mLoading.visibility = View.GONE +// mCommunitiesSelectContainer.visibility = View.VISIBLE +// mCommunitiesSelectFragment = CommunitiesSelectWrapperFragment() +// childFragmentManager.beginTransaction().replace(R.id.communities_select_layout, mCommunitiesSelectFragment!!).commitNowAllowingStateLoss() +// } +// +// private fun hideCommunitySelectFragmentAndShowCommunityWithHint() { +// childFragmentManager.beginTransaction().remove(mCommunitiesSelectFragment!!).commitNowAllowingStateLoss() +// showHintDialog(true) +// mCommunitiesSelectFragment = null +// } +// +// private fun showHintDialog(firstDialog: Boolean) { +// val isShowCommunityHint = sp.getBoolean("isShowCommunityHint", true) +// if (!isShowCommunityHint) { +// return +// } +// +// if (!firstDialog) { +// sp.edit().putBoolean("isShowCommunityHint", false).apply() +// } +// +// val dialog = Dialog(requireContext(), R.style.DialogWindowTransparent) +// dialog.setCancelable(false) +// val window = dialog.window +// if (firstDialog) { +// window?.setGravity(Gravity.TOP) +// } else { +// window?.setGravity(Gravity.BOTTOM) +// } +// dialog.show() +// val inflater = LayoutInflater.from(context) +// val viewDialog = if (firstDialog) { +// inflater.inflate(R.layout.dialog_communities_select_hint, null) +// } else { +// inflater.inflate(R.layout.dialog_communities_edit_hint, null) +// } +// val cancel = viewDialog.findViewById(R.id.communities_hint_cancel) +// cancel.setOnClickListener { +// dialog.dismiss() +// if (firstDialog) showHintDialog(false) +// } +// val params = ViewGroup.LayoutParams(resources.displayMetrics.widthPixels, ViewGroup.LayoutParams.WRAP_CONTENT) +// dialog.setContentView(viewDialog, params) +// } +// +// private fun showCommunityEditWindow() { +// val contentView = LayoutInflater.from(context).inflate(R.layout.community_edit_window, null) +// val params = ViewGroup.LayoutParams(resources.displayMetrics.widthPixels, ViewGroup.LayoutParams.WRAP_CONTENT) +// val dialog = TrackableDialog( +// requireContext(), +// R.style.DialogWindowTransparent, +// "问答页面", +// UserManager.getInstance().community.name, +// null, +// "发布-空白", +// "发布-返回", +// false) +// val window = dialog.window +// window?.setGravity(Gravity.BOTTOM) +// window?.setWindowAnimations(R.style.community_publication_animation) +// dialog.setContentView(contentView, params) +// dialog.show() +// contentView.findViewById(R.id.community_edit_article).setOnClickListener { +// context?.ifLogin("(首页-问答)", action = { +// checkStoragePermissionBeforeAction { +// MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, "发布-发文章") +// startActivity(ArticleEditActivity.getIntent(requireContext(), UserManager.getInstance().community)) +// dialog.dismiss() +// } +// }) +// } +// contentView.findViewById(R.id.community_edit_question).setOnClickListener { +// context?.ifLogin("(首页-问答)", action = { +// checkStoragePermissionBeforeAction { +// MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, "发布-提问题") +// startActivity(QuestionEditActivity.getIntent(requireContext())) +// dialog.dismiss() +// } +// }) +// } +// contentView.findViewById(R.id.community_edit_close).setOnClickListener { +// MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, "发布-关闭") +// dialog.dismiss() +// } +// } +// +// companion object { +// const val INDEX_FOLLOW = 0 +// const val INDEX_RECOMMEND = 1 +// const val INDEX_COLUMN = 2 +// const val INDEX_ALL = 3 // communities +// const val COMMUNITIES_SELECT_REQUEST = 103 +// +// const val FOLLOW_HINT_TRIGGER_HEIGHT = 10 +// +// const val EB_SELECT_KEY = "EB_SELECT_KEY" +// const val EB_RETRY_PAGE = "EB_RETRY_PAGE" +// const val EB_HIDE_FOLLOW_HINT = "EB_HIDE_FOLLOW_HINT" +// const val SP_KEY_CLICKED_SELECT_GAME = "has_clicked_select_game" +// const val EB_SHOW_QUESTION_BUTTON = "EB_SHOW_QUESTION_BUTTON" +// const val EB_HIDE_QUESTION_BUTTON = "EB_HIDE_QUESTION_BUTTON" +// +// const val TAB_TITLE_FOLLOW = "关注" +// const val TAB_TITLE_RECOMMEND = "推荐" +// const val TAB_TITLE_COLUMN = "专栏" +// const val TAB_TITLE_ALL = "全部" +// +// const val NEED_DESTROY_FRAGMENT_TAG = "READY_DESTROY_FRAGMENT_TAG" +// } +// +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/CommunityViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/CommunityViewModel.kt index 4f1f44f5aa..351e4d82d1 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/CommunityViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/CommunityViewModel.kt @@ -1,125 +1,125 @@ -package com.gh.gamecenter.qa - -import android.app.Application -import androidx.lifecycle.AndroidViewModel -import androidx.lifecycle.MutableLiveData -import android.text.TextUtils -import com.gh.gamecenter.entity.ResultEntity -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.qa.entity.CommunitySelectEntity -import com.gh.gamecenter.qa.entity.CommunityStatusEntity -import com.gh.gamecenter.retrofit.Response -import com.gh.gamecenter.retrofit.RetrofitManager -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.schedulers.Schedulers -import okhttp3.ResponseBody -import org.json.JSONArray -import retrofit2.HttpException -import java.util.* -import kotlin.concurrent.fixedRateTimer - -class CommunityViewModel(application: Application) : AndroidViewModel(application) { - - private lateinit var mTimer: Timer - - var unreadCommunity = MutableLiveData() - var communityStatus = MutableLiveData() - val defaultSearchName = MutableLiveData() - - init { - checkCommunity(null) - } - - fun checkUnreadFollowTimeline() { - cancelTimer() - - mTimer = fixedRateTimer("checkUnreadFollowTimeline", false, 0, 2 * 60 * 1000L) { - RetrofitManager.getInstance() - .api - .getUnreadCommunityTimeline(UserManager.getInstance().community.id, UserManager.getInstance().userId) - .subscribeOn(Schedulers.io()) - .subscribe(object : Response() { - override fun onResponse(response: ResponseBody?) { - unreadCommunity.postValue(true) - // 存在红点的时候就不再需要定时查询了 - cancelTimer() - } - - override fun onFailure(e: HttpException?) { - e?.let { - if (e.code() == 404) { - unreadCommunity.postValue(false) - } - } - } - }) - } - } - - fun checkCommunity(data: ResultEntity?) { - getCommunityDefaultSearch() - - val id = UserManager.getInstance().community.id - if (TextUtils.isEmpty(id)) { - communityStatus.postValue(CommunityStatusEntity(false, data)) - return - } - - RetrofitManager.getInstance() - .api.getCommunityDesc(id) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(object : Response() { - override fun onResponse(response: CommunitySelectEntity?) { - val community = UserManager.getInstance().community - if (community.icon.isNullOrEmpty()) { - community.icon = response?.game?.getRawIconIfExisted() - community.iconSubscript = response?.game?.iconSubscript - UserManager.getInstance().setCommunityData(community) - } - - communityStatus.postValue(CommunityStatusEntity(true, data)) - } - - override fun onFailure(e: HttpException?) { - if (e?.code() == 404) { - communityStatus.postValue(CommunityStatusEntity(false, data)) - } else { - communityStatus.postValue(CommunityStatusEntity(true, data)) - } - } - }) - } - - private fun getCommunityDefaultSearch() { - RetrofitManager.getInstance() - .api.getCommunityDefaultSearch(UserManager.getInstance().community.id) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(object : Response() { - override fun onResponse(response: ResponseBody?) { - try { - val array = JSONArray(response!!.string()) - if (array.length() > 0) { - defaultSearchName.postValue(array.getString(0)) - } else { - defaultSearchName.postValue("") - } - } catch (e: Exception) { - e.printStackTrace() - } - } - }) - } - - private fun cancelTimer() { - if (::mTimer.isInitialized) { - mTimer.cancel() - } - } - - override fun onCleared() { - super.onCleared() - cancelTimer() - } -} \ No newline at end of file +//package com.gh.gamecenter.qa +// +//import android.app.Application +//import androidx.lifecycle.AndroidViewModel +//import androidx.lifecycle.MutableLiveData +//import android.text.TextUtils +//import com.gh.gamecenter.entity.ResultEntity +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.qa.entity.CommunitySelectEntity +//import com.gh.gamecenter.qa.entity.CommunityStatusEntity +//import com.gh.gamecenter.retrofit.Response +//import com.gh.gamecenter.retrofit.RetrofitManager +//import io.reactivex.android.schedulers.AndroidSchedulers +//import io.reactivex.schedulers.Schedulers +//import okhttp3.ResponseBody +//import org.json.JSONArray +//import retrofit2.HttpException +//import java.util.* +//import kotlin.concurrent.fixedRateTimer +// +//class CommunityViewModel(application: Application) : AndroidViewModel(application) { +// +// private lateinit var mTimer: Timer +// +// var unreadCommunity = MutableLiveData() +// var communityStatus = MutableLiveData() +// val defaultSearchName = MutableLiveData() +// +// init { +// checkCommunity(null) +// } +// +// fun checkUnreadFollowTimeline() { +// cancelTimer() +// +// mTimer = fixedRateTimer("checkUnreadFollowTimeline", false, 0, 2 * 60 * 1000L) { +// RetrofitManager.getInstance() +// .api +// .getUnreadCommunityTimeline(UserManager.getInstance().community.id, UserManager.getInstance().userId) +// .subscribeOn(Schedulers.io()) +// .subscribe(object : Response() { +// override fun onResponse(response: ResponseBody?) { +// unreadCommunity.postValue(true) +// // 存在红点的时候就不再需要定时查询了 +// cancelTimer() +// } +// +// override fun onFailure(e: HttpException?) { +// e?.let { +// if (e.code() == 404) { +// unreadCommunity.postValue(false) +// } +// } +// } +// }) +// } +// } +// +// fun checkCommunity(data: ResultEntity?) { +// getCommunityDefaultSearch() +// +// val id = UserManager.getInstance().community.id +// if (TextUtils.isEmpty(id)) { +// communityStatus.postValue(CommunityStatusEntity(false, data)) +// return +// } +// +// RetrofitManager.getInstance() +// .api.getCommunityDesc(id) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(object : Response() { +// override fun onResponse(response: CommunitySelectEntity?) { +// val community = UserManager.getInstance().community +// if (community.icon.isNullOrEmpty()) { +// community.icon = response?.game?.getRawIconIfExisted() +// community.iconSubscript = response?.game?.iconSubscript +// UserManager.getInstance().setCommunityData(community) +// } +// +// communityStatus.postValue(CommunityStatusEntity(true, data)) +// } +// +// override fun onFailure(e: HttpException?) { +// if (e?.code() == 404) { +// communityStatus.postValue(CommunityStatusEntity(false, data)) +// } else { +// communityStatus.postValue(CommunityStatusEntity(true, data)) +// } +// } +// }) +// } +// +// private fun getCommunityDefaultSearch() { +// RetrofitManager.getInstance() +// .api.getCommunityDefaultSearch(UserManager.getInstance().community.id) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(object : Response() { +// override fun onResponse(response: ResponseBody?) { +// try { +// val array = JSONArray(response!!.string()) +// if (array.length() > 0) { +// defaultSearchName.postValue(array.getString(0)) +// } else { +// defaultSearchName.postValue("") +// } +// } catch (e: Exception) { +// e.printStackTrace() +// } +// } +// }) +// } +// +// private fun cancelTimer() { +// if (::mTimer.isInitialized) { +// mTimer.cancel() +// } +// } +// +// override fun onCleared() { +// super.onCleared() +// cancelTimer() +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/all/AskAllFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/all/AskAllFragment.kt index f9752db819..7c5e3b60bd 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/all/AskAllFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/all/AskAllFragment.kt @@ -1,96 +1,96 @@ -package com.gh.gamecenter.qa.all - -import android.content.Intent -import android.os.Bundle -import android.view.View -import androidx.fragment.app.Fragment -import androidx.viewpager.widget.ViewPager -import com.gh.base.adapter.FragmentAdapter -import com.gh.base.fragment.BaseFragment -import com.gh.common.util.MtaHelper -import com.gh.common.view.DrawableView -import com.gh.gamecenter.R -import com.gh.gamecenter.databinding.FragmentAskAllBinding -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.qa.article.SimpleArticleListFragment -import com.gh.gamecenter.qa.newest.AskQuestionsNewBodyFragment - -class AskAllFragment : BaseFragment() { - - private lateinit var mBinding: FragmentAskAllBinding - private lateinit var mQuestionFragment: AskQuestionsNewBodyFragment - private lateinit var mArticleFragment: SimpleArticleListFragment - - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - val fragments = childFragmentManager.fragments - for (fragment in fragments) { - fragment.onActivityResult(requestCode, resultCode, data) - } - } - - override fun initView(view: View) { - super.initView(view) - mBinding = FragmentAskAllBinding.bind(view) - } - - override fun getLayoutId(): Int { - return R.layout.fragment_ask_all - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - mBinding.questionButton.background = DrawableView.getOvalSelectorStyle(R.color.background, R.color.theme) - mBinding.articleButton.background = DrawableView.getOvalSelectorStyle(R.color.background, R.color.theme) - mBinding.questionButton.setTextColor(DrawableView.getSelectorColorStyle(R.color.text_subtitle, R.color.white)) - mBinding.articleButton.setTextColor(DrawableView.getSelectorColorStyle(R.color.text_subtitle, R.color.white)) - - mBinding.questionButton.setOnClickListener { - mBinding.fragmentViewPager.currentItem = 0 - } - mBinding.articleButton.setOnClickListener { - mBinding.fragmentViewPager.currentItem = 1 - } - - val fragments = ArrayList() - mQuestionFragment = AskQuestionsNewBodyFragment() - mArticleFragment = SimpleArticleListFragment() - fragments.add(mQuestionFragment) - fragments.add(mArticleFragment) - mBinding.fragmentViewPager.adapter = FragmentAdapter(childFragmentManager, fragments) - mBinding.fragmentViewPager.addOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() { - override fun onPageSelected(position: Int) { - mBinding.questionButton.isChecked = position == 0 - mBinding.articleButton.isChecked = !mBinding.questionButton.isChecked - - if (position == 0) { - MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, "全部-问题") - } else { - MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, "全部-文章") - } - } - }) - } - - /** - * 父类的FragmentStatePagerAdapter可能影响到当前实例mQuestionFragment/mArticleFragment没有加载到页面中 - */ - fun scrollToTop(smooth: Boolean) { - val currentItem = mBinding.fragmentViewPager.currentItem - if (currentItem == 0) { - for (fragment in childFragmentManager.fragments) { - if (fragment is AskQuestionsNewBodyFragment) { - fragment.scrollToTop(smooth) - break - } - } - } else if (currentItem == 1) { - for (fragment in childFragmentManager.fragments) { - if (fragment is SimpleArticleListFragment) { - fragment.scrollToTop(smooth) - break - } - } - } - } -} \ No newline at end of file +//package com.gh.gamecenter.qa.all +// +//import android.content.Intent +//import android.os.Bundle +//import android.view.View +//import androidx.fragment.app.Fragment +//import androidx.viewpager.widget.ViewPager +//import com.gh.base.adapter.FragmentAdapter +//import com.gh.base.fragment.BaseFragment +//import com.gh.common.util.MtaHelper +//import com.gh.common.view.DrawableView +//import com.gh.gamecenter.R +//import com.gh.gamecenter.databinding.FragmentAskAllBinding +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.qa.article.SimpleArticleListFragment +//import com.gh.gamecenter.qa.newest.AskQuestionsNewBodyFragment +// +//class AskAllFragment : BaseFragment() { +// +// private lateinit var mBinding: FragmentAskAllBinding +// private lateinit var mQuestionFragment: AskQuestionsNewBodyFragment +// private lateinit var mArticleFragment: SimpleArticleListFragment +// +// override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { +// super.onActivityResult(requestCode, resultCode, data) +// val fragments = childFragmentManager.fragments +// for (fragment in fragments) { +// fragment.onActivityResult(requestCode, resultCode, data) +// } +// } +// +// override fun initView(view: View) { +// super.initView(view) +// mBinding = FragmentAskAllBinding.bind(view) +// } +// +// override fun getLayoutId(): Int { +// return R.layout.fragment_ask_all +// } +// +// override fun onViewCreated(view: View, savedInstanceState: Bundle?) { +// super.onViewCreated(view, savedInstanceState) +// mBinding.questionButton.background = DrawableView.getOvalSelectorStyle(R.color.background, R.color.theme) +// mBinding.articleButton.background = DrawableView.getOvalSelectorStyle(R.color.background, R.color.theme) +// mBinding.questionButton.setTextColor(DrawableView.getSelectorColorStyle(R.color.text_subtitle, R.color.white)) +// mBinding.articleButton.setTextColor(DrawableView.getSelectorColorStyle(R.color.text_subtitle, R.color.white)) +// +// mBinding.questionButton.setOnClickListener { +// mBinding.fragmentViewPager.currentItem = 0 +// } +// mBinding.articleButton.setOnClickListener { +// mBinding.fragmentViewPager.currentItem = 1 +// } +// +// val fragments = ArrayList() +// mQuestionFragment = AskQuestionsNewBodyFragment() +// mArticleFragment = SimpleArticleListFragment() +// fragments.add(mQuestionFragment) +// fragments.add(mArticleFragment) +// mBinding.fragmentViewPager.adapter = FragmentAdapter(childFragmentManager, fragments) +// mBinding.fragmentViewPager.addOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() { +// override fun onPageSelected(position: Int) { +// mBinding.questionButton.isChecked = position == 0 +// mBinding.articleButton.isChecked = !mBinding.questionButton.isChecked +// +// if (position == 0) { +// MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, "全部-问题") +// } else { +// MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, "全部-文章") +// } +// } +// }) +// } +// +// /** +// * 父类的FragmentStatePagerAdapter可能影响到当前实例mQuestionFragment/mArticleFragment没有加载到页面中 +// */ +// fun scrollToTop(smooth: Boolean) { +// val currentItem = mBinding.fragmentViewPager.currentItem +// if (currentItem == 0) { +// for (fragment in childFragmentManager.fragments) { +// if (fragment is AskQuestionsNewBodyFragment) { +// fragment.scrollToTop(smooth) +// break +// } +// } +// } else if (currentItem == 1) { +// for (fragment in childFragmentManager.fragments) { +// if (fragment is SimpleArticleListFragment) { +// fragment.scrollToTop(smooth) +// break +// } +// } +// } +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailContainerFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailContainerFragment.kt index 1b6c71c95d..11166eb0db 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailContainerFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailContainerFragment.kt @@ -1,28 +1,33 @@ package com.gh.gamecenter.qa.answer.detail import android.os.Bundle +import android.view.LayoutInflater import android.view.MenuItem import android.view.View import com.gh.common.util.EntranceUtils import com.gh.common.util.SyncDataBetweenPageHelper import com.gh.common.util.observeNonNull import com.gh.common.util.viewModelProviderFromParent -import com.gh.gamecenter.R -import com.gh.gamecenter.gamedetail.GameDetailFragment +import com.gh.gamecenter.databinding.FragmentAnswerDetailContainerBinding import com.gh.gamecenter.normal.NormalFragment -import kotlinx.android.synthetic.main.fragment_answer_detail_container.* + class AnswerDetailContainerFragment : NormalFragment() { private lateinit var mFragmentAdapter: AnswerDetailFragmentStatePagerAdapter private lateinit var mContainerViewModel: AnswerDetailContainerViewModel + private lateinit var mBinding: FragmentAnswerDetailContainerBinding private val fragments = ArrayList() // 是否已经传了 argument 给第一个子 fragment private var mHasPassedOneTimeArgumentToChild = false - override fun getLayoutId(): Int { - return R.layout.fragment_answer_detail_container + override fun getLayoutId(): Int = 0 + + override fun getInflatedLayout(): View { + return FragmentAnswerDetailContainerBinding.inflate(LayoutInflater.from(requireContext()), null, false).apply { + mBinding = this + }.root } override fun onMenuItemClick(menuItem: MenuItem?) { @@ -44,7 +49,7 @@ class AnswerDetailContainerFragment : NormalFragment() { if (!mContainerViewModel.answerIdList.contains(answerId)) { mContainerViewModel.answerIdList.add(answerId) } - val tag = "android:switcher:${viewpager.id}:" + val tag = "android:switcher:${mBinding.viewpager.id}:" mFragmentAdapter = AnswerDetailFragmentStatePagerAdapter(parentFragmentManager) { id, position -> var fragment = childFragmentManager.findFragmentByTag("${tag}${position}") as? AnswerDetailFragment if (fragment == null) { @@ -65,7 +70,7 @@ class AnswerDetailContainerFragment : NormalFragment() { } mFragmentAdapter.answerIdList = ArrayList(mContainerViewModel.answerIdList) - viewpager.adapter = mFragmentAdapter + mBinding.viewpager.adapter = mFragmentAdapter mContainerViewModel.answerListChange.observeNonNull(this) { mFragmentAdapter.answerIdList = ArrayList(mContainerViewModel.answerIdList) @@ -77,14 +82,14 @@ class AnswerDetailContainerFragment : NormalFragment() { } mContainerViewModel.scroll.observeNonNull(this) { - val currentItem = viewpager.currentItem + val currentItem = mBinding.viewpager.currentItem when (it) { AnswerDetailContainerViewModel.SCROLL_TO_NEXT_ANSWER -> { if (currentItem == mContainerViewModel.answerIdList.size) { toast("到底了") return@observeNonNull } else { - viewpager.currentItem = currentItem + 1 + mBinding.viewpager.currentItem = currentItem + 1 } } AnswerDetailContainerViewModel.SCROLL_TO_PREVIOUS_ANSWER -> { @@ -92,7 +97,7 @@ class AnswerDetailContainerFragment : NormalFragment() { toast("到顶了") return@observeNonNull } else { - viewpager.currentItem = currentItem - 1 + mBinding.viewpager.currentItem = currentItem - 1 } } } 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 5499b465a1..8698f682d6 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 @@ -19,7 +19,6 @@ import androidx.core.content.ContextCompat import androidx.databinding.BindingAdapter import androidx.databinding.DataBindingUtil import androidx.lifecycle.Observer -import butterknife.OnClick import com.ethanhua.skeleton.Skeleton import com.ethanhua.skeleton.SkeletonScreen import com.facebook.drawee.view.SimpleDraweeView @@ -50,7 +49,6 @@ import com.gh.gamecenter.qa.editor.OnLinkClickListener import com.gh.gamecenter.qa.entity.AnswerDetailEntity import com.gh.gamecenter.qa.entity.Questions import com.gh.gamecenter.qa.entity.QuestionsDetailEntity -import com.gh.gamecenter.qa.questions.detail.QuestionsDetailActivity import com.gh.gamecenter.qa.questions.newdetail.NewQuestionDetailActivity import com.gh.gamecenter.suggest.SuggestType import com.gh.gamecenter.video.VideoVerifyItemViewHolder @@ -60,8 +58,6 @@ import com.lightgame.utils.Utils import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode import java.io.IOException -import java.util.* -import kotlin.collections.ArrayList open class AnswerDetailFragment : NormalFragment() { private var mPath: String? = "" @@ -74,7 +70,7 @@ open class AnswerDetailFragment : NormalFragment() { private var mIsShowCommentManager: Boolean = false // 是否需要弹起评论对话框 private var mViewedImageSet = hashSetOf() - private val mAnswersImages: ArrayList? = arrayListOf() + private val mAnswersImages: ArrayList = arrayListOf() private var mSpecialColumn: SpecialColumn? = null private var mElapsedHelper: TimeElapsedHelper? = null @@ -96,6 +92,7 @@ open class AnswerDetailFragment : NormalFragment() { mContainerViewModel = viewModelProviderFromParent() initObserver() + onClickView() arguments?.let { mAnswerId = it.getString(EntranceUtils.KEY_ANSWER_ID) ?: "" @@ -744,177 +741,146 @@ open class AnswerDetailFragment : NormalFragment() { return view } - @OnClick( - R.id.replyTv, - R.id.bottomStarIv, - R.id.reuse_no_connection, - R.id.status_tv, - R.id.bottomLikeIv, - R.id.bottomCommentIv, - R.id.answer_count_container, - R.id.follow_tv, - R.id.user_icon_iv, - R.id.questionsdetail_item_pic1, - R.id.questionsdetail_item_pic2, - R.id.questionsdetail_item_pic3, - R.id.title_tv, - R.id.questionsdetail_item_des - ) - override fun onClick(view: View) { + private fun onClickView() { val videoSize = if (!mViewModel.answerDetail?.question?.videos.isNullOrEmpty()) 1 else 0 - when (view.id) { - R.id.reuse_no_connection -> { - mBinding.reuseNoConnection.root.visibility = View.GONE - mSkeletonScreen?.show() - mViewModel.getAnswerDetail(mAnswerId, mEntrance) - } -// R.id.iv_share, R.id.tv_share -> { -// shareAnswer() -// } - - R.id.bottomStarIv -> { - ifLogin("回答详情-收藏") { - mViewModel.answerDetail?.let { - if (!it.me.isAnswerFavorite) { - mViewModel.collectAnswer(mAnswerId) - } else { - mViewModel.cancelCollectAnswer(mAnswerId) - } + mBinding.reuseNoConnection.root.setOnClickListener { + mBinding.reuseNoConnection.root.visibility = View.GONE + mSkeletonScreen?.show() + mViewModel.getAnswerDetail(mAnswerId, mEntrance) + } + mBinding.bottomController.bottomStarIv.setOnClickListener { + ifLogin("回答详情-收藏") { + mViewModel.answerDetail?.let { + if (!it.me.isAnswerFavorite) { + mViewModel.collectAnswer(mAnswerId) + } else { + mViewModel.cancelCollectAnswer(mAnswerId) } } } - R.id.answer_count_container -> if (mViewModel.answerDetail != null) { + } + mBinding.answerCountContainer.setOnClickListener { + if (mViewModel.answerDetail != null) { startActivity(NewQuestionDetailActivity.getIntent(requireContext(), mViewModel.answerDetail!!.question.id, mEntrance, "回答详情")) } + } + mBinding.bottomController.bottomLikeIv.setOnClickListener { + debounceActionWithInterval(R.id.container_like, 1000) { + ifLogin("回答详情-赞同") { + if (mViewModel.answerDetail != null && !mViewModel.answerDetail!!.me.isAnswerVoted) { + mViewModel.like(mAnswerId) - R.id.bottomLikeIv -> { - debounceActionWithInterval(R.id.container_like, 1000) { - ifLogin("回答详情-赞同") { - if (mViewModel.answerDetail != null && !mViewModel.answerDetail!!.me.isAnswerVoted) { - mViewModel.like(mAnswerId) - - if (EntranceUtils.ENTRANCE_WELCOME == mEntrance) { - LogUtils.uploadLikeFromWelcomeDialog() - } - - DataUtils.onMtaEvent( - context, - "答案点赞量_社区加位置", - mViewModel.answerDetail?.community?.name, - mPath - ) - } else { - mViewModel.cancelLike(mAnswerId) - } - } - } - } - R.id.bottomCommentIv -> { - showCommentDialog(false) - } - - R.id.replyTv -> { - mViewModel.answerDetail?.run { - if (commentable) { - DataUtils.onMtaEvent(context, "详情页面", "答案评论详情", content.subStringIfPossible(30)) -// showCommentDialog(false) - showCommentDialog(true) - } else { - toast("作者已关闭评论") - } - } - } - - R.id.status_tv -> { - mViewModel.answerDetail?.let { - when (mAnswerStatus) { - ANSWERED_MY_ANSWER -> editAnswer(it) - - ANSWERED_NOT_MY_ANSWER -> { - startActivityForResult( - AnswerDetailActivity.getIntent( - context, - mViewModel.answerDetail!!.me.myAnswerId, - mEntrance, - "答案详情" - ), ANSWER_PATCH_REQUEST - ) + if (EntranceUtils.ENTRANCE_WELCOME == mEntrance) { + LogUtils.uploadLikeFromWelcomeDialog() } - NOT_ANSWERED_YET -> ifLogin("回答详情-[我来回答]") { - checkStoragePermissionBeforeAction { - val question = mViewModel.answerDetail!!.question - startActivityForResult( - AnswerEditActivity.getIntent(requireContext(), question, true, question.communityName), - ANSWER_POST_REQUEST - ) - } - } - - NOT_ANSWERED_BUT_HAVE_DRAFT -> ifLogin("回答详情-[继续回答]") { - checkStoragePermissionBeforeAction { - val question = mViewModel.answerDetail!!.question - startActivityForResult( - AnswerEditActivity.getIntent(requireContext(), question, true, question.communityName), - ANSWER_POST_REQUEST - ) - } - } - } - } - } - - R.id.user_icon_iv -> { - DirectUtils.directToHomeActivity(requireContext(), mViewModel.answerDetail!!.user.id, mEntrance, "回答详情") - } - - R.id.follow_tv -> { - ifLogin("回答详情-[关注]用户") { - if (mBinding.followTv.text == "关注") { - mViewModel.follow(mViewModel.answerDetail!!.user.id!!) - } else { - mViewModel.unfollow(mViewModel.answerDetail!!.user.id!!) - } - } - } - - R.id.questionsdetail_item_pic1 -> { - val question = mViewModel.answerDetail?.question!! - if (!question.videos.isNullOrEmpty()) { - val videoEntity = question.videos[0] - if (videoEntity.status == "pass") { - DirectUtils.directToVideoDetail( - requireContext(), - videoEntity.id, - VideoDetailContainerViewModel.Location.SINGLE_VIDEO.value, - path = "回答详情" + DataUtils.onMtaEvent( + context, + "答案点赞量_社区加位置", + mViewModel.answerDetail?.community?.name, + mPath ) - } else if (videoEntity.status == "pending" || - (!question.me.isContentOwner - && !question.me.isModerator - && videoEntity.status == "fail") - ) { - toast("视频正在审核中") - } else if (videoEntity.status == "fail") { - toast("视频审核未通过") + } else { + mViewModel.cancelLike(mAnswerId) } - } else { - showQuestionImageDetail(0) } } - R.id.questionsdetail_item_pic2 -> showQuestionImageDetail(1 - videoSize) - R.id.questionsdetail_item_pic3 -> showQuestionImageDetail(2 - videoSize) + } - R.id.title_tv -> { - val intent = QuestionsDetailActivity.getIntent( - context, - mViewModel.answerDetail?.question?.id, mEntrance, - "回答详情" - ) - SyncDataBetweenPageHelper.startActivityForResult(this, intent, QUESTION_DETAIL, 0) + mBinding.bottomController.bottomCommentIv.setOnClickListener{ + showCommentDialog(false) + } + mBinding.bottomController.replyTv.setOnClickListener { + mViewModel.answerDetail?.run { + if (commentable) { + DataUtils.onMtaEvent(context, "详情页面", "答案评论详情", content.subStringIfPossible(30)) + showCommentDialog(true) + } else { + toast("作者已关闭评论") + } } } + mBinding.statusTv.setOnClickListener { + mViewModel.answerDetail?.let { + when (mAnswerStatus) { + ANSWERED_MY_ANSWER -> editAnswer(it) + + ANSWERED_NOT_MY_ANSWER -> { + startActivityForResult( + AnswerDetailActivity.getIntent( + context, + mViewModel.answerDetail!!.me.myAnswerId, + mEntrance, + "答案详情" + ), ANSWER_PATCH_REQUEST + ) + } + + NOT_ANSWERED_YET -> ifLogin("回答详情-[我来回答]") { + checkStoragePermissionBeforeAction { + val question = mViewModel.answerDetail!!.question + startActivityForResult( + AnswerEditActivity.getIntent(requireContext(), question, true, question.communityName), + ANSWER_POST_REQUEST + ) + } + } + + NOT_ANSWERED_BUT_HAVE_DRAFT -> ifLogin("回答详情-[继续回答]") { + checkStoragePermissionBeforeAction { + val question = mViewModel.answerDetail!!.question + startActivityForResult( + AnswerEditActivity.getIntent(requireContext(), question, true, question.communityName), + ANSWER_POST_REQUEST + ) + } + } + } + } + } + mBinding.userIconIv.setOnClickListener { + DirectUtils.directToHomeActivity(requireContext(), mViewModel.answerDetail!!.user.id, mEntrance, "回答详情") + } + mBinding.followTv.setOnClickListener { + ifLogin("回答详情-[关注]用户") { + if (mBinding.followTv.text == "关注") { + mViewModel.follow(mViewModel.answerDetail!!.user.id!!) + } else { + mViewModel.unfollow(mViewModel.answerDetail!!.user.id!!) + } + } + } + mBinding.pieceQuestionContent.questionsdetailItemPic1.setOnClickListener { + val question = mViewModel.answerDetail?.question!! + if (!question.videos.isNullOrEmpty()) { + val videoEntity = question.videos[0] + if (videoEntity.status == "pass") { + DirectUtils.directToVideoDetail( + requireContext(), + videoEntity.id, + VideoDetailContainerViewModel.Location.SINGLE_VIDEO.value, + path = "回答详情" + ) + } else if (videoEntity.status == "pending" || + (!question.me.isContentOwner + && !question.me.isModerator + && videoEntity.status == "fail") + ) { + toast("视频正在审核中") + } else if (videoEntity.status == "fail") { + toast("视频审核未通过") + } + } else { + showQuestionImageDetail(0) + } + } + mBinding.pieceQuestionContent.questionsdetailItemPic2.setOnClickListener { + showQuestionImageDetail(1 - videoSize) + } + mBinding.pieceQuestionContent.questionsdetailItemPic3.setOnClickListener { + showQuestionImageDetail(2 - videoSize) + } } private fun shareAnswer() { diff --git a/app/src/main/java/com/gh/gamecenter/qa/answer/draft/AnswerDraftAdapter.java b/app/src/main/java/com/gh/gamecenter/qa/answer/draft/AnswerDraftAdapter.java index 34046b1546..09a00e4ca4 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/answer/draft/AnswerDraftAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/qa/answer/draft/AnswerDraftAdapter.java @@ -23,9 +23,7 @@ import com.gh.gamecenter.databinding.AnswerDraftItemBinding; import com.gh.gamecenter.manager.UserManager; import com.gh.gamecenter.qa.answer.edit.AnswerEditActivity; import com.gh.gamecenter.qa.entity.AnswerEntity; -import com.gh.gamecenter.qa.entity.Questions; import com.gh.gamecenter.qa.myqa.AnswerDraftViewHolder; -import com.gh.gamecenter.qa.questions.detail.QuestionsDetailActivity; import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; import com.lightgame.utils.Utils; @@ -125,8 +123,8 @@ class AnswerDraftAdapter extends ListAdapter { img.setVisibility(View.GONE); } binding.answerDraftItemTitle.setOnClickListener(v -> { - Questions questions = answerEntity.getQuestions(); - mContext.startActivity(QuestionsDetailActivity.getIntent(mContext, questions.getId(), mEntrance, "我的问答-我的草稿")); +// Questions questions = answerEntity.getQuestions(); +// mContext.startActivity(QuestionsDetailActivity.getIntent(mContext, questions.getId(), mEntrance, "我的问答-我的草稿")); }); binding.answerDraftItemDelete.setOnClickListener(v -> { DialogHelper.showDialog(mContext, "警告", "确定要删除回答草稿吗?删除之后不可恢复", "确定", "取消", () -> deleteAnswerDraft(answerEntity), () -> { diff --git a/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditActivity.kt b/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditActivity.kt index 79d86f7599..fddd70a52e 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditActivity.kt @@ -13,7 +13,6 @@ import android.view.View import android.view.inputmethod.InputMethodManager import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders -import butterknife.OnClick import com.facebook.drawee.view.SimpleDraweeView import com.gh.base.BaseRichEditorActivity import com.gh.base.fragment.WaitingDialogFragment @@ -76,6 +75,7 @@ class AnswerEditActivity : BaseRichEditorActivity(), Keyboa mCommunityName = intent?.getStringExtra(EntranceUtils.KEY_COMMUNITY_NAME) mOpenAnswerInNewPage = intent?.getBooleanExtra(EntranceUtils.KEY_ANSWER_OPEN_IN_NEW_PAGE, false)!! mBinding = FragmentAnswerEditBinding.bind(mContentView) + onClickView() addObserver() initQuestionContent() @@ -120,11 +120,12 @@ class AnswerEditActivity : BaseRichEditorActivity(), Keyboa override fun provideViewModel(): AnswerEditViewModel { val factory = AnswerEditViewModel.Factory( - HaloApp.getInstance().application, - intent?.getStringExtra(EntranceUtils.KEY_ANSWER_ID), - intent?.getStringExtra(EntranceUtils.KEY_ANSWER_CONTENT), - intent?.getStringExtra(EntranceUtils.KEY_DRAFT_ID), - intent?.getParcelableExtra(Questions::class.java.simpleName) ?: Questions()) + HaloApp.getInstance().application, + intent?.getStringExtra(EntranceUtils.KEY_ANSWER_ID), + intent?.getStringExtra(EntranceUtils.KEY_ANSWER_CONTENT), + intent?.getStringExtra(EntranceUtils.KEY_DRAFT_ID), + intent?.getParcelableExtra(Questions::class.java.simpleName) ?: Questions() + ) mViewModel = ViewModelProviders.of(this, factory).get(AnswerEditViewModel::class.java) return mViewModel } @@ -169,7 +170,7 @@ class AnswerEditActivity : BaseRichEditorActivity(), Keyboa setResult(Activity.RESULT_OK, data) if (mOpenAnswerInNewPage) { val intent = AnswerDetailActivity - .getIntent(this, answerId, mEntrance, "编辑答案") + .getIntent(this, answerId, mEntrance, "编辑答案") startActivity(intent) } finish() @@ -210,9 +211,7 @@ class AnswerEditActivity : BaseRichEditorActivity(), Keyboa mProcessingDialog = WaitingDialogFragment.newInstance(it.msg, false) mProcessingDialog?.show(supportFragmentManager, null) { if (mViewModel.uploadImageSubscription != null && !mViewModel.uploadImageSubscription!!.isDisposed) { - mUploadImageCancelDialog = DialogUtils.showAlertDialog(this, "提示" - , "图片正在上传中,确定取消吗?" - , "确定", "取消", { + mUploadImageCancelDialog = DialogUtils.showAlertDialog(this, "提示", "图片正在上传中,确定取消吗?", "确定", "取消", { mViewModel.uploadImageSubscription?.dispose() mUploadImageCancelDialog?.dismiss() mProcessingDialog?.dismiss() @@ -272,9 +271,9 @@ class AnswerEditActivity : BaseRichEditorActivity(), Keyboa val videoSize = if (video != null) 1 else 0 mBinding.answerPlaceholder.text = - if (!question.description.isNullOrEmpty() || question.images.size > 0 || question.videos.isNotEmpty()) { - "请撰写回答(下拉查看问题详情)..." - } else "请撰写回答..." + if (!question.description.isNullOrEmpty() || question.images.size > 0 || question.videos.isNotEmpty()) { + "请撰写回答(下拉查看问题详情)..." + } else "请撰写回答..." mBinding.appBar.setExpanded(false) mBinding.questionTitle.text = question.title @@ -379,22 +378,25 @@ class AnswerEditActivity : BaseRichEditorActivity(), Keyboa return if (TextUtils.isEmpty(UserManager.getInstance().token)) { false } else if (!TextUtils.isEmpty(mViewModel.answerId) - && TextUtils.isEmpty(mRichEditor.text) - && !mRichEditor.html.contains("(), Keyboa mViewModel.saveAnswerDrafts(editContent, forcedExit) } - @OnClick(R.id.question_images_1, R.id.question_images_2, R.id.question_images_3) - fun onClick(view: View) { + private fun onClickView() { val videoSize = if (!mViewModel.question.videos.isNullOrEmpty()) 1 else 0 - - when (view.id) { - R.id.question_images_1 -> { - val question = mViewModel.question - if (!question.videos.isNullOrEmpty()) { - val videoEntity = question.videos[0] - if (videoEntity.status == "pass") { - DirectUtils.directToVideoDetail( - this, - videoEntity.id, - VideoDetailContainerViewModel.Location.SINGLE_VIDEO.value, - path = "回答详情") - } else if (videoEntity.status == "pending" || - (!question.me.isContentOwner - && !question.me.isModerator - && videoEntity.status == "fail")) { - toast("视频正在审核中") - } else if (videoEntity.status == "fail") { - toast("视频审核未通过") - } - } else { - showQuestionImageDetail(0) + mBinding.questionImages1.setOnClickListener { + val question = mViewModel.question + if (!question.videos.isNullOrEmpty()) { + val videoEntity = question.videos[0] + if (videoEntity.status == "pass") { + DirectUtils.directToVideoDetail( + this, + videoEntity.id, + VideoDetailContainerViewModel.Location.SINGLE_VIDEO.value, + path = "回答详情" + ) + } else if (videoEntity.status == "pending" || + (!question.me.isContentOwner + && !question.me.isModerator + && videoEntity.status == "fail") + ) { + toast("视频正在审核中") + } else if (videoEntity.status == "fail") { + toast("视频审核未通过") } + } else { + showQuestionImageDetail(0) } - R.id.question_images_2 -> showQuestionImageDetail(1 - videoSize) - R.id.question_images_3 -> showQuestionImageDetail(2 - videoSize) + } + mBinding.questionImages2.setOnClickListener { + showQuestionImageDetail(1 - videoSize) + } + mBinding.questionImages3.setOnClickListener { + showQuestionImageDetail(2 - videoSize) } } @@ -489,11 +493,13 @@ class AnswerEditActivity : BaseRichEditorActivity(), Keyboa /** * 撰写回答 */ - fun getIntent(context: Context, - question: Questions?, - showInNewPage: Boolean?, - communityName: String?, - showHintBackground: Boolean = false): Intent { + fun getIntent( + context: Context, + question: Questions?, + showInNewPage: Boolean?, + communityName: String?, + showHintBackground: Boolean = false + ): Intent { val intent = Intent(context, AnswerEditActivity::class.java) intent.putExtra(EntranceUtils.KEY_ANSWER_OPEN_IN_NEW_PAGE, showInNewPage) intent.putExtra(EntranceUtils.KEY_COMMUNITY_NAME, communityName) @@ -527,13 +533,15 @@ class AnswerEditActivity : BaseRichEditorActivity(), Keyboa /** * 修改回答 */ - fun getIntent(context: Context, - answerId: String?, - question: Questions?, - content: String?, - communityName: String?, - showEditDraft: Boolean = false, - showInNewPage: Boolean = false): Intent { + fun getIntent( + context: Context, + answerId: String?, + question: Questions?, + content: String?, + communityName: String?, + showEditDraft: Boolean = false, + showInNewPage: Boolean = false + ): Intent { val intent = Intent(context, AnswerEditActivity::class.java) intent.putExtra(EntranceUtils.KEY_ANSWER_ID, answerId) intent.putExtra(EntranceUtils.KEY_ANSWER_CONTENT, content) diff --git a/app/src/main/java/com/gh/gamecenter/qa/article/SimpleArticleListActivity.kt b/app/src/main/java/com/gh/gamecenter/qa/article/SimpleArticleListActivity.kt index 3d96d06e69..880a3b2834 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/article/SimpleArticleListActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/article/SimpleArticleListActivity.kt @@ -1,25 +1,25 @@ -package com.gh.gamecenter.qa.article - -import android.content.Context -import android.content.Intent -import android.os.Bundle -import com.gh.base.BaseActivity -import com.gh.common.util.EntranceUtils -import com.gh.gamecenter.NormalActivity - -class SimpleArticleListActivity : NormalActivity() { - - companion object { - @JvmStatic - fun getIntent(context: Context, sortType: String, entrance: String, path: String): Intent { - val bundle = Bundle() - bundle.putString(EntranceUtils.KEY_TYPE, sortType) - bundle.putString(EntranceUtils.KEY_ENTRANCE, BaseActivity.mergeEntranceAndPath(entrance, path)) - return getTargetIntent(context, SimpleArticleListActivity::class.java, SimpleArticleListFragment::class.java, bundle) - } - } - - override fun provideNormalIntent(): Intent { - return getTargetIntent(this, SimpleArticleListActivity::class.java, SimpleArticleListFragment::class.java) - } -} \ No newline at end of file +//package com.gh.gamecenter.qa.article +// +//import android.content.Context +//import android.content.Intent +//import android.os.Bundle +//import com.gh.base.BaseActivity +//import com.gh.common.util.EntranceUtils +//import com.gh.gamecenter.NormalActivity +// +//class SimpleArticleListActivity : NormalActivity() { +// +// companion object { +// @JvmStatic +// fun getIntent(context: Context, sortType: String, entrance: String, path: String): Intent { +// val bundle = Bundle() +// bundle.putString(EntranceUtils.KEY_TYPE, sortType) +// bundle.putString(EntranceUtils.KEY_ENTRANCE, BaseActivity.mergeEntranceAndPath(entrance, path)) +// return getTargetIntent(context, SimpleArticleListActivity::class.java, SimpleArticleListFragment::class.java, bundle) +// } +// } +// +// override fun provideNormalIntent(): Intent { +// return getTargetIntent(this, SimpleArticleListActivity::class.java, SimpleArticleListFragment::class.java) +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/article/SimpleArticleListAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/article/SimpleArticleListAdapter.kt index 178c3932d0..1329ba3392 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/article/SimpleArticleListAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/article/SimpleArticleListAdapter.kt @@ -1,82 +1,82 @@ -package com.gh.gamecenter.qa.article - -import android.content.Context -import android.view.View -import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView -import com.gh.common.constant.ItemViewType -import com.gh.common.syncpage.ISyncAdapterHandler -import com.gh.gamecenter.R -import com.gh.gamecenter.adapter.viewholder.FooterViewHolder -import com.gh.gamecenter.baselist.ListAdapter -import com.gh.gamecenter.databinding.CommunityAnswerItemBinding -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.qa.answer.CommunityAnswerItemViewHolder -import com.gh.gamecenter.qa.article.detail.ArticleDetailActivity -import com.gh.gamecenter.qa.entity.ArticleEntity -import com.gh.gamecenter.qa.entity.Questions - -class SimpleArticleListAdapter(context: Context) : ListAdapter(context), ISyncAdapterHandler { - - override fun areItemsTheSame(oldItem: ArticleEntity?, newItem: ArticleEntity?): Boolean { - return oldItem?.id == newItem?.id - } - - override fun getItemViewType(position: Int): Int { - if (position == itemCount - 1) return ItemViewType.ITEM_FOOTER - return ItemViewType.ITEM_BODY - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - val view: View - return when (viewType) { - ItemViewType.ITEM_FOOTER -> { - view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false) - FooterViewHolder(view) - } - else -> { - view = mLayoutInflater.inflate(R.layout.community_answer_item, parent, false) - CommunityAnswerItemViewHolder(CommunityAnswerItemBinding.bind(view)) - } - } - } - - override fun getItemCount(): Int { - return if (mEntityList.isNotEmpty()) mEntityList.size + FOOTER_ITEM_COUNT else 0 - } - - override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - when (getItemViewType(position)) { - ItemViewType.ITEM_BODY -> { - val viewHolder = holder as CommunityAnswerItemViewHolder - val articleEntity = mEntityList[position] - val questions = Questions() - questions.title = articleEntity.title - viewHolder.bindArticleItem(articleEntity, "", getPath()) - viewHolder.itemView.setOnClickListener { - mContext.startActivity(ArticleDetailActivity.getIntent(mContext, UserManager.getInstance().community, articleEntity.id, "", getPath())) - } - } - ItemViewType.ITEM_FOOTER -> { - val footerViewHolder = holder as FooterViewHolder - footerViewHolder.initItemPadding() - footerViewHolder.initFooterViewHolder(mIsLoading, mIsNetworkError, mIsOver) - } - } - } - - fun getPath(): String { - return if (mContext is SimpleArticleListActivity) { - "推荐入口-列表" - } else { - "全部-文章" - } - } - - override fun getSyncData(position: Int): Pair? { - if (position >= mEntityList.size) return null - val entity = mEntityList[position] - return Pair(entity.id, entity) - } - -} \ No newline at end of file +//package com.gh.gamecenter.qa.article +// +//import android.content.Context +//import android.view.View +//import android.view.ViewGroup +//import androidx.recyclerview.widget.RecyclerView +//import com.gh.common.constant.ItemViewType +//import com.gh.common.syncpage.ISyncAdapterHandler +//import com.gh.gamecenter.R +//import com.gh.gamecenter.adapter.viewholder.FooterViewHolder +//import com.gh.gamecenter.baselist.ListAdapter +//import com.gh.gamecenter.databinding.CommunityAnswerItemBinding +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.qa.answer.CommunityAnswerItemViewHolder +//import com.gh.gamecenter.qa.article.detail.ArticleDetailActivity +//import com.gh.gamecenter.qa.entity.ArticleEntity +//import com.gh.gamecenter.qa.entity.Questions +// +//class SimpleArticleListAdapter(context: Context) : ListAdapter(context), ISyncAdapterHandler { +// +// override fun areItemsTheSame(oldItem: ArticleEntity?, newItem: ArticleEntity?): Boolean { +// return oldItem?.id == newItem?.id +// } +// +// override fun getItemViewType(position: Int): Int { +// if (position == itemCount - 1) return ItemViewType.ITEM_FOOTER +// return ItemViewType.ITEM_BODY +// } +// +// override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { +// val view: View +// return when (viewType) { +// ItemViewType.ITEM_FOOTER -> { +// view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false) +// FooterViewHolder(view) +// } +// else -> { +// view = mLayoutInflater.inflate(R.layout.community_answer_item, parent, false) +// CommunityAnswerItemViewHolder(CommunityAnswerItemBinding.bind(view)) +// } +// } +// } +// +// override fun getItemCount(): Int { +// return if (mEntityList.isNotEmpty()) mEntityList.size + FOOTER_ITEM_COUNT else 0 +// } +// +// override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { +// when (getItemViewType(position)) { +// ItemViewType.ITEM_BODY -> { +// val viewHolder = holder as CommunityAnswerItemViewHolder +// val articleEntity = mEntityList[position] +// val questions = Questions() +// questions.title = articleEntity.title +// viewHolder.bindArticleItem(articleEntity, "", getPath()) +// viewHolder.itemView.setOnClickListener { +// mContext.startActivity(ArticleDetailActivity.getIntent(mContext, UserManager.getInstance().community, articleEntity.id, "", getPath())) +// } +// } +// ItemViewType.ITEM_FOOTER -> { +// val footerViewHolder = holder as FooterViewHolder +// footerViewHolder.initItemPadding() +// footerViewHolder.initFooterViewHolder(mIsLoading, mIsNetworkError, mIsOver) +// } +// } +// } +// +// fun getPath(): String { +// return if (mContext is SimpleArticleListActivity) { +// "推荐入口-列表" +// } else { +// "全部-文章" +// } +// } +// +// override fun getSyncData(position: Int): Pair? { +// if (position >= mEntityList.size) return null +// val entity = mEntityList[position] +// return Pair(entity.id, entity) +// } +// +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/article/SimpleArticleListFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/article/SimpleArticleListFragment.kt index 85280bb838..ba7705e2d0 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/article/SimpleArticleListFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/article/SimpleArticleListFragment.kt @@ -1,97 +1,99 @@ -package com.gh.gamecenter.qa.article - -import android.content.Intent -import android.os.Bundle -import android.view.View -import androidx.recyclerview.widget.RecyclerView -import com.gh.common.util.EntranceUtils -import com.gh.common.util.viewModelProvider -import com.gh.common.view.VerticalItemDecoration -import com.gh.gamecenter.baselist.ListFragment -import com.gh.gamecenter.baselist.LoadStatus -import com.gh.gamecenter.baselist.LoadType -import com.gh.gamecenter.eventbus.EBReuse -import com.gh.gamecenter.eventbus.EBTypeChange -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.qa.CommunityFragment -import com.gh.gamecenter.qa.article.edit.ArticleEditActivity -import com.gh.gamecenter.qa.entity.ArticleEntity -import org.greenrobot.eventbus.EventBus -import org.greenrobot.eventbus.Subscribe -import org.greenrobot.eventbus.ThreadMode - -class SimpleArticleListFragment : ListFragment() { - - private var mAdapter: SimpleArticleListAdapter? = null - private lateinit var mViewModel: SimpleArticleListViewModel - - private var mCommunityId: String? = null - - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - if (UserManager.getInstance().community.id != mCommunityId) { - mCommunityId = UserManager.getInstance().community.id - onRefresh() - } - } - - override fun onCreate(savedInstanceState: Bundle?) { - mCommunityId = UserManager.getInstance().community.id - mViewModel = provideListViewModel() - mViewModel.sortType = arguments?.getString(EntranceUtils.KEY_TYPE) ?: "" - - super.onCreate(savedInstanceState) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - setNavigationTitle("社区文章") - - mListRv.addOnScrollListener(object : RecyclerView.OnScrollListener() { - override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { - if (dy > CommunityFragment.FOLLOW_HINT_TRIGGER_HEIGHT) { - EventBus.getDefault().post(EBTypeChange(CommunityFragment.EB_HIDE_QUESTION_BUTTON, CommunityFragment.INDEX_ALL)) - } else if (dy < -CommunityFragment.FOLLOW_HINT_TRIGGER_HEIGHT) { - EventBus.getDefault().post(EBTypeChange(CommunityFragment.EB_SHOW_QUESTION_BUTTON, CommunityFragment.INDEX_ALL)) - } - } - }) - } - - override fun getItemDecoration(): RecyclerView.ItemDecoration { - return VerticalItemDecoration(requireContext(), 8F, true) - } - - override fun provideListViewModel(): SimpleArticleListViewModel { - return viewModelProvider() - } - - override fun provideListAdapter(): SimpleArticleListAdapter { - return mAdapter ?: SimpleArticleListAdapter(requireContext()).apply { mAdapter = this } - } - - fun scrollToTop(smooth: Boolean) { - mListRv.stopScroll() - if (smooth) { - mLayoutManager.smoothScrollToPosition(mListRv, null, 0) - } else { - mLayoutManager.scrollToPosition(0) - } - } - - @Subscribe(threadMode = ThreadMode.MAIN) - fun onEventMainThread(reuse: EBReuse) { - if (ArticleEditActivity.ARTICLE_POSTED_TAG == reuse.type) { - mAdapter?.loadChange(LoadStatus.INIT) - mBaseHandler.postDelayed({ mListViewModel.load(LoadType.REFRESH) }, 100) - } - } - - override fun provideSyncAdapter(): RecyclerView.Adapter<*>? { - return mAdapter - } - - override fun addSyncPageObserver(): Boolean { - return true - } -} \ No newline at end of file +//package com.gh.gamecenter.qa.article +// +//import android.content.Intent +//import android.os.Bundle +//import android.view.View +//import androidx.recyclerview.widget.RecyclerView +//import com.gh.common.constant.Constants +//import com.gh.common.util.EntranceUtils +//import com.gh.common.util.viewModelProvider +//import com.gh.common.view.VerticalItemDecoration +//import com.gh.gamecenter.baselist.ListFragment +//import com.gh.gamecenter.baselist.LoadStatus +//import com.gh.gamecenter.baselist.LoadType +//import com.gh.gamecenter.eventbus.EBReuse +//import com.gh.gamecenter.eventbus.EBTypeChange +//import com.gh.gamecenter.forum.home.CommunityHomeFragment +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.qa.CommunityFragment +//import com.gh.gamecenter.qa.article.edit.ArticleEditActivity +//import com.gh.gamecenter.qa.entity.ArticleEntity +//import org.greenrobot.eventbus.EventBus +//import org.greenrobot.eventbus.Subscribe +//import org.greenrobot.eventbus.ThreadMode +// +//class SimpleArticleListFragment : ListFragment() { +// +// private var mAdapter: SimpleArticleListAdapter? = null +// private lateinit var mViewModel: SimpleArticleListViewModel +// +// private var mCommunityId: String? = null +// +// override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { +// super.onActivityResult(requestCode, resultCode, data) +// if (UserManager.getInstance().community.id != mCommunityId) { +// mCommunityId = UserManager.getInstance().community.id +// onRefresh() +// } +// } +// +// override fun onCreate(savedInstanceState: Bundle?) { +// mCommunityId = UserManager.getInstance().community.id +// mViewModel = provideListViewModel() +// mViewModel.sortType = arguments?.getString(EntranceUtils.KEY_TYPE) ?: "" +// +// super.onCreate(savedInstanceState) +// } +// +// override fun onViewCreated(view: View, savedInstanceState: Bundle?) { +// super.onViewCreated(view, savedInstanceState) +// setNavigationTitle("社区文章") +// +// mListRv.addOnScrollListener(object : RecyclerView.OnScrollListener() { +// override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { +// if (dy > Constants.FOLLOW_HINT_TRIGGER_HEIGHT) { +// EventBus.getDefault().post(EBTypeChange(CommunityHomeFragment.EB_HIDE_QUESTION_BUTTON, CommunityFragment.INDEX_ALL)) +// } else if (dy < -Constants.FOLLOW_HINT_TRIGGER_HEIGHT) { +// EventBus.getDefault().post(EBTypeChange(CommunityHomeFragment.EB_SHOW_QUESTION_BUTTON, CommunityFragment.INDEX_ALL)) +// } +// } +// }) +// } +// +// override fun getItemDecoration(): RecyclerView.ItemDecoration { +// return VerticalItemDecoration(requireContext(), 8F, true) +// } +// +// override fun provideListViewModel(): SimpleArticleListViewModel { +// return viewModelProvider() +// } +// +// override fun provideListAdapter(): SimpleArticleListAdapter { +// return mAdapter ?: SimpleArticleListAdapter(requireContext()).apply { mAdapter = this } +// } +// +// fun scrollToTop(smooth: Boolean) { +// mListRv.stopScroll() +// if (smooth) { +// mLayoutManager.smoothScrollToPosition(mListRv, null, 0) +// } else { +// mLayoutManager.scrollToPosition(0) +// } +// } +// +// @Subscribe(threadMode = ThreadMode.MAIN) +// fun onEventMainThread(reuse: EBReuse) { +// if (ArticleEditActivity.ARTICLE_POSTED_TAG == reuse.type) { +// mAdapter?.loadChange(LoadStatus.INIT) +// mBaseHandler.postDelayed({ mListViewModel.load(LoadType.REFRESH) }, 100) +// } +// } +// +// override fun provideSyncAdapter(): RecyclerView.Adapter<*>? { +// return mAdapter +// } +// +// override fun addSyncPageObserver(): Boolean { +// return true +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/article/SimpleArticleListViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/article/SimpleArticleListViewModel.kt index 88dd4750e4..df3737f789 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/article/SimpleArticleListViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/article/SimpleArticleListViewModel.kt @@ -1,46 +1,46 @@ -package com.gh.gamecenter.qa.article - -import android.app.Application -import com.gh.gamecenter.baselist.ListViewModel -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.qa.entity.ArticleEntity -import com.gh.gamecenter.retrofit.RetrofitManager -import com.lightgame.utils.Utils -import io.reactivex.Observable -import io.reactivex.Single - -class SimpleArticleListViewModel(application: Application) - : ListViewModel(application) { - - // 有两种排序方式 1.时间顺序 2.热度顺序,默认时间 - var sortType = "" - - private var mSortType = SortType.SORT_BY_TIME - - override fun provideDataObservable(page: Int): Observable>? { - return null - } - - override fun provideDataSingle(page: Int): Single> { - mSortType = if (sortType == "sortByVote") { - SortType.SORT_BY_VOTE - } else { - SortType.SORT_BY_TIME - } - return RetrofitManager.getInstance() - .api - .getAllCommunityArticles(UserManager.getInstance().community.id, mSortType.value, page, Utils.getTime(getApplication())) - } - - override fun mergeResultLiveData() { - mResultLiveData.addSource(mListLiveData) { mResultLiveData.postValue(it) } - } - - enum class SortType(val value: String) { - SORT_BY_VOTE("vote:-1"), - SORT_BY_TIME("time.create:-1"); - - override fun toString() = value - } - -} \ No newline at end of file +//package com.gh.gamecenter.qa.article +// +//import android.app.Application +//import com.gh.gamecenter.baselist.ListViewModel +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.qa.entity.ArticleEntity +//import com.gh.gamecenter.retrofit.RetrofitManager +//import com.lightgame.utils.Utils +//import io.reactivex.Observable +//import io.reactivex.Single +// +//class SimpleArticleListViewModel(application: Application) +// : ListViewModel(application) { +// +// // 有两种排序方式 1.时间顺序 2.热度顺序,默认时间 +// var sortType = "" +// +// private var mSortType = SortType.SORT_BY_TIME +// +// override fun provideDataObservable(page: Int): Observable>? { +// return null +// } +// +// override fun provideDataSingle(page: Int): Single> { +// mSortType = if (sortType == "sortByVote") { +// SortType.SORT_BY_VOTE +// } else { +// SortType.SORT_BY_TIME +// } +// return RetrofitManager.getInstance() +// .api +// .getAllCommunityArticles(UserManager.getInstance().community.id, mSortType.value, page, Utils.getTime(getApplication())) +// } +// +// override fun mergeResultLiveData() { +// mResultLiveData.addSource(mListLiveData) { mResultLiveData.postValue(it) } +// } +// +// enum class SortType(val value: String) { +// SORT_BY_VOTE("vote:-1"), +// SORT_BY_TIME("time.create:-1"); +// +// override fun toString() = value +// } +// +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleEditActivity.kt b/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleEditActivity.kt index e8618058fd..a77ba2c40f 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleEditActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleEditActivity.kt @@ -10,7 +10,6 @@ import android.os.Message import android.text.TextUtils import android.view.MenuItem import android.view.View -import android.widget.* import androidx.core.content.ContextCompat import androidx.core.widget.doOnTextChanged import androidx.lifecycle.Observer diff --git a/app/src/main/java/com/gh/gamecenter/qa/column/AskColumnAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/column/AskColumnAdapter.kt index d97390ed0a..50c785f29a 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/column/AskColumnAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/column/AskColumnAdapter.kt @@ -1,62 +1,62 @@ -package com.gh.gamecenter.qa.column - -import android.content.Context -import android.view.ViewGroup -import com.gh.base.BaseRecyclerViewHolder -import com.gh.common.util.DataUtils -import com.gh.gamecenter.R -import com.gh.gamecenter.databinding.AskColumnTagItemBinding -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.qa.column.detail.AskColumnDetailActivity -import com.gh.gamecenter.qa.column.order.AskTabOrderActivity -import com.gh.gamecenter.qa.entity.AskTagGroupsEntity -import com.lightgame.adapter.BaseRecyclerAdapter - -class AskColumnAdapter(context: Context) : BaseRecyclerAdapter(context) { - - private var mListData: MutableList? = null - - fun setListData(listData: List) { - this.mListData = listData as MutableList - notifyDataSetChanged() - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AskColumnTabItemViewHolder { - val bind = AskColumnTagItemBinding.bind(mLayoutInflater.inflate(R.layout.ask_column_tag_item, parent, false)) - return AskColumnTabItemViewHolder(bind) - } - - override fun onBindViewHolder(holder: AskColumnTabItemViewHolder, position: Int) { - val entity = if (position == itemCount - 1) { // 跳转排序按钮 - val orderEntity = AskTagGroupsEntity() - orderEntity.name = "调整排序" - orderEntity.icon = "res:///" + R.drawable.ask_column_tag_order - orderEntity - } else { - mListData?.get(position) - } - holder.binding.entity = entity - holder.itemView.setOnClickListener { - if (position == itemCount - 1) { - DataUtils.onMtaEvent(mContext, "问答页面", - UserManager.getInstance().community.name, "专栏-调整排序") - mContext.startActivity(AskTabOrderActivity.getIntent(mContext)) - } else { - DataUtils.onMtaEvent(mContext, "问答页面", - UserManager.getInstance().community.name, "专栏-" + entity?.name) - mContext.startActivity(AskColumnDetailActivity.getIntentByColumn(mContext, entity!!, UserManager.getInstance().community, "", "问答-专栏")) - } - } - } - - override fun getItemCount(): Int { - if (mListData != null && mListData!!.size > 0) { - return mListData!!.size + 1 - } - return 0 - } - - class AskColumnTabItemViewHolder(bind: AskColumnTagItemBinding) : BaseRecyclerViewHolder(bind.root) { - val binding = bind - } -} +//package com.gh.gamecenter.qa.column +// +//import android.content.Context +//import android.view.ViewGroup +//import com.gh.base.BaseRecyclerViewHolder +//import com.gh.common.util.DataUtils +//import com.gh.gamecenter.R +//import com.gh.gamecenter.databinding.AskColumnTagItemBinding +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.qa.column.detail.AskColumnDetailActivity +//import com.gh.gamecenter.qa.column.order.AskTabOrderActivity +//import com.gh.gamecenter.qa.entity.AskTagGroupsEntity +//import com.lightgame.adapter.BaseRecyclerAdapter +// +//class AskColumnAdapter(context: Context) : BaseRecyclerAdapter(context) { +// +// private var mListData: MutableList? = null +// +// fun setListData(listData: List) { +// this.mListData = listData as MutableList +// notifyDataSetChanged() +// } +// +// override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AskColumnTabItemViewHolder { +// val bind = AskColumnTagItemBinding.bind(mLayoutInflater.inflate(R.layout.ask_column_tag_item, parent, false)) +// return AskColumnTabItemViewHolder(bind) +// } +// +// override fun onBindViewHolder(holder: AskColumnTabItemViewHolder, position: Int) { +// val entity = if (position == itemCount - 1) { // 跳转排序按钮 +// val orderEntity = AskTagGroupsEntity() +// orderEntity.name = "调整排序" +// orderEntity.icon = "res:///" + R.drawable.ask_column_tag_order +// orderEntity +// } else { +// mListData?.get(position) +// } +// holder.binding.entity = entity +// holder.itemView.setOnClickListener { +// if (position == itemCount - 1) { +// DataUtils.onMtaEvent(mContext, "问答页面", +// UserManager.getInstance().community.name, "专栏-调整排序") +// mContext.startActivity(AskTabOrderActivity.getIntent(mContext)) +// } else { +// DataUtils.onMtaEvent(mContext, "问答页面", +// UserManager.getInstance().community.name, "专栏-" + entity?.name) +// mContext.startActivity(AskColumnDetailActivity.getIntentByColumn(mContext, entity!!, UserManager.getInstance().community, "", "问答-专栏")) +// } +// } +// } +// +// override fun getItemCount(): Int { +// if (mListData != null && mListData!!.size > 0) { +// return mListData!!.size + 1 +// } +// return 0 +// } +// +// class AskColumnTabItemViewHolder(bind: AskColumnTagItemBinding) : BaseRecyclerViewHolder(bind.root) { +// val binding = bind +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/column/AskColumnFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/column/AskColumnFragment.kt index 8ab8f6c6a5..c042d0c3bc 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/column/AskColumnFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/column/AskColumnFragment.kt @@ -1,65 +1,65 @@ -package com.gh.gamecenter.qa.column - -import android.os.Bundle -import android.view.View -import androidx.core.content.ContextCompat -import androidx.lifecycle.Observer -import androidx.lifecycle.ViewModelProviders -import androidx.recyclerview.widget.GridLayoutManager -import com.gh.base.fragment.BaseFragment -import com.gh.common.view.GridDivider -import com.gh.gamecenter.R -import com.gh.gamecenter.databinding.FragmentAskColumnBinding -import com.halo.assistant.HaloApp - -class AskColumnFragment : BaseFragment() { - - private lateinit var mBinding: FragmentAskColumnBinding - - private var mViewModel: AskColumnViewModel? = null - - private var mLayoutManager: GridLayoutManager? = null - - private var mAdapter: AskColumnAdapter? = null - - override fun getLayoutId(): Int { - return R.layout.fragment_ask_column - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - mBinding = FragmentAskColumnBinding.bind(mCachedView) - val factory = AskColumnViewModel.Factory(HaloApp.getInstance().application) - mViewModel = ViewModelProviders.of(this, factory).get(AskColumnViewModel::class.java) - mViewModel?.tagGroupsObservable?.observe(this, Observer { - if (it != null) { - mAdapter?.setListData(it) - } else { - // null || no_connection 不会出现这一栏 - } - }) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - mAdapter = AskColumnAdapter(requireContext()) - mLayoutManager = GridLayoutManager(context, 2) - mBinding.askColumnList.addItemDecoration( - GridDivider( - context, 2, 2, - ContextCompat.getColor(requireContext(), R.color.cutting_line) - ) - ) - mBinding.askColumnList.layoutManager = mLayoutManager - mBinding.askColumnList.adapter = mAdapter - } - - fun scrollToTop(smooth: Boolean) { - mBinding.askColumnList.stopScroll() - if (smooth) { - mLayoutManager?.smoothScrollToPosition(mBinding.askColumnList, null, 0) - } else { - mLayoutManager?.scrollToPosition(0) - } - } -} +//package com.gh.gamecenter.qa.column +// +//import android.os.Bundle +//import android.view.View +//import androidx.core.content.ContextCompat +//import androidx.lifecycle.Observer +//import androidx.lifecycle.ViewModelProviders +//import androidx.recyclerview.widget.GridLayoutManager +//import com.gh.base.fragment.BaseFragment +//import com.gh.common.view.GridDivider +//import com.gh.gamecenter.R +//import com.gh.gamecenter.databinding.FragmentAskColumnBinding +//import com.halo.assistant.HaloApp +// +//class AskColumnFragment : BaseFragment() { +// +// private lateinit var mBinding: FragmentAskColumnBinding +// +// private var mViewModel: AskColumnViewModel? = null +// +// private var mLayoutManager: GridLayoutManager? = null +// +// private var mAdapter: AskColumnAdapter? = null +// +// override fun getLayoutId(): Int { +// return R.layout.fragment_ask_column +// } +// +// override fun onCreate(savedInstanceState: Bundle?) { +// super.onCreate(savedInstanceState) +// mBinding = FragmentAskColumnBinding.bind(mCachedView) +// val factory = AskColumnViewModel.Factory(HaloApp.getInstance().application) +// mViewModel = ViewModelProviders.of(this, factory).get(AskColumnViewModel::class.java) +// mViewModel?.tagGroupsObservable?.observe(this, Observer { +// if (it != null) { +// mAdapter?.setListData(it) +// } else { +// // null || no_connection 不会出现这一栏 +// } +// }) +// } +// +// override fun onViewCreated(view: View, savedInstanceState: Bundle?) { +// super.onViewCreated(view, savedInstanceState) +// mAdapter = AskColumnAdapter(requireContext()) +// mLayoutManager = GridLayoutManager(context, 2) +// mBinding.askColumnList.addItemDecoration( +// GridDivider( +// context, 2, 2, +// ContextCompat.getColor(requireContext(), R.color.cutting_line) +// ) +// ) +// mBinding.askColumnList.layoutManager = mLayoutManager +// mBinding.askColumnList.adapter = mAdapter +// } +// +// fun scrollToTop(smooth: Boolean) { +// mBinding.askColumnList.stopScroll() +// if (smooth) { +// mLayoutManager?.smoothScrollToPosition(mBinding.askColumnList, null, 0) +// } else { +// mLayoutManager?.scrollToPosition(0) +// } +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/column/AskColumnViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/column/AskColumnViewModel.kt index e74e4d56a6..7068c39742 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/column/AskColumnViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/column/AskColumnViewModel.kt @@ -1,50 +1,50 @@ -package com.gh.gamecenter.qa.column - -import android.app.Application -import androidx.lifecycle.* -import android.text.TextUtils -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.qa.entity.AskTagGroupsEntity - -class AskColumnViewModel(application: Application, private val mRepository: AskColumnRepository) : AndroidViewModel(application) { - - private var mObservableTagGroupsList = MutableLiveData>() - - val tagGroupsObservable: LiveData> - get() = mObservableTagGroupsList - - init { - mObservableTagGroupsList = mRepository.tagGroupsObservable - if (TextUtils.isEmpty(mRepository.curCommunityId) || - mRepository.curCommunityId == UserManager.getInstance().community.id) { - retry() - } - } - - fun cacheAndNotifyTagGroups(tagGroups: List) { - mRepository.cacheAndNotifyTagGroups(tagGroups) - } - - fun reset() { - mRepository.reset() - } - - fun update(entity: List) { - mRepository.update(entity) - } - - fun retry() { - mRepository.retry() - } - - class Factory(private val mApplication: Application) : ViewModelProvider.NewInstanceFactory() { - - private val mRepository: AskColumnRepository = AskColumnRepository.getInstance() - - override fun create(modelClass: Class): T { - - return AskColumnViewModel(mApplication, mRepository) as T - } - } - -} +//package com.gh.gamecenter.qa.column +// +//import android.app.Application +//import androidx.lifecycle.* +//import android.text.TextUtils +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.qa.entity.AskTagGroupsEntity +// +//class AskColumnViewModel(application: Application, private val mRepository: AskColumnRepository) : AndroidViewModel(application) { +// +// private var mObservableTagGroupsList = MutableLiveData>() +// +// val tagGroupsObservable: LiveData> +// get() = mObservableTagGroupsList +// +// init { +// mObservableTagGroupsList = mRepository.tagGroupsObservable +// if (TextUtils.isEmpty(mRepository.curCommunityId) || +// mRepository.curCommunityId == UserManager.getInstance().community.id) { +// retry() +// } +// } +// +// fun cacheAndNotifyTagGroups(tagGroups: List) { +// mRepository.cacheAndNotifyTagGroups(tagGroups) +// } +// +// fun reset() { +// mRepository.reset() +// } +// +// fun update(entity: List) { +// mRepository.update(entity) +// } +// +// fun retry() { +// mRepository.retry() +// } +// +// class Factory(private val mApplication: Application) : ViewModelProvider.NewInstanceFactory() { +// +// private val mRepository: AskColumnRepository = AskColumnRepository.getInstance() +// +// override fun create(modelClass: Class): T { +// +// return AskColumnViewModel(mApplication, mRepository) as T +// } +// } +// +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/column/detail/AskColumnDetailActivity.kt b/app/src/main/java/com/gh/gamecenter/qa/column/detail/AskColumnDetailActivity.kt index 2922dd7f1f..42e0e09ba6 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/column/detail/AskColumnDetailActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/column/detail/AskColumnDetailActivity.kt @@ -1,193 +1,193 @@ -package com.gh.gamecenter.qa.column.detail - -import android.content.Context -import android.content.Intent -import android.os.Bundle -import android.view.MenuItem -import android.view.View -import android.view.ViewGroup -import android.widget.LinearLayout -import androidx.fragment.app.Fragment -import com.gh.base.ToolBarActivity -import com.gh.base.adapter.FragmentAdapter -import com.gh.base.fragment.BaseFragment_TabLayout -import com.gh.common.util.DisplayUtils -import com.gh.common.util.EntranceUtils -import com.gh.gamecenter.R -import com.gh.gamecenter.databinding.ActivityAskColumnDetailBinding -import com.gh.gamecenter.entity.CommunityEntity -import com.gh.gamecenter.qa.column.detail.hot.HotFragment -import com.gh.gamecenter.qa.column.detail.recommends.RecommendsFragment -import com.gh.gamecenter.qa.entity.AskTagGroupsEntity -import com.gh.gamecenter.qa.search.AskSearchActivity -import com.gh.gamecenter.retrofit.Response -import com.gh.gamecenter.retrofit.RetrofitManager -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.schedulers.Schedulers -import retrofit2.HttpException - -class AskColumnDetailActivity : ToolBarActivity() { - - private lateinit var mBinding: ActivityAskColumnDetailBinding - private var mCommunityEntity: CommunityEntity? = null - private var mColumnEntity: AskTagGroupsEntity? = null - private var mQuestionTag: String? = null - - override fun getLayoutId(): Int { - return R.layout.activity_ask_column_detail - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - mColumnEntity = intent.getParcelableExtra(EntranceUtils.KEY_ASK_COLUMN_TAG) - mQuestionTag = intent.getStringExtra(EntranceUtils.KEY_ASK_TAG) - mCommunityEntity = intent.getParcelableExtra(EntranceUtils.KEY_COMMUNITY_DATA) - if (!mQuestionTag.isNullOrEmpty()) { - mBinding.reuseToolbar.root.visibility = View.VISIBLE - mBinding.askSearchActionbar.root.visibility = View.GONE - setNavigationTitle(mQuestionTag) - //setToolbarMenu(R.menu.menu_search) - val menuItem = getMenuItem(R.id.menu_search) - menuItem?.setIcon(R.drawable.ic_column_search) - } else { - // init SearchBar - mBinding.reuseToolbar.root.visibility = View.GONE - mBinding.askSearchActionbar.root.visibility = View.VISIBLE - mBinding.askSearchActionbar.barBack.setOnClickListener { finish() } - mBinding.askSearchActionbar.barQuestionBtn.visibility = View.INVISIBLE - mBinding.askSearchActionbar.barQuestionBtn.layoutParams = LinearLayout.LayoutParams(DisplayUtils.dip2px(20F), ViewGroup.LayoutParams.MATCH_PARENT) - mBinding.askSearchActionbar.barSearchEdit.hint = "专栏内搜索" - mBinding.askSearchActionbar.barSearchEdit.isFocusable = false - mBinding.askSearchActionbar.barSearchEdit.setOnClickListener { skipActivity() } - } - - mBinding = ActivityAskColumnDetailBinding.bind(mContentView) - mBinding.columnDetailDes?.setExpandText("...更多") - mBinding.entity = mColumnEntity - mBinding.reuseNoConnection.root.setOnClickListener { - loadColumn() - } - - if (mColumnEntity != null || mQuestionTag != null) { - mBinding.reuseLoading.root.visibility = View.GONE - initViewPager() - } else { - loadColumn() - } - } - - private fun loadColumn() { - mBinding.reuseLoading.root.visibility = View.VISIBLE - mBinding.reuseNoConnection.root.visibility = View.GONE - RetrofitManager.getInstance().api.getAskColumnsTagsById(mCommunityEntity?.id, - intent.getStringExtra(EntranceUtils.KEY_COLUMN_ID)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(object : Response() { - override fun onResponse(response: AskTagGroupsEntity?) { - mBinding.reuseLoading.root.visibility = View.GONE - mBinding.reuseNoConnection.root.visibility = View.GONE - mBinding.columnDetailAppbar.visibility = View.VISIBLE - mColumnEntity = response - mBinding.entity = mColumnEntity - initViewPager() - } - - override fun onFailure(e: HttpException?) { - if (e?.code() == 404) { - mBinding.reuseNoneData.root.visibility = View.VISIBLE - mBinding.reuseNoConnection.root.visibility = View.GONE - } else { - mBinding.reuseNoneData.root.visibility = View.GONE - mBinding.reuseNoConnection.root.visibility = View.VISIBLE - } - mBinding.reuseLoading.root.visibility = View.GONE - mBinding.columnDetailAppbar.visibility = View.GONE - } - }) - } - - private fun initViewPager() { - // set fragment - val fragmentList = ArrayList() - fragmentList.add(HotFragment()) - fragmentList.add(RecommendsFragment()) - //fragmentList.add(UnansweredFragment()) - - // set tab title - val titleList = ArrayList() - titleList.add("热门") - titleList.add("精华") - //titleList.add("待回答") - - // add fragment argument - val argument = Bundle() - argument.putParcelable(EntranceUtils.KEY_ASK_COLUMN_TAG, mColumnEntity) - argument.putString(EntranceUtils.KEY_ASK_TAG, mQuestionTag) - argument.putParcelable(EntranceUtils.KEY_COMMUNITY_DATA, mCommunityEntity) - for (fragment in fragmentList) fragment.arguments = argument - - mBinding.columnDetailViewpager.offscreenPageLimit = fragmentList.size - mBinding.columnDetailViewpager.adapter = FragmentAdapter(supportFragmentManager, fragmentList, titleList) - mBinding.tabLayout.setupWithViewPager(mBinding.columnDetailViewpager) - mBinding.tabIndicator.setupWithTabLayout(mBinding.tabLayout) - mBinding.tabIndicator.setupWithViewPager(mBinding.columnDetailViewpager) - - for (i in 0 until mBinding.tabLayout.tabCount) { - val tab = mBinding.tabLayout.getTabAt(i) ?: continue - val tabTitle = if (tab.text != null) tab.text.toString() else "" - val tabView = BaseFragment_TabLayout.createDefaultTabCustomView(tabTitle) - tab.customView = tabView - } - BaseFragment_TabLayout.initTabStyle(mBinding.tabLayout, mBinding.columnDetailViewpager.currentItem) - } - - override fun onMenuItemClick(item: MenuItem?): Boolean { - if (item?.itemId == R.id.menu_search) { - skipActivity() - } - return super.onMenuItemClick(item) - } - - private fun skipActivity() { - if (!mQuestionTag.isNullOrEmpty()) { - startActivity(AskSearchActivity.getQuestionTagSearchIntent(this, mQuestionTag, "$mEntrance+(标签专栏)")) - } else if (mColumnEntity != null) { - startActivity(AskSearchActivity.getColumnSearchIntent(this, mColumnEntity?.id, "$mEntrance+(专栏)")) - } - } - - companion object { - - @JvmStatic - fun getIntentByColumnId(context: Context, columnId: String?, community: CommunityEntity, entrance: String, path: String): Intent { - val intent = Intent(context, AskColumnDetailActivity::class.java) - intent.putExtra(EntranceUtils.KEY_COLUMN_ID, columnId) - intent.putExtra(EntranceUtils.KEY_COMMUNITY_DATA, community) - intent.putExtra(EntranceUtils.KEY_ENTRANCE, mergeEntranceAndPath(entrance, path)) - intent.putExtra(EntranceUtils.KEY_PATH, path) - return intent - } - - @JvmStatic - fun getIntentByColumn(context: Context, entity: AskTagGroupsEntity, community: CommunityEntity, entrance: String, path: String): Intent { - val intent = Intent(context, AskColumnDetailActivity::class.java) - intent.putExtra(EntranceUtils.KEY_ASK_COLUMN_TAG, entity) - intent.putExtra(EntranceUtils.KEY_COMMUNITY_DATA, community) - intent.putExtra(EntranceUtils.KEY_ENTRANCE, mergeEntranceAndPath(entrance, path)) - intent.putExtra(EntranceUtils.KEY_PATH, path) - return intent - } - - @JvmStatic - fun getIntentByTag(context: Context, tag: String, community: CommunityEntity, entrance: String, path: String): Intent { - val intent = Intent(context, AskColumnDetailActivity::class.java) - intent.putExtra(EntranceUtils.KEY_ASK_TAG, tag) - intent.putExtra(EntranceUtils.KEY_COMMUNITY_DATA, community) - intent.putExtra(EntranceUtils.KEY_ENTRANCE, mergeEntranceAndPath(entrance, path)) - intent.putExtra(EntranceUtils.KEY_PATH, path) - return intent - } - } -} \ No newline at end of file +//package com.gh.gamecenter.qa.column.detail +// +//import android.content.Context +//import android.content.Intent +//import android.os.Bundle +//import android.view.MenuItem +//import android.view.View +//import android.view.ViewGroup +//import android.widget.LinearLayout +//import androidx.fragment.app.Fragment +//import com.gh.base.ToolBarActivity +//import com.gh.base.adapter.FragmentAdapter +//import com.gh.base.fragment.BaseFragment_TabLayout +//import com.gh.common.util.DisplayUtils +//import com.gh.common.util.EntranceUtils +//import com.gh.gamecenter.R +//import com.gh.gamecenter.databinding.ActivityAskColumnDetailBinding +//import com.gh.gamecenter.entity.CommunityEntity +//import com.gh.gamecenter.qa.column.detail.hot.HotFragment +//import com.gh.gamecenter.qa.column.detail.recommends.RecommendsFragment +//import com.gh.gamecenter.qa.entity.AskTagGroupsEntity +////import com.gh.gamecenter.qa.search.AskSearchActivity +//import com.gh.gamecenter.retrofit.Response +//import com.gh.gamecenter.retrofit.RetrofitManager +//import io.reactivex.android.schedulers.AndroidSchedulers +//import io.reactivex.schedulers.Schedulers +//import retrofit2.HttpException +// +//class AskColumnDetailActivity : ToolBarActivity() { +// +// private lateinit var mBinding: ActivityAskColumnDetailBinding +// private var mCommunityEntity: CommunityEntity? = null +// private var mColumnEntity: AskTagGroupsEntity? = null +// private var mQuestionTag: String? = null +// +// override fun getLayoutId(): Int { +// return R.layout.activity_ask_column_detail +// } +// +// override fun onCreate(savedInstanceState: Bundle?) { +// super.onCreate(savedInstanceState) +// +// mColumnEntity = intent.getParcelableExtra(EntranceUtils.KEY_ASK_COLUMN_TAG) +// mQuestionTag = intent.getStringExtra(EntranceUtils.KEY_ASK_TAG) +// mCommunityEntity = intent.getParcelableExtra(EntranceUtils.KEY_COMMUNITY_DATA) +// if (!mQuestionTag.isNullOrEmpty()) { +// mBinding.reuseToolbar.root.visibility = View.VISIBLE +// mBinding.askSearchActionbar.root.visibility = View.GONE +// setNavigationTitle(mQuestionTag) +// //setToolbarMenu(R.menu.menu_search) +// val menuItem = getMenuItem(R.id.menu_search) +// menuItem?.setIcon(R.drawable.ic_column_search) +// } else { +// // init SearchBar +// mBinding.reuseToolbar.root.visibility = View.GONE +// mBinding.askSearchActionbar.root.visibility = View.VISIBLE +// mBinding.askSearchActionbar.barBack.setOnClickListener { finish() } +// mBinding.askSearchActionbar.barQuestionBtn.visibility = View.INVISIBLE +// mBinding.askSearchActionbar.barQuestionBtn.layoutParams = LinearLayout.LayoutParams(DisplayUtils.dip2px(20F), ViewGroup.LayoutParams.MATCH_PARENT) +// mBinding.askSearchActionbar.barSearchEdit.hint = "专栏内搜索" +// mBinding.askSearchActionbar.barSearchEdit.isFocusable = false +// mBinding.askSearchActionbar.barSearchEdit.setOnClickListener { skipActivity() } +// } +// +// mBinding = ActivityAskColumnDetailBinding.bind(mContentView) +// mBinding.columnDetailDes?.setExpandText("...更多") +// mBinding.entity = mColumnEntity +// mBinding.reuseNoConnection.root.setOnClickListener { +// loadColumn() +// } +// +// if (mColumnEntity != null || mQuestionTag != null) { +// mBinding.reuseLoading.root.visibility = View.GONE +// initViewPager() +// } else { +// loadColumn() +// } +// } +// +// private fun loadColumn() { +// mBinding.reuseLoading.root.visibility = View.VISIBLE +// mBinding.reuseNoConnection.root.visibility = View.GONE +// RetrofitManager.getInstance().api.getAskColumnsTagsById(mCommunityEntity?.id, +// intent.getStringExtra(EntranceUtils.KEY_COLUMN_ID)) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(object : Response() { +// override fun onResponse(response: AskTagGroupsEntity?) { +// mBinding.reuseLoading.root.visibility = View.GONE +// mBinding.reuseNoConnection.root.visibility = View.GONE +// mBinding.columnDetailAppbar.visibility = View.VISIBLE +// mColumnEntity = response +// mBinding.entity = mColumnEntity +// initViewPager() +// } +// +// override fun onFailure(e: HttpException?) { +// if (e?.code() == 404) { +// mBinding.reuseNoneData.root.visibility = View.VISIBLE +// mBinding.reuseNoConnection.root.visibility = View.GONE +// } else { +// mBinding.reuseNoneData.root.visibility = View.GONE +// mBinding.reuseNoConnection.root.visibility = View.VISIBLE +// } +// mBinding.reuseLoading.root.visibility = View.GONE +// mBinding.columnDetailAppbar.visibility = View.GONE +// } +// }) +// } +// +// private fun initViewPager() { +// // set fragment +// val fragmentList = ArrayList() +// fragmentList.add(HotFragment()) +// fragmentList.add(RecommendsFragment()) +// //fragmentList.add(UnansweredFragment()) +// +// // set tab title +// val titleList = ArrayList() +// titleList.add("热门") +// titleList.add("精华") +// //titleList.add("待回答") +// +// // add fragment argument +// val argument = Bundle() +// argument.putParcelable(EntranceUtils.KEY_ASK_COLUMN_TAG, mColumnEntity) +// argument.putString(EntranceUtils.KEY_ASK_TAG, mQuestionTag) +// argument.putParcelable(EntranceUtils.KEY_COMMUNITY_DATA, mCommunityEntity) +// for (fragment in fragmentList) fragment.arguments = argument +// +// mBinding.columnDetailViewpager.offscreenPageLimit = fragmentList.size +// mBinding.columnDetailViewpager.adapter = FragmentAdapter(supportFragmentManager, fragmentList, titleList) +// mBinding.tabLayout.setupWithViewPager(mBinding.columnDetailViewpager) +// mBinding.tabIndicator.setupWithTabLayout(mBinding.tabLayout) +// mBinding.tabIndicator.setupWithViewPager(mBinding.columnDetailViewpager) +// +// for (i in 0 until mBinding.tabLayout.tabCount) { +// val tab = mBinding.tabLayout.getTabAt(i) ?: continue +// val tabTitle = if (tab.text != null) tab.text.toString() else "" +// val tabView = BaseFragment_TabLayout.createDefaultTabCustomView(tabTitle) +// tab.customView = tabView +// } +// BaseFragment_TabLayout.initTabStyle(mBinding.tabLayout, mBinding.columnDetailViewpager.currentItem) +// } +// +// override fun onMenuItemClick(item: MenuItem?): Boolean { +// if (item?.itemId == R.id.menu_search) { +// skipActivity() +// } +// return super.onMenuItemClick(item) +// } +// +// private fun skipActivity() { +// if (!mQuestionTag.isNullOrEmpty()) { +// startActivity(AskSearchActivity.getQuestionTagSearchIntent(this, mQuestionTag, "$mEntrance+(标签专栏)")) +// } else if (mColumnEntity != null) { +// startActivity(AskSearchActivity.getColumnSearchIntent(this, mColumnEntity?.id, "$mEntrance+(专栏)")) +// } +// } +// +// companion object { +// +// @JvmStatic +// fun getIntentByColumnId(context: Context, columnId: String?, community: CommunityEntity, entrance: String, path: String): Intent { +// val intent = Intent(context, AskColumnDetailActivity::class.java) +// intent.putExtra(EntranceUtils.KEY_COLUMN_ID, columnId) +// intent.putExtra(EntranceUtils.KEY_COMMUNITY_DATA, community) +// intent.putExtra(EntranceUtils.KEY_ENTRANCE, mergeEntranceAndPath(entrance, path)) +// intent.putExtra(EntranceUtils.KEY_PATH, path) +// return intent +// } +// +// @JvmStatic +// fun getIntentByColumn(context: Context, entity: AskTagGroupsEntity, community: CommunityEntity, entrance: String, path: String): Intent { +// val intent = Intent(context, AskColumnDetailActivity::class.java) +// intent.putExtra(EntranceUtils.KEY_ASK_COLUMN_TAG, entity) +// intent.putExtra(EntranceUtils.KEY_COMMUNITY_DATA, community) +// intent.putExtra(EntranceUtils.KEY_ENTRANCE, mergeEntranceAndPath(entrance, path)) +// intent.putExtra(EntranceUtils.KEY_PATH, path) +// return intent +// } +// +// @JvmStatic +// fun getIntentByTag(context: Context, tag: String, community: CommunityEntity, entrance: String, path: String): Intent { +// val intent = Intent(context, AskColumnDetailActivity::class.java) +// intent.putExtra(EntranceUtils.KEY_ASK_TAG, tag) +// intent.putExtra(EntranceUtils.KEY_COMMUNITY_DATA, community) +// intent.putExtra(EntranceUtils.KEY_ENTRANCE, mergeEntranceAndPath(entrance, path)) +// intent.putExtra(EntranceUtils.KEY_PATH, path) +// return intent +// } +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/column/detail/hot/HotAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/column/detail/hot/HotAdapter.kt index da79d70e96..49a8a54739 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/column/detail/hot/HotAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/column/detail/hot/HotAdapter.kt @@ -1,96 +1,95 @@ -package com.gh.gamecenter.qa.column.detail.hot - -import android.content.Context -import androidx.recyclerview.widget.RecyclerView -import android.view.ViewGroup -import com.gh.common.constant.ItemViewType -import com.gh.common.syncpage.ISyncAdapterHandler -import com.gh.gamecenter.R -import com.gh.gamecenter.adapter.viewholder.FooterViewHolder -import com.gh.gamecenter.baselist.ListAdapter -import com.gh.gamecenter.databinding.CommunityAnswerItemBinding -import com.gh.gamecenter.entity.CommunityEntity -import com.gh.gamecenter.entity.SpecialColumn -import com.gh.gamecenter.qa.answer.CommunityAnswerItemViewHolder -import com.gh.gamecenter.qa.answer.detail.AnswerDetailActivity -import com.gh.gamecenter.qa.article.detail.ArticleDetailActivity -import com.gh.gamecenter.qa.entity.AnswerEntity -import com.gh.gamecenter.qa.entity.Questions -import com.gh.gamecenter.qa.questions.detail.QuestionsDetailActivity - -class HotAdapter(context: Context, - private val mEntrance: String, - private val mPath: String, - private val mSpecialColumn: SpecialColumn) : ListAdapter(context), ISyncAdapterHandler { - - override fun getItemViewType(position: Int): Int { - return if (position == itemCount - 1) ItemViewType.ITEM_FOOTER else ItemViewType.ITEM_BODY - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - return when (viewType) { - ItemViewType.ITEM_FOOTER -> { - FooterViewHolder(mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false)) - } - else -> { - val view = mLayoutInflater.inflate(R.layout.community_answer_item, parent, false) - CommunityAnswerItemViewHolder(CommunityAnswerItemBinding.bind(view)) - } - } - } - - override fun getItemCount(): Int { - return if (mEntityList == null || mEntityList.isEmpty()) 0 else mEntityList.size + ListAdapter.FOOTER_ITEM_COUNT - } - - override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - if (holder is CommunityAnswerItemViewHolder) { - val answerEntity = mEntityList[position] - if ("community_article" == answerEntity.type) { - val questions = Questions() - questions.title = answerEntity.articleTitle - answerEntity.questions = questions - } - holder.bindAnswerItem(answerEntity, mEntrance, mPath) - holder.itemView.setOnClickListener { - if ("community_article" == answerEntity.type) { - mContext.startActivity( - ArticleDetailActivity.getIntent( - mContext, - CommunityEntity(answerEntity.articleCommunityId), - answerEntity.id!!, - mEntrance, - mPath, - mSpecialColumn)) - } else { - mContext.startActivity(AnswerDetailActivity.getIntent(mContext, answerEntity.id, mEntrance, mPath, mSpecialColumn)) - } - } - holder.binding.title.setOnClickListener { - if ("community_article" == answerEntity.type) { - mContext.startActivity( - ArticleDetailActivity.getIntent( - mContext, - CommunityEntity(answerEntity.articleCommunityId), - answerEntity.id!!, - mEntrance, - mPath, - mSpecialColumn)) - } else { - val questions = answerEntity.questions - mContext.startActivity(QuestionsDetailActivity.getIntent(mContext, questions.id, mEntrance, mPath, mSpecialColumn)) - } - } - } else if (holder is FooterViewHolder) { - holder.initItemPadding() - holder.initFooterViewHolder(mIsLoading, mIsNetworkError, mIsOver) - } - } - - override fun getSyncData(position: Int): Pair? { - if (position >= mEntityList.size) return null - val entity = mEntityList[position] - return Pair(entity.id ?: "", entity) - } - -} \ No newline at end of file +//package com.gh.gamecenter.qa.column.detail.hot +// +//import android.content.Context +//import android.view.ViewGroup +//import androidx.recyclerview.widget.RecyclerView +//import com.gh.common.constant.ItemViewType +//import com.gh.common.syncpage.ISyncAdapterHandler +//import com.gh.gamecenter.R +//import com.gh.gamecenter.adapter.viewholder.FooterViewHolder +//import com.gh.gamecenter.baselist.ListAdapter +//import com.gh.gamecenter.databinding.CommunityAnswerItemBinding +//import com.gh.gamecenter.entity.CommunityEntity +//import com.gh.gamecenter.entity.SpecialColumn +//import com.gh.gamecenter.qa.answer.CommunityAnswerItemViewHolder +//import com.gh.gamecenter.qa.answer.detail.AnswerDetailActivity +//import com.gh.gamecenter.qa.article.detail.ArticleDetailActivity +//import com.gh.gamecenter.qa.entity.AnswerEntity +//import com.gh.gamecenter.qa.entity.Questions +// +//class HotAdapter(context: Context, +// private val mEntrance: String, +// private val mPath: String, +// private val mSpecialColumn: SpecialColumn) : ListAdapter(context), ISyncAdapterHandler { +// +// override fun getItemViewType(position: Int): Int { +// return if (position == itemCount - 1) ItemViewType.ITEM_FOOTER else ItemViewType.ITEM_BODY +// } +// +// override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { +// return when (viewType) { +// ItemViewType.ITEM_FOOTER -> { +// FooterViewHolder(mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false)) +// } +// else -> { +// val view = mLayoutInflater.inflate(R.layout.community_answer_item, parent, false) +// CommunityAnswerItemViewHolder(CommunityAnswerItemBinding.bind(view)) +// } +// } +// } +// +// override fun getItemCount(): Int { +// return if (mEntityList == null || mEntityList.isEmpty()) 0 else mEntityList.size + ListAdapter.FOOTER_ITEM_COUNT +// } +// +// override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { +// if (holder is CommunityAnswerItemViewHolder) { +// val answerEntity = mEntityList[position] +// if ("community_article" == answerEntity.type) { +// val questions = Questions() +// questions.title = answerEntity.articleTitle +// answerEntity.questions = questions +// } +// holder.bindAnswerItem(answerEntity, mEntrance, mPath) +// holder.itemView.setOnClickListener { +// if ("community_article" == answerEntity.type) { +// mContext.startActivity( +// ArticleDetailActivity.getIntent( +// mContext, +// CommunityEntity(answerEntity.articleCommunityId), +// answerEntity.id!!, +// mEntrance, +// mPath, +// mSpecialColumn)) +// } else { +// mContext.startActivity(AnswerDetailActivity.getIntent(mContext, answerEntity.id, mEntrance, mPath, mSpecialColumn)) +// } +// } +// holder.binding.title.setOnClickListener { +// if ("community_article" == answerEntity.type) { +// mContext.startActivity( +// ArticleDetailActivity.getIntent( +// mContext, +// CommunityEntity(answerEntity.articleCommunityId), +// answerEntity.id!!, +// mEntrance, +// mPath, +// mSpecialColumn)) +// } else { +//// val questions = answerEntity.questions +//// mContext.startActivity(QuestionsDetailActivity.getIntent(mContext, questions.id, mEntrance, mPath, mSpecialColumn)) +// } +// } +// } else if (holder is FooterViewHolder) { +// holder.initItemPadding() +// holder.initFooterViewHolder(mIsLoading, mIsNetworkError, mIsOver) +// } +// } +// +// override fun getSyncData(position: Int): Pair? { +// if (position >= mEntityList.size) return null +// val entity = mEntityList[position] +// return Pair(entity.id ?: "", entity) +// } +// +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/column/detail/hot/HotFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/column/detail/hot/HotFragment.kt index 66cab6c7ac..679c1b3c5a 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/column/detail/hot/HotFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/column/detail/hot/HotFragment.kt @@ -1,62 +1,62 @@ -package com.gh.gamecenter.qa.column.detail.hot - -import androidx.lifecycle.ViewModelProviders -import android.view.View -import androidx.recyclerview.widget.RecyclerView -import com.gh.common.util.EntranceUtils -import com.gh.gamecenter.baselist.ListFragment -import com.gh.gamecenter.entity.CommunityEntity -import com.gh.gamecenter.entity.SpecialColumn -import com.gh.gamecenter.qa.entity.AnswerEntity -import com.gh.gamecenter.qa.entity.AskTagGroupsEntity -import com.halo.assistant.HaloApp - -class HotFragment : ListFragment() { - - private var mAdapter: HotAdapter? = null - private var mSpecialColumn = SpecialColumn() - - override fun provideListAdapter(): HotAdapter? { - if (mAdapter == null) { - mSpecialColumn.name = mListViewModel.tag ?: mListViewModel.columnTagEntity!!.name - mSpecialColumn.tab = "热门" - val path = if (mListViewModel.tag != null) { - mSpecialColumn.type = "标签专栏" - "标签专栏-热门" - } else { - mSpecialColumn.type = "社区专栏" - "专栏-热门" - } - mAdapter = HotAdapter(requireContext(), mEntrance, path, mSpecialColumn) - } - return mAdapter - } - - override fun provideListViewModel(): HotViewModel { - val tag = requireArguments().getString(EntranceUtils.KEY_ASK_TAG) - val entity = requireArguments().getParcelable(EntranceUtils.KEY_ASK_COLUMN_TAG) - val factory = HotViewModel.Factory(HaloApp.getInstance().application - , if (tag.isNullOrEmpty()) entity as Any else tag, requireArguments().getParcelable(EntranceUtils.KEY_COMMUNITY_DATA) - ?: CommunityEntity()) - return ViewModelProviders.of(this, factory).get(HotViewModel::class.java) - } - - override fun onLoadEmpty() { - super.onLoadEmpty() - mListRv.visibility = View.VISIBLE - } - - override fun onLoadError() { - super.onLoadError() - mListRv.visibility = View.VISIBLE - } - - - override fun provideSyncAdapter(): RecyclerView.Adapter<*>? { - return mAdapter - } - - override fun addSyncPageObserver(): Boolean { - return true - } -} \ No newline at end of file +//package com.gh.gamecenter.qa.column.detail.hot +// +//import androidx.lifecycle.ViewModelProviders +//import android.view.View +//import androidx.recyclerview.widget.RecyclerView +//import com.gh.common.util.EntranceUtils +//import com.gh.gamecenter.baselist.ListFragment +//import com.gh.gamecenter.entity.CommunityEntity +//import com.gh.gamecenter.entity.SpecialColumn +//import com.gh.gamecenter.qa.entity.AnswerEntity +//import com.gh.gamecenter.qa.entity.AskTagGroupsEntity +//import com.halo.assistant.HaloApp +// +//class HotFragment : ListFragment() { +// +// private var mAdapter: HotAdapter? = null +// private var mSpecialColumn = SpecialColumn() +// +// override fun provideListAdapter(): HotAdapter? { +// if (mAdapter == null) { +// mSpecialColumn.name = mListViewModel.tag ?: mListViewModel.columnTagEntity!!.name +// mSpecialColumn.tab = "热门" +// val path = if (mListViewModel.tag != null) { +// mSpecialColumn.type = "标签专栏" +// "标签专栏-热门" +// } else { +// mSpecialColumn.type = "社区专栏" +// "专栏-热门" +// } +// mAdapter = HotAdapter(requireContext(), mEntrance, path, mSpecialColumn) +// } +// return mAdapter +// } +// +// override fun provideListViewModel(): HotViewModel { +// val tag = requireArguments().getString(EntranceUtils.KEY_ASK_TAG) +// val entity = requireArguments().getParcelable(EntranceUtils.KEY_ASK_COLUMN_TAG) +// val factory = HotViewModel.Factory(HaloApp.getInstance().application +// , if (tag.isNullOrEmpty()) entity as Any else tag, requireArguments().getParcelable(EntranceUtils.KEY_COMMUNITY_DATA) +// ?: CommunityEntity()) +// return ViewModelProviders.of(this, factory).get(HotViewModel::class.java) +// } +// +// override fun onLoadEmpty() { +// super.onLoadEmpty() +// mListRv.visibility = View.VISIBLE +// } +// +// override fun onLoadError() { +// super.onLoadError() +// mListRv.visibility = View.VISIBLE +// } +// +// +// override fun provideSyncAdapter(): RecyclerView.Adapter<*>? { +// return mAdapter +// } +// +// override fun addSyncPageObserver(): Boolean { +// return true +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/column/detail/recommends/RecommendsAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/column/detail/recommends/RecommendsAdapter.kt index c8e35daf96..cebc6c0e68 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/column/detail/recommends/RecommendsAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/column/detail/recommends/RecommendsAdapter.kt @@ -1,8 +1,8 @@ package com.gh.gamecenter.qa.column.detail.recommends import android.content.Context -import androidx.recyclerview.widget.RecyclerView import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView import com.gh.common.constant.ItemViewType import com.gh.common.syncpage.ISyncAdapterHandler import com.gh.gamecenter.R @@ -16,7 +16,6 @@ import com.gh.gamecenter.qa.answer.detail.AnswerDetailActivity import com.gh.gamecenter.qa.article.detail.ArticleDetailActivity import com.gh.gamecenter.qa.entity.AnswerEntity import com.gh.gamecenter.qa.entity.Questions -import com.gh.gamecenter.qa.questions.detail.QuestionsDetailActivity class RecommendsAdapter(context: Context, private val mEntrance: String, @@ -75,8 +74,8 @@ class RecommendsAdapter(context: Context, mPath, mSpecialColumn)) } else { - val questions = answerEntity.questions - mContext.startActivity(QuestionsDetailActivity.getIntent(mContext, questions.id, mEntrance, mPath, mSpecialColumn)) +// val questions = answerEntity.questions +// mContext.startActivity(QuestionsDetailActivity.getIntent(mContext, questions.id, mEntrance, mPath, mSpecialColumn)) } } } else if (holder is FooterViewHolder) { diff --git a/app/src/main/java/com/gh/gamecenter/qa/column/detail/unanswered/UnansweredAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/column/detail/unanswered/UnansweredAdapter.kt index 261b205f0f..813827c4b6 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/column/detail/unanswered/UnansweredAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/column/detail/unanswered/UnansweredAdapter.kt @@ -12,7 +12,6 @@ import com.gh.gamecenter.databinding.CommunityQuestionItemBinding import com.gh.gamecenter.entity.SpecialColumn import com.gh.gamecenter.qa.entity.Questions import com.gh.gamecenter.qa.questions.CommunityQuestionViewHolder -import com.gh.gamecenter.qa.questions.detail.QuestionsDetailActivity class UnansweredAdapter(context: Context, private val mEntrance: String, @@ -44,7 +43,7 @@ class UnansweredAdapter(context: Context, val questions = mEntityList[position] holder.bindQuestionViewHolder(questions, mEntrance, mPath) holder.itemView.setOnClickListener { - mContext.startActivity(QuestionsDetailActivity.getIntent(mContext, questions.id, mEntrance, mPath, mSpecialColumn)) +// mContext.startActivity(QuestionsDetailActivity.getIntent(mContext, questions.id, mEntrance, mPath, mSpecialColumn)) } } else if (holder is FooterViewHolder) { holder.initItemPadding() diff --git a/app/src/main/java/com/gh/gamecenter/qa/column/order/AskTabOrderActivity.java b/app/src/main/java/com/gh/gamecenter/qa/column/order/AskTabOrderActivity.java index 91dca07cc0..3b021e528d 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/column/order/AskTabOrderActivity.java +++ b/app/src/main/java/com/gh/gamecenter/qa/column/order/AskTabOrderActivity.java @@ -1,17 +1,17 @@ -package com.gh.gamecenter.qa.column.order; - -import android.content.Context; -import android.content.Intent; - -import com.gh.gamecenter.NormalActivity; - -/** - * Created by khy on 10/04/18. - */ - -public class AskTabOrderActivity extends NormalActivity { - - public static Intent getIntent(Context context) { - return getTargetIntent(context, AskTabOrderActivity.class, AskTabOrderFragment.class); - } -} +//package com.gh.gamecenter.qa.column.order; +// +//import android.content.Context; +//import android.content.Intent; +// +//import com.gh.gamecenter.NormalActivity; +// +///** +// * Created by khy on 10/04/18. +// */ +// +//public class AskTabOrderActivity extends NormalActivity { +// +// public static Intent getIntent(Context context) { +// return getTargetIntent(context, AskTabOrderActivity.class, AskTabOrderFragment.class); +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/column/order/AskTabOrderAdapter.java b/app/src/main/java/com/gh/gamecenter/qa/column/order/AskTabOrderAdapter.java index 9d37b20b18..0ba9e4d351 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/column/order/AskTabOrderAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/qa/column/order/AskTabOrderAdapter.java @@ -1,59 +1,59 @@ -package com.gh.gamecenter.qa.column.order; - -import android.content.Context; -import android.graphics.Color; - -import androidx.core.content.ContextCompat; -import androidx.recyclerview.widget.RecyclerView; - -import android.view.View; -import android.view.ViewGroup; - -import com.gh.common.util.ImageUtils; -import com.gh.gamecenter.R; -import com.gh.gamecenter.adapter.viewholder.AskTabItemViewHolder; -import com.gh.gamecenter.databinding.AskOrderTabItemBinding; -import com.gh.gamecenter.qa.entity.AskTagGroupsEntity; -import com.lightgame.adapter.BaseRecyclerAdapter; - -import java.util.List; - -/** - * Created by khy on 6/12/17. - */ - -public class AskTabOrderAdapter extends BaseRecyclerAdapter { - - private List mTagList; - - public AskTabOrderAdapter(Context context, List rvData) { - super(context); - mTagList = rvData; - } - - @Override - public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View view = mLayoutInflater.inflate(R.layout.ask_order_tab_item, parent, false); - return new AskTabItemViewHolder(AskOrderTabItemBinding.bind(view)); - } - - @Override - public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { - if (holder instanceof AskTabItemViewHolder) { - AskTagGroupsEntity tagEntity = mTagList.get(position); - AskTabItemViewHolder viewHolder = (AskTabItemViewHolder) holder; - viewHolder.binding.tabItemType.setText(tagEntity.getName()); - ImageUtils.display(viewHolder.binding.tabItemIcon, tagEntity.getIcon()); - if (position % 2 == 0) { - viewHolder.binding.tabItem.setBackgroundColor(ContextCompat.getColor(mContext, R.color.text_fbfbfb)); - } else { - viewHolder.binding.tabItem.setBackgroundColor(Color.WHITE); - } - } - } - - @Override - public int getItemCount() { - return mTagList.size(); - } -} +//package com.gh.gamecenter.qa.column.order; +// +//import android.content.Context; +//import android.graphics.Color; +// +//import androidx.core.content.ContextCompat; +//import androidx.recyclerview.widget.RecyclerView; +// +//import android.view.View; +//import android.view.ViewGroup; +// +//import com.gh.common.util.ImageUtils; +//import com.gh.gamecenter.R; +//import com.gh.gamecenter.adapter.viewholder.AskTabItemViewHolder; +//import com.gh.gamecenter.databinding.AskOrderTabItemBinding; +//import com.gh.gamecenter.qa.entity.AskTagGroupsEntity; +//import com.lightgame.adapter.BaseRecyclerAdapter; +// +//import java.util.List; +// +///** +// * Created by khy on 6/12/17. +// */ +// +//public class AskTabOrderAdapter extends BaseRecyclerAdapter { +// +// private List mTagList; +// +// public AskTabOrderAdapter(Context context, List rvData) { +// super(context); +// mTagList = rvData; +// } +// +// @Override +// public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { +// View view = mLayoutInflater.inflate(R.layout.ask_order_tab_item, parent, false); +// return new AskTabItemViewHolder(AskOrderTabItemBinding.bind(view)); +// } +// +// @Override +// public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { +// if (holder instanceof AskTabItemViewHolder) { +// AskTagGroupsEntity tagEntity = mTagList.get(position); +// AskTabItemViewHolder viewHolder = (AskTabItemViewHolder) holder; +// viewHolder.binding.tabItemType.setText(tagEntity.getName()); +// ImageUtils.display(viewHolder.binding.tabItemIcon, tagEntity.getIcon()); +// if (position % 2 == 0) { +// viewHolder.binding.tabItem.setBackgroundColor(ContextCompat.getColor(mContext, R.color.text_fbfbfb)); +// } else { +// viewHolder.binding.tabItem.setBackgroundColor(Color.WHITE); +// } +// } +// } +// +// @Override +// public int getItemCount() { +// return mTagList.size(); +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/column/order/AskTabOrderFragment.java b/app/src/main/java/com/gh/gamecenter/qa/column/order/AskTabOrderFragment.java index cda1c89b01..6e30aab604 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/column/order/AskTabOrderFragment.java +++ b/app/src/main/java/com/gh/gamecenter/qa/column/order/AskTabOrderFragment.java @@ -1,229 +1,229 @@ -package com.gh.gamecenter.qa.column.order; - -import android.app.Service; -import android.os.Bundle; -import android.os.Vibrator; -import android.view.GestureDetector; -import android.view.MotionEvent; -import android.view.View; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.core.view.GestureDetectorCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProviders; -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.ItemTouchHelper; -import androidx.recyclerview.widget.RecyclerView; - -import com.gh.base.fragment.WaitingDialogFragment; -import com.gh.common.util.DialogHelper; -import com.gh.common.view.GridDivider; -import com.gh.gamecenter.R; -import com.gh.gamecenter.databinding.ActivityAsktabOrderBinding; -import com.gh.gamecenter.normal.NormalFragment; -import com.gh.gamecenter.qa.column.AskColumnViewModel; -import com.gh.gamecenter.qa.entity.AskTagGroupsEntity; -import com.halo.assistant.HaloApp; - -import java.util.Collections; -import java.util.List; - -import butterknife.OnClick; - -/** - * Created by khy on 26/12/17. - */ - -public class AskTabOrderFragment extends NormalFragment { - - private ActivityAsktabOrderBinding mBinding; - - private AskColumnViewModel mViewModel; - - private AskTabOrderAdapter mAdapter; - - private WaitingDialogFragment mPostDialog; - - private List mTagList; - - private boolean isReset = true; // 重置/没有调整过排序 - - @Override - protected int getLayoutId() { - return R.layout.activity_asktab_order; - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - setNavigationTitle(getString(R.string.ask_tab_order_title)); - mBinding = ActivityAsktabOrderBinding.bind(view); - - final AskColumnViewModel.Factory factory = new AskColumnViewModel.Factory(HaloApp.getInstance().getApplication()); - mViewModel = ViewModelProviders.of(this, factory).get(AskColumnViewModel.class); - - mViewModel.getTagGroupsObservable().observe(getViewLifecycleOwner(), new Observer>() { - @Override - public void onChanged(@Nullable List askTagGroups) { - if (askTagGroups != null) { - if (mTagList == null || isReset) { - mTagList = askTagGroups; - initView(); - } - } else { - mViewModel.cacheAndNotifyTagGroups(null); - if (getActivity() != null) getActivity().finish(); - } - - if (mPostDialog != null) { - mPostDialog.dismissAllowingStateLoss(); - } - } - }); - } - - @OnClick(R.id.asktab_order_reset) - public void onClick(View view) { - DialogHelper.showCenterDialog(requireContext(), "提示", "确定要恢复为默认排序吗?" - , "确定", "取消 ", () -> { - mPostDialog = WaitingDialogFragment.newInstance(getString(R.string.ask_tags_reseting)); - mPostDialog.show(getChildFragmentManager(), null); - - isReset = true; - mViewModel.reset(); - }, () -> { - }); - - } - - @Override - public boolean onBackPressed() { - if (!isReset) mViewModel.update(mTagList); - return super.onBackPressed(); - } - - private void initView() { - itemTouchHelper.attachToRecyclerView(mBinding.asktabOrderRv); - mBinding.asktabOrderRv.setLayoutManager(new GridLayoutManager(getContext(), 5)); - - mAdapter = new AskTabOrderAdapter(getContext(), mTagList); - mBinding.asktabOrderRv.setAdapter(mAdapter); - - mBinding.asktabOrderRv.addItemDecoration(new GridDivider(getContext(), 1, 5, ContextCompat.getColor(getContext(), R.color.cutting_line))); - mBinding.asktabOrderRv.addOnItemTouchListener(new OnRvLongClickListener(mBinding.asktabOrderRv) { - @Override - public void onItemLongClick(RecyclerView.ViewHolder vh) { - itemTouchHelper.startDrag(vh); - } - }); - } - - private ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() { - @Override - public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) { - if (actionState == ItemTouchHelper.ACTION_STATE_DRAG) { - //获取系统震动服务 - Vibrator vib = (Vibrator) getContext().getSystemService(Service.VIBRATOR_SERVICE); - if (vib != null) vib.vibrate(70); - } - super.onSelectedChanged(viewHolder, actionState); - } - - @Override - public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { - super.clearView(recyclerView, viewHolder); - if (recyclerView.getScrollState() == RecyclerView.SCROLL_STATE_IDLE) - mAdapter.notifyDataSetChanged(); - } - - @Override - public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { - final int dragFlags; - final int swipeFlags; - - if (recyclerView.getLayoutManager() instanceof GridLayoutManager) { - dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT; - swipeFlags = 0; - } else { - dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; - swipeFlags = 0; - } - - return makeMovementFlags(dragFlags, swipeFlags); - } - - @Override - public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { - int fromPosition = viewHolder.getAdapterPosition();//得到拖动ViewHolder的position - int toPosition = target.getAdapterPosition();//得到目标ViewHolder的position - - if (fromPosition < toPosition) { - for (int i = fromPosition; i < toPosition; i++) { - Collections.swap(mTagList, i, i + 1); - } - } else { - for (int i = fromPosition; i > toPosition; i--) { - Collections.swap(mTagList, i, i - 1); - } - } - - mAdapter.notifyItemMoved(fromPosition, toPosition); - isReset = false; - mViewModel.cacheAndNotifyTagGroups(mTagList); // 刷新问答-问题页面 - return true; - } - - @Override - public boolean isLongPressDragEnabled() { - return false; - } - - @Override - public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { - - } - }); - - private abstract class OnRvLongClickListener implements RecyclerView.OnItemTouchListener { - - private GestureDetectorCompat mGestureDetector; - private RecyclerView recyclerView; - - public OnRvLongClickListener(RecyclerView recyclerView) { - this.recyclerView = recyclerView; - mGestureDetector = new GestureDetectorCompat(recyclerView.getContext(), new ItemTouchHelperGestureListener()); - } - - @Override - public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { - mGestureDetector.onTouchEvent(e); - return false; - } - - @Override - public void onTouchEvent(RecyclerView rv, MotionEvent e) { - mGestureDetector.onTouchEvent(e); - } - - @Override - public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { - - } - - private class ItemTouchHelperGestureListener extends GestureDetector.SimpleOnGestureListener { - - @Override - public void onLongPress(MotionEvent e) { - View child = recyclerView.findChildViewUnder(e.getX(), e.getY()); - if (child != null) { - RecyclerView.ViewHolder vh = recyclerView.getChildViewHolder(child); - onItemLongClick(vh); - } - } - } - - public abstract void onItemLongClick(RecyclerView.ViewHolder vh); - } -} +//package com.gh.gamecenter.qa.column.order; +// +//import android.app.Service; +//import android.os.Bundle; +//import android.os.Vibrator; +//import android.view.GestureDetector; +//import android.view.MotionEvent; +//import android.view.View; +// +//import androidx.annotation.NonNull; +//import androidx.annotation.Nullable; +//import androidx.core.content.ContextCompat; +//import androidx.core.view.GestureDetectorCompat; +//import androidx.lifecycle.Observer; +//import androidx.lifecycle.ViewModelProviders; +//import androidx.recyclerview.widget.GridLayoutManager; +//import androidx.recyclerview.widget.ItemTouchHelper; +//import androidx.recyclerview.widget.RecyclerView; +// +//import com.gh.base.fragment.WaitingDialogFragment; +//import com.gh.common.util.DialogHelper; +//import com.gh.common.view.GridDivider; +//import com.gh.gamecenter.R; +//import com.gh.gamecenter.databinding.ActivityAsktabOrderBinding; +//import com.gh.gamecenter.normal.NormalFragment; +//import com.gh.gamecenter.qa.column.AskColumnViewModel; +//import com.gh.gamecenter.qa.entity.AskTagGroupsEntity; +//import com.halo.assistant.HaloApp; +// +//import java.util.Collections; +//import java.util.List; +// +//import butterknife.OnClick; +// +///** +// * Created by khy on 26/12/17. +// */ +// +//public class AskTabOrderFragment extends NormalFragment { +// +// private ActivityAsktabOrderBinding mBinding; +// +// private AskColumnViewModel mViewModel; +// +// private AskTabOrderAdapter mAdapter; +// +// private WaitingDialogFragment mPostDialog; +// +// private List mTagList; +// +// private boolean isReset = true; // 重置/没有调整过排序 +// +// @Override +// protected int getLayoutId() { +// return R.layout.activity_asktab_order; +// } +// +// @Override +// public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { +// super.onViewCreated(view, savedInstanceState); +// setNavigationTitle(getString(R.string.ask_tab_order_title)); +// mBinding = ActivityAsktabOrderBinding.bind(view); +// +// final AskColumnViewModel.Factory factory = new AskColumnViewModel.Factory(HaloApp.getInstance().getApplication()); +// mViewModel = ViewModelProviders.of(this, factory).get(AskColumnViewModel.class); +// +// mViewModel.getTagGroupsObservable().observe(getViewLifecycleOwner(), new Observer>() { +// @Override +// public void onChanged(@Nullable List askTagGroups) { +// if (askTagGroups != null) { +// if (mTagList == null || isReset) { +// mTagList = askTagGroups; +// initView(); +// } +// } else { +// mViewModel.cacheAndNotifyTagGroups(null); +// if (getActivity() != null) getActivity().finish(); +// } +// +// if (mPostDialog != null) { +// mPostDialog.dismissAllowingStateLoss(); +// } +// } +// }); +// } +// +// @OnClick(R.id.asktab_order_reset) +// public void onClick(View view) { +// DialogHelper.showCenterDialog(requireContext(), "提示", "确定要恢复为默认排序吗?" +// , "确定", "取消 ", () -> { +// mPostDialog = WaitingDialogFragment.newInstance(getString(R.string.ask_tags_reseting)); +// mPostDialog.show(getChildFragmentManager(), null); +// +// isReset = true; +// mViewModel.reset(); +// }, () -> { +// }); +// +// } +// +// @Override +// public boolean onBackPressed() { +// if (!isReset) mViewModel.update(mTagList); +// return super.onBackPressed(); +// } +// +// private void initView() { +// itemTouchHelper.attachToRecyclerView(mBinding.asktabOrderRv); +// mBinding.asktabOrderRv.setLayoutManager(new GridLayoutManager(getContext(), 5)); +// +// mAdapter = new AskTabOrderAdapter(getContext(), mTagList); +// mBinding.asktabOrderRv.setAdapter(mAdapter); +// +// mBinding.asktabOrderRv.addItemDecoration(new GridDivider(getContext(), 1, 5, ContextCompat.getColor(getContext(), R.color.cutting_line))); +// mBinding.asktabOrderRv.addOnItemTouchListener(new OnRvLongClickListener(mBinding.asktabOrderRv) { +// @Override +// public void onItemLongClick(RecyclerView.ViewHolder vh) { +// itemTouchHelper.startDrag(vh); +// } +// }); +// } +// +// private ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() { +// @Override +// public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) { +// if (actionState == ItemTouchHelper.ACTION_STATE_DRAG) { +// //获取系统震动服务 +// Vibrator vib = (Vibrator) getContext().getSystemService(Service.VIBRATOR_SERVICE); +// if (vib != null) vib.vibrate(70); +// } +// super.onSelectedChanged(viewHolder, actionState); +// } +// +// @Override +// public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { +// super.clearView(recyclerView, viewHolder); +// if (recyclerView.getScrollState() == RecyclerView.SCROLL_STATE_IDLE) +// mAdapter.notifyDataSetChanged(); +// } +// +// @Override +// public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { +// final int dragFlags; +// final int swipeFlags; +// +// if (recyclerView.getLayoutManager() instanceof GridLayoutManager) { +// dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT; +// swipeFlags = 0; +// } else { +// dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; +// swipeFlags = 0; +// } +// +// return makeMovementFlags(dragFlags, swipeFlags); +// } +// +// @Override +// public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { +// int fromPosition = viewHolder.getAdapterPosition();//得到拖动ViewHolder的position +// int toPosition = target.getAdapterPosition();//得到目标ViewHolder的position +// +// if (fromPosition < toPosition) { +// for (int i = fromPosition; i < toPosition; i++) { +// Collections.swap(mTagList, i, i + 1); +// } +// } else { +// for (int i = fromPosition; i > toPosition; i--) { +// Collections.swap(mTagList, i, i - 1); +// } +// } +// +// mAdapter.notifyItemMoved(fromPosition, toPosition); +// isReset = false; +// mViewModel.cacheAndNotifyTagGroups(mTagList); // 刷新问答-问题页面 +// return true; +// } +// +// @Override +// public boolean isLongPressDragEnabled() { +// return false; +// } +// +// @Override +// public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { +// +// } +// }); +// +// private abstract class OnRvLongClickListener implements RecyclerView.OnItemTouchListener { +// +// private GestureDetectorCompat mGestureDetector; +// private RecyclerView recyclerView; +// +// public OnRvLongClickListener(RecyclerView recyclerView) { +// this.recyclerView = recyclerView; +// mGestureDetector = new GestureDetectorCompat(recyclerView.getContext(), new ItemTouchHelperGestureListener()); +// } +// +// @Override +// public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { +// mGestureDetector.onTouchEvent(e); +// return false; +// } +// +// @Override +// public void onTouchEvent(RecyclerView rv, MotionEvent e) { +// mGestureDetector.onTouchEvent(e); +// } +// +// @Override +// public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { +// +// } +// +// private class ItemTouchHelperGestureListener extends GestureDetector.SimpleOnGestureListener { +// +// @Override +// public void onLongPress(MotionEvent e) { +// View child = recyclerView.findChildViewUnder(e.getX(), e.getY()); +// if (child != null) { +// RecyclerView.ViewHolder vh = recyclerView.getChildViewHolder(child); +// onItemLongClick(vh); +// } +// } +// } +// +// public abstract void onItemLongClick(RecyclerView.ViewHolder vh); +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/comment/CommentActivity.kt b/app/src/main/java/com/gh/gamecenter/qa/comment/CommentActivity.kt index e32310af1b..2c79279b77 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/comment/CommentActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/comment/CommentActivity.kt @@ -4,8 +4,6 @@ import android.app.Activity import android.content.Context import android.content.Intent import android.os.Bundle -import android.view.View -import butterknife.OnClick import com.gh.base.BaseActivity import com.gh.common.util.DisplayUtils import com.gh.common.util.EntranceUtils @@ -13,22 +11,24 @@ import com.gh.common.util.EntranceUtils.KEY_COMMENT_ID import com.gh.common.util.doOnEnd import com.gh.gamecenter.NormalActivity import com.gh.gamecenter.R +import com.gh.gamecenter.databinding.ActivityCommentBinding import com.gh.gamecenter.entity.CommentEntity -import com.gh.gamecenter.qa.answer.detail.AnswerDetailFragment import com.gh.gamecenter.gamecollection.detail.conversation.GameCollectionCommentConversationFragment +import com.gh.gamecenter.qa.answer.detail.AnswerDetailFragment import com.gh.gamecenter.qa.comment.conversation.CommentConversationFragment import com.lightgame.utils.Util_System_Keyboard -import kotlinx.android.synthetic.main.activity_comment.* class CommentActivity : BaseActivity() { - val resultIntent = Intent() + private val resultIntent = Intent() private var mShowInputOnly = false + private lateinit var mBinding: ActivityCommentBinding override fun getLayoutId() = R.layout.activity_comment override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + mBinding = ActivityCommentBinding.bind(mContentView) DisplayUtils.transparentStatusBar(this) val commentCount = intent.getIntExtra(COMMENT_COUNT, 0) val showKeyboard = intent.getBooleanExtra(SHOW_KEYBOARD, false) @@ -39,7 +39,7 @@ class CommentActivity : BaseActivity() { val communityId = intent.getStringExtra(COMMUNITY_ID) ?: "" val videoId = intent.getStringExtra(VIDEO_ID) ?: "" val questionId = intent.getStringExtra(QUESTION_ID) ?: "" - val commentId = intent.getStringExtra(EntranceUtils.KEY_COMMENT_ID) ?: "" + val commentId = intent.getStringExtra(KEY_COMMENT_ID) ?: "" val gameCollectionId = intent.getStringExtra(GAME_COLLECTION_ID) ?: "" val isVideoAuthor = intent.getBooleanExtra(IS_VIDEO_AUTHOR, false) @@ -74,33 +74,36 @@ class CommentActivity : BaseActivity() { } answerId.isNotEmpty() -> { NewCommentFragment.getAnswerCommentInstance( - answerId, - showKeyboard, - commentCount, - mShowInputOnly, - commentCallback) + answerId, + showKeyboard, + commentCount, + mShowInputOnly, + commentCallback + ) } articleId.isNotEmpty() -> { NewCommentFragment.getCommunityArticleCommentInstance( - articleId, - communityId, - showKeyboard, - commentCount, - mShowInputOnly, - useReplyApi, - commentEntity, - commentCallback) + articleId, + communityId, + showKeyboard, + commentCount, + mShowInputOnly, + useReplyApi, + commentEntity, + commentCallback + ) } questionId.isNotEmpty() -> { NewCommentFragment.getCommunityQuestionCommentInstance( - questionId, - communityId, - showKeyboard, - commentCount, - mShowInputOnly, - useReplyApi, - commentEntity, - commentCallback) + questionId, + communityId, + showKeyboard, + commentCount, + mShowInputOnly, + useReplyApi, + commentEntity, + commentCallback + ) } gameCollectionId.isNotEmpty() -> { NewCommentFragment.getGameCollectionCommentInstance( @@ -111,49 +114,48 @@ class CommentActivity : BaseActivity() { mShowInputOnly, useReplyApi, commentEntity, - commentCallback) + commentCallback + ) } else -> { NewCommentFragment.getVideoCommentInstance( - videoId, - showKeyboard, - commentCount, - isVideoAuthor, - commentEntity, - mShowInputOnly, - isStairsComment, - useReplyApi, - commentCallback) + videoId, + showKeyboard, + commentCount, + isVideoAuthor, + commentEntity, + mShowInputOnly, + isStairsComment, + useReplyApi, + commentCallback + ) } } } - supportFragmentManager.beginTransaction().replace(R.id.answerCommentPlaceholderView, commentFragment!!, NewCommentFragment::class.java.simpleName).commitNowAllowingStateLoss() + supportFragmentManager.beginTransaction() + .replace(R.id.answerCommentPlaceholderView, commentFragment!!, NewCommentFragment::class.java.simpleName).commitNowAllowingStateLoss() - maskView.alpha = 0f + mBinding.maskView.alpha = 0f if (!isStairsComment) { - maskView.animate().alpha(1f).setDuration(300).start() + mBinding.maskView.animate().alpha(1f).setDuration(300).start() } - answerCommentPlaceholderView.translationY = (DisplayUtils.getScreenHeight()).toFloat() - answerCommentPlaceholderView.animate().translationY(0f).setDuration(300).start() - } - - @OnClick(R.id.maskView) - fun finishActivity(view: View) { - finish() + mBinding.answerCommentPlaceholderView.translationY = (DisplayUtils.getScreenHeight()).toFloat() + mBinding.answerCommentPlaceholderView.animate().translationY(0f).setDuration(300).start() + mBinding.maskView.setOnClickListener { finish() } } override fun finish() { Util_System_Keyboard.hideSoftKeyboard(this) overridePendingTransition(0, 0) - maskView.animate().alpha(0f).setDuration(300).start() - answerCommentPlaceholderView.animate() - .translationY(DisplayUtils.getScreenHeight().toFloat()) - .setDuration(300) - .doOnEnd { - super.finish() - } - .start() + mBinding.maskView.animate().alpha(0f).setDuration(300).start() + mBinding.answerCommentPlaceholderView.animate() + .translationY(DisplayUtils.getScreenHeight().toFloat()) + .setDuration(300) + .doOnEnd { + super.finish() + } + .start() } companion object { @@ -185,7 +187,13 @@ class CommentActivity : BaseActivity() { } @JvmStatic - fun getAnswerCommentIntent(context: Context, answerId: String, commentCount: Int? = 0, showKeyboard: Boolean, showInputOnly: Boolean = false): Intent { + fun getAnswerCommentIntent( + context: Context, + answerId: String, + commentCount: Int? = 0, + showKeyboard: Boolean, + showInputOnly: Boolean = false + ): Intent { val intent = Intent(context, CommentActivity::class.java) intent.putExtra(ANSWER_ID, answerId) intent.putExtra(COMMENT_COUNT, commentCount) @@ -201,8 +209,10 @@ class CommentActivity : BaseActivity() { * 评论视频 */ @JvmStatic - fun getVideoCommentIntent(context: Context, videoId: String, commentCount: Int? = 0, isVideoAuthor: Boolean, - showKeyboard: Boolean, showInputOnly: Boolean = false, isStairsComment: Boolean = true): Intent { + fun getVideoCommentIntent( + context: Context, videoId: String, commentCount: Int? = 0, isVideoAuthor: Boolean, + showKeyboard: Boolean, showInputOnly: Boolean = false, isStairsComment: Boolean = true + ): Intent { val intent = Intent(context, CommentActivity::class.java) intent.putExtra(VIDEO_ID, videoId) intent.putExtra(COMMENT_COUNT, commentCount) @@ -219,8 +229,10 @@ class CommentActivity : BaseActivity() { /** * 回复视频评论 */ - fun getVideoCommentReplyIntent(context: Context, videoId: String, commentCount: Int? = 0, isVideoAuthor: Boolean, - showKeyboard: Boolean, showInputOnly: Boolean = false, commentEntity: CommentEntity? = null): Intent { + fun getVideoCommentReplyIntent( + context: Context, videoId: String, commentCount: Int? = 0, isVideoAuthor: Boolean, + showKeyboard: Boolean, showInputOnly: Boolean = false, commentEntity: CommentEntity? = null + ): Intent { val intent = Intent(context, CommentActivity::class.java) intent.putExtra(VIDEO_ID, videoId) intent.putExtra(COMMENT_COUNT, commentCount) @@ -240,16 +252,18 @@ class CommentActivity : BaseActivity() { * 回复帖子、视频、问题评论 */ @JvmStatic - fun getCommentDetailIntent(context: Context, - commentId: String, - communityId: String, - articleId: String, - videoId: String, - questionId: String, - showKeyboard: Boolean = false, - position: Int = -1, - entrance: String, - path: String): Intent { + fun getCommentDetailIntent( + context: Context, + commentId: String, + communityId: String, + articleId: String, + videoId: String, + questionId: String, + showKeyboard: Boolean = false, + position: Int = -1, + entrance: String, + path: String + ): Intent { val intent = Intent(context, CommentActivity::class.java) intent.putExtra(EntranceUtils.KEY_ENTRANCE, NormalActivity.mergeEntranceAndPath(entrance, path)) intent.putExtra(EntranceUtils.KEY_COMMUNITY_ARTICLE_ID, articleId) @@ -257,7 +271,7 @@ class CommentActivity : BaseActivity() { intent.putExtra(QUESTION_ID, questionId) intent.putExtra(EntranceUtils.KEY_COMMUNITY_ID, communityId) intent.putExtra(EntranceUtils.KEY_POSITION, position) - intent.putExtra(EntranceUtils.KEY_COMMENT_ID, commentId) + intent.putExtra(KEY_COMMENT_ID, commentId) intent.putExtra(EntranceUtils.KEY_SHOW_KEYBOARD_IF_NEEDED, showKeyboard) intent.putExtra(EntranceUtils.KEY_PATH, path) intent.putExtra(EntranceUtils.KEY_IS_COMMENT_CONVERSATION, true) @@ -268,13 +282,15 @@ class CommentActivity : BaseActivity() { * 评论帖子 */ @JvmStatic - fun getArticleCommentIntent(context: Context, - articleId: String, - commentCount: Int? = 0, - showKeyboard: Boolean, - communityId: String, - commentEntity: CommentEntity? = null, - showInputOnly: Boolean = false): Intent { + fun getArticleCommentIntent( + context: Context, + articleId: String, + commentCount: Int? = 0, + showKeyboard: Boolean, + communityId: String, + commentEntity: CommentEntity? = null, + showInputOnly: Boolean = false + ): Intent { val intent = Intent(context, CommentActivity::class.java) intent.putExtra(ARTICLE_ID, articleId) intent.putExtra(COMMENT_COUNT, commentCount) @@ -290,13 +306,15 @@ class CommentActivity : BaseActivity() { // 特殊样式的回复评论 @JvmStatic - fun getArticleCommentReplyIntent(context: Context, - articleId: String, - commentCount: Int? = 0, - showKeyboard: Boolean, - communityId: String, - commentEntity: CommentEntity? = null, - showInputOnly: Boolean = false): Intent { + fun getArticleCommentReplyIntent( + context: Context, + articleId: String, + commentCount: Int? = 0, + showKeyboard: Boolean, + communityId: String, + commentEntity: CommentEntity? = null, + showInputOnly: Boolean = false + ): Intent { val intent = Intent(context, CommentActivity::class.java) intent.putExtra(ARTICLE_ID, articleId) intent.putExtra(COMMENT_COUNT, commentCount) @@ -315,12 +333,14 @@ class CommentActivity : BaseActivity() { * 评论问题(回答) */ @JvmStatic - fun getQuestionCommentIntent(context: Context, - questionId: String, - commentCount: Int? = 0, - showKeyboard: Boolean, - communityId: String, - showInputOnly: Boolean = false): Intent { + fun getQuestionCommentIntent( + context: Context, + questionId: String, + commentCount: Int? = 0, + showKeyboard: Boolean, + communityId: String, + showInputOnly: Boolean = false + ): Intent { val intent = Intent(context, CommentActivity::class.java) intent.putExtra(QUESTION_ID, questionId) intent.putExtra(COMMENT_COUNT, commentCount) @@ -336,13 +356,15 @@ class CommentActivity : BaseActivity() { /** * 回复问题评论 */ - fun getQuestionCommentReplyIntent(context: Context, - questionId: String, - communityId: String, - commentCount: Int? = 0, - showKeyboard: Boolean, - showInputOnly: Boolean = false, - commentEntity: CommentEntity? = null): Intent { + fun getQuestionCommentReplyIntent( + context: Context, + questionId: String, + communityId: String, + commentCount: Int? = 0, + showKeyboard: Boolean, + showInputOnly: Boolean = false, + commentEntity: CommentEntity? = null + ): Intent { val intent = Intent(context, CommentActivity::class.java) intent.putExtra(QUESTION_ID, questionId) intent.putExtra(COMMENT_COUNT, commentCount) @@ -361,9 +383,11 @@ class CommentActivity : BaseActivity() { * 评论游戏单 */ @JvmStatic - fun getGameCollectionCommentIntent(context: Context, - gameCollectionId: String, - commentCount: Int? = 0): Intent { + fun getGameCollectionCommentIntent( + context: Context, + gameCollectionId: String, + commentCount: Int? = 0 + ): Intent { val intent = Intent(context, CommentActivity::class.java) intent.putExtra(GAME_COLLECTION_ID, gameCollectionId) intent.putExtra(COMMENT_COUNT, commentCount) @@ -378,11 +402,13 @@ class CommentActivity : BaseActivity() { /** * 回复游戏单评论 */ - fun getGameCollectionCommentReplyIntent(context: Context, - gameCollectionId: String, - commentId: String, - commentCount: Int? = 0, - commentEntity: CommentEntity? = null): Intent { + fun getGameCollectionCommentReplyIntent( + context: Context, + gameCollectionId: String, + commentId: String, + commentCount: Int? = 0, + commentEntity: CommentEntity? = null + ): Intent { val intent = Intent(context, CommentActivity::class.java) intent.putExtra(GAME_COLLECTION_ID, gameCollectionId) intent.putExtra(KEY_COMMENT_ID, commentId) @@ -401,16 +427,18 @@ class CommentActivity : BaseActivity() { * 游戏单评论对话 */ @JvmStatic - fun getGameCollectionCommentDetailIntent(context: Context, - commentId: String, - gameCollectionId: String, - showKeyboard: Boolean = false, - entrance: String, - path: String): Intent { + fun getGameCollectionCommentDetailIntent( + context: Context, + commentId: String, + gameCollectionId: String, + showKeyboard: Boolean = false, + entrance: String, + path: String + ): Intent { val intent = Intent(context, CommentActivity::class.java) intent.putExtra(EntranceUtils.KEY_ENTRANCE, NormalActivity.mergeEntranceAndPath(entrance, path)) intent.putExtra(GAME_COLLECTION_ID, gameCollectionId) - intent.putExtra(EntranceUtils.KEY_COMMENT_ID, commentId) + intent.putExtra(KEY_COMMENT_ID, commentId) intent.putExtra(EntranceUtils.KEY_SHOW_KEYBOARD_IF_NEEDED, showKeyboard) intent.putExtra(EntranceUtils.KEY_PATH, path) intent.putExtra(EntranceUtils.KEY_IS_COMMENT_CONVERSATION, true) diff --git a/app/src/main/java/com/gh/gamecenter/qa/editor/AnswerAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/editor/AnswerAdapter.kt index 51eaa316f1..759b6a1a08 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/editor/AnswerAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/editor/AnswerAdapter.kt @@ -10,6 +10,7 @@ import com.gh.gamecenter.R import com.gh.gamecenter.adapter.viewholder.FooterViewHolder import com.gh.gamecenter.baselist.ListAdapter import com.gh.gamecenter.collection.AnswerFragment +import com.gh.gamecenter.databinding.AskAnswerItemBinding import com.gh.gamecenter.qa.entity.AnswerEntity import com.gh.gamecenter.qa.questions.detail.AnswerViewHolder @@ -37,7 +38,7 @@ class AnswerAdapter(context: Context, private val mEntrance: String?) : ListAdap } ItemViewType.ITEM_BODY -> { view = mLayoutInflater.inflate(R.layout.ask_answer_item, parent, false) - AnswerViewHolder(view) + AnswerViewHolder(AskAnswerItemBinding.bind(view)) } else -> throw NullPointerException() } @@ -49,10 +50,10 @@ class AnswerAdapter(context: Context, private val mEntrance: String?) : ListAdap val answerViewHolder = holder as AnswerViewHolder val entity = mEntityList[position] answerViewHolder.initCollectionAnswerViewHolder(mContext, entity, mEntrance, AnswerFragment.COLLECTION_ANSWER) - answerViewHolder.mUsericon.setOnClickListener { + answerViewHolder.binding.askAnswerItemUsericon.setOnClickListener { selectAndBack(entity) } - answerViewHolder.mUsername.setOnClickListener { + answerViewHolder.binding.askAnswerItemUsername.setOnClickListener { selectAndBack(entity) } answerViewHolder.itemView.setOnClickListener { diff --git a/app/src/main/java/com/gh/gamecenter/qa/editor/FullScreenVideoView.kt b/app/src/main/java/com/gh/gamecenter/qa/editor/FullScreenVideoView.kt index 7dbdb44972..cf4468e471 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/editor/FullScreenVideoView.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/editor/FullScreenVideoView.kt @@ -18,9 +18,9 @@ import com.gh.common.observer.MuteCallback import com.gh.common.observer.VolumeObserver import com.gh.common.util.* import com.gh.gamecenter.R +import com.gh.gamecenter.databinding.LayoutFullScreenDetailVideoPortraitBinding import com.gh.gamecenter.forum.home.ForumScrollCalculatorHelper import com.gh.gamecenter.video.detail.CustomManager -import com.halo.assistant.HaloApp import com.lightgame.utils.Utils import com.shuyu.gsyvideoplayer.utils.CommonUtil import com.shuyu.gsyvideoplayer.utils.NetworkUtils @@ -28,9 +28,6 @@ import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer import com.shuyu.gsyvideoplayer.video.base.GSYVideoView import com.shuyu.gsyvideoplayer.video.base.GSYVideoViewBridge import io.reactivex.disposables.Disposable -import kotlinx.android.synthetic.main.layout_game_detail_video_portrait.view.* -import kotlinx.android.synthetic.main.piece_video_control.view.* -import kotlinx.android.synthetic.main.piece_video_replay.view.* import java.util.* class FullScreenVideoView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) : StandardGSYVideoPlayer(context, attrs) { @@ -39,9 +36,9 @@ class FullScreenVideoView @JvmOverloads constructor(context: Context, attrs: Att private var mMuteDisposable: Disposable? = null private var mIsAutoPlay = false private var mVideoIsMuted = SPUtils.getBoolean(Constants.SP_VIDEO_PLAY_MUTE, true) - val backBtn = findViewById(R.id.back) + private lateinit var mBinding: LayoutFullScreenDetailVideoPortraitBinding + val backBtn: View = findViewById(R.id.back) var uuid = UUID.randomUUID().toString() - var thumbImage: SimpleDraweeView = findViewById(R.id.thumbImage) init { post { @@ -56,7 +53,7 @@ class FullScreenVideoView @JvmOverloads constructor(context: Context, attrs: Att showBackBtn() - volume.setOnClickListener { toggleMute() } + mBinding.layoutBottom.volume.setOnClickListener { toggleMute() } } mFullscreenButton.visibility = View.GONE @@ -76,12 +73,12 @@ class FullScreenVideoView @JvmOverloads constructor(context: Context, attrs: Att clearFullscreenLayout() } - errorBtn?.setOnClickListener { - debounceActionWithInterval(errorBtn.id, 1000) { + mBinding.errorBtn.setOnClickListener { + debounceActionWithInterval(mBinding.errorBtn.id, 1000) { if (!NetworkUtils.isAvailable(mContext)) { Utils.toast(context, "网络异常,请检查手机网络状态") setViewShowState(mStartButton, View.INVISIBLE) - errorContainer.visibility = View.VISIBLE + mBinding.errorContainer.visibility = View.VISIBLE return@debounceActionWithInterval } startPlayLogic(false) @@ -94,10 +91,16 @@ class FullScreenVideoView @JvmOverloads constructor(context: Context, attrs: Att return R.layout.layout_full_screen_detail_video_portrait } + override fun init(context: Context?) { + super.init(context) + mBinding = LayoutFullScreenDetailVideoPortraitBinding.bind(this.getChildAt(0)) + } + fun observeVolume(activity: Activity?) { tryWithDefaultCatch { activity?.applicationContext?.contentResolver?.registerContentObserver( - android.provider.Settings.System.CONTENT_URI, true, mVolumeObserver) + android.provider.Settings.System.CONTENT_URI, true, mVolumeObserver + ) activity?.application?.registerActivityLifecycleCallbacks(object : Application.ActivityLifecycleCallbacks { override fun onActivityPaused(activity: Activity) { @@ -168,7 +171,7 @@ class FullScreenVideoView @JvmOverloads constructor(context: Context, attrs: Att private fun mute(isManual: Boolean = false) { mVideoIsMuted = true - volume.setImageResource(R.drawable.ic_game_detail_volume_off) + mBinding.layoutBottom.volume.setImageResource(R.drawable.ic_game_detail_volume_off) CustomManager.getCustomManager(getKey()).isNeedMute = true if (isManual) { Utils.toast(context, "当前处于静音状态") @@ -178,7 +181,7 @@ class FullScreenVideoView @JvmOverloads constructor(context: Context, attrs: Att private fun unMute(isManual: Boolean = false) { mVideoIsMuted = false - volume.setImageResource(R.drawable.ic_game_detail_volume_on) + mBinding.layoutBottom.volume.setImageResource(R.drawable.ic_game_detail_volume_on) CustomManager.getCustomManager(getKey()).isNeedMute = false if (isManual) { uploadVideoStreamingPlaying("取消静音") @@ -198,7 +201,7 @@ class FullScreenVideoView @JvmOverloads constructor(context: Context, attrs: Att } fun updateThumb(url: String) { - ImageUtils.display(thumbImage, url) + ImageUtils.display(mBinding.thumbImage, url) } override fun touchDoubleUp(e: MotionEvent?) { @@ -274,26 +277,26 @@ class FullScreenVideoView @JvmOverloads constructor(context: Context, attrs: Att if (state == CURRENT_STATE_AUTO_COMPLETE) { hideAllWidget() - replayContainer.visibility = View.VISIBLE + mBinding.replayContainer.root.visibility = View.VISIBLE mTopContainer.visibility = View.VISIBLE - replayIv.setOnClickListener { + mBinding.replayContainer.replayIv.setOnClickListener { startButton.performClick() violenceUpdateMuteStatus() uploadVideoStreamingPlaying("重新播放") } } else { - replayContainer.visibility = View.GONE + mBinding.replayContainer.root.visibility = View.GONE } } private fun showBackBtn() { mTopContainer.background = ContextCompat.getDrawable(context, R.drawable.video_title_bg) - back.visibility = View.VISIBLE + mBinding.back.visibility = View.VISIBLE } private fun hideBackBtn() { mTopContainer?.setBackgroundResource(0) - back.visibility = View.GONE + mBinding.back.visibility = View.GONE } override fun getEnlargeImageRes(): Int { @@ -332,40 +335,40 @@ class FullScreenVideoView @JvmOverloads constructor(context: Context, attrs: Att override fun changeUiToNormal() { super.changeUiToNormal() - errorContainer.visibility = View.GONE + mBinding.errorContainer.visibility = View.GONE } override fun changeUiToPreparingShow() { super.changeUiToPreparingShow() - errorContainer.visibility = View.GONE + mBinding.errorContainer.visibility = View.GONE } override fun changeUiToPlayingShow() { super.changeUiToPlayingShow() - errorContainer.visibility = View.GONE + mBinding.errorContainer.visibility = View.GONE } override fun changeUiToPauseShow() { super.changeUiToPauseShow() - errorContainer.visibility = View.GONE + mBinding.errorContainer.visibility = View.GONE } override fun changeUiToCompleteShow() { super.changeUiToCompleteShow() - errorContainer.visibility = View.GONE + mBinding.errorContainer.visibility = View.GONE } override fun changeUiToError() { super.changeUiToError() setViewShowState(mStartButton, View.INVISIBLE) - errorContainer.visibility = View.VISIBLE + mBinding.errorContainer.visibility = View.VISIBLE } override fun netWorkErrorLogic() { super.netWorkErrorLogic() Utils.toast(context, "网络错误,视频播放失败") setViewShowState(mStartButton, View.INVISIBLE) - errorContainer.visibility = View.VISIBLE + mBinding.errorContainer.visibility = View.VISIBLE } //监控播放错误 @@ -373,7 +376,7 @@ class FullScreenVideoView @JvmOverloads constructor(context: Context, attrs: Att super.onError(what, extra) Utils.toast(context, "网络错误,视频播放失败") setViewShowState(mStartButton, View.INVISIBLE) - errorContainer.visibility = View.VISIBLE + mBinding.errorContainer.visibility = View.VISIBLE } override fun releaseVideos() { diff --git a/app/src/main/java/com/gh/gamecenter/qa/editor/GameFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/editor/GameFragment.kt index bcd617a893..338d6f1e03 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/editor/GameFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/editor/GameFragment.kt @@ -23,13 +23,11 @@ import com.gh.gamecenter.manager.UserManager import com.gh.gamecenter.qa.entity.EditorInsertDefaultEntity import com.gh.gamecenter.retrofit.Response import com.gh.gamecenter.retrofit.RetrofitManager -import com.google.android.material.appbar.AppBarLayout import com.halo.assistant.HaloApp import com.lightgame.utils.Util_System_Keyboard import io.reactivex.Observable import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers -import kotterknife.bindView open class GameFragment : ListFragment>() { lateinit var searchEt: EditText diff --git a/app/src/main/java/com/gh/gamecenter/qa/editor/LinkFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/editor/LinkFragment.kt index 8c28f0c20b..9cb582c92e 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/editor/LinkFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/editor/LinkFragment.kt @@ -1,117 +1,117 @@ -package com.gh.gamecenter.qa.editor - -import android.app.Activity -import androidx.lifecycle.Observer -import androidx.lifecycle.ViewModelProviders -import android.content.Intent -import android.os.Bundle -import android.view.View -import android.widget.EditText -import android.widget.TextView -import com.gh.base.fragment.BaseFragment -import com.gh.base.fragment.WaitingDialogFragment -import com.gh.gamecenter.R -import com.gh.gamecenter.qa.entity.AnswerEntity -import com.gh.gamecenter.qa.entity.ArticleEntity -import com.gh.gamecenter.qa.questions.edit.manager.HistoryDetailActivity -import com.lightgame.utils.Util_System_Keyboard -import kotterknife.bindView - -class LinkFragment : BaseFragment() { - - val searchEt by bindView(R.id.et_search) - val searchTv by bindView(R.id.tv_search) - val backTv by bindView(R.id.tv_back) - val hint by bindView(R.id.link_hint) - - private lateinit var mViewModel: LinkViewModel - private var mProcessingDialog: WaitingDialogFragment? = null - - override fun getLayoutId(): Int { - return R.layout.fragment_link - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - mViewModel = ViewModelProviders.of(this).get(LinkViewModel::class.java) - mViewModel.processDialog.observe(this, Observer { it -> - if (it?.isShow!!) { - mProcessingDialog = WaitingDialogFragment.newInstance(it.msg, false) - mProcessingDialog?.show(childFragmentManager, HistoryDetailActivity::class.java.simpleName) - } else { - mProcessingDialog?.dismiss() - } - }) - mViewModel.articleLiveData.observe(this, Observer { - val intent = Intent() - intent.putExtra(ArticleEntity::class.java.simpleName, it) - activity?.setResult(Activity.RESULT_OK, intent) - activity?.finish() - }) - mViewModel.answerLiveData.observe(this, Observer { - val intent = Intent() - intent.putExtra(AnswerEntity::class.java.simpleName, it) - activity?.setResult(Activity.RESULT_OK, intent) - activity?.finish() - }) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - searchTv.text = "确定" - if (activity is InsertAnswerWrapperActivity) { - searchEt.hint = "请输入回答链接" - hint.text = "获取回答链接的方式:(暂不支持外部链接)\n1.在回答详情页面,点击下方的\"分享\"按钮 \n2.在分享窗口内,再点击【复制链接】即可" - } else { - searchEt.hint = "请输入帖子链接" - hint.text = "获取帖子链接的方式:(暂不支持外部链接)\n1.在帖子详情页面,点击下方的【分享】按钮 \n2.在分享窗口内,再点击【复制链接】即可" - } - - searchTv.setOnClickListener { - val link = searchEt.text.toString() - if ((link.contains("articles") || link.contains("article")) && activity is InsertArticleWrapperActivity) { - var communityId: String? = null - var articleId: String? = null - val splits = link.split("/") - for (i in 0 until splits.size) { - val split = splits[i] - if (split.contains("articles") || split.contains("article")) { - if (i > 0) { - communityId = splits[i - 1] - } - - if (splits.size - 1 > i) { - articleId = splits[i + 1].split(".")[0] - } - } - } - if (communityId != null && articleId != null) { - mViewModel.getArticleData(communityId, articleId) - return@setOnClickListener - } - } else if (link.contains("answer") && activity is InsertAnswerWrapperActivity) { - var answerId: String? = null - var splits = link.split("=") - if (splits.size > 1) answerId = splits[1] - if (answerId.isNullOrEmpty()) { - splits = link.split("/") - answerId = splits[splits.size - 1] - } - if (!answerId.isNullOrEmpty()) { - mViewModel.getAnswerData(answerId) - return@setOnClickListener - } - } - toast("链接格式不对,请检查并重新输入") - } - } - - fun onPageChanged(position: Int) { - if (position == 0) { - searchEt.requestFocus() - Util_System_Keyboard.showSoftKeyboard(context, searchEt) - } else { - Util_System_Keyboard.hideSoftKeyboard(context, searchEt) - } - } -} \ No newline at end of file +//package com.gh.gamecenter.qa.editor +// +//import android.app.Activity +//import androidx.lifecycle.Observer +//import androidx.lifecycle.ViewModelProviders +//import android.content.Intent +//import android.os.Bundle +//import android.view.View +//import android.widget.EditText +//import android.widget.TextView +//import com.gh.base.fragment.BaseFragment +//import com.gh.base.fragment.WaitingDialogFragment +//import com.gh.gamecenter.R +//import com.gh.gamecenter.qa.entity.AnswerEntity +//import com.gh.gamecenter.qa.entity.ArticleEntity +//import com.gh.gamecenter.qa.questions.edit.manager.HistoryDetailActivity +//import com.lightgame.utils.Util_System_Keyboard +//import kotterknife.bindView +// +//class LinkFragment : BaseFragment() { +// +// val searchEt by bindView(R.id.et_search) +// val searchTv by bindView(R.id.tv_search) +// val backTv by bindView(R.id.tv_back) +// val hint by bindView(R.id.link_hint) +// +// private lateinit var mViewModel: LinkViewModel +// private var mProcessingDialog: WaitingDialogFragment? = null +// +// override fun getLayoutId(): Int { +// return R.layout.fragment_link +// } +// +// override fun onCreate(savedInstanceState: Bundle?) { +// super.onCreate(savedInstanceState) +// mViewModel = ViewModelProviders.of(this).get(LinkViewModel::class.java) +// mViewModel.processDialog.observe(this, Observer { it -> +// if (it?.isShow!!) { +// mProcessingDialog = WaitingDialogFragment.newInstance(it.msg, false) +// mProcessingDialog?.show(childFragmentManager, HistoryDetailActivity::class.java.simpleName) +// } else { +// mProcessingDialog?.dismiss() +// } +// }) +// mViewModel.articleLiveData.observe(this, Observer { +// val intent = Intent() +// intent.putExtra(ArticleEntity::class.java.simpleName, it) +// activity?.setResult(Activity.RESULT_OK, intent) +// activity?.finish() +// }) +// mViewModel.answerLiveData.observe(this, Observer { +// val intent = Intent() +// intent.putExtra(AnswerEntity::class.java.simpleName, it) +// activity?.setResult(Activity.RESULT_OK, intent) +// activity?.finish() +// }) +// } +// +// override fun onViewCreated(view: View, savedInstanceState: Bundle?) { +// super.onViewCreated(view, savedInstanceState) +// searchTv.text = "确定" +// if (activity is InsertAnswerWrapperActivity) { +// searchEt.hint = "请输入回答链接" +// hint.text = "获取回答链接的方式:(暂不支持外部链接)\n1.在回答详情页面,点击下方的\"分享\"按钮 \n2.在分享窗口内,再点击【复制链接】即可" +// } else { +// searchEt.hint = "请输入帖子链接" +// hint.text = "获取帖子链接的方式:(暂不支持外部链接)\n1.在帖子详情页面,点击下方的【分享】按钮 \n2.在分享窗口内,再点击【复制链接】即可" +// } +// +// searchTv.setOnClickListener { +// val link = searchEt.text.toString() +// if ((link.contains("articles") || link.contains("article")) && activity is InsertArticleWrapperActivity) { +// var communityId: String? = null +// var articleId: String? = null +// val splits = link.split("/") +// for (i in 0 until splits.size) { +// val split = splits[i] +// if (split.contains("articles") || split.contains("article")) { +// if (i > 0) { +// communityId = splits[i - 1] +// } +// +// if (splits.size - 1 > i) { +// articleId = splits[i + 1].split(".")[0] +// } +// } +// } +// if (communityId != null && articleId != null) { +// mViewModel.getArticleData(communityId, articleId) +// return@setOnClickListener +// } +// } else if (link.contains("answer") && activity is InsertAnswerWrapperActivity) { +// var answerId: String? = null +// var splits = link.split("=") +// if (splits.size > 1) answerId = splits[1] +// if (answerId.isNullOrEmpty()) { +// splits = link.split("/") +// answerId = splits[splits.size - 1] +// } +// if (!answerId.isNullOrEmpty()) { +// mViewModel.getAnswerData(answerId) +// return@setOnClickListener +// } +// } +// toast("链接格式不对,请检查并重新输入") +// } +// } +// +// fun onPageChanged(position: Int) { +// if (position == 0) { +// searchEt.requestFocus() +// Util_System_Keyboard.showSoftKeyboard(context, searchEt) +// } else { +// Util_System_Keyboard.hideSoftKeyboard(context, searchEt) +// } +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/editor/LinkViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/editor/LinkViewModel.kt index cb9c5150fb..0049463380 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/editor/LinkViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/editor/LinkViewModel.kt @@ -1,64 +1,64 @@ -package com.gh.gamecenter.qa.editor - -import android.app.Application -import androidx.lifecycle.AndroidViewModel -import androidx.lifecycle.MediatorLiveData -import androidx.lifecycle.MutableLiveData -import com.gh.base.fragment.WaitingDialogFragment -import com.gh.gamecenter.qa.entity.AnswerEntity -import com.gh.gamecenter.qa.entity.ArticleEntity -import com.gh.gamecenter.retrofit.Response -import com.gh.gamecenter.retrofit.RetrofitManager -import com.lightgame.utils.Utils -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.schedulers.Schedulers -import retrofit2.HttpException - -class LinkViewModel(application: Application) : AndroidViewModel(application) { - - private val mApi = RetrofitManager.getInstance().api - - val answerLiveData = MutableLiveData() - val articleLiveData = MutableLiveData() - val processDialog = MediatorLiveData() - - fun getAnswerData(answerId: String) { - processDialog.postValue(WaitingDialogFragment.WaitingDialogData("校验中...", true)) - mApi - .getCommunityArticle(answerId) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(object : Response() { - override fun onResponse(response: AnswerEntity?) { - answerLiveData.postValue(response) - processDialog.postValue(WaitingDialogFragment.WaitingDialogData("校验中...", false)) - } - - override fun onFailure(e: HttpException?) { - processDialog.postValue(WaitingDialogFragment.WaitingDialogData("校验中...", false)) - Utils.toast(getApplication(), "插入链接失败,内容可能已被删除") - } - }) - } - - fun getArticleData(communityId: String, article: String) { - processDialog.postValue(WaitingDialogFragment.WaitingDialogData("校验中...", true)) - mApi - .getCommunityArticle(communityId, article) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(object : Response() { - override fun onResponse(response: ArticleEntity?) { - articleLiveData.postValue(response) - processDialog.postValue(WaitingDialogFragment.WaitingDialogData("校验中...", false)) - } - - override fun onFailure(e: HttpException?) { - processDialog.postValue(WaitingDialogFragment.WaitingDialogData("校验中...", false)) - Utils.toast(getApplication(), "插入链接失败,内容可能已被删除") - } - }) - - } - -} \ No newline at end of file +//package com.gh.gamecenter.qa.editor +// +//import android.app.Application +//import androidx.lifecycle.AndroidViewModel +//import androidx.lifecycle.MediatorLiveData +//import androidx.lifecycle.MutableLiveData +//import com.gh.base.fragment.WaitingDialogFragment +//import com.gh.gamecenter.qa.entity.AnswerEntity +//import com.gh.gamecenter.qa.entity.ArticleEntity +//import com.gh.gamecenter.retrofit.Response +//import com.gh.gamecenter.retrofit.RetrofitManager +//import com.lightgame.utils.Utils +//import io.reactivex.android.schedulers.AndroidSchedulers +//import io.reactivex.schedulers.Schedulers +//import retrofit2.HttpException +// +//class LinkViewModel(application: Application) : AndroidViewModel(application) { +// +// private val mApi = RetrofitManager.getInstance().api +// +// val answerLiveData = MutableLiveData() +// val articleLiveData = MutableLiveData() +// val processDialog = MediatorLiveData() +// +// fun getAnswerData(answerId: String) { +// processDialog.postValue(WaitingDialogFragment.WaitingDialogData("校验中...", true)) +// mApi +// .getCommunityArticle(answerId) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(object : Response() { +// override fun onResponse(response: AnswerEntity?) { +// answerLiveData.postValue(response) +// processDialog.postValue(WaitingDialogFragment.WaitingDialogData("校验中...", false)) +// } +// +// override fun onFailure(e: HttpException?) { +// processDialog.postValue(WaitingDialogFragment.WaitingDialogData("校验中...", false)) +// Utils.toast(getApplication(), "插入链接失败,内容可能已被删除") +// } +// }) +// } +// +// fun getArticleData(communityId: String, article: String) { +// processDialog.postValue(WaitingDialogFragment.WaitingDialogData("校验中...", true)) +// mApi +// .getCommunityArticle(communityId, article) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(object : Response() { +// override fun onResponse(response: ArticleEntity?) { +// articleLiveData.postValue(response) +// processDialog.postValue(WaitingDialogFragment.WaitingDialogData("校验中...", false)) +// } +// +// override fun onFailure(e: HttpException?) { +// processDialog.postValue(WaitingDialogFragment.WaitingDialogData("校验中...", false)) +// Utils.toast(getApplication(), "插入链接失败,内容可能已被删除") +// } +// }) +// +// } +// +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/follow/AskFollowAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/follow/AskFollowAdapter.kt index a4a2dee8c6..022dae5d5e 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/follow/AskFollowAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/follow/AskFollowAdapter.kt @@ -1,144 +1,144 @@ package com.gh.gamecenter.qa.follow -import android.content.Context -import android.view.View -import android.view.ViewGroup -import androidx.appcompat.app.AppCompatActivity -import androidx.recyclerview.widget.RecyclerView -import com.gh.common.constant.ItemViewType -import com.gh.common.syncpage.ISyncAdapterHandler -import com.gh.common.util.* -import com.gh.gamecenter.R -import com.gh.gamecenter.adapter.viewholder.FooterViewHolder -import com.gh.gamecenter.baselist.ListAdapter -import com.gh.gamecenter.databinding.CommunityFollowItemBinding -import com.gh.gamecenter.entity.PersonalHistoryEntity -import com.gh.gamecenter.personalhome.home.UserHistoryAdapter -import com.gh.gamecenter.qa.answer.detail.SimpleAnswerDetailActivity -import com.gh.gamecenter.qa.article.detail.ArticleDetailActivity -import com.gh.gamecenter.qa.questions.newdetail.NewQuestionDetailActivity - -class AskFollowAdapter(val context: Context, val viewModel: AskFollowViewModel) - : ListAdapter(context), ISyncAdapterHandler { - - private val mEntrance = "" - - override fun getItemViewType(position: Int): Int { - return when (position) { - itemCount - 1 -> ItemViewType.ITEM_FOOTER - else -> ItemViewType.ITEM_BODY - } - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - val view: View - return when (viewType) { - ItemViewType.ITEM_FOOTER -> { - view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false) - FooterViewHolder(view) - } - else -> { - view = mLayoutInflater.inflate(R.layout.community_follow_item, parent, false) - CommunityFollowItemViewHolder(CommunityFollowItemBinding.bind(view)) - } - } - } - - override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - when (holder) { - is CommunityFollowItemViewHolder -> { - val historyEntity = mEntityList[position] - holder.bindFollowItem(historyEntity, mEntrance) - - val path = "问答-关注" - holder.binding.run { - entity = historyEntity - executePendingBindings() - - // 显示"等 X 人赞同了" - if (historyEntity.foldUsers != null - && (historyEntity.type == "answer_vote" || - historyEntity.type == "community_article_vote")) { - val highlightedString = " 等${NumberUtils.transSimpleCount(historyEntity.foldUsers!!.size)}人" - val type = if ("community_article_vote" == historyEntity.type) { - "帖子" - } else { - "回答" - } - userName.text = historyEntity.user?.name - userDesc.text = highlightedString - userDesc.visibility = View.VISIBLE - userDesc.setOnClickListener { - debounceActionWithInterval(userDesc.id, 1000) { - val dialog = AskFollowMoreDialog.getInstance("赞同$type", "问答首页-关注折叠", ArrayList(historyEntity.foldUsers)) - dialog.show((context as AppCompatActivity).supportFragmentManager, "more") - } - } - userCommand.text = ("赞同了$type") - } else { - userName.text = historyEntity.user?.name - userName.setOnClickListener { userIcon.performClick() } - userDesc.visibility = View.GONE - userCommand.text = UserHistoryAdapter.getUserCommand(historyEntity.type) - } - if (historyEntity.user?.badge != null) { - sdvUserBadge.visibility = View.VISIBLE - ImageUtils.display(sdvUserBadge, historyEntity.user?.badge?.icon) - } else { - sdvUserBadge.visibility = View.GONE - } - sdvUserBadge.setOnClickListener { - DialogUtils.showViewBadgeDialog(context, historyEntity?.user?.badge) { - MtaHelper.onEvent("进入徽章墙_用户记录", "问答-关注", "${historyEntity?.user?.name}(${historyEntity?.user?.id})") - MtaHelper.onEvent("徽章中心", "进入徽章中心", "问答-关注") - DirectUtils.directToBadgeWall(context, historyEntity?.user?.id, historyEntity?.user?.name, historyEntity?.user?.icon) - } - } - - questionTitle.setOnClickListener { - if ("community_article" == historyEntity.type || "community_article_vote" == historyEntity.type) { - mContext.startActivity(ArticleDetailActivity.getIntent(mContext, historyEntity.community, historyEntity.id, mEntrance, path)) - } else { - val id = if (historyEntity.type.contains("question")) { - historyEntity.id - } else { - historyEntity?.question?.id - } - mContext.startActivity(NewQuestionDetailActivity.getIntent(mContext, id?:"", mEntrance, path)) - } - } - - userIcon.setOnClickListener { - DirectUtils.directToHomeActivity(mContext, historyEntity.user?.id, mEntrance, path) - } - // 禁止click事件穿透 - userCommand.setTextColor(mContext.resources.getColor(R.color.title)) - } - holder.itemView.setOnClickListener { - if ("community_article" == historyEntity.type || "community_article_vote" == historyEntity.type) { - mContext.startActivity(ArticleDetailActivity.getIntent(mContext, historyEntity.community, historyEntity.id, mEntrance, path)) - } else if (historyEntity.type.contains("question")) { - mContext.startActivity(NewQuestionDetailActivity.getIntent(mContext, historyEntity.id, mEntrance, path)) - } else { - mContext.startActivity(SimpleAnswerDetailActivity.getIntent(mContext, historyEntity.id, mEntrance, path)) - } - } - - } - is FooterViewHolder -> { - holder.initItemPadding() - holder.initFooterViewHolder(viewModel, mIsLoading, mIsNetworkError, mIsOver) - } - } - } - - override fun getItemCount(): Int { - return if (mEntityList == null || mEntityList.isEmpty()) 0 else mEntityList.size + 1 - } - - override fun getSyncData(position: Int): Pair? { - if (position >= mEntityList.size) return null - val entity = mEntityList[position] - return Pair(entity.id, entity) - } -} \ No newline at end of file +//import android.content.Context +//import android.view.View +//import android.view.ViewGroup +//import androidx.appcompat.app.AppCompatActivity +//import androidx.recyclerview.widget.RecyclerView +//import com.gh.common.constant.ItemViewType +//import com.gh.common.syncpage.ISyncAdapterHandler +//import com.gh.common.util.* +//import com.gh.gamecenter.R +//import com.gh.gamecenter.adapter.viewholder.FooterViewHolder +//import com.gh.gamecenter.baselist.ListAdapter +//import com.gh.gamecenter.databinding.CommunityFollowItemBinding +//import com.gh.gamecenter.entity.PersonalHistoryEntity +//import com.gh.gamecenter.personalhome.home.UserHistoryAdapter +//import com.gh.gamecenter.qa.answer.detail.SimpleAnswerDetailActivity +//import com.gh.gamecenter.qa.article.detail.ArticleDetailActivity +//import com.gh.gamecenter.qa.questions.newdetail.NewQuestionDetailActivity +// +//class AskFollowAdapter(val context: Context, val viewModel: AskFollowViewModel) +// : ListAdapter(context), ISyncAdapterHandler { +// +// private val mEntrance = "" +// +// override fun getItemViewType(position: Int): Int { +// return when (position) { +// itemCount - 1 -> ItemViewType.ITEM_FOOTER +// else -> ItemViewType.ITEM_BODY +// } +// } +// +// override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { +// val view: View +// return when (viewType) { +// ItemViewType.ITEM_FOOTER -> { +// view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false) +// FooterViewHolder(view) +// } +// else -> { +// view = mLayoutInflater.inflate(R.layout.community_follow_item, parent, false) +// CommunityFollowItemViewHolder(CommunityFollowItemBinding.bind(view)) +// } +// } +// } +// +// override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { +// when (holder) { +// is CommunityFollowItemViewHolder -> { +// val historyEntity = mEntityList[position] +// holder.bindFollowItem(historyEntity, mEntrance) +// +// val path = "问答-关注" +// holder.binding.run { +// entity = historyEntity +// executePendingBindings() +// +// // 显示"等 X 人赞同了" +// if (historyEntity.foldUsers != null +// && (historyEntity.type == "answer_vote" || +// historyEntity.type == "community_article_vote")) { +// val highlightedString = " 等${NumberUtils.transSimpleCount(historyEntity.foldUsers!!.size)}人" +// val type = if ("community_article_vote" == historyEntity.type) { +// "帖子" +// } else { +// "回答" +// } +// userName.text = historyEntity.user?.name +// userDesc.text = highlightedString +// userDesc.visibility = View.VISIBLE +// userDesc.setOnClickListener { +// debounceActionWithInterval(userDesc.id, 1000) { +// val dialog = AskFollowMoreDialog.getInstance("赞同$type", "问答首页-关注折叠", ArrayList(historyEntity.foldUsers)) +// dialog.show((context as AppCompatActivity).supportFragmentManager, "more") +// } +// } +// userCommand.text = ("赞同了$type") +// } else { +// userName.text = historyEntity.user?.name +// userName.setOnClickListener { userIcon.performClick() } +// userDesc.visibility = View.GONE +// userCommand.text = UserHistoryAdapter.getUserCommand(historyEntity.type) +// } +// if (historyEntity.user?.badge != null) { +// sdvUserBadge.visibility = View.VISIBLE +// ImageUtils.display(sdvUserBadge, historyEntity.user?.badge?.icon) +// } else { +// sdvUserBadge.visibility = View.GONE +// } +// sdvUserBadge.setOnClickListener { +// DialogUtils.showViewBadgeDialog(context, historyEntity?.user?.badge) { +// MtaHelper.onEvent("进入徽章墙_用户记录", "问答-关注", "${historyEntity?.user?.name}(${historyEntity?.user?.id})") +// MtaHelper.onEvent("徽章中心", "进入徽章中心", "问答-关注") +// DirectUtils.directToBadgeWall(context, historyEntity?.user?.id, historyEntity?.user?.name, historyEntity?.user?.icon) +// } +// } +// +// questionTitle.setOnClickListener { +// if ("community_article" == historyEntity.type || "community_article_vote" == historyEntity.type) { +// mContext.startActivity(ArticleDetailActivity.getIntent(mContext, historyEntity.community, historyEntity.id, mEntrance, path)) +// } else { +// val id = if (historyEntity.type.contains("question")) { +// historyEntity.id +// } else { +// historyEntity?.question?.id +// } +// mContext.startActivity(NewQuestionDetailActivity.getIntent(mContext, id?:"", mEntrance, path)) +// } +// } +// +// userIcon.setOnClickListener { +// DirectUtils.directToHomeActivity(mContext, historyEntity.user?.id, mEntrance, path) +// } +// // 禁止click事件穿透 +// userCommand.setTextColor(mContext.resources.getColor(R.color.title)) +// } +// holder.itemView.setOnClickListener { +// if ("community_article" == historyEntity.type || "community_article_vote" == historyEntity.type) { +// mContext.startActivity(ArticleDetailActivity.getIntent(mContext, historyEntity.community, historyEntity.id, mEntrance, path)) +// } else if (historyEntity.type.contains("question")) { +// mContext.startActivity(NewQuestionDetailActivity.getIntent(mContext, historyEntity.id, mEntrance, path)) +// } else { +// mContext.startActivity(SimpleAnswerDetailActivity.getIntent(mContext, historyEntity.id, mEntrance, path)) +// } +// } +// +// } +// is FooterViewHolder -> { +// holder.initItemPadding() +// holder.initFooterViewHolder(viewModel, mIsLoading, mIsNetworkError, mIsOver) +// } +// } +// } +// +// override fun getItemCount(): Int { +// return if (mEntityList == null || mEntityList.isEmpty()) 0 else mEntityList.size + 1 +// } +// +// override fun getSyncData(position: Int): Pair? { +// if (position >= mEntityList.size) return null +// val entity = mEntityList[position] +// return Pair(entity.id, entity) +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/follow/AskFollowFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/follow/AskFollowFragment.kt index df07a7af2e..dc0a339228 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/follow/AskFollowFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/follow/AskFollowFragment.kt @@ -1,299 +1,301 @@ package com.gh.gamecenter.qa.follow -import android.graphics.Typeface -import android.os.Bundle -import android.text.TextUtils -import android.view.View -import android.widget.LinearLayout -import android.widget.TextView -import androidx.core.content.ContextCompat -import androidx.core.widget.NestedScrollView -import androidx.lifecycle.Observer -import androidx.recyclerview.widget.RecyclerView -import butterknife.BindView -import butterknife.OnClick -import com.facebook.drawee.view.SimpleDraweeView -import com.gh.common.util.* -import com.gh.gamecenter.R -import com.gh.gamecenter.baselist.ListFragment -import com.gh.gamecenter.entity.PersonalEntity -import com.gh.gamecenter.entity.PersonalHistoryEntity -import com.gh.gamecenter.eventbus.EBReuse -import com.gh.gamecenter.eventbus.EBTypeChange -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.qa.CommunityFragment -import org.greenrobot.eventbus.EventBus -import org.greenrobot.eventbus.Subscribe -import org.greenrobot.eventbus.ThreadMode - -class AskFollowFragment : ListFragment() { - - @BindView(R.id.reuse_none_data) - lateinit var noDataContainer: View - - @BindView(R.id.reuse_tv_none_data) - lateinit var noDataTv: TextView - - @BindView(R.id.recommend_container) - lateinit var recommendContainer: View - - @BindView(R.id.recommend_scrollview) - lateinit var recommendScrollView: NestedScrollView - - @BindView(R.id.recommend_user_container) - lateinit var recommendUserContainer: LinearLayout - - @BindView(R.id.save_btn) - lateinit var saveBtn: View - - private lateinit var mAdapter: AskFollowAdapter - - private var mCurrentCommunity: String? = "" - - override fun onStart() { - super.onStart() - if (TextUtils.isEmpty(UserManager.getInstance().userId)) { - noDataTv.text = "请先登录" - noDataTv.setTextColor(ContextCompat.getColor(requireContext(), R.color.theme_font)) - } else { - if (isShowingRecommendedUser()) { - onLoadRefresh() - } - } - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - mListViewModel.followStatus.observeNonNull(this) { - if (isShowingRecommendedUser()) { - onRefresh() - } - } - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - mListViewModel.recommendUsers.observe(viewLifecycleOwner, Observer { - if (it == null) { - hideRecommendUser() - mListRefresh?.isEnabled = true - noDataContainer.visibility = View.VISIBLE - } else { - if (!isShowingRecommendedUser()) { - showRecommendUser(it) - } - } - }) - - mListRv.addOnScrollListener(object : RecyclerView.OnScrollListener() { - override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { - if (dy > CommunityFragment.FOLLOW_HINT_TRIGGER_HEIGHT) { - EventBus.getDefault().post(EBTypeChange(CommunityFragment.EB_HIDE_QUESTION_BUTTON, CommunityFragment.INDEX_FOLLOW)) - } else if (dy < -CommunityFragment.FOLLOW_HINT_TRIGGER_HEIGHT) { - EventBus.getDefault().post(EBTypeChange(CommunityFragment.EB_SHOW_QUESTION_BUTTON, CommunityFragment.INDEX_FOLLOW)) - } - } - }) - } - - /** - * 返回值标识为是否执行了刷新操作 - */ - fun load(): Boolean { - return if (mCurrentCommunity != UserManager.getInstance().community.id) { - onRefresh() - mCurrentCommunity = UserManager.getInstance().community.id - true - } else { - false - } - } - - private fun showRecommendUser(userList: List) { - updateSaveBtn() - recommendScrollView.scrollTo(0, 0) - recommendContainer.visibility = View.VISIBLE - recommendUserContainer.removeAllViews() - for (i in 0 until userList.size) { - val userView = layoutInflater.inflate(R.layout.questionsinvite_item, null, false) - val userIconIv = userView.findViewById(R.id.questionsinvite_item_icon) - val userAuthIv = userView.findViewById(R.id.questionsinvite_item_badge) - val userNameTv = userView.findViewById(R.id.questionsinvite_item_name) - val userAnswerCountTv = userView.findViewById(R.id.questionsinvite_item_answercount) - val userVoteCountTv = userView.findViewById(R.id.questionsinvite_item_votecount) - val followTv = userView.findViewById(R.id.questionsinvite_item_invite) - val userBadgeSdv = userView.findViewById(R.id.sdv_user_badge) - userView.findViewById(R.id.questionsinvite_item_des).visibility = View.GONE - - if (i == 0) { - val twentyDp = DisplayUtils.dip2px(20F) - userView.setPadding(twentyDp, twentyDp, twentyDp, DisplayUtils.dip2px(15F)) - } - - val user = userList[i] - ImageUtils.display(userIconIv, user.icon) - ImageUtils.display(userAuthIv, user.auth?.icon) - userNameTv.text = user.name - - userView.setOnClickListener { - DirectUtils.directToHomeActivity(requireContext(), user.id, "问答-关注", "问答:关注") - } - - if (user.badge != null) { - userBadgeSdv.visibility = View.VISIBLE - ImageUtils.display(userBadgeSdv, user.badge.icon) - } else { - userBadgeSdv.visibility = View.GONE - } - - userBadgeSdv.setOnClickListener { v -> - DialogUtils.showViewBadgeDialog(requireContext(), user.badge) { - MtaHelper.onEvent("进入徽章墙_用户记录", "问答-关注-推荐列表", "${user.name}(${user.id})") - MtaHelper.onEvent("徽章中心", "进入徽章中心", "问答-关注-推荐列表") - DirectUtils.directToBadgeWall(requireContext(), user.id, user.name, user.icon) - } - } - - followTv.setTextColor(ContextCompat.getColor(requireContext(), R.color.theme_font)) - followTv.text = "关注" - followTv.typeface = Typeface.defaultFromStyle(Typeface.BOLD) - followTv.setBackgroundResource(R.drawable.questions_detail_tag_bg) - followTv.setOnClickListener { - if (followTv.text == "关注") { - val followText = " 已选" - followTv.text = SpanBuilder(followText).image(0, 1, R.drawable.ic_attention_select).build() - followTv.setTextColor(ContextCompat.getColor(requireContext(), R.color.text_subtitleDesc)) - mListViewModel.followSet.add(user.id) - } else { - followTv.text = "关注" - followTv.setTextColor(ContextCompat.getColor(requireContext(), R.color.theme_font)) - mListViewModel.followSet.remove(user.id) - } - updateSaveBtn() - } - - saveBtn.setOnClickListener { - mListRv.scrollToPosition(0) - mListViewModel.doFollow() - } - - userAnswerCountTv.text = requireContext().getString(R.string.ask_answer_count, NumberUtils.transSimpleCount(user.count.answer)) - userVoteCountTv.text = requireContext().getString(R.string.ask_vote_count, NumberUtils.transSimpleCount(user.count.vote!!)) - - recommendUserContainer.addView(userView) - } - } - - private fun isShowingRecommendedUser(): Boolean { - if (::recommendContainer.isInitialized - && recommendContainer.visibility == View.VISIBLE) { - return true - } - - return false - } - - /** - * 更新保存按钮 - */ - private fun updateSaveBtn() { - if (mListViewModel.followSet.isEmpty()) { - saveBtn.visibility = View.GONE - } else { - saveBtn.visibility = View.VISIBLE - } - } - - private fun hideRecommendUser() { - mListRefresh?.isEnabled = true - recommendUserContainer.removeAllViews() - recommendContainer.visibility = View.GONE - } - - override fun onLoadDone() { - super.onLoadDone() - hideRecommendUser() - updateUnreadFollowHint() - } - - override fun isAutomaticLoad(): Boolean { - return false - } - - private fun updateUnreadFollowHint() { - EventBus.getDefault().post(EBReuse(CommunityFragment.EB_HIDE_FOLLOW_HINT)) - } - - override fun getLayoutId(): Int { - return R.layout.fragment_ask_follow - } - - override fun provideListAdapter(): AskFollowAdapter { - if (!::mAdapter.isInitialized) { - mAdapter = AskFollowAdapter(requireContext(), mListViewModel) - } - return mAdapter - } - - override fun onLoadEmpty() { // 数据为空回调 - super.onLoadEmpty() - - if (TextUtils.isEmpty(UserManager.getInstance().token)) { - noDataTv.text = getString(R.string.login_hint) - noDataTv.setTextColor(ContextCompat.getColor(requireContext(), R.color.theme_font)) - } else { - mListRefresh?.isEnabled = false - noDataContainer.visibility = View.GONE - mListViewModel.getRecommendUser() - } - } - - fun scrollToTop(smooth: Boolean) { - mListRv.stopScroll() - if (smooth) { - mLayoutManager.smoothScrollToPosition(mListRv, null, 0) - } else { - mLayoutManager.scrollToPosition(0) - } - } - - override fun onRefresh() { - super.onRefresh() - hideRecommendUser() - } - - override fun addSyncPageObserver(): Boolean { - return true - } - - override fun provideSyncAdapter(): AskFollowAdapter { - return mAdapter - } - - @OnClick(R.id.reuse_tv_none_data) - override fun onClick(v: View) { - when (v.id) { - R.id.reuse_tv_none_data -> { - val hint = getString(R.string.login_hint) - if (hint == noDataTv.text.toString()) { - ifLogin("问答-关注-请先登录", null) - } - } - } - } - - @Subscribe(threadMode = ThreadMode.MAIN) - fun onMainThreadEvent(event: EBReuse) { - when (event.type) { - EB_NEW_FOLLOW -> if (isShowingRecommendedUser()) { - onLoadRefresh() - } - } - } - - companion object { - const val EB_NEW_FOLLOW = "new_follow" - } - -} \ No newline at end of file +//import android.graphics.Typeface +//import android.os.Bundle +//import android.text.TextUtils +//import android.view.View +//import android.widget.LinearLayout +//import android.widget.TextView +//import androidx.core.content.ContextCompat +//import androidx.core.widget.NestedScrollView +//import androidx.lifecycle.Observer +//import androidx.recyclerview.widget.RecyclerView +//import butterknife.BindView +//import butterknife.OnClick +//import com.facebook.drawee.view.SimpleDraweeView +//import com.gh.common.constant.Constants +//import com.gh.common.util.* +//import com.gh.gamecenter.R +//import com.gh.gamecenter.baselist.ListFragment +//import com.gh.gamecenter.entity.PersonalEntity +//import com.gh.gamecenter.entity.PersonalHistoryEntity +//import com.gh.gamecenter.eventbus.EBReuse +//import com.gh.gamecenter.eventbus.EBTypeChange +//import com.gh.gamecenter.forum.home.CommunityHomeFragment +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.qa.CommunityFragment +//import org.greenrobot.eventbus.EventBus +//import org.greenrobot.eventbus.Subscribe +//import org.greenrobot.eventbus.ThreadMode +// +//class AskFollowFragment : ListFragment() { +// +// @BindView(R.id.reuse_none_data) +// lateinit var noDataContainer: View +// +// @BindView(R.id.reuse_tv_none_data) +// lateinit var noDataTv: TextView +// +// @BindView(R.id.recommend_container) +// lateinit var recommendContainer: View +// +// @BindView(R.id.recommend_scrollview) +// lateinit var recommendScrollView: NestedScrollView +// +// @BindView(R.id.recommend_user_container) +// lateinit var recommendUserContainer: LinearLayout +// +// @BindView(R.id.save_btn) +// lateinit var saveBtn: View +// +// private lateinit var mAdapter: AskFollowAdapter +// +// private var mCurrentCommunity: String? = "" +// +// override fun onStart() { +// super.onStart() +// if (TextUtils.isEmpty(UserManager.getInstance().userId)) { +// noDataTv.text = "请先登录" +// noDataTv.setTextColor(ContextCompat.getColor(requireContext(), R.color.theme_font)) +// } else { +// if (isShowingRecommendedUser()) { +// onLoadRefresh() +// } +// } +// } +// +// override fun onCreate(savedInstanceState: Bundle?) { +// super.onCreate(savedInstanceState) +// +// mListViewModel.followStatus.observeNonNull(this) { +// if (isShowingRecommendedUser()) { +// onRefresh() +// } +// } +// } +// +// override fun onViewCreated(view: View, savedInstanceState: Bundle?) { +// super.onViewCreated(view, savedInstanceState) +// mListViewModel.recommendUsers.observe(viewLifecycleOwner, Observer { +// if (it == null) { +// hideRecommendUser() +// mListRefresh?.isEnabled = true +// noDataContainer.visibility = View.VISIBLE +// } else { +// if (!isShowingRecommendedUser()) { +// showRecommendUser(it) +// } +// } +// }) +// +// mListRv.addOnScrollListener(object : RecyclerView.OnScrollListener() { +// override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { +// if (dy > CommunityFragment.FOLLOW_HINT_TRIGGER_HEIGHT) { +// EventBus.getDefault().post(EBTypeChange(CommunityFragment.EB_HIDE_QUESTION_BUTTON, CommunityFragment.INDEX_FOLLOW)) +// } else if (dy < -CommunityFragment.FOLLOW_HINT_TRIGGER_HEIGHT) { +// EventBus.getDefault().post(EBTypeChange(CommunityFragment.EB_SHOW_QUESTION_BUTTON, CommunityFragment.INDEX_FOLLOW)) +// } +// } +// }) +// } +// +// /** +// * 返回值标识为是否执行了刷新操作 +// */ +// fun load(): Boolean { +// return if (mCurrentCommunity != UserManager.getInstance().community.id) { +// onRefresh() +// mCurrentCommunity = UserManager.getInstance().community.id +// true +// } else { +// false +// } +// } +// +// private fun showRecommendUser(userList: List) { +// updateSaveBtn() +// recommendScrollView.scrollTo(0, 0) +// recommendContainer.visibility = View.VISIBLE +// recommendUserContainer.removeAllViews() +// for (i in 0 until userList.size) { +// val userView = layoutInflater.inflate(R.layout.questionsinvite_item, null, false) +// val userIconIv = userView.findViewById(R.id.questionsinvite_item_icon) +// val userAuthIv = userView.findViewById(R.id.questionsinvite_item_badge) +// val userNameTv = userView.findViewById(R.id.questionsinvite_item_name) +// val userAnswerCountTv = userView.findViewById(R.id.questionsinvite_item_answercount) +// val userVoteCountTv = userView.findViewById(R.id.questionsinvite_item_votecount) +// val followTv = userView.findViewById(R.id.questionsinvite_item_invite) +// val userBadgeSdv = userView.findViewById(R.id.sdv_user_badge) +// userView.findViewById(R.id.questionsinvite_item_des).visibility = View.GONE +// +// if (i == 0) { +// val twentyDp = DisplayUtils.dip2px(20F) +// userView.setPadding(twentyDp, twentyDp, twentyDp, DisplayUtils.dip2px(15F)) +// } +// +// val user = userList[i] +// ImageUtils.display(userIconIv, user.icon) +// ImageUtils.display(userAuthIv, user.auth?.icon) +// userNameTv.text = user.name +// +// userView.setOnClickListener { +// DirectUtils.directToHomeActivity(requireContext(), user.id, "问答-关注", "问答:关注") +// } +// +// if (user.badge != null) { +// userBadgeSdv.visibility = View.VISIBLE +// ImageUtils.display(userBadgeSdv, user.badge.icon) +// } else { +// userBadgeSdv.visibility = View.GONE +// } +// +// userBadgeSdv.setOnClickListener { v -> +// DialogUtils.showViewBadgeDialog(requireContext(), user.badge) { +// MtaHelper.onEvent("进入徽章墙_用户记录", "问答-关注-推荐列表", "${user.name}(${user.id})") +// MtaHelper.onEvent("徽章中心", "进入徽章中心", "问答-关注-推荐列表") +// DirectUtils.directToBadgeWall(requireContext(), user.id, user.name, user.icon) +// } +// } +// +// followTv.setTextColor(ContextCompat.getColor(requireContext(), R.color.theme_font)) +// followTv.text = "关注" +// followTv.typeface = Typeface.defaultFromStyle(Typeface.BOLD) +// followTv.setBackgroundResource(R.drawable.questions_detail_tag_bg) +// followTv.setOnClickListener { +// if (followTv.text == "关注") { +// val followText = " 已选" +// followTv.text = SpanBuilder(followText).image(0, 1, R.drawable.ic_attention_select).build() +// followTv.setTextColor(ContextCompat.getColor(requireContext(), R.color.text_subtitleDesc)) +// mListViewModel.followSet.add(user.id) +// } else { +// followTv.text = "关注" +// followTv.setTextColor(ContextCompat.getColor(requireContext(), R.color.theme_font)) +// mListViewModel.followSet.remove(user.id) +// } +// updateSaveBtn() +// } +// +// saveBtn.setOnClickListener { +// mListRv.scrollToPosition(0) +// mListViewModel.doFollow() +// } +// +// userAnswerCountTv.text = requireContext().getString(R.string.ask_answer_count, NumberUtils.transSimpleCount(user.count.answer)) +// userVoteCountTv.text = requireContext().getString(R.string.ask_vote_count, NumberUtils.transSimpleCount(user.count.vote!!)) +// +// recommendUserContainer.addView(userView) +// } +// } +// +// private fun isShowingRecommendedUser(): Boolean { +// if (::recommendContainer.isInitialized +// && recommendContainer.visibility == View.VISIBLE) { +// return true +// } +// +// return false +// } +// +// /** +// * 更新保存按钮 +// */ +// private fun updateSaveBtn() { +// if (mListViewModel.followSet.isEmpty()) { +// saveBtn.visibility = View.GONE +// } else { +// saveBtn.visibility = View.VISIBLE +// } +// } +// +// private fun hideRecommendUser() { +// mListRefresh?.isEnabled = true +// recommendUserContainer.removeAllViews() +// recommendContainer.visibility = View.GONE +// } +// +// override fun onLoadDone() { +// super.onLoadDone() +// hideRecommendUser() +// updateUnreadFollowHint() +// } +// +// override fun isAutomaticLoad(): Boolean { +// return false +// } +// +// private fun updateUnreadFollowHint() { +// EventBus.getDefault().post(EBReuse(CommunityFragment.EB_HIDE_FOLLOW_HINT)) +// } +// +// override fun getLayoutId(): Int { +// return R.layout.fragment_ask_follow +// } +// +// override fun provideListAdapter(): AskFollowAdapter { +// if (!::mAdapter.isInitialized) { +// mAdapter = AskFollowAdapter(requireContext(), mListViewModel) +// } +// return mAdapter +// } +// +// override fun onLoadEmpty() { // 数据为空回调 +// super.onLoadEmpty() +// +// if (TextUtils.isEmpty(UserManager.getInstance().token)) { +// noDataTv.text = getString(R.string.login_hint) +// noDataTv.setTextColor(ContextCompat.getColor(requireContext(), R.color.theme_font)) +// } else { +// mListRefresh?.isEnabled = false +// noDataContainer.visibility = View.GONE +// mListViewModel.getRecommendUser() +// } +// } +// +// fun scrollToTop(smooth: Boolean) { +// mListRv.stopScroll() +// if (smooth) { +// mLayoutManager.smoothScrollToPosition(mListRv, null, 0) +// } else { +// mLayoutManager.scrollToPosition(0) +// } +// } +// +// override fun onRefresh() { +// super.onRefresh() +// hideRecommendUser() +// } +// +// override fun addSyncPageObserver(): Boolean { +// return true +// } +// +// override fun provideSyncAdapter(): AskFollowAdapter { +// return mAdapter +// } +// +// @OnClick(R.id.reuse_tv_none_data) +// override fun onClick(v: View) { +// when (v.id) { +// R.id.reuse_tv_none_data -> { +// val hint = getString(R.string.login_hint) +// if (hint == noDataTv.text.toString()) { +// ifLogin("问答-关注-请先登录", null) +// } +// } +// } +// } +// +// @Subscribe(threadMode = ThreadMode.MAIN) +// fun onMainThreadEvent(event: EBReuse) { +// when (event.type) { +// EB_NEW_FOLLOW -> if (isShowingRecommendedUser()) { +// onLoadRefresh() +// } +// } +// } +// +// companion object { +// const val EB_NEW_FOLLOW = "new_follow" +// } +// +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/follow/AskFollowMoreDialog.kt b/app/src/main/java/com/gh/gamecenter/qa/follow/AskFollowMoreDialog.kt index 3c3315515c..f6d929b1fd 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/follow/AskFollowMoreDialog.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/follow/AskFollowMoreDialog.kt @@ -7,21 +7,23 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.databinding.DataBindingUtil import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.gh.base.fragment.BaseDialogFragment import com.gh.common.util.DirectUtils -import com.gh.gamecenter.R +import com.gh.common.util.ImageUtils +import com.gh.common.util.NewsUtils +import com.gh.common.util.toBinding +import com.gh.gamecenter.databinding.DialogAskFollowMoreBinding import com.gh.gamecenter.databinding.ItemAskFollowMoreBinding import com.gh.gamecenter.entity.UserEntity -import kotlinx.android.synthetic.main.dialog_ask_follow_more.* class AskFollowMoreDialog : BaseDialogFragment() { private var mType = "" private var mPath = "" private var mUserList = ArrayList() + private lateinit var mBinding: DialogAskFollowMoreBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -32,8 +34,10 @@ class AskFollowMoreDialog : BaseDialogFragment() { } } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.dialog_ask_follow_more, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + return DialogAskFollowMoreBinding.inflate(LayoutInflater.from(requireContext()), null, false).apply { + mBinding = this + }.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -41,13 +45,13 @@ class AskFollowMoreDialog : BaseDialogFragment() { dialog?.setCanceledOnTouchOutside(true) - val lp = container.layoutParams + val lp = mBinding.container.layoutParams lp.width = ((getScreenWidth(requireActivity())) * 0.8).toInt() - container.layoutParams = lp + mBinding.container.layoutParams = lp - tv_title.text = mType - recyclerview.adapter = AskFollowMoreAdapter(requireContext(), mUserList, mPath) - recyclerview.layoutManager = LinearLayoutManager(recyclerview.context) + mBinding.tvTitle.text = mType + mBinding.recyclerview.adapter = AskFollowMoreAdapter(requireContext(), mUserList, mPath) + mBinding.recyclerview.layoutManager = LinearLayoutManager(mBinding.recyclerview.context) } private fun getScreenWidth(activity: Activity): Int { @@ -56,10 +60,10 @@ class AskFollowMoreDialog : BaseDialogFragment() { return size.x } - class AskFollowMoreAdapter(var context: Context, var list: ArrayList, var path: String) - : RecyclerView.Adapter() { + class AskFollowMoreAdapter(var context: Context, var list: ArrayList, var path: String) : + RecyclerView.Adapter() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - return ItemViewHolder(DataBindingUtil.inflate((context as Activity).layoutInflater, R.layout.item_ask_follow_more, parent, false)) + return ItemViewHolder(parent.toBinding()) } override fun getItemCount(): Int { @@ -68,7 +72,10 @@ class AskFollowMoreDialog : BaseDialogFragment() { override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { (holder as ItemViewHolder).run { - binding.user = list[position] + val user = list[position] + ImageUtils.display(binding.ivIcon, user.icon) + binding.tvUsername.text = user.name + binding.tvTime.text = NewsUtils.getFormattedTime(user.time ?: 0) binding.root.setOnClickListener { DirectUtils.directToHomeActivity(context, list[position].id, "问答-关注", path) } diff --git a/app/src/main/java/com/gh/gamecenter/qa/myqa/ConcernQuestionsAdapter.java b/app/src/main/java/com/gh/gamecenter/qa/myqa/ConcernQuestionsAdapter.java index ee8b522765..fbb96db28d 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/myqa/ConcernQuestionsAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/qa/myqa/ConcernQuestionsAdapter.java @@ -1,8 +1,6 @@ package com.gh.gamecenter.qa.myqa; -import android.app.Activity; import android.content.Context; -import android.content.Intent; import android.view.View; import android.view.ViewGroup; @@ -18,7 +16,6 @@ import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.databinding.CommunityQuestionItemBinding; import com.gh.gamecenter.qa.entity.Questions; import com.gh.gamecenter.qa.questions.CommunityQuestionViewHolder; -import com.gh.gamecenter.qa.questions.detail.QuestionsDetailActivity; import kotlin.Pair; @@ -65,10 +62,10 @@ class ConcernQuestionsAdapter extends ListAdapter implements ISyncAda Questions questions = mEntityList.get(position); ((CommunityQuestionViewHolder) holder).bindMyQuestionViewHolder(questions, mEntrance, "我的问答-关注问题"); holder.itemView.setOnClickListener(v -> { - if (mContext instanceof Activity) { - Intent intent = QuestionsDetailActivity.getIntent(mContext, questions.getId(), mEntrance, "我的问答-关注问题", true); - ((Activity) mContext).startActivityForResult(intent, ConcernQuestionsFragment.KEY_CHECK_QUESTION_CONCERN); - } +// if (mContext instanceof Activity) { +// Intent intent = QuestionsDetailActivity.getIntent(mContext, questions.getId(), mEntrance, "我的问答-关注问题", true); +// ((Activity) mContext).startActivityForResult(intent, ConcernQuestionsFragment.KEY_CHECK_QUESTION_CONCERN); +// } }); break; case ItemViewType.ITEM_FOOTER: diff --git a/app/src/main/java/com/gh/gamecenter/qa/myqa/MyQuestionsAdapter.java b/app/src/main/java/com/gh/gamecenter/qa/myqa/MyQuestionsAdapter.java index fa468007de..0c6c3ad23a 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/myqa/MyQuestionsAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/qa/myqa/MyQuestionsAdapter.java @@ -16,7 +16,6 @@ import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.databinding.CommunityQuestionItemBinding; import com.gh.gamecenter.qa.entity.Questions; import com.gh.gamecenter.qa.questions.CommunityQuestionViewHolder; -import com.gh.gamecenter.qa.questions.detail.QuestionsDetailActivity; import com.gh.gamecenter.qa.questions.newdetail.NewQuestionDetailActivity; import kotlin.Pair; diff --git a/app/src/main/java/com/gh/gamecenter/qa/newest/AskQuestionsNewBodyAdapter.java b/app/src/main/java/com/gh/gamecenter/qa/newest/AskQuestionsNewBodyAdapter.java index c56e4e2fd2..b9c4e09b10 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/newest/AskQuestionsNewBodyAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/qa/newest/AskQuestionsNewBodyAdapter.java @@ -1,95 +1,94 @@ -package com.gh.gamecenter.qa.newest; - -import android.content.Context; - -import androidx.recyclerview.widget.RecyclerView; -import kotlin.Pair; - -import android.view.View; -import android.view.ViewGroup; - -import com.gh.base.OnListClickListener; -import com.gh.common.constant.ItemViewType; -import com.gh.common.syncpage.ISyncAdapterHandler; -import com.gh.gamecenter.R; -import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; -import com.gh.gamecenter.baselist.ListAdapter; -import com.gh.gamecenter.databinding.CommunityQuestionItemBinding; -import com.gh.gamecenter.qa.entity.Questions; -import com.gh.gamecenter.qa.questions.CommunityQuestionViewHolder; -import com.gh.gamecenter.qa.questions.detail.QuestionsDetailActivity; -import com.gh.gamecenter.qa.questions.newdetail.NewQuestionDetailActivity; - -import org.jetbrains.annotations.Nullable; - -/** - * Created by khy on 5/12/17. - */ - -public class AskQuestionsNewBodyAdapter extends ListAdapter implements ISyncAdapterHandler { - - private OnListClickListener mListClickListener; - - private String mEntrance = ""; - - @Override - protected boolean areItemsTheSame(Questions oldItem, Questions newItem) { - return oldItem.getId().equals(newItem.getId()); - } - - public AskQuestionsNewBodyAdapter(Context context, String entrance, OnListClickListener listClickListener) { - super(context); - mEntrance = entrance; - mListClickListener = listClickListener; - } - - @Override - public int getItemViewType(int position) { - if (position == getItemCount() - 1) return ItemViewType.ITEM_FOOTER; - return ItemViewType.ITEM_BODY; - } - - @Override - public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View view; - switch (viewType) { - case ItemViewType.ITEM_FOOTER: - view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false); - return new FooterViewHolder(view, mListClickListener); - case ItemViewType.ITEM_BODY: - view = mLayoutInflater.inflate(R.layout.community_question_item, parent, false); - return new CommunityQuestionViewHolder(CommunityQuestionItemBinding.bind(view)); - default: - return null; - } - } - - @Override - public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { - switch (getItemViewType(position)) { - case ItemViewType.ITEM_BODY: - Questions questions = mEntityList.get(position); - ((CommunityQuestionViewHolder) holder).bindQuestionViewHolder(questions, mEntrance, "问答-问题"); - holder.itemView.setOnClickListener(v -> mContext.startActivity(NewQuestionDetailActivity.getIntent(mContext, questions.getId(), mEntrance, "问答-问题"))); - break; - case ItemViewType.ITEM_FOOTER: - FooterViewHolder footerViewHolder = (FooterViewHolder) holder; - footerViewHolder.initItemPadding(); - footerViewHolder.initFooterViewHolder(mIsLoading, mIsNetworkError, mIsOver); - break; - } - } - - @Override - public int getItemCount() { - return mEntityList == null || mEntityList.isEmpty() ? 0 : mEntityList.size() + FOOTER_ITEM_COUNT; - } - - @Nullable - @Override - public Pair getSyncData(int position) { - if (position >= mEntityList.size()) return null; - Questions entity = mEntityList.get(position); - return new Pair(entity.getId(), entity); - } -} +//package com.gh.gamecenter.qa.newest; +// +//import android.content.Context; +//import android.view.View; +//import android.view.ViewGroup; +// +//import androidx.recyclerview.widget.RecyclerView; +// +//import com.gh.base.OnListClickListener; +//import com.gh.common.constant.ItemViewType; +//import com.gh.common.syncpage.ISyncAdapterHandler; +//import com.gh.gamecenter.R; +//import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; +//import com.gh.gamecenter.baselist.ListAdapter; +//import com.gh.gamecenter.databinding.CommunityQuestionItemBinding; +//import com.gh.gamecenter.qa.entity.Questions; +//import com.gh.gamecenter.qa.questions.CommunityQuestionViewHolder; +//import com.gh.gamecenter.qa.questions.newdetail.NewQuestionDetailActivity; +// +//import org.jetbrains.annotations.Nullable; +// +//import kotlin.Pair; +// +///** +// * Created by khy on 5/12/17. +// */ +// +//public class AskQuestionsNewBodyAdapter extends ListAdapter implements ISyncAdapterHandler { +// +// private OnListClickListener mListClickListener; +// +// private String mEntrance = ""; +// +// @Override +// protected boolean areItemsTheSame(Questions oldItem, Questions newItem) { +// return oldItem.getId().equals(newItem.getId()); +// } +// +// public AskQuestionsNewBodyAdapter(Context context, String entrance, OnListClickListener listClickListener) { +// super(context); +// mEntrance = entrance; +// mListClickListener = listClickListener; +// } +// +// @Override +// public int getItemViewType(int position) { +// if (position == getItemCount() - 1) return ItemViewType.ITEM_FOOTER; +// return ItemViewType.ITEM_BODY; +// } +// +// @Override +// public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { +// View view; +// switch (viewType) { +// case ItemViewType.ITEM_FOOTER: +// view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false); +// return new FooterViewHolder(view, mListClickListener); +// case ItemViewType.ITEM_BODY: +// view = mLayoutInflater.inflate(R.layout.community_question_item, parent, false); +// return new CommunityQuestionViewHolder(CommunityQuestionItemBinding.bind(view)); +// default: +// return null; +// } +// } +// +// @Override +// public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { +// switch (getItemViewType(position)) { +// case ItemViewType.ITEM_BODY: +// Questions questions = mEntityList.get(position); +// ((CommunityQuestionViewHolder) holder).bindQuestionViewHolder(questions, mEntrance, "问答-问题"); +// holder.itemView.setOnClickListener(v -> mContext.startActivity(NewQuestionDetailActivity.getIntent(mContext, questions.getId(), mEntrance, "问答-问题"))); +// break; +// case ItemViewType.ITEM_FOOTER: +// FooterViewHolder footerViewHolder = (FooterViewHolder) holder; +// footerViewHolder.initItemPadding(); +// footerViewHolder.initFooterViewHolder(mIsLoading, mIsNetworkError, mIsOver); +// break; +// } +// } +// +// @Override +// public int getItemCount() { +// return mEntityList == null || mEntityList.isEmpty() ? 0 : mEntityList.size() + FOOTER_ITEM_COUNT; +// } +// +// @Nullable +// @Override +// public Pair getSyncData(int position) { +// if (position >= mEntityList.size()) return null; +// Questions entity = mEntityList.get(position); +// return new Pair(entity.getId(), entity); +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/newest/AskQuestionsNewBodyFragment.java b/app/src/main/java/com/gh/gamecenter/qa/newest/AskQuestionsNewBodyFragment.java index cbf4505dde..1074373160 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/newest/AskQuestionsNewBodyFragment.java +++ b/app/src/main/java/com/gh/gamecenter/qa/newest/AskQuestionsNewBodyFragment.java @@ -1,154 +1,154 @@ -package com.gh.gamecenter.qa.newest; - -import android.content.Intent; -import android.os.Bundle; -import android.view.View; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.RecyclerView; - -import com.gh.common.util.CheckLoginUtils; -import com.gh.common.util.UrlFilterUtils; -import com.gh.gamecenter.R; -import com.gh.gamecenter.baselist.ListAdapter; -import com.gh.gamecenter.baselist.ListFragment; -import com.gh.gamecenter.baselist.LoadStatus; -import com.gh.gamecenter.baselist.LoadType; -import com.gh.gamecenter.baselist.NormalListViewModel; -import com.gh.gamecenter.eventbus.EBReuse; -import com.gh.gamecenter.eventbus.EBTypeChange; -import com.gh.gamecenter.manager.UserManager; -import com.gh.gamecenter.qa.BbsType; -import com.gh.gamecenter.qa.CommunityFragment; -import com.gh.gamecenter.qa.entity.Questions; -import com.gh.gamecenter.qa.questions.edit.QuestionEditActivity; -import com.gh.gamecenter.retrofit.RetrofitManager; - -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; - -import java.util.List; - -import butterknife.OnClick; -import io.reactivex.Observable; - -/** - * Created by khy on 5/12/17. - */ - -public class AskQuestionsNewBodyFragment extends ListFragment { - - private AskQuestionsNewBodyAdapter mAdapter; - private CheckLoginUtils.OnLoginListener mOnLoginListener; - - private String mType = "最新"; - - private String mCommunityId; - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - if (!UserManager.getInstance().getCommunity().getId().equals(mCommunityId)) { - mCommunityId = UserManager.getInstance().getCommunity().getId(); - if (getArguments() != null) { - mType = getArguments().getString(mCommunityId); - } - onRefresh(); - } - } - - @Override - protected int getLayoutId() { - return R.layout.fragment_list_nodate_skip; - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - mCommunityId = UserManager.getInstance().getCommunity().getId(); - if (getArguments() != null) { - mType = getArguments().getString(mCommunityId); - } - super.onCreate(savedInstanceState); - mOnLoginListener = () -> startActivity(QuestionEditActivity.Companion.getIntent(getContext(), BbsType.GAME_BBS)); - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - mListRv.addOnScrollListener(new RecyclerView.OnScrollListener() { - @Override - public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { - if (dy > CommunityFragment.FOLLOW_HINT_TRIGGER_HEIGHT) { - EventBus.getDefault().post(new EBTypeChange(CommunityFragment.EB_HIDE_QUESTION_BUTTON, CommunityFragment.INDEX_ALL)); - } else if (dy < -CommunityFragment.FOLLOW_HINT_TRIGGER_HEIGHT) { - EventBus.getDefault().post(new EBTypeChange(CommunityFragment.EB_SHOW_QUESTION_BUTTON, CommunityFragment.INDEX_ALL)); - } - } - }); - } - - @OnClick(R.id.reuse_nodata_skip_tv_btn) - public void onViewClick(View v) { - if (v.getId() == R.id.reuse_nodata_skip_tv_btn) { - CheckLoginUtils.checkLogin(getContext(), "问答-问题-我要提问", mOnLoginListener); - } - } - - @Override - protected ListAdapter provideListAdapter() { - return mAdapter == null ? mAdapter = new AskQuestionsNewBodyAdapter(getContext(), mEntrance, this) : mAdapter; - } - - @Override - public Observable> provideDataObservable(int page) { - return RetrofitManager.getInstance().getApi().getAskQuestions(mCommunityId, UrlFilterUtils.getFilterQuery("tag_group", mType), page); - } - - @Override - public void onListClick(View view, int position, Object data) { - if (view.getId() == R.id.footerview_item) { - if (mAdapter.isNetworkError()) { - mListViewModel.load(LoadType.RETRY); - } - } - } - - public void scrollToTop(Boolean smooth) { - mListRv.stopScroll(); - if (smooth) { - mLayoutManager.smoothScrollToPosition(mListRv, null, 0); - } else { - mLayoutManager.scrollToPosition(0); - } - } - - public static Fragment newInstance(String s) { - AskQuestionsNewBodyFragment questionsBodyFragment = new AskQuestionsNewBodyFragment(); - Bundle args = new Bundle(); - args.putString(UserManager.getInstance().getCommunity().getId(), s); - questionsBodyFragment.setArguments(args); - return questionsBodyFragment; - } - - @Subscribe(threadMode = ThreadMode.MAIN) - public void onEventMainThread(EBReuse reuse) { - if (QuestionEditActivity.QUESTION_POSTED_TAG.equals(reuse.getType())) { - mAdapter.loadChange(LoadStatus.INIT); - mBaseHandler.postDelayed(() -> mListViewModel.load(LoadType.REFRESH), 100); - } - } - - @Override - protected boolean addSyncPageObserver() { - return true; - } - - @Nullable - @Override - protected RecyclerView.Adapter provideSyncAdapter() { - return mAdapter; - } -} +//package com.gh.gamecenter.qa.newest; +// +//import android.content.Intent; +//import android.os.Bundle; +//import android.view.View; +// +//import androidx.annotation.NonNull; +//import androidx.annotation.Nullable; +//import androidx.fragment.app.Fragment; +//import androidx.recyclerview.widget.RecyclerView; +// +//import com.gh.common.util.CheckLoginUtils; +//import com.gh.common.util.UrlFilterUtils; +//import com.gh.gamecenter.R; +//import com.gh.gamecenter.baselist.ListAdapter; +//import com.gh.gamecenter.baselist.ListFragment; +//import com.gh.gamecenter.baselist.LoadStatus; +//import com.gh.gamecenter.baselist.LoadType; +//import com.gh.gamecenter.baselist.NormalListViewModel; +//import com.gh.gamecenter.eventbus.EBReuse; +//import com.gh.gamecenter.eventbus.EBTypeChange; +//import com.gh.gamecenter.manager.UserManager; +//import com.gh.gamecenter.qa.BbsType; +//import com.gh.gamecenter.qa.CommunityFragment; +//import com.gh.gamecenter.qa.entity.Questions; +//import com.gh.gamecenter.qa.questions.edit.QuestionEditActivity; +//import com.gh.gamecenter.retrofit.RetrofitManager; +// +//import org.greenrobot.eventbus.EventBus; +//import org.greenrobot.eventbus.Subscribe; +//import org.greenrobot.eventbus.ThreadMode; +// +//import java.util.List; +// +//import butterknife.OnClick; +//import io.reactivex.Observable; +// +///** +// * Created by khy on 5/12/17. +// */ +// +//public class AskQuestionsNewBodyFragment extends ListFragment { +// +// private AskQuestionsNewBodyAdapter mAdapter; +// private CheckLoginUtils.OnLoginListener mOnLoginListener; +// +// private String mType = "最新"; +// +// private String mCommunityId; +// +// @Override +// public void onActivityResult(int requestCode, int resultCode, Intent data) { +// super.onActivityResult(requestCode, resultCode, data); +// if (!UserManager.getInstance().getCommunity().getId().equals(mCommunityId)) { +// mCommunityId = UserManager.getInstance().getCommunity().getId(); +// if (getArguments() != null) { +// mType = getArguments().getString(mCommunityId); +// } +// onRefresh(); +// } +// } +// +// @Override +// protected int getLayoutId() { +// return R.layout.fragment_list_nodate_skip; +// } +// +// @Override +// public void onCreate(@Nullable Bundle savedInstanceState) { +// mCommunityId = UserManager.getInstance().getCommunity().getId(); +// if (getArguments() != null) { +// mType = getArguments().getString(mCommunityId); +// } +// super.onCreate(savedInstanceState); +// mOnLoginListener = () -> startActivity(QuestionEditActivity.Companion.getIntent(getContext(), BbsType.GAME_BBS)); +// } +// +// @Override +// public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { +// super.onViewCreated(view, savedInstanceState); +// mListRv.addOnScrollListener(new RecyclerView.OnScrollListener() { +// @Override +// public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { +// if (dy > CommunityFragment.FOLLOW_HINT_TRIGGER_HEIGHT) { +// EventBus.getDefault().post(new EBTypeChange(CommunityFragment.EB_HIDE_QUESTION_BUTTON, CommunityFragment.INDEX_ALL)); +// } else if (dy < -CommunityFragment.FOLLOW_HINT_TRIGGER_HEIGHT) { +// EventBus.getDefault().post(new EBTypeChange(CommunityFragment.EB_SHOW_QUESTION_BUTTON, CommunityFragment.INDEX_ALL)); +// } +// } +// }); +// } +// +// @OnClick(R.id.reuse_nodata_skip_tv_btn) +// public void onViewClick(View v) { +// if (v.getId() == R.id.reuse_nodata_skip_tv_btn) { +// CheckLoginUtils.checkLogin(getContext(), "问答-问题-我要提问", mOnLoginListener); +// } +// } +// +// @Override +// protected ListAdapter provideListAdapter() { +// return mAdapter == null ? mAdapter = new AskQuestionsNewBodyAdapter(getContext(), mEntrance, this) : mAdapter; +// } +// +// @Override +// public Observable> provideDataObservable(int page) { +// return RetrofitManager.getInstance().getApi().getAskQuestions(mCommunityId, UrlFilterUtils.getFilterQuery("tag_group", mType), page); +// } +// +// @Override +// public void onListClick(View view, int position, Object data) { +// if (view.getId() == R.id.footerview_item) { +// if (mAdapter.isNetworkError()) { +// mListViewModel.load(LoadType.RETRY); +// } +// } +// } +// +// public void scrollToTop(Boolean smooth) { +// mListRv.stopScroll(); +// if (smooth) { +// mLayoutManager.smoothScrollToPosition(mListRv, null, 0); +// } else { +// mLayoutManager.scrollToPosition(0); +// } +// } +// +// public static Fragment newInstance(String s) { +// AskQuestionsNewBodyFragment questionsBodyFragment = new AskQuestionsNewBodyFragment(); +// Bundle args = new Bundle(); +// args.putString(UserManager.getInstance().getCommunity().getId(), s); +// questionsBodyFragment.setArguments(args); +// return questionsBodyFragment; +// } +// +// @Subscribe(threadMode = ThreadMode.MAIN) +// public void onEventMainThread(EBReuse reuse) { +// if (QuestionEditActivity.QUESTION_POSTED_TAG.equals(reuse.getType())) { +// mAdapter.loadChange(LoadStatus.INIT); +// mBaseHandler.postDelayed(() -> mListViewModel.load(LoadType.REFRESH), 100); +// } +// } +// +// @Override +// protected boolean addSyncPageObserver() { +// return true; +// } +// +// @Nullable +// @Override +// protected RecyclerView.Adapter provideSyncAdapter() { +// return mAdapter; +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/newest/AskQuestionsNewFragment.java b/app/src/main/java/com/gh/gamecenter/qa/newest/AskQuestionsNewFragment.java index 867dc2fbb3..be4bfc51c9 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/newest/AskQuestionsNewFragment.java +++ b/app/src/main/java/com/gh/gamecenter/qa/newest/AskQuestionsNewFragment.java @@ -1,177 +1,177 @@ -package com.gh.gamecenter.qa.newest; - -import android.app.Activity; -import android.content.Intent; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProviders; -import androidx.viewpager.widget.ViewPager; - -import com.facebook.drawee.view.SimpleDraweeView; -import com.gh.base.fragment.BaseFragment; -import com.gh.common.util.DataUtils; -import com.gh.common.util.ImageUtils; -import com.gh.common.view.TabIndicatorView; -import com.gh.gamecenter.R; -import com.gh.gamecenter.manager.UserManager; -import com.gh.gamecenter.qa.entity.AskTagGroupsEntity; -import com.gh.gamecenter.qa.tags.AskQuestionsNewViewModel; -import com.gh.gamecenter.qa.tags.AskTagPagerFragmentAdapter; -import com.google.android.material.tabs.TabLayout; -import com.halo.assistant.HaloApp; -import com.lightgame.view.NoScrollableViewPager; - -import java.util.List; - -import butterknife.BindView; -import butterknife.OnClick; - -import static com.gh.gamecenter.qa.CommunityFragment.COMMUNITIES_SELECT_REQUEST; - -/** - * Created by khy on 5/12/17. - */ - -public class AskQuestionsNewFragment extends BaseFragment { - - @BindView(R.id.ask_questions_tablayout) - TabLayout mTablayout; - @BindView(R.id.ask_questions_viewpager) - NoScrollableViewPager mViewpager; - @BindView(R.id.ask_questions_tabindicator) - TabIndicatorView mTabIndicatorView; - @BindView(R.id.ask_appbar) - View mAppBar; - @BindView(R.id.reuse_no_connection) - View mNoConn; - @BindView(R.id.reuse_ll_loading) - View mLoading; - - private AskQuestionsNewViewModel mModel; - - private List mTagGroupsList; - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - if (requestCode == COMMUNITIES_SELECT_REQUEST && resultCode == Activity.RESULT_OK) { - if (mTagGroupsList != null) mTagGroupsList.clear(); - mAppBar.setVisibility(View.GONE); - mNoConn.setVisibility(View.GONE); - mViewpager.setVisibility(View.GONE); - mLoading.setVisibility(View.VISIBLE); - mModel.repty(); - } - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - final AskQuestionsNewViewModel.Factory factory = new AskQuestionsNewViewModel.Factory(HaloApp.getInstance().getApplication()); - mModel = ViewModelProviders.of(this, factory) - .get(AskQuestionsNewViewModel.class); - subscribeUi(mModel); - - // 页面销毁时进行一次重试,防止更换社区时页面销毁导致onActivityResult无法接受到信息 - if (savedInstanceState != null) { - mModel.repty(); - } - - mViewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { - @Override - public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { - } - - @Override - public void onPageSelected(int position) { - if (mTagGroupsList != null && mTagGroupsList.size() > position) { - DataUtils.onMtaEvent(getContext(), "问答页面", - UserManager.getInstance().getCommunity().getName(), "问题-" + mTagGroupsList.get(position).getName()); - } - } - - @Override - public void onPageScrollStateChanged(int state) { - - } - }); - } - - private void subscribeUi(AskQuestionsNewViewModel viewModel) { - viewModel.getTagGroupsObservable().observe(this, new Observer>() { - @Override - public void onChanged(@Nullable List tagGroups) { - mTagGroupsList = tagGroups; - if (tagGroups != null && tagGroups.size() > 0) { - mViewpager.setVisibility(View.VISIBLE); - mAppBar.setVisibility(View.VISIBLE); - mNoConn.setVisibility(View.GONE); - mLoading.setVisibility(View.GONE); - initTab(); - } else { - mViewpager.setVisibility(View.GONE); - mAppBar.setVisibility(View.GONE); - mNoConn.setVisibility(View.VISIBLE); - mLoading.setVisibility(View.GONE); - } - } - }); - } - - @Override - protected int getLayoutId() { - return R.layout.fragment_ask_questions; - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - } - - @OnClick({R.id.reuse_no_connection}) - public void onClick(View view) { - switch (view.getId()) { - case R.id.reuse_no_connection: - mNoConn.setVisibility(View.GONE); - mLoading.setVisibility(View.VISIBLE); - mModel.repty(); - break; - } - } - - private void initTab() { - AskTagPagerFragmentAdapter adapter = new AskTagPagerFragmentAdapter(getChildFragmentManager(), mTagGroupsList); - mViewpager.setAdapter(adapter); - mTablayout.setupWithViewPager(mViewpager); - mTabIndicatorView.setupWithTabLayout(mTablayout); - mTabIndicatorView.setupWithViewPager(mViewpager); -// mTabIndicatorView.setIndicatorWidth(45); - - if (mTagGroupsList.size() == 1 && "最新".equals(mTagGroupsList.get(0).getName())) { - mAppBar.setVisibility(View.GONE); - } - - for (int i = 0; i < mTablayout.getTabCount(); i++) { - TabLayout.Tab tab = mTablayout.getTabAt(i); - if (tab != null) { - tab.setCustomView(getTabView(mTagGroupsList.get(i))); - } - } - } - - public View getTabView(AskTagGroupsEntity tagList) { - View view = LayoutInflater.from(getContext()).inflate(R.layout.ask_tab_item, null); - SimpleDraweeView tabIcon = view.findViewById(R.id.tab_item_icon); - ImageUtils.display(tabIcon, tagList.getIcon()); - TextView tabType = view.findViewById(R.id.tab_item_type); - tabType.setText(tagList.getName()); - return view; - } -} +//package com.gh.gamecenter.qa.newest; +// +//import android.app.Activity; +//import android.content.Intent; +//import android.os.Bundle; +//import android.view.LayoutInflater; +//import android.view.View; +//import android.widget.TextView; +// +//import androidx.annotation.NonNull; +//import androidx.annotation.Nullable; +//import androidx.lifecycle.Observer; +//import androidx.lifecycle.ViewModelProviders; +//import androidx.viewpager.widget.ViewPager; +// +//import com.facebook.drawee.view.SimpleDraweeView; +//import com.gh.base.fragment.BaseFragment; +//import com.gh.common.util.DataUtils; +//import com.gh.common.util.ImageUtils; +//import com.gh.common.view.TabIndicatorView; +//import com.gh.gamecenter.R; +//import com.gh.gamecenter.manager.UserManager; +//import com.gh.gamecenter.qa.entity.AskTagGroupsEntity; +//import com.gh.gamecenter.qa.tags.AskQuestionsNewViewModel; +//import com.gh.gamecenter.qa.tags.AskTagPagerFragmentAdapter; +//import com.google.android.material.tabs.TabLayout; +//import com.halo.assistant.HaloApp; +//import com.lightgame.view.NoScrollableViewPager; +// +//import java.util.List; +// +//import butterknife.BindView; +//import butterknife.OnClick; +// +//import static com.gh.gamecenter.qa.CommunityFragment.COMMUNITIES_SELECT_REQUEST; +// +///** +// * Created by khy on 5/12/17. +// */ +// +//public class AskQuestionsNewFragment extends BaseFragment { +// +// @BindView(R.id.ask_questions_tablayout) +// TabLayout mTablayout; +// @BindView(R.id.ask_questions_viewpager) +// NoScrollableViewPager mViewpager; +// @BindView(R.id.ask_questions_tabindicator) +// TabIndicatorView mTabIndicatorView; +// @BindView(R.id.ask_appbar) +// View mAppBar; +// @BindView(R.id.reuse_no_connection) +// View mNoConn; +// @BindView(R.id.reuse_ll_loading) +// View mLoading; +// +// private AskQuestionsNewViewModel mModel; +// +// private List mTagGroupsList; +// +// @Override +// public void onActivityResult(int requestCode, int resultCode, Intent data) { +// super.onActivityResult(requestCode, resultCode, data); +// if (requestCode == COMMUNITIES_SELECT_REQUEST && resultCode == Activity.RESULT_OK) { +// if (mTagGroupsList != null) mTagGroupsList.clear(); +// mAppBar.setVisibility(View.GONE); +// mNoConn.setVisibility(View.GONE); +// mViewpager.setVisibility(View.GONE); +// mLoading.setVisibility(View.VISIBLE); +// mModel.repty(); +// } +// } +// +// @Override +// public void onCreate(@Nullable Bundle savedInstanceState) { +// super.onCreate(savedInstanceState); +// +// final AskQuestionsNewViewModel.Factory factory = new AskQuestionsNewViewModel.Factory(HaloApp.getInstance().getApplication()); +// mModel = ViewModelProviders.of(this, factory) +// .get(AskQuestionsNewViewModel.class); +// subscribeUi(mModel); +// +// // 页面销毁时进行一次重试,防止更换社区时页面销毁导致onActivityResult无法接受到信息 +// if (savedInstanceState != null) { +// mModel.repty(); +// } +// +// mViewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { +// @Override +// public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { +// } +// +// @Override +// public void onPageSelected(int position) { +// if (mTagGroupsList != null && mTagGroupsList.size() > position) { +// DataUtils.onMtaEvent(getContext(), "问答页面", +// UserManager.getInstance().getCommunity().getName(), "问题-" + mTagGroupsList.get(position).getName()); +// } +// } +// +// @Override +// public void onPageScrollStateChanged(int state) { +// +// } +// }); +// } +// +// private void subscribeUi(AskQuestionsNewViewModel viewModel) { +// viewModel.getTagGroupsObservable().observe(this, new Observer>() { +// @Override +// public void onChanged(@Nullable List tagGroups) { +// mTagGroupsList = tagGroups; +// if (tagGroups != null && tagGroups.size() > 0) { +// mViewpager.setVisibility(View.VISIBLE); +// mAppBar.setVisibility(View.VISIBLE); +// mNoConn.setVisibility(View.GONE); +// mLoading.setVisibility(View.GONE); +// initTab(); +// } else { +// mViewpager.setVisibility(View.GONE); +// mAppBar.setVisibility(View.GONE); +// mNoConn.setVisibility(View.VISIBLE); +// mLoading.setVisibility(View.GONE); +// } +// } +// }); +// } +// +// @Override +// protected int getLayoutId() { +// return R.layout.fragment_ask_questions; +// } +// +// @Override +// public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { +// super.onViewCreated(view, savedInstanceState); +// } +// +// @OnClick({R.id.reuse_no_connection}) +// public void onClick(View view) { +// switch (view.getId()) { +// case R.id.reuse_no_connection: +// mNoConn.setVisibility(View.GONE); +// mLoading.setVisibility(View.VISIBLE); +// mModel.repty(); +// break; +// } +// } +// +// private void initTab() { +// AskTagPagerFragmentAdapter adapter = new AskTagPagerFragmentAdapter(getChildFragmentManager(), mTagGroupsList); +// mViewpager.setAdapter(adapter); +// mTablayout.setupWithViewPager(mViewpager); +// mTabIndicatorView.setupWithTabLayout(mTablayout); +// mTabIndicatorView.setupWithViewPager(mViewpager); +//// mTabIndicatorView.setIndicatorWidth(45); +// +// if (mTagGroupsList.size() == 1 && "最新".equals(mTagGroupsList.get(0).getName())) { +// mAppBar.setVisibility(View.GONE); +// } +// +// for (int i = 0; i < mTablayout.getTabCount(); i++) { +// TabLayout.Tab tab = mTablayout.getTabAt(i); +// if (tab != null) { +// tab.setCustomView(getTabView(mTagGroupsList.get(i))); +// } +// } +// } +// +// public View getTabView(AskTagGroupsEntity tagList) { +// View view = LayoutInflater.from(getContext()).inflate(R.layout.ask_tab_item, null); +// SimpleDraweeView tabIcon = view.findViewById(R.id.tab_item_icon); +// ImageUtils.display(tabIcon, tagList.getIcon()); +// TextView tabType = view.findViewById(R.id.tab_item_type); +// tabType.setText(tagList.getName()); +// return view; +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/questions/detail/AnswerViewHolder.java b/app/src/main/java/com/gh/gamecenter/qa/questions/detail/AnswerViewHolder.java index fcd491ca7a..195d385074 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/questions/detail/AnswerViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/qa/questions/detail/AnswerViewHolder.java @@ -3,9 +3,9 @@ package com.gh.gamecenter.qa.questions.detail; import android.content.Context; import android.graphics.Paint; import android.view.View; -import android.widget.TextView; -import com.facebook.drawee.view.SimpleDraweeView; +import androidx.core.content.ContextCompat; + import com.gh.base.BaseRecyclerViewHolder; import com.gh.base.OnListClickListener; import com.gh.common.util.DialogUtils; @@ -17,15 +17,13 @@ import com.gh.common.util.NumberUtils; import com.gh.common.view.DrawableView; import com.gh.gamecenter.R; import com.gh.gamecenter.collection.AnswerFragment; +import com.gh.gamecenter.databinding.AskAnswerItemBinding; import com.gh.gamecenter.entity.UserEntity; import com.gh.gamecenter.qa.entity.AnswerEntity; import com.gh.gamecenter.qa.entity.CommunityVideoEntity; import java.util.List; -import androidx.core.content.ContextCompat; -import butterknife.BindView; - /** * Created by khy on 19/12/17. */ @@ -33,73 +31,43 @@ import butterknife.BindView; @Deprecated public class AnswerViewHolder extends BaseRecyclerViewHolder { - @BindView(R.id.ask_answer_item_usericon) - public SimpleDraweeView mUsericon; - @BindView(R.id.ask_answer_item_username) - public TextView mUsername; - @BindView(R.id.ask_answer_item_user_badge) - SimpleDraweeView mBadgeIcon; - @BindView(R.id.ask_answer_item_content) - TextView mContent; - @BindView(R.id.ask_answer_item_img) - SimpleDraweeView mImg; - @BindView(R.id.ask_answer_item_votecount) - TextView mVotecount; - @BindView(R.id.ask_answer_item_comment_count) - TextView mCommentCount; - @BindView(R.id.ask_answer_item_title) - public TextView mQuestionTitle; - @BindView(R.id.ask_answer_item_community_name) - TextView mCommunityName; - @BindView(R.id.ask_answer_item_usericon_container) - View mUserIconContainer; - @BindView(R.id.ask_answer_item_end_desc) - TextView mEndDescTv; - @BindView(R.id.ask_answer_item_video_duration) - TextView mVideoDuration; - @BindView(R.id.ask_answer_item_video_play) - View mVideoPlayIcon; - @BindView(R.id.sdv_user_badge) - SimpleDraweeView userBadgeSdv; - @BindView(R.id.tv_badge_name) - TextView badgeNameTv; - @BindView(R.id.unread_hint) - View unreadHint; + public AskAnswerItemBinding binding; public AnswerViewHolder(View itemView, OnListClickListener listClickListener) { super(itemView, listClickListener); itemView.setOnClickListener(this); - mQuestionTitle.setOnClickListener(this); + binding.askAnswerItemTitle.setOnClickListener(this); } - public AnswerViewHolder(View itemView) { - super(itemView); + public AnswerViewHolder(AskAnswerItemBinding binding) { + super(binding.getRoot()); + this.binding = binding; } public void initAnswerViewHolder(Context context, AnswerEntity entity, String entrance, String path) { setClickData(entity); - mContent.setText(entity.getBrief()); - mCommentCount.setText(String.format("%s 评论", NumberUtils.transSimpleCount(entity.getCommentCount()))); - mVotecount.setText(context.getString(R.string.ask_vote_count, NumberUtils.transSimpleCount(entity.getVote()))); + binding.askAnswerItemContent.setText(entity.getBrief()); + binding.askAnswerItemCommentCount.setText(String.format("%s 评论", NumberUtils.transSimpleCount(entity.getCommentCount()))); + binding.askAnswerItemVotecount.setText(context.getString(R.string.ask_vote_count, NumberUtils.transSimpleCount(entity.getVote()))); UserEntity user = entity.getUser(); - mUsername.setText(user.getName()); - ImageUtils.displayIcon(mUsericon, user.getIcon()); + binding.askAnswerItemUsername.setText(user.getName()); + ImageUtils.displayIcon(binding.askAnswerItemUsericon, user.getIcon()); if (user.getAuth() != null) { - ImageUtils.display(mBadgeIcon, user.getAuth().getIcon()); + ImageUtils.display(binding.askAnswerItemUserBadge, user.getAuth().getIcon()); } else { - ImageUtils.display(mBadgeIcon, ""); + ImageUtils.display(binding.askAnswerItemUserBadge, ""); } if (user.getBadge() != null) { - userBadgeSdv.setVisibility(View.VISIBLE); - badgeNameTv.setVisibility(View.VISIBLE); - ImageUtils.display(userBadgeSdv, user.getBadge().getIcon()); - badgeNameTv.setText(user.getBadge().getName()); + binding.sdvUserBadge.setVisibility(View.VISIBLE); + binding.tvBadgeName.setVisibility(View.VISIBLE); + ImageUtils.display(binding.sdvUserBadge, user.getBadge().getIcon()); + binding.tvBadgeName.setText(user.getBadge().getName()); } else { - userBadgeSdv.setVisibility(View.GONE); - badgeNameTv.setVisibility(View.GONE); + binding.sdvUserBadge.setVisibility(View.GONE); + binding.tvBadgeName.setVisibility(View.GONE); } - userBadgeSdv.setOnClickListener(v -> { + binding.sdvUserBadge.setOnClickListener(v -> { DialogUtils.showViewBadgeDialog(context, user.getBadge(), () -> { MtaHelper.onEvent("进入徽章墙_用户记录", "问题详情", user.getName() + "(" + user.getId() + ")"); @@ -107,10 +75,10 @@ public class AnswerViewHolder extends BaseRecyclerViewHolder { DirectUtils.directToBadgeWall(context, user.getId(), user.getName(), user.getIcon()); }); }); - badgeNameTv.setOnClickListener(v -> userBadgeSdv.performClick()); + binding.tvBadgeName.setOnClickListener(v -> binding.sdvUserBadge.performClick()); setAnswerImage(entity.getImages(), entity.getPassVideos()); if (entity.getTime() != null && entity.getTime() != 0) { - mEndDescTv.setText(NewsUtils.getFormattedTime(entity.getTime())); + binding.askAnswerItemEndDesc.setText(NewsUtils.getFormattedTime(entity.getTime())); } skipPersonalHome(entity, entrance, path); } @@ -118,33 +86,31 @@ public class AnswerViewHolder extends BaseRecyclerViewHolder { public void initCollectionAnswerViewHolder(Context context, AnswerEntity entity, String type, String entrance) { setClickData(entity); if (entity.getActive()) { - mContent.getPaint().setFlags(Paint.ANTI_ALIAS_FLAG); - mContent.setTextColor(ContextCompat.getColor(mQuestionTitle.getContext(), R.color.title)); + binding.askAnswerItemContent.getPaint().setFlags(Paint.ANTI_ALIAS_FLAG); + binding.askAnswerItemContent.setTextColor(ContextCompat.getColor(binding.askAnswerItemTitle.getContext(), R.color.title)); } else { - mContent.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG); - mContent.setTextColor(ContextCompat.getColor(mQuestionTitle.getContext(), R.color.hint)); + binding.askAnswerItemContent.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG); + binding.askAnswerItemContent.setTextColor(ContextCompat.getColor(binding.askAnswerItemTitle.getContext(), R.color.hint)); } - mContent.setText(entity.getBrief()); - mQuestionTitle.setVisibility(View.VISIBLE); - mQuestionTitle.setText(entity.getQuestions().getTitle()); + binding.askAnswerItemContent.setText(entity.getBrief()); + binding.askAnswerItemTitle.setVisibility(View.VISIBLE); + binding.askAnswerItemTitle.setText(entity.getQuestions().getTitle()); String commentText = String.format("%s评论 · %s点赞 · %s", NumberUtils.transSimpleCount(entity.getCommentCount()), NumberUtils.transSimpleCount(entity.getVote()), NewsUtils.getFormattedTime(entity.getTime())); - mVotecount.setText(commentText); - mCommunityName.setVisibility(View.VISIBLE); - mCommunityName.setText(entity.getCommunityName()); - mCommentCount.setVisibility(View.GONE); -// mCommentCount.setText(String.format("%s 评论", NumberUtils.transSimpleCount(entity.getCommentCount()))); -// mCommunityName.setText(entity.getCommunityName()); + binding.askAnswerItemVotecount.setText(commentText); + binding.askAnswerItemCommunityName.setVisibility(View.VISIBLE); + binding.askAnswerItemCommunityName.setText(entity.getCommunityName()); + binding.askAnswerItemCommentCount.setVisibility(View.GONE); UserEntity user = entity.getUser(); - mUsername.setText(user.getName()); + binding.askAnswerItemUsername.setText(user.getName()); if (user.getBadge() != null) { - userBadgeSdv.setVisibility(View.VISIBLE); - badgeNameTv.setVisibility(View.VISIBLE); - ImageUtils.display(userBadgeSdv, user.getBadge().getIcon()); - badgeNameTv.setText(user.getBadge().getName()); + binding.sdvUserBadge.setVisibility(View.VISIBLE); + binding.tvBadgeName.setVisibility(View.VISIBLE); + ImageUtils.display(binding.sdvUserBadge, user.getBadge().getIcon()); + binding.tvBadgeName.setText(user.getBadge().getName()); } else { - userBadgeSdv.setVisibility(View.GONE); - badgeNameTv.setVisibility(View.GONE); + binding.sdvUserBadge.setVisibility(View.GONE); + binding.tvBadgeName.setVisibility(View.GONE); } String key; if (AnswerFragment.COLLECTION.equals(type)) { @@ -154,7 +120,7 @@ public class AnswerViewHolder extends BaseRecyclerViewHolder { } else { key = "插入回答-收藏回答列表"; } - userBadgeSdv.setOnClickListener(v -> { + binding.sdvUserBadge.setOnClickListener(v -> { DialogUtils.showViewBadgeDialog(context, user.getBadge(), () -> { MtaHelper.onEvent("进入徽章墙_用户记录", key, user.getName() + "(" + user.getId() + ")"); @@ -162,13 +128,13 @@ public class AnswerViewHolder extends BaseRecyclerViewHolder { DirectUtils.directToBadgeWall(context, user.getId(), user.getName(), user.getIcon()); }); }); - badgeNameTv.setOnClickListener(v -> userBadgeSdv.performClick()); + binding.tvBadgeName.setOnClickListener(v -> binding.sdvUserBadge.performClick()); - ImageUtils.displayIcon(mUsericon, user.getIcon()); + ImageUtils.displayIcon(binding.askAnswerItemUsericon, user.getIcon()); if (user.getAuth() != null) { - ImageUtils.display(mBadgeIcon, user.getAuth().getIcon()); + ImageUtils.display(binding.askAnswerItemUserBadge, user.getAuth().getIcon()); } else { - ImageUtils.display(mBadgeIcon, ""); + ImageUtils.display(binding.askAnswerItemUserBadge, ""); } setAnswerImage(entity.getImages(), entity.getPassVideos()); skipPersonalHome(entity, entrance, "我的收藏-回答"); @@ -176,50 +142,50 @@ public class AnswerViewHolder extends BaseRecyclerViewHolder { public void initMyAnswerViewHolder(AnswerEntity entity) { setClickData(entity); - mUsername.setVisibility(View.GONE); - mUserIconContainer.setVisibility(View.GONE); - mQuestionTitle.setVisibility(View.VISIBLE); - mQuestionTitle.setText(entity.getQuestions().getTitle()); - mContent.setText(entity.getBrief()); - mCommunityName.setVisibility(View.VISIBLE); - mCommunityName.setText(entity.getCommunityName()); - mCommentCount.setText(String.format("%s 评论", NumberUtils.transSimpleCount(entity.getCommentCount()))); - mVotecount.setText(itemView.getContext().getString(R.string.ask_vote_count, NumberUtils.transSimpleCount(entity.getVote()))); + binding.askAnswerItemUsername.setVisibility(View.GONE); + binding.askAnswerItemUsericonContainer.setVisibility(View.GONE); + binding.askAnswerItemTitle.setVisibility(View.VISIBLE); + binding.askAnswerItemTitle.setText(entity.getQuestions().getTitle()); + binding.askAnswerItemContent.setText(entity.getBrief()); + binding.askAnswerItemCommunityName.setVisibility(View.VISIBLE); + binding.askAnswerItemCommunityName.setText(entity.getCommunityName()); + binding.askAnswerItemCommentCount.setText(String.format("%s 评论", NumberUtils.transSimpleCount(entity.getCommentCount()))); + binding.askAnswerItemVotecount.setText(itemView.getContext().getString(R.string.ask_vote_count, NumberUtils.transSimpleCount(entity.getVote()))); setAnswerImage(entity.getImages(), entity.getPassVideos()); } private void setAnswerImage(List images, List videos) { if (videos.size() > 0) { CommunityVideoEntity videoEntity = videos.get(0); - ImageUtils.display(mImg, videoEntity.getPoster()); - mVideoDuration.setBackground(DrawableView.getOvalDrawable(R.color.black_alpha_80, 999F)); - mVideoDuration.setText(videoEntity.getDuration()); - mVideoDuration.setVisibility(View.VISIBLE); - mVideoPlayIcon.setVisibility(View.VISIBLE); - mImg.setVisibility(View.VISIBLE); + ImageUtils.display(binding.askAnswerItemImg, videoEntity.getPoster()); + binding.askAnswerItemVideoDuration.setBackground(DrawableView.getOvalDrawable(R.color.black_alpha_80, 999F)); + binding.askAnswerItemVideoDuration.setText(videoEntity.getDuration()); + binding.askAnswerItemVideoDuration.setVisibility(View.VISIBLE); + binding.askAnswerItemVideoPlay.setVisibility(View.VISIBLE); + binding.askAnswerItemImg.setVisibility(View.VISIBLE); } else if (images.size() > 0) { for (int i = 0; i < images.size(); i++) { if (!images.get(i).contains(".gif")) { - mImg.setVisibility(View.VISIBLE); - ImageUtils.display(mImg, images.get(i)); + binding.askAnswerItemImg.setVisibility(View.VISIBLE); + ImageUtils.display(binding.askAnswerItemImg, images.get(i)); break; } if (i == images.size() - 1) { - mImg.setVisibility(View.GONE); + binding.askAnswerItemImg.setVisibility(View.GONE); } } - mVideoPlayIcon.setVisibility(View.GONE); - mVideoDuration.setVisibility(View.GONE); + binding.askAnswerItemVideoPlay.setVisibility(View.GONE); + binding.askAnswerItemVideoDuration.setVisibility(View.GONE); } else { - mImg.setVisibility(View.GONE); - mVideoPlayIcon.setVisibility(View.GONE); - mVideoDuration.setVisibility(View.GONE); + binding.askAnswerItemImg.setVisibility(View.GONE); + binding.askAnswerItemVideoPlay.setVisibility(View.GONE); + binding.askAnswerItemVideoDuration.setVisibility(View.GONE); } } private void skipPersonalHome(AnswerEntity entity, String entrance, String path) { View.OnClickListener onClickListener = v -> DirectUtils.directToHomeActivity(itemView.getContext(), entity.getUser().getId(), entrance, path); - mUsericon.setOnClickListener(onClickListener); - mUsername.setOnClickListener(onClickListener); + binding.askAnswerItemUsericon.setOnClickListener(onClickListener); + binding.askAnswerItemUsername.setOnClickListener(onClickListener); } } diff --git a/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionDetailItemData.kt b/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionDetailItemData.kt index 2459180b86..9fa3fb07d4 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionDetailItemData.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionDetailItemData.kt @@ -1,9 +1,9 @@ -package com.gh.gamecenter.qa.questions.detail - -import com.gh.gamecenter.qa.entity.AnswerEntity -import com.gh.gamecenter.qa.entity.InviteEntity - -data class QuestionDetailItemData(var answer: AnswerEntity? = null, - var showSimilarAnswerHint: Boolean? = null, - var similarAnswer: AnswerEntity? = null, - var recommendedUserToInvite: List? = null) \ No newline at end of file +//package com.gh.gamecenter.qa.questions.detail +// +//import com.gh.gamecenter.qa.entity.AnswerEntity +//import com.gh.gamecenter.qa.entity.InviteEntity +// +//data class QuestionDetailItemData(var answer: AnswerEntity? = null, +// var showSimilarAnswerHint: Boolean? = null, +// var similarAnswer: AnswerEntity? = null, +// var recommendedUserToInvite: List? = null) \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailActivity.java b/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailActivity.java index d29e98800c..37bfd4922b 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailActivity.java +++ b/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailActivity.java @@ -1,60 +1,60 @@ -package com.gh.gamecenter.qa.questions.detail; +//package com.gh.gamecenter.qa.questions.detail; -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; - -import com.gh.common.util.EntranceUtils; -import com.gh.gamecenter.NormalActivity; -import com.gh.gamecenter.entity.SpecialColumn; -import com.halo.assistant.HaloApp; - -import static com.gh.common.constant.Constants.GAME_DETAIL_COME_IN; - -/** - * Created by khy on 10/04/18. - */ - -public class QuestionsDetailActivity extends NormalActivity { - - public static final String TAG = "QuestionsDetailActivity"; - - @Override - public boolean showToolbarAtLeft() { - if (HaloApp.get(GAME_DETAIL_COME_IN, false) != null) { - return true; - } - return super.showToolbarAtLeft(); - } - - public static Intent getIntent(Context context, String questionId, String entrance, String path) { - Bundle bundle = new Bundle(); - bundle.putString(EntranceUtils.KEY_QUESTIONS_ID, questionId); - bundle.putString(EntranceUtils.KEY_ENTRANCE, mergeEntranceAndPath(entrance, path)); - bundle.putString(EntranceUtils.KEY_PATH, path); - return getTargetIntent(context, QuestionsDetailActivity.class, QuestionsDetailFragment.class, bundle); - } - - public static Intent getIntent(Context context, String questionId, String entrance, String path, SpecialColumn specialColumn) { - Bundle bundle = new Bundle(); - bundle.putString(EntranceUtils.KEY_QUESTIONS_ID, questionId); - bundle.putString(EntranceUtils.KEY_ENTRANCE, mergeEntranceAndPath(entrance, path)); - bundle.putString(EntranceUtils.KEY_PATH, path); - bundle.putParcelable(EntranceUtils.KEY_DATA, specialColumn); - return getTargetIntent(context, QuestionsDetailActivity.class, QuestionsDetailFragment.class, bundle); - } - - public static Intent getIntent(Context context, String questionId, String entrance, String path, boolean isCheckConcern) { - Bundle bundle = new Bundle(); - bundle.putString(EntranceUtils.KEY_QUESTIONS_ID, questionId); - bundle.putString(EntranceUtils.KEY_ENTRANCE, mergeEntranceAndPath(entrance, path)); - bundle.putString(EntranceUtils.KEY_PATH, path); - bundle.putBoolean(EntranceUtils.KEY_CHECK_QUESTION_CONCERN, isCheckConcern); - return getTargetIntent(context, QuestionsDetailActivity.class, QuestionsDetailFragment.class, bundle); - } - - @Override - protected Intent provideNormalIntent() { - return getTargetIntent(this, QuestionsDetailActivity.class, QuestionsDetailFragment.class); - } -} +//import android.content.Context; +//import android.content.Intent; +//import android.os.Bundle; +// +//import com.gh.common.util.EntranceUtils; +//import com.gh.gamecenter.NormalActivity; +//import com.gh.gamecenter.entity.SpecialColumn; +//import com.halo.assistant.HaloApp; +// +//import static com.gh.common.constant.Constants.GAME_DETAIL_COME_IN; +// +///** +// * Created by khy on 10/04/18. +// */ +// +//public class QuestionsDetailActivity extends NormalActivity { +// +// public static final String TAG = "QuestionsDetailActivity"; +// +// @Override +// public boolean showToolbarAtLeft() { +// if (HaloApp.get(GAME_DETAIL_COME_IN, false) != null) { +// return true; +// } +// return super.showToolbarAtLeft(); +// } +// +// public static Intent getIntent(Context context, String questionId, String entrance, String path) { +// Bundle bundle = new Bundle(); +// bundle.putString(EntranceUtils.KEY_QUESTIONS_ID, questionId); +// bundle.putString(EntranceUtils.KEY_ENTRANCE, mergeEntranceAndPath(entrance, path)); +// bundle.putString(EntranceUtils.KEY_PATH, path); +// return getTargetIntent(context, QuestionsDetailActivity.class, QuestionsDetailFragment.class, bundle); +// } +// +// public static Intent getIntent(Context context, String questionId, String entrance, String path, SpecialColumn specialColumn) { +// Bundle bundle = new Bundle(); +// bundle.putString(EntranceUtils.KEY_QUESTIONS_ID, questionId); +// bundle.putString(EntranceUtils.KEY_ENTRANCE, mergeEntranceAndPath(entrance, path)); +// bundle.putString(EntranceUtils.KEY_PATH, path); +// bundle.putParcelable(EntranceUtils.KEY_DATA, specialColumn); +// return getTargetIntent(context, QuestionsDetailActivity.class, QuestionsDetailFragment.class, bundle); +// } +// +// public static Intent getIntent(Context context, String questionId, String entrance, String path, boolean isCheckConcern) { +// Bundle bundle = new Bundle(); +// bundle.putString(EntranceUtils.KEY_QUESTIONS_ID, questionId); +// bundle.putString(EntranceUtils.KEY_ENTRANCE, mergeEntranceAndPath(entrance, path)); +// bundle.putString(EntranceUtils.KEY_PATH, path); +// bundle.putBoolean(EntranceUtils.KEY_CHECK_QUESTION_CONCERN, isCheckConcern); +// return getTargetIntent(context, QuestionsDetailActivity.class, QuestionsDetailFragment.class, bundle); +// } +// +// @Override +// protected Intent provideNormalIntent() { +// return getTargetIntent(this, QuestionsDetailActivity.class, QuestionsDetailFragment.class); +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailAdapter.kt index 8a158a9cd1..3e21d2dc99 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailAdapter.kt @@ -1,495 +1,495 @@ -package com.gh.gamecenter.qa.questions.detail - -import android.annotation.SuppressLint -import android.app.Activity -import android.content.Context -import android.graphics.Color -import android.text.TextUtils -import android.view.Gravity -import android.view.View -import android.view.ViewGroup -import android.widget.LinearLayout -import android.widget.TextView -import androidx.core.content.ContextCompat -import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.RecyclerView -import butterknife.BindView -import com.gh.base.BaseRecyclerViewHolder -import com.gh.base.OnListClickListener -import com.gh.common.constant.ItemViewType -import com.gh.common.syncpage.ISyncAdapterHandler -import com.gh.common.util.* -import com.gh.common.view.DrawableView -import com.gh.gamecenter.R -import com.gh.gamecenter.adapter.viewholder.FooterViewHolder -import com.gh.gamecenter.adapter.viewholder.ReuseViewHolder -import com.gh.gamecenter.baselist.ListAdapter -import com.gh.gamecenter.databinding.CommunityAnswerItemBinding -import com.gh.gamecenter.entity.CommunityEntity -import com.gh.gamecenter.qa.answer.CommunityAnswerItemViewHolder -import com.gh.gamecenter.qa.answer.detail.AnswerDetailActivity -import com.gh.gamecenter.qa.column.detail.AskColumnDetailActivity -import com.gh.gamecenter.qa.entity.AnswerEntity -import com.gh.gamecenter.qa.entity.InviteEntity -import com.gh.gamecenter.qa.entity.QuestionsDetailEntity -import com.gh.gamecenter.qa.questions.invite.QuestionsInviteAdapter -import com.gh.gamecenter.video.VideoVerifyItemViewHolder -import com.google.android.flexbox.FlexboxLayout - -class QuestionsDetailAdapter( - context: Context, - private var mListClickListener: OnListClickListener, - private var mQuestionEntity: QuestionsDetailEntity? = null, - private val mViewModel: QuestionsDetailViewModel, - private val mEntrance: String) : ListAdapter(context), ISyncAdapterHandler { - - private var mIsNoneData: Boolean = false - - fun setQuestionsEntity(questionsDetailEntity: QuestionsDetailEntity) { - mQuestionEntity = questionsDetailEntity - notifyDataSetChanged() - } - - fun getQuestionsTitle(): String { - return mQuestionEntity?.title ?: "" - } - - override fun setListData(updateData: List?) { - mIsNoneData = updateData != null && updateData.isEmpty() - mEntityList = ArrayList(updateData!!) - notifyDataSetChanged() - } - - override fun getItemViewType(position: Int): Int { - val foldItemPosition = getFoldHintItemPosition() - val index = if (foldItemPosition != null && position > foldItemPosition) 1 else 0 - return when { - position == 0 && mQuestionEntity != null -> ItemViewType.ITEM_HEADER - - foldItemPosition == position -> ItemViewType.ITEM_FOOTER - - position == itemCount - 1 && foldItemPosition == null -> ItemViewType.ITEM_FOOTER - - mEntityList == null || mEntityList.isEmpty() -> ItemViewType.ITEM_EMPTY - - mEntityList[position - TOP_ITEM_COUNT - index].answer != null -> ItemViewType.ITEM_BODY - - mEntityList[position - TOP_ITEM_COUNT - index].recommendedUserToInvite != null -> TYPE_RECOMMEND_USER_TO_INVITE - - mEntityList[position - TOP_ITEM_COUNT - index].similarAnswer != null -> TYPE_SIMILAR_ANSWER - - mEntityList[position - TOP_ITEM_COUNT - index].showSimilarAnswerHint != null -> TYPE_SIMILAR_ANSWER_HINT - - else -> ItemViewType.ITEM_FOOTER - } - } - - // 如果回答列表为空,需要把折叠回答(ITEM_FOOTER)放到邀请回答下方,如果没有邀请回答,则放到问题下方 - private fun getFoldHintItemPosition(): Int? { - if (mQuestionEntity?.isAnswerFold != true) return null - - var foldPosition = 1 - - for (i in mEntityList.indices) { - val itemData = mEntityList[i] - if (itemData.answer != null) { - foldPosition = itemCount - 1 - break - } - } - - return foldPosition - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - val view: View - when (viewType) { - ItemViewType.ITEM_HEADER -> { - view = mLayoutInflater.inflate(R.layout.questionsdetail_item, parent, false) - return QuestionsDetailItemViewHolder(view, mListClickListener) - } - ItemViewType.ITEM_FOOTER -> { - view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false) - return FooterViewHolder(view, mListClickListener) - } - ItemViewType.ITEM_BODY -> { - view = mLayoutInflater.inflate(R.layout.community_answer_item, parent, false) - return CommunityAnswerItemViewHolder(CommunityAnswerItemBinding.bind(view)) - } - ItemViewType.ITEM_EMPTY -> { - view = mLayoutInflater.inflate(R.layout.reuse_nodata_skip, parent, false) - return EmptyViewHolder(view) - } - TYPE_SIMILAR_ANSWER_HINT -> { - view = mLayoutInflater.inflate(R.layout.item_question_detail_similar_answer_hint, parent, false) - return SimilarAnswerHint(view) - } - TYPE_RECOMMEND_USER_TO_INVITE -> { - view = mLayoutInflater.inflate(R.layout.item_question_detail_recommended_user, parent, false) - return RecommendedUserToInviteViewHolder(view) - } - TYPE_SIMILAR_ANSWER -> { - view = mLayoutInflater.inflate(R.layout.community_answer_item, parent, false) - return CommunityAnswerItemViewHolder(CommunityAnswerItemBinding.bind(view)) - } - else -> { - view = mLayoutInflater.inflate(R.layout.reuse_nodata_skip, parent, false) - return EmptyViewHolder(view) - } - } - } - - override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - when (getItemViewType(position)) { - ItemViewType.ITEM_HEADER -> initQuestionsDetailItemViewHolder(holder as QuestionsDetailItemViewHolder) - ItemViewType.ITEM_EMPTY -> { - val emptyViewHolder = holder as EmptyViewHolder - if (mQuestionEntity != null && mQuestionEntity!!.isAnswerFold) { - emptyViewHolder.tvHint.text = "" - } else { - emptyViewHolder.tvHint.text = "暂无回答" - } - - if (mQuestionEntity != null && !TextUtils.isEmpty(mQuestionEntity!!.me.myAnswerId)) { - emptyViewHolder.tvBtn.visibility = View.GONE - } else { - emptyViewHolder.tvBtn.visibility = View.VISIBLE - } - emptyViewHolder.tvBtn.text = "我来回答" - emptyViewHolder.itemView.layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, DisplayUtils.dip2px(200f)) - emptyViewHolder.itemView.setOnClickListener { mListClickListener.onListClick(holder.itemView, 1, null) } - } - ItemViewType.ITEM_FOOTER -> { - val footerViewHolder = holder as FooterViewHolder - footerViewHolder.itemView.setBackgroundColor(R.color.background.toColor()) - footerViewHolder.initItemPadding() - val item = footerViewHolder.itemView as LinearLayout - if (mIsNetworkError) { - footerViewHolder.loading.visibility = View.GONE - footerViewHolder.hint.setText(R.string.loading_failed_retry) - footerViewHolder.hint.setCompoundDrawables(null, null, null, null) - footerViewHolder.hint.setPadding(0, 0, 0, 0) - item.gravity = Gravity.CENTER - } else if (mIsOver) { - footerViewHolder.loading.visibility = View.GONE - footerViewHolder.hint.setText(R.string.questionsdetail_fold_hint) - footerViewHolder.hint.setPadding(DisplayUtils.dip2px(mContext, 20f), 0, 0, 0) - val drawable = ContextCompat.getDrawable(mContext, R.drawable.questionsdetail_footer_icon) - item.gravity = Gravity.CENTER_VERTICAL - if (drawable != null) { - drawable.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight) - footerViewHolder.hint.setCompoundDrawables(null, null, drawable, null) - footerViewHolder.hint.compoundDrawablePadding = 20 - } - - if (position != itemCount - 1) { - footerViewHolder.itemView.setBackgroundColor(Color.WHITE) - } - } else { - footerViewHolder.loading.visibility = View.VISIBLE - footerViewHolder.hint.setText(R.string.loading) - footerViewHolder.hint.setCompoundDrawables(null, null, null, null) - footerViewHolder.hint.setPadding(0, 0, 0, 0) - item.gravity = Gravity.CENTER - } - if (!mIsOver || mQuestionEntity != null && mQuestionEntity!!.isAnswerFold) { - footerViewHolder.itemView.setLayoutParams(ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)) - } else { - footerViewHolder.itemView.setLayoutParams(ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0)) - } - } - ItemViewType.ITEM_BODY -> { - val index = position - getPositionIndex(position) - if (index != -1 && holder is CommunityAnswerItemViewHolder) { - val answer = mEntityList[index].answer ?: return - val intent = AnswerDetailActivity.getIntent(mContext, answer.id, mEntrance, "问题详情-答案列表") - holder.bindAnswerItem(answer, true, mEntrance, "问题详情") - if (answer.time == answer.editTime) { - holder.binding.time.text = NewsUtils.getFormattedTime(answer.time ?: 0) - } else { - holder.binding.time.text = "${NewsUtils.getFormattedTime(answer.editTime)} 已修改" - } - - holder.binding.root.setOnClickListener { - (mContext as Activity).startActivityForResult(intent, QuestionsDetailFragment.QUESTIONS_DETAIL_ANSWER_REQUEST) - } - } - } - TYPE_RECOMMEND_USER_TO_INVITE -> { - (holder as RecommendedUserToInviteViewHolder).bindView(mViewModel, mQuestionEntity!!, mEntityList[position - getPositionIndex(position)].recommendedUserToInvite!!) - } - TYPE_SIMILAR_ANSWER -> { - val index = position - getPositionIndex(position) - if (index != -1) { - val viewHolder = holder as CommunityAnswerItemViewHolder - val answerEntity = mEntityList[index].similarAnswer ?: return - viewHolder.bindAnswerItem(answerEntity, "", "问题推荐") - viewHolder.binding.title.setOnClickListener { - val questions = answerEntity.questions - mContext.startActivity(QuestionsDetailActivity.getIntent(mContext, questions.id, "", "问题推荐")) - } - - viewHolder.itemView.setOnClickListener { - mContext.startActivity(AnswerDetailActivity.getIntent(mContext, answerEntity.id, "", "问题推荐")) - } - } - } - } - } - - @SuppressLint("SetTextI18n") - private fun initQuestionsDetailItemViewHolder(holder: QuestionsDetailItemViewHolder) { - val tags = mQuestionEntity?.tags ?: arrayListOf() - val images = mQuestionEntity?.images ?: arrayListOf() - val description = mQuestionEntity?.description ?: "" - val relatedQuestion = mQuestionEntity?.relatedQuestion - val video = if (!mQuestionEntity?.videos.isNullOrEmpty()) mQuestionEntity?.videos?.get(0) else null - val videoSize = if (video != null) 1 else 0 - - // 标签 - holder.mTagRl.removeAllViews() - for (tag in tags) { - if (!TextUtils.isEmpty(tag)) { - addTag(holder.mTagRl, tag, false) - } - } - - // 缩略图(视频只显示在第一个) - holder.mImgLl.goneIf(images.isEmpty() && video == null) - holder.mPic2.visibleIf(images.size + videoSize > 1) - holder.mPic3.visibleIf(images.size + videoSize > 2) - holder.mPic3Desc.goneIf(images.size + videoSize <= 3) - holder.mPic3Mask.goneIf(images.size + videoSize <= 3) - - holder.mVideoPlay.visibleIf(video != null) - holder.mVideoStatus.visibleIf(video != null && video.status != "pass") - holder.mVideoDuration.visibleIf(video?.status == "pass") - if (video?.status == "pass") { - holder.mVideoDuration.background = DrawableView.getOvalDrawable(R.color.black_alpha_80, 999f) - holder.mVideoDuration.text = video.duration - } else { - val status = if (!mQuestionEntity!!.me.isContentOwner && !mQuestionEntity!!.me.isModerator && video?.status == "fail") { - "pending" - } else video?.status ?: "" - VideoVerifyItemViewHolder.setVideoStatus(holder.mVideoStatus, status) - } - if (video != null) { - if (video.status == "pass") { - holder.mPic1.display(video.poster) - } else { - holder.mPic1.setImageResource(R.drawable.community_video_default_poster) - } - } - - for (i in images.indices + videoSize) { - val index = i + videoSize // view index - val position = index - videoSize // data index - if (images.size > position) { - when (index) { - 0 -> holder.mPic1.display(images[position]) - - 1 -> holder.mPic2.display(images[position]) - - 2 -> { - holder.mPic3.display(images[position]) - holder.mPic3Desc.text = "+" + (images.size - 3 + videoSize) - } - } - } - } - - // 问题描述 - holder.mDes.initWidth(mContext.resources.displayMetrics.widthPixels - 40F.dip2px()) - holder.mDes.maxLines = 3 - holder.mDes.setOriginalText(description) - holder.mDes.goneIf(TextUtils.isEmpty(description)) - - // "关注问题" - when { - mQuestionEntity!!.me.isContentOwner -> { - holder.concern.setTextColor(ContextCompat.getColor(mContext, R.color.text_subtitle)) - DrawableView.setTextDrawable(holder.concern, R.drawable.ic_edit_question, "修改问题") - } - mQuestionEntity!!.me.isQuestionFollowed -> { - holder.concern.setTextColor(ContextCompat.getColor(mContext, R.color.text_subtitle)) - DrawableView.setTextDrawable(holder.concern, R.drawable.ic_followed_question, "已关注") - } - else -> { - holder.concern.setTextColor(ContextCompat.getColor(mContext, R.color.theme_font)) - DrawableView.setTextDrawable(holder.concern, R.drawable.ic_follow_question, "关注问题") - } - } - - // "关联问题"区域 - holder.mRelatedQuestionContainer.goneIf(relatedQuestion == null) - relatedQuestion?.let { - holder.mRelatedQuestionContainer.setOnClickListener { - mContext.startActivity(QuestionsDetailActivity.getIntent( - mContext, - relatedQuestion.id, - mEntrance, - "关联问题")) - } - holder.mRelatedQuestionTitle.text = relatedQuestion.title - holder.mRelatedQuestionAnswerCount.text = NumberUtils.transSimpleCount(relatedQuestion.answerCount!!) + "回答" - } - - holder.mTitle.text = mQuestionEntity?.title - holder.concernCount.text = NumberUtils.transSimpleCount(mQuestionEntity?.getFollowCount() - ?: 0) + "人关注" - - holder.mAnswercount.goneIf(mQuestionEntity?.answersCount == 0) - holder.mAnswercount.text = mContext.getString(R.string.ask_answer_count, NumberUtils.transSimpleCount(mQuestionEntity?.answersCount - ?: 0)) - } - - private fun addTag(mTagRl: FlexboxLayout, tag: String, isLastTag: Boolean) { - val tagTv = TextView(mContext) - mTagRl.addView(tagTv) - - tagTv.text = tag - tagTv.gravity = Gravity.CENTER - tagTv.textSize = 12F - tagTv.background = DrawableView.getOvalDrawable(R.color.text_EEF5FB, 2F) - tagTv.setTextColor(R.color.theme_font.toColor()) - tagTv.setPadding(8F.dip2px(), 0, 8F.dip2px(), 0) - - val params = FlexboxLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 24F.dip2px()) - params.setMargins(0, - DisplayUtils.dip2px(mContext, 10f), - if (!isLastTag) DisplayUtils.dip2px(mContext, 12f) else 0, - DisplayUtils.dip2px(mContext, 10f)) - tagTv.layoutParams = params - - tagTv.setOnClickListener { - MtaHelper.onEvent("问题标签", mQuestionEntity!!.community.name, mQuestionEntity!!.title + "-" + tag) - mContext.startActivity(AskColumnDetailActivity.getIntentByTag(mContext, tag, - CommunityEntity(mQuestionEntity!!.community.id, - mQuestionEntity!!.community.name), mEntrance, "问题详情")) - } - } - - override fun getItemCount(): Int { - if (mQuestionEntity == null) { - return 0 - } - - if (mIsNoneData && (mEntityList == null || mEntityList.isEmpty())) { - return if (mQuestionEntity!!.isAnswerFold) { - FOOTER_ITEM_COUNT + TOP_ITEM_COUNT - } else { - FOOTER_ITEM_COUNT + TOP_ITEM_COUNT + ITEM_EMPTY_COUNT - } - } - - return if (mEntityList == null) FOOTER_ITEM_COUNT + TOP_ITEM_COUNT else mEntityList.size + FOOTER_ITEM_COUNT + TOP_ITEM_COUNT - } - - fun isOver(): Boolean { - return mIsOver - } - - class EmptyViewHolder(itemView: View) : ReuseViewHolder(itemView) { - @BindView(R.id.reuse_nodata_skip_tv_hint) - lateinit var tvHint: TextView - - @BindView(R.id.reuse_nodata_skip_tv_btn) - lateinit var tvBtn: TextView - } - - class RecommendedUserToInviteViewHolder(itemView: View) : BaseRecyclerViewHolder(itemView) { - - @BindView(R.id.inviteBtn) - lateinit var inviteBtn: View - - @BindView(R.id.recyclerview) - lateinit var recyclerView: RecyclerView - - var adapter: SimpleInviteAdapter? = null - - fun bindView(viewModel: QuestionsDetailViewModel, question: QuestionsDetailEntity, userList: List) { - - inviteBtn.visibleIf(question.me.isContentOwner && !question.me.isSmartInvited) - inviteBtn.setOnClickListener { - MtaHelper.onEvent("问题邀请", "智能邀请", question.community.name + "+" + StringUtils.combineTwoString(question.title, question.id)) - DialogHelper.showDialog( - context = inviteBtn.context, - title = "智能邀请", - content = "将为你智能邀请用户来回答!你还可以手动邀请喔~", - confirmText = "确定", - cancelText = "取消", - confirmClickCallback = { viewModel.doSmartInvitation() }, - trackMtaEvent = true, - mtaEvent = "问题邀请", - mtaKey = "智能邀请功能操作") - } - - if (adapter == null) { - adapter = SimpleInviteAdapter(recyclerView.context, object : OnListClickListener { - override fun onListClick(view: View?, position: Int, data: T) { - when (view?.id) { - R.id.questionsinvite_item_invite -> { - val inviteEntity = data as InviteEntity - val me = inviteEntity.me - if (me == null || !me.isUserInvite) { - recyclerView.context.ifLogin("问题详情-邀请回答-[邀请]") { - viewModel.invite(inviteEntity.id!!) - MtaHelper.onEvent("问题邀请", "邀请回答(列表)", question.community.name + "+" + StringUtils.combineTwoString(question.title, question.id)) - } - } - } - } - } - }, "问题详情") - } - recyclerView.adapter = adapter - recyclerView.layoutManager = LinearLayoutManager(recyclerView.context) - - adapter?.setData(userList) - } - } - - private fun getPositionIndex(position: Int): Int { - val foldItemPosition = getFoldHintItemPosition() - val foldIndex = if (foldItemPosition != null && position > foldItemPosition) 1 else 0 - return foldIndex + TOP_ITEM_COUNT - } - - override fun getSyncData(position: Int): Pair? { - val index = position - getPositionIndex(position) - if (index < 0 || index >= mEntityList.size) return null - val itemData = mEntityList[index] - var entity = itemData.answer - if (entity == null) entity = itemData.similarAnswer - if (entity == null) return null - return Pair(entity.id ?: "", entity) - } - - class SimpleInviteAdapter(context: Context, onListClickListener: OnListClickListener, entrance: String) - : QuestionsInviteAdapter(context, onListClickListener, entrance, "问题详情-邀请列表") { - override fun getItemViewType(position: Int): Int { - return ItemViewType.ITEM_BODY - } - - override fun getItemCount(): Int { - return if (mEntityList != null && mEntityList.size != 0) mEntityList.size else 0 - } - - fun setData(dataList: List) { - setListData(dataList) - } - } - - class SimilarAnswerHint(itemView: View) : BaseRecyclerViewHolder(itemView) - - companion object { - private const val ITEM_EMPTY_COUNT = 1 - - private const val TYPE_RECOMMEND_USER_TO_INVITE = 987 - - private const val TYPE_SIMILAR_ANSWER = 988 - - private const val TYPE_SIMILAR_ANSWER_HINT = 989 - } - -} \ No newline at end of file +//package com.gh.gamecenter.qa.questions.detail + +//import android.annotation.SuppressLint +//import android.app.Activity +//import android.content.Context +//import android.graphics.Color +//import android.text.TextUtils +//import android.view.Gravity +//import android.view.View +//import android.view.ViewGroup +//import android.widget.LinearLayout +//import android.widget.TextView +//import androidx.core.content.ContextCompat +//import androidx.recyclerview.widget.LinearLayoutManager +//import androidx.recyclerview.widget.RecyclerView +//import butterknife.BindView +//import com.gh.base.BaseRecyclerViewHolder +//import com.gh.base.OnListClickListener +//import com.gh.common.constant.ItemViewType +//import com.gh.common.syncpage.ISyncAdapterHandler +//import com.gh.common.util.* +//import com.gh.common.view.DrawableView +//import com.gh.gamecenter.R +//import com.gh.gamecenter.adapter.viewholder.FooterViewHolder +//import com.gh.gamecenter.adapter.viewholder.ReuseViewHolder +//import com.gh.gamecenter.baselist.ListAdapter +//import com.gh.gamecenter.databinding.CommunityAnswerItemBinding +//import com.gh.gamecenter.entity.CommunityEntity +//import com.gh.gamecenter.qa.answer.CommunityAnswerItemViewHolder +//import com.gh.gamecenter.qa.answer.detail.AnswerDetailActivity +//import com.gh.gamecenter.qa.column.detail.AskColumnDetailActivity +//import com.gh.gamecenter.qa.entity.AnswerEntity +//import com.gh.gamecenter.qa.entity.InviteEntity +//import com.gh.gamecenter.qa.entity.QuestionsDetailEntity +//import com.gh.gamecenter.qa.questions.invite.QuestionsInviteAdapter +//import com.gh.gamecenter.video.VideoVerifyItemViewHolder +//import com.google.android.flexbox.FlexboxLayout +// +//class QuestionsDetailAdapter( +// context: Context, +// private var mListClickListener: OnListClickListener, +// private var mQuestionEntity: QuestionsDetailEntity? = null, +// private val mViewModel: QuestionsDetailViewModel, +// private val mEntrance: String) : ListAdapter(context), ISyncAdapterHandler { +// +// private var mIsNoneData: Boolean = false +// +// fun setQuestionsEntity(questionsDetailEntity: QuestionsDetailEntity) { +// mQuestionEntity = questionsDetailEntity +// notifyDataSetChanged() +// } +// +// fun getQuestionsTitle(): String { +// return mQuestionEntity?.title ?: "" +// } +// +// override fun setListData(updateData: List?) { +// mIsNoneData = updateData != null && updateData.isEmpty() +// mEntityList = ArrayList(updateData!!) +// notifyDataSetChanged() +// } +// +// override fun getItemViewType(position: Int): Int { +// val foldItemPosition = getFoldHintItemPosition() +// val index = if (foldItemPosition != null && position > foldItemPosition) 1 else 0 +// return when { +// position == 0 && mQuestionEntity != null -> ItemViewType.ITEM_HEADER +// +// foldItemPosition == position -> ItemViewType.ITEM_FOOTER +// +// position == itemCount - 1 && foldItemPosition == null -> ItemViewType.ITEM_FOOTER +// +// mEntityList == null || mEntityList.isEmpty() -> ItemViewType.ITEM_EMPTY +// +// mEntityList[position - TOP_ITEM_COUNT - index].answer != null -> ItemViewType.ITEM_BODY +// +// mEntityList[position - TOP_ITEM_COUNT - index].recommendedUserToInvite != null -> TYPE_RECOMMEND_USER_TO_INVITE +// +// mEntityList[position - TOP_ITEM_COUNT - index].similarAnswer != null -> TYPE_SIMILAR_ANSWER +// +// mEntityList[position - TOP_ITEM_COUNT - index].showSimilarAnswerHint != null -> TYPE_SIMILAR_ANSWER_HINT +// +// else -> ItemViewType.ITEM_FOOTER +// } +// } +// +// // 如果回答列表为空,需要把折叠回答(ITEM_FOOTER)放到邀请回答下方,如果没有邀请回答,则放到问题下方 +// private fun getFoldHintItemPosition(): Int? { +// if (mQuestionEntity?.isAnswerFold != true) return null +// +// var foldPosition = 1 +// +// for (i in mEntityList.indices) { +// val itemData = mEntityList[i] +// if (itemData.answer != null) { +// foldPosition = itemCount - 1 +// break +// } +// } +// +// return foldPosition +// } +// +// override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { +// val view: View +// when (viewType) { +// ItemViewType.ITEM_HEADER -> { +// view = mLayoutInflater.inflate(R.layout.questionsdetail_item, parent, false) +// return QuestionsDetailItemViewHolder(view, mListClickListener) +// } +// ItemViewType.ITEM_FOOTER -> { +// view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false) +// return FooterViewHolder(view, mListClickListener) +// } +// ItemViewType.ITEM_BODY -> { +// view = mLayoutInflater.inflate(R.layout.community_answer_item, parent, false) +// return CommunityAnswerItemViewHolder(CommunityAnswerItemBinding.bind(view)) +// } +// ItemViewType.ITEM_EMPTY -> { +// view = mLayoutInflater.inflate(R.layout.reuse_nodata_skip, parent, false) +// return EmptyViewHolder(view) +// } +// TYPE_SIMILAR_ANSWER_HINT -> { +// view = mLayoutInflater.inflate(R.layout.item_question_detail_similar_answer_hint, parent, false) +// return SimilarAnswerHint(view) +// } +// TYPE_RECOMMEND_USER_TO_INVITE -> { +// view = mLayoutInflater.inflate(R.layout.item_question_detail_recommended_user, parent, false) +// return RecommendedUserToInviteViewHolder(view) +// } +// TYPE_SIMILAR_ANSWER -> { +// view = mLayoutInflater.inflate(R.layout.community_answer_item, parent, false) +// return CommunityAnswerItemViewHolder(CommunityAnswerItemBinding.bind(view)) +// } +// else -> { +// view = mLayoutInflater.inflate(R.layout.reuse_nodata_skip, parent, false) +// return EmptyViewHolder(view) +// } +// } +// } +// +// override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { +// when (getItemViewType(position)) { +// ItemViewType.ITEM_HEADER -> initQuestionsDetailItemViewHolder(holder as QuestionsDetailItemViewHolder) +// ItemViewType.ITEM_EMPTY -> { +// val emptyViewHolder = holder as EmptyViewHolder +// if (mQuestionEntity != null && mQuestionEntity!!.isAnswerFold) { +// emptyViewHolder.tvHint.text = "" +// } else { +// emptyViewHolder.tvHint.text = "暂无回答" +// } +// +// if (mQuestionEntity != null && !TextUtils.isEmpty(mQuestionEntity!!.me.myAnswerId)) { +// emptyViewHolder.tvBtn.visibility = View.GONE +// } else { +// emptyViewHolder.tvBtn.visibility = View.VISIBLE +// } +// emptyViewHolder.tvBtn.text = "我来回答" +// emptyViewHolder.itemView.layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, DisplayUtils.dip2px(200f)) +// emptyViewHolder.itemView.setOnClickListener { mListClickListener.onListClick(holder.itemView, 1, null) } +// } +// ItemViewType.ITEM_FOOTER -> { +// val footerViewHolder = holder as FooterViewHolder +// footerViewHolder.itemView.setBackgroundColor(R.color.background.toColor()) +// footerViewHolder.initItemPadding() +// val item = footerViewHolder.itemView as LinearLayout +// if (mIsNetworkError) { +// footerViewHolder.loading.visibility = View.GONE +// footerViewHolder.hint.setText(R.string.loading_failed_retry) +// footerViewHolder.hint.setCompoundDrawables(null, null, null, null) +// footerViewHolder.hint.setPadding(0, 0, 0, 0) +// item.gravity = Gravity.CENTER +// } else if (mIsOver) { +// footerViewHolder.loading.visibility = View.GONE +// footerViewHolder.hint.setText(R.string.questionsdetail_fold_hint) +// footerViewHolder.hint.setPadding(DisplayUtils.dip2px(mContext, 20f), 0, 0, 0) +// val drawable = ContextCompat.getDrawable(mContext, R.drawable.questionsdetail_footer_icon) +// item.gravity = Gravity.CENTER_VERTICAL +// if (drawable != null) { +// drawable.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight) +// footerViewHolder.hint.setCompoundDrawables(null, null, drawable, null) +// footerViewHolder.hint.compoundDrawablePadding = 20 +// } +// +// if (position != itemCount - 1) { +// footerViewHolder.itemView.setBackgroundColor(Color.WHITE) +// } +// } else { +// footerViewHolder.loading.visibility = View.VISIBLE +// footerViewHolder.hint.setText(R.string.loading) +// footerViewHolder.hint.setCompoundDrawables(null, null, null, null) +// footerViewHolder.hint.setPadding(0, 0, 0, 0) +// item.gravity = Gravity.CENTER +// } +// if (!mIsOver || mQuestionEntity != null && mQuestionEntity!!.isAnswerFold) { +// footerViewHolder.itemView.setLayoutParams(ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)) +// } else { +// footerViewHolder.itemView.setLayoutParams(ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0)) +// } +// } +// ItemViewType.ITEM_BODY -> { +// val index = position - getPositionIndex(position) +// if (index != -1 && holder is CommunityAnswerItemViewHolder) { +// val answer = mEntityList[index].answer ?: return +// val intent = AnswerDetailActivity.getIntent(mContext, answer.id, mEntrance, "问题详情-答案列表") +// holder.bindAnswerItem(answer, true, mEntrance, "问题详情") +// if (answer.time == answer.editTime) { +// holder.binding.time.text = NewsUtils.getFormattedTime(answer.time ?: 0) +// } else { +// holder.binding.time.text = "${NewsUtils.getFormattedTime(answer.editTime)} 已修改" +// } +// +// holder.binding.root.setOnClickListener { +// (mContext as Activity).startActivityForResult(intent, QuestionsDetailFragment.QUESTIONS_DETAIL_ANSWER_REQUEST) +// } +// } +// } +// TYPE_RECOMMEND_USER_TO_INVITE -> { +// (holder as RecommendedUserToInviteViewHolder).bindView(mViewModel, mQuestionEntity!!, mEntityList[position - getPositionIndex(position)].recommendedUserToInvite!!) +// } +// TYPE_SIMILAR_ANSWER -> { +// val index = position - getPositionIndex(position) +// if (index != -1) { +// val viewHolder = holder as CommunityAnswerItemViewHolder +// val answerEntity = mEntityList[index].similarAnswer ?: return +// viewHolder.bindAnswerItem(answerEntity, "", "问题推荐") +// viewHolder.binding.title.setOnClickListener { +// val questions = answerEntity.questions +// mContext.startActivity(QuestionsDetailActivity.getIntent(mContext, questions.id, "", "问题推荐")) +// } +// +// viewHolder.itemView.setOnClickListener { +// mContext.startActivity(AnswerDetailActivity.getIntent(mContext, answerEntity.id, "", "问题推荐")) +// } +// } +// } +// } +// } +// +// @SuppressLint("SetTextI18n") +// private fun initQuestionsDetailItemViewHolder(holder: QuestionsDetailItemViewHolder) { +// val tags = mQuestionEntity?.tags ?: arrayListOf() +// val images = mQuestionEntity?.images ?: arrayListOf() +// val description = mQuestionEntity?.description ?: "" +// val relatedQuestion = mQuestionEntity?.relatedQuestion +// val video = if (!mQuestionEntity?.videos.isNullOrEmpty()) mQuestionEntity?.videos?.get(0) else null +// val videoSize = if (video != null) 1 else 0 +// +// // 标签 +// holder.mTagRl.removeAllViews() +// for (tag in tags) { +// if (!TextUtils.isEmpty(tag)) { +// addTag(holder.mTagRl, tag, false) +// } +// } +// +// // 缩略图(视频只显示在第一个) +// holder.mImgLl.goneIf(images.isEmpty() && video == null) +// holder.mPic2.visibleIf(images.size + videoSize > 1) +// holder.mPic3.visibleIf(images.size + videoSize > 2) +// holder.mPic3Desc.goneIf(images.size + videoSize <= 3) +// holder.mPic3Mask.goneIf(images.size + videoSize <= 3) +// +// holder.mVideoPlay.visibleIf(video != null) +// holder.mVideoStatus.visibleIf(video != null && video.status != "pass") +// holder.mVideoDuration.visibleIf(video?.status == "pass") +// if (video?.status == "pass") { +// holder.mVideoDuration.background = DrawableView.getOvalDrawable(R.color.black_alpha_80, 999f) +// holder.mVideoDuration.text = video.duration +// } else { +// val status = if (!mQuestionEntity!!.me.isContentOwner && !mQuestionEntity!!.me.isModerator && video?.status == "fail") { +// "pending" +// } else video?.status ?: "" +// VideoVerifyItemViewHolder.setVideoStatus(holder.mVideoStatus, status) +// } +// if (video != null) { +// if (video.status == "pass") { +// holder.mPic1.display(video.poster) +// } else { +// holder.mPic1.setImageResource(R.drawable.community_video_default_poster) +// } +// } +// +// for (i in images.indices + videoSize) { +// val index = i + videoSize // view index +// val position = index - videoSize // data index +// if (images.size > position) { +// when (index) { +// 0 -> holder.mPic1.display(images[position]) +// +// 1 -> holder.mPic2.display(images[position]) +// +// 2 -> { +// holder.mPic3.display(images[position]) +// holder.mPic3Desc.text = "+" + (images.size - 3 + videoSize) +// } +// } +// } +// } +// +// // 问题描述 +// holder.mDes.initWidth(mContext.resources.displayMetrics.widthPixels - 40F.dip2px()) +// holder.mDes.maxLines = 3 +// holder.mDes.setOriginalText(description) +// holder.mDes.goneIf(TextUtils.isEmpty(description)) +// +// // "关注问题" +// when { +// mQuestionEntity!!.me.isContentOwner -> { +// holder.concern.setTextColor(ContextCompat.getColor(mContext, R.color.text_subtitle)) +// DrawableView.setTextDrawable(holder.concern, R.drawable.ic_edit_question, "修改问题") +// } +// mQuestionEntity!!.me.isQuestionFollowed -> { +// holder.concern.setTextColor(ContextCompat.getColor(mContext, R.color.text_subtitle)) +// DrawableView.setTextDrawable(holder.concern, R.drawable.ic_followed_question, "已关注") +// } +// else -> { +// holder.concern.setTextColor(ContextCompat.getColor(mContext, R.color.theme_font)) +// DrawableView.setTextDrawable(holder.concern, R.drawable.ic_follow_question, "关注问题") +// } +// } +// +// // "关联问题"区域 +// holder.mRelatedQuestionContainer.goneIf(relatedQuestion == null) +// relatedQuestion?.let { +// holder.mRelatedQuestionContainer.setOnClickListener { +// mContext.startActivity(QuestionsDetailActivity.getIntent( +// mContext, +// relatedQuestion.id, +// mEntrance, +// "关联问题")) +// } +// holder.mRelatedQuestionTitle.text = relatedQuestion.title +// holder.mRelatedQuestionAnswerCount.text = NumberUtils.transSimpleCount(relatedQuestion.answerCount!!) + "回答" +// } +// +// holder.mTitle.text = mQuestionEntity?.title +// holder.concernCount.text = NumberUtils.transSimpleCount(mQuestionEntity?.getFollowCount() +// ?: 0) + "人关注" +// +// holder.mAnswercount.goneIf(mQuestionEntity?.answersCount == 0) +// holder.mAnswercount.text = mContext.getString(R.string.ask_answer_count, NumberUtils.transSimpleCount(mQuestionEntity?.answersCount +// ?: 0)) +// } +// +// private fun addTag(mTagRl: FlexboxLayout, tag: String, isLastTag: Boolean) { +// val tagTv = TextView(mContext) +// mTagRl.addView(tagTv) +// +// tagTv.text = tag +// tagTv.gravity = Gravity.CENTER +// tagTv.textSize = 12F +// tagTv.background = DrawableView.getOvalDrawable(R.color.text_EEF5FB, 2F) +// tagTv.setTextColor(R.color.theme_font.toColor()) +// tagTv.setPadding(8F.dip2px(), 0, 8F.dip2px(), 0) +// +// val params = FlexboxLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 24F.dip2px()) +// params.setMargins(0, +// DisplayUtils.dip2px(mContext, 10f), +// if (!isLastTag) DisplayUtils.dip2px(mContext, 12f) else 0, +// DisplayUtils.dip2px(mContext, 10f)) +// tagTv.layoutParams = params +// +// tagTv.setOnClickListener { +// MtaHelper.onEvent("问题标签", mQuestionEntity!!.community.name, mQuestionEntity!!.title + "-" + tag) +// mContext.startActivity(AskColumnDetailActivity.getIntentByTag(mContext, tag, +// CommunityEntity(mQuestionEntity!!.community.id, +// mQuestionEntity!!.community.name), mEntrance, "问题详情")) +// } +// } +// +// override fun getItemCount(): Int { +// if (mQuestionEntity == null) { +// return 0 +// } +// +// if (mIsNoneData && (mEntityList == null || mEntityList.isEmpty())) { +// return if (mQuestionEntity!!.isAnswerFold) { +// FOOTER_ITEM_COUNT + TOP_ITEM_COUNT +// } else { +// FOOTER_ITEM_COUNT + TOP_ITEM_COUNT + ITEM_EMPTY_COUNT +// } +// } +// +// return if (mEntityList == null) FOOTER_ITEM_COUNT + TOP_ITEM_COUNT else mEntityList.size + FOOTER_ITEM_COUNT + TOP_ITEM_COUNT +// } +// +// fun isOver(): Boolean { +// return mIsOver +// } +// +// class EmptyViewHolder(itemView: View) : ReuseViewHolder(itemView) { +// @BindView(R.id.reuse_nodata_skip_tv_hint) +// lateinit var tvHint: TextView +// +// @BindView(R.id.reuse_nodata_skip_tv_btn) +// lateinit var tvBtn: TextView +// } +// +// class RecommendedUserToInviteViewHolder(itemView: View) : BaseRecyclerViewHolder(itemView) { +// +// @BindView(R.id.inviteBtn) +// lateinit var inviteBtn: View +// +// @BindView(R.id.recyclerview) +// lateinit var recyclerView: RecyclerView +// +// var adapter: SimpleInviteAdapter? = null +// +// fun bindView(viewModel: QuestionsDetailViewModel, question: QuestionsDetailEntity, userList: List) { +// +// inviteBtn.visibleIf(question.me.isContentOwner && !question.me.isSmartInvited) +// inviteBtn.setOnClickListener { +// MtaHelper.onEvent("问题邀请", "智能邀请", question.community.name + "+" + StringUtils.combineTwoString(question.title, question.id)) +// DialogHelper.showDialog( +// context = inviteBtn.context, +// title = "智能邀请", +// content = "将为你智能邀请用户来回答!你还可以手动邀请喔~", +// confirmText = "确定", +// cancelText = "取消", +// confirmClickCallback = { viewModel.doSmartInvitation() }, +// trackMtaEvent = true, +// mtaEvent = "问题邀请", +// mtaKey = "智能邀请功能操作") +// } +// +// if (adapter == null) { +// adapter = SimpleInviteAdapter(recyclerView.context, object : OnListClickListener { +// override fun onListClick(view: View?, position: Int, data: T) { +// when (view?.id) { +// R.id.questionsinvite_item_invite -> { +// val inviteEntity = data as InviteEntity +// val me = inviteEntity.me +// if (me == null || !me.isUserInvite) { +// recyclerView.context.ifLogin("问题详情-邀请回答-[邀请]") { +// viewModel.invite(inviteEntity.id!!) +// MtaHelper.onEvent("问题邀请", "邀请回答(列表)", question.community.name + "+" + StringUtils.combineTwoString(question.title, question.id)) +// } +// } +// } +// } +// } +// }, "问题详情") +// } +// recyclerView.adapter = adapter +// recyclerView.layoutManager = LinearLayoutManager(recyclerView.context) +// +// adapter?.setData(userList) +// } +// } +// +// private fun getPositionIndex(position: Int): Int { +// val foldItemPosition = getFoldHintItemPosition() +// val foldIndex = if (foldItemPosition != null && position > foldItemPosition) 1 else 0 +// return foldIndex + TOP_ITEM_COUNT +// } +// +// override fun getSyncData(position: Int): Pair? { +// val index = position - getPositionIndex(position) +// if (index < 0 || index >= mEntityList.size) return null +// val itemData = mEntityList[index] +// var entity = itemData.answer +// if (entity == null) entity = itemData.similarAnswer +// if (entity == null) return null +// return Pair(entity.id ?: "", entity) +// } +// +// class SimpleInviteAdapter(context: Context, onListClickListener: OnListClickListener, entrance: String) +// : QuestionsInviteAdapter(context, onListClickListener, entrance, "问题详情-邀请列表") { +// override fun getItemViewType(position: Int): Int { +// return ItemViewType.ITEM_BODY +// } +// +// override fun getItemCount(): Int { +// return if (mEntityList != null && mEntityList.size != 0) mEntityList.size else 0 +// } +// +// fun setData(dataList: List) { +// setListData(dataList) +// } +// } +// +// class SimilarAnswerHint(itemView: View) : BaseRecyclerViewHolder(itemView) +// +// companion object { +// private const val ITEM_EMPTY_COUNT = 1 +// +// private const val TYPE_RECOMMEND_USER_TO_INVITE = 987 +// +// private const val TYPE_SIMILAR_ANSWER = 988 +// +// private const val TYPE_SIMILAR_ANSWER_HINT = 989 +// } +// +//} \ 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 57ae1e1706..5637f9c092 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 @@ -1,712 +1,712 @@ -package com.gh.gamecenter.qa.questions.detail - -import android.app.Activity -import android.app.Dialog -import android.content.Intent -import android.graphics.Color -import android.os.Bundle -import android.os.Parcelable -import android.text.TextUtils -import android.view.LayoutInflater -import android.view.MenuItem -import android.view.View -import android.view.Window -import android.widget.ImageView -import android.widget.LinearLayout -import android.widget.TextView -import androidx.appcompat.app.AppCompatActivity -import androidx.core.content.ContextCompat -import androidx.lifecycle.Lifecycle -import androidx.recyclerview.widget.DefaultItemAnimator -import androidx.recyclerview.widget.RecyclerView -import butterknife.BindView -import com.ethanhua.skeleton.Skeleton -import com.facebook.drawee.view.SimpleDraweeView -import com.gh.base.fragment.BaseDialogWrapperFragment -import com.gh.base.fragment.BaseFragment -import com.gh.common.TimeElapsedHelper -import com.gh.common.constant.Constants.GAME_DETAIL_COME_IN -import com.gh.common.util.* -import com.gh.common.view.SpacingItemDecoration -import com.gh.gamecenter.ImageViewerActivity -import com.gh.gamecenter.R -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.NormalShareEntity -import com.gh.gamecenter.entity.MenuItemEntity -import com.gh.gamecenter.entity.Permissions -import com.gh.gamecenter.entity.SpecialColumn -import com.gh.gamecenter.eventbus.EBDeleteDetail -import com.gh.gamecenter.eventbus.EBReuse -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.mvvm.Status -import com.gh.gamecenter.personal.PersonalFragment -import com.gh.gamecenter.qa.answer.detail.AnswerDetailActivity -import com.gh.gamecenter.qa.answer.edit.AnswerEditActivity -import com.gh.gamecenter.qa.answer.fold.AnswerFoldActivity -import com.gh.gamecenter.qa.dialog.MoreFunctionPanelDialog -import com.gh.gamecenter.qa.entity.AnswerDraftEntity -import com.gh.gamecenter.qa.entity.QuestionDraftEntity -import com.gh.gamecenter.qa.entity.Questions -import com.gh.gamecenter.qa.entity.QuestionsDetailEntity -import com.gh.gamecenter.qa.questions.edit.QuestionEditActivity -import com.gh.gamecenter.qa.questions.edit.TagsSelectFragment -import com.gh.gamecenter.qa.questions.edit.manager.HistoryActivity -import com.gh.gamecenter.qa.questions.invite.QuestionsInviteActivity -import com.gh.gamecenter.retrofit.Response -import com.gh.gamecenter.retrofit.RetrofitManager -import com.gh.gamecenter.suggest.SuggestType -import com.gh.gamecenter.video.detail.VideoDetailContainerViewModel -import com.halo.assistant.HaloApp -import com.lightgame.utils.Utils -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.schedulers.Schedulers -import org.greenrobot.eventbus.EventBus -import org.greenrobot.eventbus.Subscribe -import org.greenrobot.eventbus.ThreadMode -import java.io.IOException - -class QuestionsDetailFragment : - ListFragment(), - TagsSelectFragment.OnModeratorPatchTagsCallback { - - @BindView(R.id.reuse_tv_none_data) - lateinit var mNoDataTv: TextView - - @BindView(R.id.list_skeleton) - lateinit var mSkeletonMaskView: View - - @BindView(R.id.fab_container) - lateinit var mFabContainer: View - - @BindView(R.id.fab_tv) - lateinit var mFabTv: TextView - - @BindView(R.id.fab_iv) - lateinit var mFabIv: ImageView - - private var mAdapter: QuestionsDetailAdapter? = null - - private var mPath: String? = null - private var mQuestionsId: String? = null - private var mIsCheckConcern: Boolean = false - - private var mSpecialColumn: SpecialColumn? = null - private var mElapsedHelper: TimeElapsedHelper? = null - private var mQuestionsDetailEntity: QuestionsDetailEntity? = null - - private var mImageViewList: ArrayList? = null - - val questionsTitle: String - get() = mAdapter?.getQuestionsTitle() ?: "" - - override fun getItemDecoration(): RecyclerView.ItemDecoration { - return SpacingItemDecoration(notDecorateTheFirstTwoItems = true, top = 8F.dip2px()) - } - - override fun getLayoutId(): Int { - return R.layout.fragment_list_base_skeleton_no_loading - } - - override fun provideListAdapter(): ListAdapter<*> { - return if (mAdapter != null) { - mAdapter!! - } else { - QuestionsDetailAdapter(requireContext(), this, mQuestionsDetailEntity, mListViewModel, mEntrance).apply { mAdapter = this } - } - } - - override fun provideListViewModel(): QuestionsDetailViewModel { - return viewModelProvider(QuestionsDetailViewModel.Factory(mQuestionsId ?: "")) - } - - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - if (requestCode == QUESTIONS_DETAIL_ANSWER_REQUEST) { - if (resultCode == AnswerEditActivity.SAVE_DRAFTS) { - postDraftsSuccess() - } else if (resultCode == BaseFragment.RESULT_REFRESH) { - onLoadRefresh() - } else if (resultCode == Activity.RESULT_OK) { - if (data != null) { - postAnswerSuccess(data.getStringExtra(EntranceUtils.KEY_ANSWER_ID)) - } - } - } else if (requestCode == QUESTIONS_EDIT_REQUEST && resultCode == Activity.RESULT_OK) { - if (data?.getParcelableExtra(QuestionsDetailEntity::class.java.simpleName) != null) { - mQuestionsDetailEntity = data.getParcelableExtra(QuestionsDetailEntity::class.java.simpleName) - mQuestionsDetailEntity?.me?.questionDraft = null - mAdapter?.setQuestionsEntity(mQuestionsDetailEntity!!) - } - if (data?.getParcelableExtra(QuestionDraftEntity::class.java.simpleName) != null) { - mQuestionsDetailEntity?.me?.questionDraft = data.getParcelableExtra(QuestionDraftEntity::class.java.simpleName) - mAdapter?.setQuestionsEntity(mQuestionsDetailEntity!!) - } - - } else if (requestCode == QUESTIONS_EDIT_REQUEST && resultCode == Activity.RESULT_CANCELED) { - 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)) - } - } - } - - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) - initMenu(R.menu.menu_questions_detail) - val itemMenu = getItemMenu(R.id.menu_question_and_answer) - itemMenu.isVisible = HaloApp.get(GAME_DETAIL_COME_IN, false) != null - } - - override fun onCreate(savedInstanceState: Bundle?) { - arguments?.let { - mIsCheckConcern = it.getBoolean(EntranceUtils.KEY_CHECK_QUESTION_CONCERN, false) - mQuestionsId = it.getString(EntranceUtils.KEY_QUESTIONS_ID) ?: "" - mPath = it.getString(EntranceUtils.KEY_PATH) - mSpecialColumn = it.getParcelable(EntranceUtils.KEY_DATA) - } - - super.onCreate(savedInstanceState) - - mNoDataTv.setText(R.string.content_delete_hint) - - mElapsedHelper = TimeElapsedHelper(this) - - mSkeletonScreen = Skeleton.bind(mSkeletonMaskView).load(R.layout.fragment_question_detail_skeleton).shimmer(false).show() - - mListViewModel.headLiveData.observeNonNull(this) { detailResource -> - if (detailResource.status == Status.SUCCESS) { - detailResource.data?.let { - if (TextUtils.isEmpty(it.me.myAnswerId)) { - getUserAnswerDrafts() - } - it.id = mQuestionsId - mQuestionsDetailEntity = it - mAdapter?.setQuestionsEntity(it) - - updateFab() -// GdtHelper.logAction(ActionType.PAGE_VIEW, GdtHelper.CONTENT_TYPE, "QUESTION", GdtHelper.CONTENT_ID, mQuestionsId) - - setNavigationTitle(mQuestionsDetailEntity!!.community.name + " - 问题详情") - MtaHelper.onEvent("详情页面", "问题详情", it.title) - } - } else if (detailResource.status == Status.ERROR) { - try { - hideFab() - val e = detailResource.exception - if (e != null && e.code() == 404 && e.response().errorBody()?.string()!!.isNotEmpty()) { - Utils.toast(context, R.string.content_delete_toast) - if (mIsCheckConcern) { - showCancelConcernDialog() - } - } - } catch (e1: IOException) { - e1.printStackTrace() - } - } - } - - mListViewModel.doRefreshList.observeNonNull(this) { - if (it) { - mAdapter?.notifyDataSetChanged() - } - } - mListViewModel.moderatorsHideLiveData.observeNonNull(this) { - EventBus.getDefault().post(EBDeleteDetail(mQuestionsId)) - requireActivity().finish() - } - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - (mListRv.itemAnimator as DefaultItemAnimator).supportsChangeAnimations = false - mReuseNoConn?.setOnClickListener { - // 重新设置重连点击 - onRefresh() - } - - mCachedView.viewTreeObserver.addOnScrollChangedListener { - val topView = mLayoutManager.findViewByPosition(0) - if (mQuestionsDetailEntity != null) { - if (topView == null || -topView.top > 240) { - setNavigationTitle(mQuestionsDetailEntity!!.title) - } else { - setNavigationTitle(mQuestionsDetailEntity!!.community.name + " - 问题详情") - } - } - } - - mImageViewList = arrayListOf(view.findViewById(R.id.questionsdetail_item_pic1), view.findViewById(R.id.questionsdetail_item_pic2), view.findViewById(R.id.questionsdetail_item_pic3)) - } - - override fun onDestroyView() { - super.onDestroyView() - trackViewed() - } - - private fun trackViewed() { - mQuestionsDetailEntity?.let { - val elapsedTime = mElapsedHelper?.elapsedTime ?: 0 - val combinedTitleAndId = StringUtils.combineTwoString(it.title, it.id) - - MtaHelper.onEventWithTime("问题阅读量_按社区", elapsedTime, it.community.name, combinedTitleAndId) - MtaHelper.onEventWithTime("问题阅读量_按位置", elapsedTime, mPath, combinedTitleAndId) - MtaHelper.onEventWithTime("问题阅读量_社区加位置", elapsedTime, it.community.name, mPath) - - val questions = Questions() - questions.id = mQuestionsId ?: "" - questions.title = it.title - LogUtils.uploadQuestionReadTime(mEntrance, - mElapsedHelper!!.elapsedTime, - questions, - it.community.id, - it.community.name, - mSpecialColumn) - } - } - - override fun onListClick(view: View?, position: Int, data: Any?) { - var imgPosition = -1 - val videoSize = if (!mQuestionsDetailEntity?.videos.isNullOrEmpty()) 1 else 0 - when (view?.id) { - R.id.footerview_item -> if (mAdapter!!.isNetworkError) { - mListViewModel.load(LoadType.RETRY) - } else if (mAdapter!!.isOver()) { - if (lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) { - startActivity(AnswerFoldActivity.getIntent(context, mQuestionsDetailEntity!!.id, "$mEntrance+(问题详情)")) - } - } - R.id.questionsdetail_item_pic1 -> { - imgPosition = 0 - if (imgPosition == -1) imgPosition = 1 - videoSize - if (imgPosition == -1) imgPosition = 2 - videoSize - - if (!mQuestionsDetailEntity?.videos.isNullOrEmpty()) { - val videoEntity = mQuestionsDetailEntity?.videos?.get(0) - if (videoEntity?.status == "pass") { - DirectUtils.directToVideoDetail( - requireContext(), - videoEntity.id, - VideoDetailContainerViewModel.Location.SINGLE_VIDEO.value, - path = "问题详情") - } else if (videoEntity?.status == "pending" || - (!mQuestionsDetailEntity!!.me.isContentOwner - && !mQuestionsDetailEntity!!.me.isModerator - && videoEntity?.status == "fail")) { - toast("视频正在审核中") - } else if (videoEntity?.status == "fail") { - toast("视频审核未通过") - } - } else if (mQuestionsDetailEntity!!.images.size > imgPosition) { - val intent = ImageViewerActivity.getIntent(requireContext(), - ArrayList(mQuestionsDetailEntity!!.images), - imgPosition, - mImageViewList, - "$mEntrance+(问题详情-答案列表)") - startActivity(intent) - } - } - R.id.questionsdetail_item_pic2 -> { - if (imgPosition == -1) imgPosition = 1 - videoSize - if (imgPosition == -1) imgPosition = 2 - videoSize - if (mQuestionsDetailEntity!!.images.size > imgPosition) { - val intent = ImageViewerActivity.getIntent(requireContext(), - ArrayList(mQuestionsDetailEntity!!.images), - imgPosition, - mImageViewList, - "$mEntrance+(问题详情-答案列表)") - startActivity(intent) - } - } - R.id.questionsdetail_item_pic3 -> { - if (imgPosition == -1) imgPosition = 2 - videoSize - if (mQuestionsDetailEntity!!.images.size > imgPosition) { - val intent = ImageViewerActivity.getIntent(requireContext(), - ArrayList(mQuestionsDetailEntity!!.images), - imgPosition, - mImageViewList, - "$mEntrance+(问题详情-答案列表)") - startActivity(intent) - } - } - R.id.questionsdetail_invite -> { - startActivity(QuestionsInviteActivity.getIntent(context, mQuestionsDetailEntity, "$mEntrance+(问题详情)")) - MtaHelper.onEvent("问题邀请", "邀请回答(问题详情)", mQuestionsDetailEntity?.community?.name + "+" + mQuestionsDetailEntity?.title, mQuestionsDetailEntity?.id) - } - R.id.questionsdetail_concern, R.id.questionsdetail_concern_container -> CheckLoginUtils.checkLogin(context, "问题详情-[关注问题]") { - if (mQuestionsDetailEntity!!.me.isContentOwner) { - startActivityForResult(QuestionEditActivity.getIntent(requireContext(), mQuestionsDetailEntity!!), QUESTIONS_EDIT_REQUEST) - } else if (!mQuestionsDetailEntity!!.me.isQuestionFollowed) { - ConcernUtils.postConcernQuestions(requireContext(), mQuestionsId!!, object : ConcernUtils.onConcernListener { - override fun onSuccess() { - mQuestionsDetailEntity!!.me.isQuestionFollowed = true - mQuestionsDetailEntity!!.setFollowCount(mQuestionsDetailEntity!!.getFollowCount() + 1) - mAdapter!!.notifyItemChanged(0) - -// GdtHelper.logAction(ActionType.ADD_TO_WISHLIST, -// GdtHelper.CONTENT_TYPE, "QUESTION", -// GdtHelper.CONTENT_ID, mQuestionsId) - - toast("已关注 ") - } - - override fun onError() { - - } - }) - } else { - cancelConcern() - } - } - - R.id.reuse_nodata_skip -> ifLogin("问题详情-[我来回答]") { - checkStoragePermissionBeforeAction { - startAnswerEditActivity() - } - } - } - } - - private fun hideFab() { - mFabContainer.visibility = View.GONE - } - - private fun updateFab() { - mFabContainer.visibility = View.VISIBLE - // "我的回答","我来回答","继续回答" - if (!TextUtils.isEmpty(mQuestionsDetailEntity?.me?.myAnswerId)) { - mFabTv.text = R.string.question_detail_myanswer.toResString() - mFabIv.setImageResource(R.drawable.ic_question_detail_edit_my_answer) - } else if (mQuestionsDetailEntity?.isExistDrafts == true) { - mFabTv.text = R.string.question_detail_resume_answer.toResString() - mFabIv.setImageResource(R.drawable.ic_question_detail_edit) - } else { - mFabTv.text = R.string.question_detail_answer.toResString() - mFabIv.setImageResource(R.drawable.ic_question_detail_edit) - } - - mFabContainer.setOnClickListener { - checkStoragePermissionBeforeAction { - ifLogin("问题详情-[我来回答]") { - showRegulationTestDialogIfNeeded { - if (mQuestionsDetailEntity != null && !TextUtils.isEmpty(mQuestionsDetailEntity?.me?.myAnswerId)) { - val intent = AnswerDetailActivity.getIntent(context, mQuestionsDetailEntity?.me?.myAnswerId, mEntrance, "问题详情-答案列表") - startActivityForResult(intent, QUESTIONS_DETAIL_ANSWER_REQUEST) - } else { - startAnswerEditActivity() - } - } - } - } - } - } - - private fun startAnswerEditActivity() { - val question = Questions( - id = mQuestionsId ?: "", - title = questionsTitle, - description = mQuestionsDetailEntity?.description ?: "", - images = mQuestionsDetailEntity?.images as ArrayList? ?: ArrayList(), - videos = mQuestionsDetailEntity?.videos ?: ArrayList(), - answerCount = mQuestionsDetailEntity?.answersCount ?: 0) - startActivityForResult(AnswerEditActivity.getIntent(requireContext(), question, mQuestionsDetailEntity!!.community.name), QUESTIONS_DETAIL_ANSWER_REQUEST) - } - - override fun onMenuItemClick(menuItem: MenuItem) { - mQuestionsDetailEntity?.let { - when (menuItem.itemId) { - R.id.menu_more -> showMoreItemDialog() - R.id.menu_question_and_answer -> { - HaloApp.remove(GAME_DETAIL_COME_IN) - DirectUtils.directToCommunity(requireContext(), it.community) - LogUtils.qaAccess("问题详情-进入问答", it.community) - MtaHelper.onEvent("进入问答", "问题详情", it.community.name + "+" + StringUtils.combineTwoString(it.title, it.id)) - } - } - } - } - - private fun showMoreItemDialog() { - if (lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) { - mQuestionsDetailEntity?.let { questionEntity -> - val entities = ArrayList() - if (questionEntity.user.id != UserManager.getInstance().userId) { - entities.add(MenuItemEntity("投诉", R.drawable.icon_gamedetail_copyright)) - } - if (questionEntity.me.isModerator) { - entities.add(MenuItemEntity("编辑", R.drawable.icon_more_panel_edit)) - } - if (questionEntity.me.isModerator || questionEntity.user.id == UserManager.getInstance().userId) { - entities.add(MenuItemEntity("删除", R.drawable.icon_more_panel_delete)) - } - - MoreFunctionPanelDialog.showMoreDialog(requireActivity() as AppCompatActivity, entities, questionEntity.title - ?: "", getShareEntity(questionEntity), questionEntity.status,tag ?: "") - } - } - } - - private fun getShareEntity(questionEntity: QuestionsDetailEntity): NormalShareEntity { - return NormalShareEntity( - 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 { - return { - when (it?.text) { - "投诉" -> { - SuggestionActivity.startSuggestionActivity(context, SuggestType.normal, "report", - "问题投诉(" + questionEntity.id + "):") - } - "编辑" -> { - val intent = QuestionEditActivity.getManagerIntent(requireContext(), mQuestionsDetailEntity!!) - startActivityForResult(intent, QUESTIONS_EDIT_REQUEST) - } - - "删除" -> { - DialogHelper.showDialog(requireContext(), "提示", "删除问题后,其中的所有回答都将被删除", "删除", "取消", { - mListViewModel.moderatorsHideQuestion() - }, extraConfig = DialogHelper.Config(centerTitle = true, centerContent = true)) - } - } - } - } - - 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) - val actionNameTv = view.findViewById(R.id.actionNameTv) - iconIv.setImageDrawable(ContextCompat.getDrawable(requireContext(), if (item.disableIcon > 0) item.disableIcon else item.normalIcon)) - actionNameTv.setTextColor(ContextCompat.getColor(requireContext(), if (item.disableIcon > 0) R.color.text_subtitleDesc else R.color.text_title)) - view.isEnabled = item.disableIcon == 0 - actionNameTv.text = item.text - if (index > 0) { - val params = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT) - params.topMargin = 1f.dip2px() - view.layoutParams = params - } - return view - } - - private fun showManagerPatchDialog() { - if (context == null) return - val patchTag = "修改标签" - val patchQuestion = "修改问题" - val hideQuestion = "隐藏问题" - val historyVersion = "历史版本" - val arrReportType = ArrayList() - - val (_, _, _, _, _, - updateTagPermission, - updateQuestionPermission, - hideQuestionPermission, - getModifiedVersionsPermission) = mQuestionsDetailEntity?.me?.moderatorPermissions!! - if (updateTagPermission > Permissions.GUEST) { - arrReportType.add(patchTag) - } - if (updateQuestionPermission > Permissions.GUEST) { - arrReportType.add(patchQuestion) - } - if (hideQuestionPermission > Permissions.GUEST) { - arrReportType.add(hideQuestion) - } - if (getModifiedVersionsPermission > Permissions.GUEST) { - arrReportType.add(historyVersion) - } - - val widthPixels = resources.displayMetrics.widthPixels - val dialog = Dialog(requireContext()) - val container = LinearLayout(context) - container.orientation = LinearLayout.VERTICAL - val pad = DisplayUtils.dip2px(requireContext(), 12f) - container.setPadding(0, pad, 0, pad) - container.setBackgroundColor(Color.WHITE) - - for (s in arrReportType) { - val itemTv = TextView(context) - itemTv.text = s - itemTv.textSize = 17f - itemTv.setTextColor(ContextCompat.getColor(requireContext(), R.color.title)) - itemTv.setBackgroundResource(R.drawable.textview_white_style) - itemTv.layoutParams = LinearLayout.LayoutParams(widthPixels * 9 / 10, - LinearLayout.LayoutParams.WRAP_CONTENT) - itemTv.setPadding(DisplayUtils.dip2px(requireContext(), 20f), pad, 0, pad) - container.addView(itemTv) - - itemTv.setOnClickListener { - when (s) { - patchTag -> { - val tagsFragment = TagsSelectFragment.getInstance(mQuestionsDetailEntity!!) - val tagDialog = BaseDialogWrapperFragment.getInstance(tagsFragment, false) - tagsFragment.setPatchTagsCallBack(this) - tagDialog.show(childFragmentManager, TagsSelectFragment::class.java.simpleName) - } - patchQuestion -> { - val intent = QuestionEditActivity.getManagerIntent(requireContext(), mQuestionsDetailEntity!!) - startActivityForResult(intent, QUESTIONS_EDIT_REQUEST) - } - hideQuestion -> DialogHelper.showDialog(requireContext(), - "隐藏问题", - if (mQuestionsDetailEntity!!.me.moderatorPermissions.hideQuestion == Permissions.REPORTER) - "你的操作将提交给小编审核,确定提交吗?" - else - "你的操作将立即生效,确定提交吗?(你的管理权限为:高级)", - "确定", "取消", - { mListViewModel.moderatorsHideQuestion() }, - extraConfig = DialogHelper.Config(centerTitle = true, centerContent = true)) - historyVersion -> { - startActivityForResult( - HistoryActivity.getIntent(requireContext(), mQuestionsDetailEntity?.id!!), - QUESTIONS_MODERATOR_HISTORY_REQUEST) - } - } - dialog.cancel() - } - } - - dialog.requestWindowFeature(Window.FEATURE_NO_TITLE) - dialog.setContentView(container) - dialog.show() - } - - private fun postAnswerSuccess(answerId: String?) { - if (mQuestionsDetailEntity != null && answerId != null) { - mQuestionsDetailEntity?.me?.myAnswerId = answerId - mListViewModel.load(LoadType.REFRESH) - } - } - - private fun postDraftsSuccess() { - mQuestionsDetailEntity?.isExistDrafts = true - mAdapter?.notifyItemChanged(0) - updateFab() - } - - private fun getUserAnswerDrafts() { - RetrofitManager.getInstance().api - .getUserAnswerDrafts(mQuestionsId, "", Utils.getTime(context)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(object : Response() { - override fun onResponse(draft: AnswerDraftEntity?) { - super.onResponse(draft) - if (draft != null) { - mQuestionsDetailEntity?.isExistDrafts = true - mAdapter?.notifyItemChanged(0) - updateFab() - } - } - }) - } - - private fun cancelConcern() { - ConcernUtils.deleteConcernQuestions(requireContext(), mQuestionsId!!, object : ConcernUtils.onConcernListener { - override fun onSuccess() { - toast("取消关注") - if (mQuestionsDetailEntity == null) { - val activity = activity - if (activity != null) { - activity.setResult(Activity.RESULT_OK) - activity.finish() - } - } else { - mQuestionsDetailEntity?.let { - if (it.getFollowCount() > 0) { - it.setFollowCount(it.getFollowCount() - 1) - } - it.me.isQuestionFollowed = false - } - mAdapter?.notifyItemChanged(0) - } - } - - override fun onError() { - - } - }) - } - - private fun showCancelConcernDialog() { - DialogHelper.showDialog( - requireContext(), - "取消关注问题", - "问题已被删除,是否取消关注?", - " 取消关注", - "暂不 ", - { cancelConcern() }, - { - if (activity != null && activity?.isFinishing == false) { - activity?.finish() - } - }, - extraConfig = DialogHelper.Config(centerTitle = true, centerContent = true)) - } - - // 登录事件 - @Subscribe(threadMode = ThreadMode.MAIN) - fun onEventMainThread(reuse: EBReuse) { - if (reuse.type == PersonalFragment.LOGIN_TAG) { // 登入 - onRefresh() - } - } - - override fun onPatchTagsSuccess() { - mAdapter?.notifyDataSetChanged() - } - - override fun onPermissionError() { - mListViewModel.load(LoadType.REFRESH) - } - - override fun onBackPressed(): Boolean { - if (SyncDataBetweenPageHelper.setResultAndFinish(requireActivity(), mQuestionsDetailEntity)) { - return true - } - return super.onBackPressed() - } - - override fun provideSyncAdapter(): RecyclerView.Adapter<*>? { - return mAdapter - } - - override fun addSyncPageObserver(): Boolean { - return true - } - - companion object { - const val QUESTIONS_DETAIL_ANSWER_REQUEST = 110 - const val QUESTIONS_EDIT_REQUEST = 111 - const val QUESTIONS_MODERATOR_HISTORY_REQUEST = 112 - - fun getInstance(questionsId: String): QuestionsDetailFragment { - val fragment = QuestionsDetailFragment() - val args = Bundle() - args.putString(EntranceUtils.KEY_QUESTIONS_ID, questionsId) - fragment.arguments = args - return fragment - } - } -} +//package com.gh.gamecenter.qa.questions.detail + +//import android.app.Activity +//import android.app.Dialog +//import android.content.Intent +//import android.graphics.Color +//import android.os.Bundle +//import android.os.Parcelable +//import android.text.TextUtils +//import android.view.LayoutInflater +//import android.view.MenuItem +//import android.view.View +//import android.view.Window +//import android.widget.ImageView +//import android.widget.LinearLayout +//import android.widget.TextView +//import androidx.appcompat.app.AppCompatActivity +//import androidx.core.content.ContextCompat +//import androidx.lifecycle.Lifecycle +//import androidx.recyclerview.widget.DefaultItemAnimator +//import androidx.recyclerview.widget.RecyclerView +//import butterknife.BindView +//import com.ethanhua.skeleton.Skeleton +//import com.facebook.drawee.view.SimpleDraweeView +//import com.gh.base.fragment.BaseDialogWrapperFragment +//import com.gh.base.fragment.BaseFragment +//import com.gh.common.TimeElapsedHelper +//import com.gh.common.constant.Constants.GAME_DETAIL_COME_IN +//import com.gh.common.util.* +//import com.gh.common.view.SpacingItemDecoration +//import com.gh.gamecenter.ImageViewerActivity +//import com.gh.gamecenter.R +//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.NormalShareEntity +//import com.gh.gamecenter.entity.MenuItemEntity +//import com.gh.gamecenter.entity.Permissions +//import com.gh.gamecenter.entity.SpecialColumn +//import com.gh.gamecenter.eventbus.EBDeleteDetail +//import com.gh.gamecenter.eventbus.EBReuse +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.mvvm.Status +//import com.gh.gamecenter.personal.PersonalFragment +//import com.gh.gamecenter.qa.answer.detail.AnswerDetailActivity +//import com.gh.gamecenter.qa.answer.edit.AnswerEditActivity +//import com.gh.gamecenter.qa.answer.fold.AnswerFoldActivity +//import com.gh.gamecenter.qa.dialog.MoreFunctionPanelDialog +//import com.gh.gamecenter.qa.entity.AnswerDraftEntity +//import com.gh.gamecenter.qa.entity.QuestionDraftEntity +//import com.gh.gamecenter.qa.entity.Questions +//import com.gh.gamecenter.qa.entity.QuestionsDetailEntity +//import com.gh.gamecenter.qa.questions.edit.QuestionEditActivity +//import com.gh.gamecenter.qa.questions.edit.TagsSelectFragment +//import com.gh.gamecenter.qa.questions.edit.manager.HistoryActivity +//import com.gh.gamecenter.qa.questions.invite.QuestionsInviteActivity +//import com.gh.gamecenter.retrofit.Response +//import com.gh.gamecenter.retrofit.RetrofitManager +//import com.gh.gamecenter.suggest.SuggestType +//import com.gh.gamecenter.video.detail.VideoDetailContainerViewModel +//import com.halo.assistant.HaloApp +//import com.lightgame.utils.Utils +//import io.reactivex.android.schedulers.AndroidSchedulers +//import io.reactivex.schedulers.Schedulers +//import org.greenrobot.eventbus.EventBus +//import org.greenrobot.eventbus.Subscribe +//import org.greenrobot.eventbus.ThreadMode +//import java.io.IOException +// +//class QuestionsDetailFragment : +// ListFragment(), +// TagsSelectFragment.OnModeratorPatchTagsCallback { +// +// @BindView(R.id.reuse_tv_none_data) +// lateinit var mNoDataTv: TextView +// +// @BindView(R.id.list_skeleton) +// lateinit var mSkeletonMaskView: View +// +// @BindView(R.id.fab_container) +// lateinit var mFabContainer: View +// +// @BindView(R.id.fab_tv) +// lateinit var mFabTv: TextView +// +// @BindView(R.id.fab_iv) +// lateinit var mFabIv: ImageView +// +// private var mAdapter: QuestionsDetailAdapter? = null +// +// private var mPath: String? = null +// private var mQuestionsId: String? = null +// private var mIsCheckConcern: Boolean = false +// +// private var mSpecialColumn: SpecialColumn? = null +// private var mElapsedHelper: TimeElapsedHelper? = null +// private var mQuestionsDetailEntity: QuestionsDetailEntity? = null +// +// private var mImageViewList: ArrayList? = null +// +// val questionsTitle: String +// get() = mAdapter?.getQuestionsTitle() ?: "" +// +// override fun getItemDecoration(): RecyclerView.ItemDecoration { +// return SpacingItemDecoration(notDecorateTheFirstTwoItems = true, top = 8F.dip2px()) +// } +// +// override fun getLayoutId(): Int { +// return R.layout.fragment_list_base_skeleton_no_loading +// } +// +// override fun provideListAdapter(): ListAdapter<*> { +// return if (mAdapter != null) { +// mAdapter!! +// } else { +// QuestionsDetailAdapter(requireContext(), this, mQuestionsDetailEntity, mListViewModel, mEntrance).apply { mAdapter = this } +// } +// } +// +// override fun provideListViewModel(): QuestionsDetailViewModel { +// return viewModelProvider(QuestionsDetailViewModel.Factory(mQuestionsId ?: "")) +// } +// +// override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { +// super.onActivityResult(requestCode, resultCode, data) +// if (requestCode == QUESTIONS_DETAIL_ANSWER_REQUEST) { +// if (resultCode == AnswerEditActivity.SAVE_DRAFTS) { +// postDraftsSuccess() +// } else if (resultCode == BaseFragment.RESULT_REFRESH) { +// onLoadRefresh() +// } else if (resultCode == Activity.RESULT_OK) { +// if (data != null) { +// postAnswerSuccess(data.getStringExtra(EntranceUtils.KEY_ANSWER_ID)) +// } +// } +// } else if (requestCode == QUESTIONS_EDIT_REQUEST && resultCode == Activity.RESULT_OK) { +// if (data?.getParcelableExtra(QuestionsDetailEntity::class.java.simpleName) != null) { +// mQuestionsDetailEntity = data.getParcelableExtra(QuestionsDetailEntity::class.java.simpleName) +// mQuestionsDetailEntity?.me?.questionDraft = null +// mAdapter?.setQuestionsEntity(mQuestionsDetailEntity!!) +// } +// if (data?.getParcelableExtra(QuestionDraftEntity::class.java.simpleName) != null) { +// mQuestionsDetailEntity?.me?.questionDraft = data.getParcelableExtra(QuestionDraftEntity::class.java.simpleName) +// mAdapter?.setQuestionsEntity(mQuestionsDetailEntity!!) +// } +// +// } else if (requestCode == QUESTIONS_EDIT_REQUEST && resultCode == Activity.RESULT_CANCELED) { +// 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)) +// } +// } +// } +// +// override fun onActivityCreated(savedInstanceState: Bundle?) { +// super.onActivityCreated(savedInstanceState) +// initMenu(R.menu.menu_questions_detail) +// val itemMenu = getItemMenu(R.id.menu_question_and_answer) +// itemMenu.isVisible = HaloApp.get(GAME_DETAIL_COME_IN, false) != null +// } +// +// override fun onCreate(savedInstanceState: Bundle?) { +// arguments?.let { +// mIsCheckConcern = it.getBoolean(EntranceUtils.KEY_CHECK_QUESTION_CONCERN, false) +// mQuestionsId = it.getString(EntranceUtils.KEY_QUESTIONS_ID) ?: "" +// mPath = it.getString(EntranceUtils.KEY_PATH) +// mSpecialColumn = it.getParcelable(EntranceUtils.KEY_DATA) +// } +// +// super.onCreate(savedInstanceState) +// +// mNoDataTv.setText(R.string.content_delete_hint) +// +// mElapsedHelper = TimeElapsedHelper(this) +// +// mSkeletonScreen = Skeleton.bind(mSkeletonMaskView).load(R.layout.fragment_question_detail_skeleton).shimmer(false).show() +// +// mListViewModel.headLiveData.observeNonNull(this) { detailResource -> +// if (detailResource.status == Status.SUCCESS) { +// detailResource.data?.let { +// if (TextUtils.isEmpty(it.me.myAnswerId)) { +// getUserAnswerDrafts() +// } +// it.id = mQuestionsId +// mQuestionsDetailEntity = it +// mAdapter?.setQuestionsEntity(it) +// +// updateFab() +//// GdtHelper.logAction(ActionType.PAGE_VIEW, GdtHelper.CONTENT_TYPE, "QUESTION", GdtHelper.CONTENT_ID, mQuestionsId) +// +// setNavigationTitle(mQuestionsDetailEntity!!.community.name + " - 问题详情") +// MtaHelper.onEvent("详情页面", "问题详情", it.title) +// } +// } else if (detailResource.status == Status.ERROR) { +// try { +// hideFab() +// val e = detailResource.exception +// if (e != null && e.code() == 404 && e.response().errorBody()?.string()!!.isNotEmpty()) { +// Utils.toast(context, R.string.content_delete_toast) +// if (mIsCheckConcern) { +// showCancelConcernDialog() +// } +// } +// } catch (e1: IOException) { +// e1.printStackTrace() +// } +// } +// } +// +// mListViewModel.doRefreshList.observeNonNull(this) { +// if (it) { +// mAdapter?.notifyDataSetChanged() +// } +// } +// mListViewModel.moderatorsHideLiveData.observeNonNull(this) { +// EventBus.getDefault().post(EBDeleteDetail(mQuestionsId)) +// requireActivity().finish() +// } +// } +// +// override fun onViewCreated(view: View, savedInstanceState: Bundle?) { +// super.onViewCreated(view, savedInstanceState) +// (mListRv.itemAnimator as DefaultItemAnimator).supportsChangeAnimations = false +// mReuseNoConn?.setOnClickListener { +// // 重新设置重连点击 +// onRefresh() +// } +// +// mCachedView.viewTreeObserver.addOnScrollChangedListener { +// val topView = mLayoutManager.findViewByPosition(0) +// if (mQuestionsDetailEntity != null) { +// if (topView == null || -topView.top > 240) { +// setNavigationTitle(mQuestionsDetailEntity!!.title) +// } else { +// setNavigationTitle(mQuestionsDetailEntity!!.community.name + " - 问题详情") +// } +// } +// } +// +// mImageViewList = arrayListOf(view.findViewById(R.id.questionsdetail_item_pic1), view.findViewById(R.id.questionsdetail_item_pic2), view.findViewById(R.id.questionsdetail_item_pic3)) +// } +// +// override fun onDestroyView() { +// super.onDestroyView() +// trackViewed() +// } +// +// private fun trackViewed() { +// mQuestionsDetailEntity?.let { +// val elapsedTime = mElapsedHelper?.elapsedTime ?: 0 +// val combinedTitleAndId = StringUtils.combineTwoString(it.title, it.id) +// +// MtaHelper.onEventWithTime("问题阅读量_按社区", elapsedTime, it.community.name, combinedTitleAndId) +// MtaHelper.onEventWithTime("问题阅读量_按位置", elapsedTime, mPath, combinedTitleAndId) +// MtaHelper.onEventWithTime("问题阅读量_社区加位置", elapsedTime, it.community.name, mPath) +// +// val questions = Questions() +// questions.id = mQuestionsId ?: "" +// questions.title = it.title +// LogUtils.uploadQuestionReadTime(mEntrance, +// mElapsedHelper!!.elapsedTime, +// questions, +// it.community.id, +// it.community.name, +// mSpecialColumn) +// } +// } +// +// override fun onListClick(view: View?, position: Int, data: Any?) { +// var imgPosition = -1 +// val videoSize = if (!mQuestionsDetailEntity?.videos.isNullOrEmpty()) 1 else 0 +// when (view?.id) { +// R.id.footerview_item -> if (mAdapter!!.isNetworkError) { +// mListViewModel.load(LoadType.RETRY) +// } else if (mAdapter!!.isOver()) { +// if (lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) { +// startActivity(AnswerFoldActivity.getIntent(context, mQuestionsDetailEntity!!.id, "$mEntrance+(问题详情)")) +// } +// } +// R.id.questionsdetail_item_pic1 -> { +// imgPosition = 0 +// if (imgPosition == -1) imgPosition = 1 - videoSize +// if (imgPosition == -1) imgPosition = 2 - videoSize +// +// if (!mQuestionsDetailEntity?.videos.isNullOrEmpty()) { +// val videoEntity = mQuestionsDetailEntity?.videos?.get(0) +// if (videoEntity?.status == "pass") { +// DirectUtils.directToVideoDetail( +// requireContext(), +// videoEntity.id, +// VideoDetailContainerViewModel.Location.SINGLE_VIDEO.value, +// path = "问题详情") +// } else if (videoEntity?.status == "pending" || +// (!mQuestionsDetailEntity!!.me.isContentOwner +// && !mQuestionsDetailEntity!!.me.isModerator +// && videoEntity?.status == "fail")) { +// toast("视频正在审核中") +// } else if (videoEntity?.status == "fail") { +// toast("视频审核未通过") +// } +// } else if (mQuestionsDetailEntity!!.images.size > imgPosition) { +// val intent = ImageViewerActivity.getIntent(requireContext(), +// ArrayList(mQuestionsDetailEntity!!.images), +// imgPosition, +// mImageViewList, +// "$mEntrance+(问题详情-答案列表)") +// startActivity(intent) +// } +// } +// R.id.questionsdetail_item_pic2 -> { +// if (imgPosition == -1) imgPosition = 1 - videoSize +// if (imgPosition == -1) imgPosition = 2 - videoSize +// if (mQuestionsDetailEntity!!.images.size > imgPosition) { +// val intent = ImageViewerActivity.getIntent(requireContext(), +// ArrayList(mQuestionsDetailEntity!!.images), +// imgPosition, +// mImageViewList, +// "$mEntrance+(问题详情-答案列表)") +// startActivity(intent) +// } +// } +// R.id.questionsdetail_item_pic3 -> { +// if (imgPosition == -1) imgPosition = 2 - videoSize +// if (mQuestionsDetailEntity!!.images.size > imgPosition) { +// val intent = ImageViewerActivity.getIntent(requireContext(), +// ArrayList(mQuestionsDetailEntity!!.images), +// imgPosition, +// mImageViewList, +// "$mEntrance+(问题详情-答案列表)") +// startActivity(intent) +// } +// } +// R.id.questionsdetail_invite -> { +// startActivity(QuestionsInviteActivity.getIntent(context, mQuestionsDetailEntity, "$mEntrance+(问题详情)")) +// MtaHelper.onEvent("问题邀请", "邀请回答(问题详情)", mQuestionsDetailEntity?.community?.name + "+" + mQuestionsDetailEntity?.title, mQuestionsDetailEntity?.id) +// } +// R.id.questionsdetail_concern, R.id.questionsdetail_concern_container -> CheckLoginUtils.checkLogin(context, "问题详情-[关注问题]") { +// if (mQuestionsDetailEntity!!.me.isContentOwner) { +// startActivityForResult(QuestionEditActivity.getIntent(requireContext(), mQuestionsDetailEntity!!), QUESTIONS_EDIT_REQUEST) +// } else if (!mQuestionsDetailEntity!!.me.isQuestionFollowed) { +// ConcernUtils.postConcernQuestions(requireContext(), mQuestionsId!!, object : ConcernUtils.onConcernListener { +// override fun onSuccess() { +// mQuestionsDetailEntity!!.me.isQuestionFollowed = true +// mQuestionsDetailEntity!!.setFollowCount(mQuestionsDetailEntity!!.getFollowCount() + 1) +// mAdapter!!.notifyItemChanged(0) +// +//// GdtHelper.logAction(ActionType.ADD_TO_WISHLIST, +//// GdtHelper.CONTENT_TYPE, "QUESTION", +//// GdtHelper.CONTENT_ID, mQuestionsId) +// +// toast("已关注 ") +// } +// +// override fun onError() { +// +// } +// }) +// } else { +// cancelConcern() +// } +// } +// +// R.id.reuse_nodata_skip -> ifLogin("问题详情-[我来回答]") { +// checkStoragePermissionBeforeAction { +// startAnswerEditActivity() +// } +// } +// } +// } +// +// private fun hideFab() { +// mFabContainer.visibility = View.GONE +// } +// +// private fun updateFab() { +// mFabContainer.visibility = View.VISIBLE +// // "我的回答","我来回答","继续回答" +// if (!TextUtils.isEmpty(mQuestionsDetailEntity?.me?.myAnswerId)) { +// mFabTv.text = R.string.question_detail_myanswer.toResString() +// mFabIv.setImageResource(R.drawable.ic_question_detail_edit_my_answer) +// } else if (mQuestionsDetailEntity?.isExistDrafts == true) { +// mFabTv.text = R.string.question_detail_resume_answer.toResString() +// mFabIv.setImageResource(R.drawable.ic_question_detail_edit) +// } else { +// mFabTv.text = R.string.question_detail_answer.toResString() +// mFabIv.setImageResource(R.drawable.ic_question_detail_edit) +// } +// +// mFabContainer.setOnClickListener { +// checkStoragePermissionBeforeAction { +// ifLogin("问题详情-[我来回答]") { +// showRegulationTestDialogIfNeeded { +// if (mQuestionsDetailEntity != null && !TextUtils.isEmpty(mQuestionsDetailEntity?.me?.myAnswerId)) { +// val intent = AnswerDetailActivity.getIntent(context, mQuestionsDetailEntity?.me?.myAnswerId, mEntrance, "问题详情-答案列表") +// startActivityForResult(intent, QUESTIONS_DETAIL_ANSWER_REQUEST) +// } else { +// startAnswerEditActivity() +// } +// } +// } +// } +// } +// } +// +// private fun startAnswerEditActivity() { +// val question = Questions( +// id = mQuestionsId ?: "", +// title = questionsTitle, +// description = mQuestionsDetailEntity?.description ?: "", +// images = mQuestionsDetailEntity?.images as ArrayList? ?: ArrayList(), +// videos = mQuestionsDetailEntity?.videos ?: ArrayList(), +// answerCount = mQuestionsDetailEntity?.answersCount ?: 0) +// startActivityForResult(AnswerEditActivity.getIntent(requireContext(), question, mQuestionsDetailEntity!!.community.name), QUESTIONS_DETAIL_ANSWER_REQUEST) +// } +// +// override fun onMenuItemClick(menuItem: MenuItem) { +// mQuestionsDetailEntity?.let { +// when (menuItem.itemId) { +// R.id.menu_more -> showMoreItemDialog() +// R.id.menu_question_and_answer -> { +// HaloApp.remove(GAME_DETAIL_COME_IN) +// DirectUtils.directToCommunity(requireContext(), it.community) +// LogUtils.qaAccess("问题详情-进入问答", it.community) +// MtaHelper.onEvent("进入问答", "问题详情", it.community.name + "+" + StringUtils.combineTwoString(it.title, it.id)) +// } +// } +// } +// } +// +// private fun showMoreItemDialog() { +// if (lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) { +// mQuestionsDetailEntity?.let { questionEntity -> +// val entities = ArrayList() +// if (questionEntity.user.id != UserManager.getInstance().userId) { +// entities.add(MenuItemEntity("投诉", R.drawable.icon_gamedetail_copyright)) +// } +// if (questionEntity.me.isModerator) { +// entities.add(MenuItemEntity("编辑", R.drawable.icon_more_panel_edit)) +// } +// if (questionEntity.me.isModerator || questionEntity.user.id == UserManager.getInstance().userId) { +// entities.add(MenuItemEntity("删除", R.drawable.icon_more_panel_delete)) +// } +// +// MoreFunctionPanelDialog.showMoreDialog(requireActivity() as AppCompatActivity, entities, questionEntity.title +// ?: "", getShareEntity(questionEntity), questionEntity.status,tag ?: "") +// } +// } +// } +// +// private fun getShareEntity(questionEntity: QuestionsDetailEntity): NormalShareEntity { +// return NormalShareEntity( +// 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 { +// return { +// when (it?.text) { +// "投诉" -> { +// SuggestionActivity.startSuggestionActivity(context, SuggestType.normal, "report", +// "问题投诉(" + questionEntity.id + "):") +// } +// "编辑" -> { +// val intent = QuestionEditActivity.getManagerIntent(requireContext(), mQuestionsDetailEntity!!) +// startActivityForResult(intent, QUESTIONS_EDIT_REQUEST) +// } +// +// "删除" -> { +// DialogHelper.showDialog(requireContext(), "提示", "删除问题后,其中的所有回答都将被删除", "删除", "取消", { +// mListViewModel.moderatorsHideQuestion() +// }, extraConfig = DialogHelper.Config(centerTitle = true, centerContent = true)) +// } +// } +// } +// } +// +// 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) +// val actionNameTv = view.findViewById(R.id.actionNameTv) +// iconIv.setImageDrawable(ContextCompat.getDrawable(requireContext(), if (item.disableIcon > 0) item.disableIcon else item.normalIcon)) +// actionNameTv.setTextColor(ContextCompat.getColor(requireContext(), if (item.disableIcon > 0) R.color.text_subtitleDesc else R.color.text_title)) +// view.isEnabled = item.disableIcon == 0 +// actionNameTv.text = item.text +// if (index > 0) { +// val params = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT) +// params.topMargin = 1f.dip2px() +// view.layoutParams = params +// } +// return view +// } +// +// private fun showManagerPatchDialog() { +// if (context == null) return +// val patchTag = "修改标签" +// val patchQuestion = "修改问题" +// val hideQuestion = "隐藏问题" +// val historyVersion = "历史版本" +// val arrReportType = ArrayList() +// +// val (_, _, _, _, _, +// updateTagPermission, +// updateQuestionPermission, +// hideQuestionPermission, +// getModifiedVersionsPermission) = mQuestionsDetailEntity?.me?.moderatorPermissions!! +// if (updateTagPermission > Permissions.GUEST) { +// arrReportType.add(patchTag) +// } +// if (updateQuestionPermission > Permissions.GUEST) { +// arrReportType.add(patchQuestion) +// } +// if (hideQuestionPermission > Permissions.GUEST) { +// arrReportType.add(hideQuestion) +// } +// if (getModifiedVersionsPermission > Permissions.GUEST) { +// arrReportType.add(historyVersion) +// } +// +// val widthPixels = resources.displayMetrics.widthPixels +// val dialog = Dialog(requireContext()) +// val container = LinearLayout(context) +// container.orientation = LinearLayout.VERTICAL +// val pad = DisplayUtils.dip2px(requireContext(), 12f) +// container.setPadding(0, pad, 0, pad) +// container.setBackgroundColor(Color.WHITE) +// +// for (s in arrReportType) { +// val itemTv = TextView(context) +// itemTv.text = s +// itemTv.textSize = 17f +// itemTv.setTextColor(ContextCompat.getColor(requireContext(), R.color.title)) +// itemTv.setBackgroundResource(R.drawable.textview_white_style) +// itemTv.layoutParams = LinearLayout.LayoutParams(widthPixels * 9 / 10, +// LinearLayout.LayoutParams.WRAP_CONTENT) +// itemTv.setPadding(DisplayUtils.dip2px(requireContext(), 20f), pad, 0, pad) +// container.addView(itemTv) +// +// itemTv.setOnClickListener { +// when (s) { +// patchTag -> { +// val tagsFragment = TagsSelectFragment.getInstance(mQuestionsDetailEntity!!) +// val tagDialog = BaseDialogWrapperFragment.getInstance(tagsFragment, false) +// tagsFragment.setPatchTagsCallBack(this) +// tagDialog.show(childFragmentManager, TagsSelectFragment::class.java.simpleName) +// } +// patchQuestion -> { +// val intent = QuestionEditActivity.getManagerIntent(requireContext(), mQuestionsDetailEntity!!) +// startActivityForResult(intent, QUESTIONS_EDIT_REQUEST) +// } +// hideQuestion -> DialogHelper.showDialog(requireContext(), +// "隐藏问题", +// if (mQuestionsDetailEntity!!.me.moderatorPermissions.hideQuestion == Permissions.REPORTER) +// "你的操作将提交给小编审核,确定提交吗?" +// else +// "你的操作将立即生效,确定提交吗?(你的管理权限为:高级)", +// "确定", "取消", +// { mListViewModel.moderatorsHideQuestion() }, +// extraConfig = DialogHelper.Config(centerTitle = true, centerContent = true)) +// historyVersion -> { +// startActivityForResult( +// HistoryActivity.getIntent(requireContext(), mQuestionsDetailEntity?.id!!), +// QUESTIONS_MODERATOR_HISTORY_REQUEST) +// } +// } +// dialog.cancel() +// } +// } +// +// dialog.requestWindowFeature(Window.FEATURE_NO_TITLE) +// dialog.setContentView(container) +// dialog.show() +// } +// +// private fun postAnswerSuccess(answerId: String?) { +// if (mQuestionsDetailEntity != null && answerId != null) { +// mQuestionsDetailEntity?.me?.myAnswerId = answerId +// mListViewModel.load(LoadType.REFRESH) +// } +// } +// +// private fun postDraftsSuccess() { +// mQuestionsDetailEntity?.isExistDrafts = true +// mAdapter?.notifyItemChanged(0) +// updateFab() +// } +// +// private fun getUserAnswerDrafts() { +// RetrofitManager.getInstance().api +// .getUserAnswerDrafts(mQuestionsId, "", Utils.getTime(context)) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(object : Response() { +// override fun onResponse(draft: AnswerDraftEntity?) { +// super.onResponse(draft) +// if (draft != null) { +// mQuestionsDetailEntity?.isExistDrafts = true +// mAdapter?.notifyItemChanged(0) +// updateFab() +// } +// } +// }) +// } +// +// private fun cancelConcern() { +// ConcernUtils.deleteConcernQuestions(requireContext(), mQuestionsId!!, object : ConcernUtils.onConcernListener { +// override fun onSuccess() { +// toast("取消关注") +// if (mQuestionsDetailEntity == null) { +// val activity = activity +// if (activity != null) { +// activity.setResult(Activity.RESULT_OK) +// activity.finish() +// } +// } else { +// mQuestionsDetailEntity?.let { +// if (it.getFollowCount() > 0) { +// it.setFollowCount(it.getFollowCount() - 1) +// } +// it.me.isQuestionFollowed = false +// } +// mAdapter?.notifyItemChanged(0) +// } +// } +// +// override fun onError() { +// +// } +// }) +// } +// +// private fun showCancelConcernDialog() { +// DialogHelper.showDialog( +// requireContext(), +// "取消关注问题", +// "问题已被删除,是否取消关注?", +// " 取消关注", +// "暂不 ", +// { cancelConcern() }, +// { +// if (activity != null && activity?.isFinishing == false) { +// activity?.finish() +// } +// }, +// extraConfig = DialogHelper.Config(centerTitle = true, centerContent = true)) +// } +// +// // 登录事件 +// @Subscribe(threadMode = ThreadMode.MAIN) +// fun onEventMainThread(reuse: EBReuse) { +// if (reuse.type == PersonalFragment.LOGIN_TAG) { // 登入 +// onRefresh() +// } +// } +// +// override fun onPatchTagsSuccess() { +// mAdapter?.notifyDataSetChanged() +// } +// +// override fun onPermissionError() { +// mListViewModel.load(LoadType.REFRESH) +// } +// +// override fun onBackPressed(): Boolean { +// if (SyncDataBetweenPageHelper.setResultAndFinish(requireActivity(), mQuestionsDetailEntity)) { +// return true +// } +// return super.onBackPressed() +// } +// +// override fun provideSyncAdapter(): RecyclerView.Adapter<*>? { +// return mAdapter +// } +// +// override fun addSyncPageObserver(): Boolean { +// return true +// } +// +// companion object { +// const val QUESTIONS_DETAIL_ANSWER_REQUEST = 110 +// const val QUESTIONS_EDIT_REQUEST = 111 +// const val QUESTIONS_MODERATOR_HISTORY_REQUEST = 112 +// +// fun getInstance(questionsId: String): QuestionsDetailFragment { +// val fragment = QuestionsDetailFragment() +// val args = Bundle() +// args.putString(EntranceUtils.KEY_QUESTIONS_ID, questionsId) +// fragment.arguments = args +// return fragment +// } +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailItemViewHolder.java b/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailItemViewHolder.java index c2fa3ebc4b..ff73a0aa35 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailItemViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailItemViewHolder.java @@ -1,4 +1,4 @@ -package com.gh.gamecenter.qa.questions.detail; +//package com.gh.gamecenter.qa.questions.detail; import android.view.View; import android.widget.LinearLayout; @@ -17,57 +17,57 @@ import butterknife.BindView; * Created by khy on 7/12/17. */ -public class QuestionsDetailItemViewHolder extends BaseRecyclerViewHolder { - - @BindView(R.id.questionsdetail_item_tag) - public FlexboxLayout mTagRl; - @BindView(R.id.questionsdetail_item_title) - public TextView mTitle; - @BindView(R.id.questionsdetail_item_des) - public ExpandAndCloseTextView mDes; - @BindView(R.id.questionsdetail_item_pic1) - public SimpleDraweeView mPic1; - @BindView(R.id.questionsdetail_item_pic2) - public SimpleDraweeView mPic2; - @BindView(R.id.questionsdetail_item_pic3) - public SimpleDraweeView mPic3; - @BindView(R.id.questionsdetail_item_answercount) - public TextView mAnswercount; - @BindView(R.id.questionsdetail_item_picll) - public LinearLayout mImgLl; - @BindView(R.id.questionsdetail_concern_container) - View concernContainer; - @BindView(R.id.questionsdetail_invite) - View inviteBtn; - @BindView(R.id.questionsdetail_concern) - TextView concern; - @BindView(R.id.questionsdetail_concern_count) - TextView concernCount; - @BindView(R.id.questiondetail_item_pic3_mask) - public View mPic3Mask; - @BindView(R.id.questiondetail_item_pic3_desc) - public TextView mPic3Desc; - @BindView(R.id.questiondetail_related_question_container) - public View mRelatedQuestionContainer; - @BindView(R.id.questiondetail_related_question_title_tv) - public TextView mRelatedQuestionTitle; - @BindView(R.id.questiondetail_related_question_count_tv) - public TextView mRelatedQuestionAnswerCount; - @BindView(R.id.video_play) - public View mVideoPlay; - @BindView(R.id.video_status) - public TextView mVideoStatus; - @BindView(R.id.video_duration) - public TextView mVideoDuration; - - - public QuestionsDetailItemViewHolder(View itemView, OnListClickListener listClickListener) { - super(itemView, listClickListener); - mPic1.setOnClickListener(this); - mPic2.setOnClickListener(this); - mPic3.setOnClickListener(this); - concernContainer.setOnClickListener(this); - inviteBtn.setOnClickListener(this); - concern.setOnClickListener(this); - } -} +//public class QuestionsDetailItemViewHolder extends BaseRecyclerViewHolder { +// +// @BindView(R.id.questionsdetail_item_tag) +// public FlexboxLayout mTagRl; +// @BindView(R.id.questionsdetail_item_title) +// public TextView mTitle; +// @BindView(R.id.questionsdetail_item_des) +// public ExpandAndCloseTextView mDes; +// @BindView(R.id.questionsdetail_item_pic1) +// public SimpleDraweeView mPic1; +// @BindView(R.id.questionsdetail_item_pic2) +// public SimpleDraweeView mPic2; +// @BindView(R.id.questionsdetail_item_pic3) +// public SimpleDraweeView mPic3; +// @BindView(R.id.questionsdetail_item_answercount) +// public TextView mAnswercount; +// @BindView(R.id.questionsdetail_item_picll) +// public LinearLayout mImgLl; +// @BindView(R.id.questionsdetail_concern_container) +// View concernContainer; +// @BindView(R.id.questionsdetail_invite) +// View inviteBtn; +// @BindView(R.id.questionsdetail_concern) +// TextView concern; +// @BindView(R.id.questionsdetail_concern_count) +// TextView concernCount; +// @BindView(R.id.questiondetail_item_pic3_mask) +// public View mPic3Mask; +// @BindView(R.id.questiondetail_item_pic3_desc) +// public TextView mPic3Desc; +// @BindView(R.id.questiondetail_related_question_container) +// public View mRelatedQuestionContainer; +// @BindView(R.id.questiondetail_related_question_title_tv) +// public TextView mRelatedQuestionTitle; +// @BindView(R.id.questiondetail_related_question_count_tv) +// public TextView mRelatedQuestionAnswerCount; +// @BindView(R.id.video_play) +// public View mVideoPlay; +// @BindView(R.id.video_status) +// public TextView mVideoStatus; +// @BindView(R.id.video_duration) +// public TextView mVideoDuration; +// +// +// public QuestionsDetailItemViewHolder(View itemView, OnListClickListener listClickListener) { +// super(itemView, listClickListener); +// mPic1.setOnClickListener(this); +// mPic2.setOnClickListener(this); +// mPic3.setOnClickListener(this); +// concernContainer.setOnClickListener(this); +// inviteBtn.setOnClickListener(this); +// concern.setOnClickListener(this); +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailViewModel.kt index 876ff7d96c..5de2cafbd8 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailViewModel.kt @@ -1,193 +1,193 @@ -package com.gh.gamecenter.qa.questions.detail - -import android.annotation.SuppressLint -import android.app.Application -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.ViewModel -import androidx.lifecycle.ViewModelProvider -import com.gh.common.util.ErrorHelper -import com.gh.common.util.UrlFilterUtils -import com.gh.gamecenter.R -import com.gh.gamecenter.baselist.ListHeadViewModel -import com.gh.gamecenter.baselist.LoadStatus -import com.gh.gamecenter.baselist.LoadType -import com.gh.gamecenter.entity.MeEntity -import com.gh.gamecenter.entity.Permissions -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.mvvm.Resource -import com.gh.gamecenter.qa.entity.AnswerEntity -import com.gh.gamecenter.qa.entity.QuestionsDetailEntity -import com.gh.gamecenter.retrofit.BiResponse -import com.gh.gamecenter.retrofit.Response -import com.gh.gamecenter.retrofit.RetrofitManager -import com.halo.assistant.HaloApp -import com.lightgame.utils.Utils -import io.reactivex.Observable -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.schedulers.Schedulers -import okhttp3.MediaType -import okhttp3.RequestBody -import okhttp3.ResponseBody -import org.json.JSONException -import org.json.JSONObject -import retrofit2.HttpException - -class QuestionsDetailViewModel(application: Application, val questionId: String) - : ListHeadViewModel(application) { - - val doRefreshList = MutableLiveData() - val moderatorsHideLiveData = MutableLiveData() - - override fun provideHeadDataObservable(): Observable { - return mApi.getQuestionsById(questionId) - } - - override fun provideDataObservable(page: Int): Observable> { - return mApi.getQuestionsAnswer(questionId, UrlFilterUtils.getFilterQuery("fold", "false"), page) - } - - override fun mergeResultLiveData() { - mResultLiveData.addSource(mListLiveData) { - val itemDataList = arrayListOf() - for (answer in it) { - itemDataList.add(QuestionDetailItemData(answer = answer)) - } - // 当回答列表为空时尝试请求 - if (itemDataList.size == 0) { - loadRecommendedUsersAndSimilarAnswers() - } else { - mResultLiveData.postValue(itemDataList) - } - } - } - - @SuppressLint("CheckResult") - fun loadRecommendedUsersAndSimilarAnswers() { - val itemDataList = arrayListOf() - mApi.getQuestionInvitations(questionId) - .subscribeOn(Schedulers.io()) - .flatMap { response -> - mHeadLiveData.value?.data?.let { question -> - itemDataList.add(QuestionDetailItemData(recommendedUserToInvite = response)) - } - return@flatMap mApi.getSimilarAnswers(questionId) - } - .subscribe(object : BiResponse>() { - override fun onSuccess(data: List) { - if (data.isNotEmpty()) { - itemDataList.add(QuestionDetailItemData(showSimilarAnswerHint = true)) - for (answer in data) { - itemDataList.add(QuestionDetailItemData(similarAnswer = answer)) - } - } - - mResultLiveData.postValue(itemDataList) - } - - override fun onFailure(exception: Exception) { - // 请求失败时回落到原始的没有加载推荐的我来回答界面 - mResultLiveData.postValue(arrayListOf()) - } - }) - } - - @SuppressLint("CheckResult") - fun doSmartInvitation() { - mApi.postSmartInvitations(questionId) - .subscribeOn(Schedulers.io()) - .subscribe(object : BiResponse() { - override fun onSuccess(data: ResponseBody) { - mHeadLiveData.value?.data?.let { question -> - question.me.isSmartInvited = true - mHeadLiveData.postValue(Resource.success(question)) - } - doRefreshList.postValue(true) - - Utils.toast(getApplication(), "系统将自动邀请活跃玩家为您解答问题") - } - }) - } - - fun invite(userId: String) { - val jsonObject = JSONObject() - try { - jsonObject.put("user_id", userId) - } catch (e: JSONException) { - e.printStackTrace() - } - - val body = RequestBody.create(MediaType.parse("application/json"), jsonObject.toString()) - RetrofitManager.getInstance().api - .postInvite(body, questionId) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(object : Response() { - override fun onResponse(response: ResponseBody?) { - Utils.toast(getApplication(), "邀请成功") - mResultLiveData.value?.let { - for (item in it) { - item.recommendedUserToInvite?.let { userList -> - for (user in userList) { - if (userId == user.id) { - if (user.me == null) { - user.me = MeEntity() - } - user.me?.isUserInvite = true - } - } - } - } - mResultLiveData.postValue(it) - } - doRefreshList.postValue(true) - } - - override fun onFailure(e: HttpException?) { - try { - val string = e?.response()?.errorBody()?.string() - ErrorHelper.handleError(getApplication(), string, false) - } catch (e1: Exception) { - e1.printStackTrace() - } - } - }) - } - - fun moderatorsHideQuestion() { - val me = mHeadLiveData.value?.data?.me ?: return - mApi.moderatorsHideQuestion(UserManager.getInstance().userId, questionId) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(object : Response() { - override fun onResponse(response: ResponseBody?) { - if (me.moderatorPermissions.hideQuestion == Permissions.REPORTER) { - Utils.toast(getApplication(), "提交成功") - } else { - Utils.toast(getApplication(), "操作成功") - moderatorsHideLiveData.postValue(true) - mLoadStatusLiveData.setValue(LoadStatus.INIT_EMPTY) - } - } - - override fun onFailure(e: HttpException?) { - if (e != null && e.code() == 403) { - val string = e.response().errorBody()?.string() - val errorJson = JSONObject(string) - val errorCode = errorJson.getInt("code") - if (errorCode == 403059) { - Utils.toast(getApplication(), "权限错误,请刷新后重试") - load(LoadType.REFRESH) - return - } - } - Utils.toast(getApplication(), R.string.post_failure_hint) - } - }) - } - - class Factory(private val questionId: String) : ViewModelProvider.NewInstanceFactory() { - override fun create(modelClass: Class): T { - return QuestionsDetailViewModel(HaloApp.getInstance().application, questionId) as T - } - } -} \ No newline at end of file +//package com.gh.gamecenter.qa.questions.detail +// +//import android.annotation.SuppressLint +//import android.app.Application +//import androidx.lifecycle.MutableLiveData +//import androidx.lifecycle.ViewModel +//import androidx.lifecycle.ViewModelProvider +//import com.gh.common.util.ErrorHelper +//import com.gh.common.util.UrlFilterUtils +//import com.gh.gamecenter.R +//import com.gh.gamecenter.baselist.ListHeadViewModel +//import com.gh.gamecenter.baselist.LoadStatus +//import com.gh.gamecenter.baselist.LoadType +//import com.gh.gamecenter.entity.MeEntity +//import com.gh.gamecenter.entity.Permissions +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.mvvm.Resource +//import com.gh.gamecenter.qa.entity.AnswerEntity +//import com.gh.gamecenter.qa.entity.QuestionsDetailEntity +//import com.gh.gamecenter.retrofit.BiResponse +//import com.gh.gamecenter.retrofit.Response +//import com.gh.gamecenter.retrofit.RetrofitManager +//import com.halo.assistant.HaloApp +//import com.lightgame.utils.Utils +//import io.reactivex.Observable +//import io.reactivex.android.schedulers.AndroidSchedulers +//import io.reactivex.schedulers.Schedulers +//import okhttp3.MediaType +//import okhttp3.RequestBody +//import okhttp3.ResponseBody +//import org.json.JSONException +//import org.json.JSONObject +//import retrofit2.HttpException +// +//class QuestionsDetailViewModel(application: Application, val questionId: String) +// : ListHeadViewModel(application) { +// +// val doRefreshList = MutableLiveData() +// val moderatorsHideLiveData = MutableLiveData() +// +// override fun provideHeadDataObservable(): Observable { +// return mApi.getQuestionsById(questionId) +// } +// +// override fun provideDataObservable(page: Int): Observable> { +// return mApi.getQuestionsAnswer(questionId, UrlFilterUtils.getFilterQuery("fold", "false"), page) +// } +// +// override fun mergeResultLiveData() { +// mResultLiveData.addSource(mListLiveData) { +// val itemDataList = arrayListOf() +// for (answer in it) { +// itemDataList.add(QuestionDetailItemData(answer = answer)) +// } +// // 当回答列表为空时尝试请求 +// if (itemDataList.size == 0) { +// loadRecommendedUsersAndSimilarAnswers() +// } else { +// mResultLiveData.postValue(itemDataList) +// } +// } +// } +// +// @SuppressLint("CheckResult") +// fun loadRecommendedUsersAndSimilarAnswers() { +// val itemDataList = arrayListOf() +// mApi.getQuestionInvitations(questionId) +// .subscribeOn(Schedulers.io()) +// .flatMap { response -> +// mHeadLiveData.value?.data?.let { question -> +// itemDataList.add(QuestionDetailItemData(recommendedUserToInvite = response)) +// } +// return@flatMap mApi.getSimilarAnswers(questionId) +// } +// .subscribe(object : BiResponse>() { +// override fun onSuccess(data: List) { +// if (data.isNotEmpty()) { +// itemDataList.add(QuestionDetailItemData(showSimilarAnswerHint = true)) +// for (answer in data) { +// itemDataList.add(QuestionDetailItemData(similarAnswer = answer)) +// } +// } +// +// mResultLiveData.postValue(itemDataList) +// } +// +// override fun onFailure(exception: Exception) { +// // 请求失败时回落到原始的没有加载推荐的我来回答界面 +// mResultLiveData.postValue(arrayListOf()) +// } +// }) +// } +// +// @SuppressLint("CheckResult") +// fun doSmartInvitation() { +// mApi.postSmartInvitations(questionId) +// .subscribeOn(Schedulers.io()) +// .subscribe(object : BiResponse() { +// override fun onSuccess(data: ResponseBody) { +// mHeadLiveData.value?.data?.let { question -> +// question.me.isSmartInvited = true +// mHeadLiveData.postValue(Resource.success(question)) +// } +// doRefreshList.postValue(true) +// +// Utils.toast(getApplication(), "系统将自动邀请活跃玩家为您解答问题") +// } +// }) +// } +// +// fun invite(userId: String) { +// val jsonObject = JSONObject() +// try { +// jsonObject.put("user_id", userId) +// } catch (e: JSONException) { +// e.printStackTrace() +// } +// +// val body = RequestBody.create(MediaType.parse("application/json"), jsonObject.toString()) +// RetrofitManager.getInstance().api +// .postInvite(body, questionId) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(object : Response() { +// override fun onResponse(response: ResponseBody?) { +// Utils.toast(getApplication(), "邀请成功") +// mResultLiveData.value?.let { +// for (item in it) { +// item.recommendedUserToInvite?.let { userList -> +// for (user in userList) { +// if (userId == user.id) { +// if (user.me == null) { +// user.me = MeEntity() +// } +// user.me?.isUserInvite = true +// } +// } +// } +// } +// mResultLiveData.postValue(it) +// } +// doRefreshList.postValue(true) +// } +// +// override fun onFailure(e: HttpException?) { +// try { +// val string = e?.response()?.errorBody()?.string() +// ErrorHelper.handleError(getApplication(), string, false) +// } catch (e1: Exception) { +// e1.printStackTrace() +// } +// } +// }) +// } +// +// fun moderatorsHideQuestion() { +// val me = mHeadLiveData.value?.data?.me ?: return +// mApi.moderatorsHideQuestion(UserManager.getInstance().userId, questionId) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(object : Response() { +// override fun onResponse(response: ResponseBody?) { +// if (me.moderatorPermissions.hideQuestion == Permissions.REPORTER) { +// Utils.toast(getApplication(), "提交成功") +// } else { +// Utils.toast(getApplication(), "操作成功") +// moderatorsHideLiveData.postValue(true) +// mLoadStatusLiveData.setValue(LoadStatus.INIT_EMPTY) +// } +// } +// +// override fun onFailure(e: HttpException?) { +// if (e != null && e.code() == 403) { +// val string = e.response().errorBody()?.string() +// val errorJson = JSONObject(string) +// val errorCode = errorJson.getInt("code") +// if (errorCode == 403059) { +// Utils.toast(getApplication(), "权限错误,请刷新后重试") +// load(LoadType.REFRESH) +// return +// } +// } +// Utils.toast(getApplication(), R.string.post_failure_hint) +// } +// }) +// } +// +// class Factory(private val questionId: String) : ViewModelProvider.NewInstanceFactory() { +// override fun create(modelClass: Class): T { +// return QuestionsDetailViewModel(HaloApp.getInstance().application, questionId) as T +// } +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/questions/edit/tip/QuestionTitleTipAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/questions/edit/tip/QuestionTitleTipAdapter.kt index d84b020c52..826341b1a8 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/questions/edit/tip/QuestionTitleTipAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/questions/edit/tip/QuestionTitleTipAdapter.kt @@ -1,7 +1,6 @@ package com.gh.gamecenter.qa.questions.edit.tip import android.content.Context -import androidx.databinding.DataBindingUtil import android.text.Html import android.text.TextUtils import android.view.LayoutInflater @@ -11,15 +10,14 @@ import android.widget.AutoCompleteTextView import android.widget.BaseAdapter import android.widget.Filter import android.widget.Filterable +import androidx.databinding.DataBindingUtil import com.gh.common.util.DisplayUtils import com.gh.gamecenter.R import com.gh.gamecenter.databinding.QuestionEditTitleSearchItemBinding import com.gh.gamecenter.qa.entity.QuestionsIndexEntity -import com.gh.gamecenter.qa.questions.detail.QuestionsDetailActivity import com.gh.gamecenter.qa.questions.newdetail.NewQuestionDetailActivity import com.gh.gamecenter.retrofit.Response import com.gh.gamecenter.retrofit.RetrofitManager -import java.util.* /** 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 b364e60168..73056eb431 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 @@ -35,7 +35,6 @@ import com.gh.gamecenter.qa.comment.base.BaseCommentFragment import com.gh.gamecenter.qa.comment.base.BaseCommentViewModel import com.gh.gamecenter.qa.dialog.MoreFunctionPanelDialog import com.gh.gamecenter.qa.entity.QuestionsDetailEntity -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 @@ -90,7 +89,7 @@ class NewQuestionDetailFragment : override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (resultCode != Activity.RESULT_OK || data == null) return - if (requestCode == QuestionsDetailFragment.QUESTIONS_EDIT_REQUEST) { + if (requestCode == QUESTIONS_EDIT_REQUEST) { data.getParcelableExtra(QuestionsDetailEntity::class.java.simpleName) ?.let { mViewModel.questionDetail = it @@ -581,7 +580,7 @@ class NewQuestionDetailFragment : } startActivityForResult( intent, - QuestionsDetailFragment.QUESTIONS_EDIT_REQUEST + QUESTIONS_EDIT_REQUEST ) NewLogUtils.logSharePanelClick( "click_modification_question", mViewModel.questionDetail?.user?.id @@ -656,4 +655,8 @@ class NewQuestionDetailFragment : super.onLoadEmpty() mBinding.root.setBackgroundColor(Color.TRANSPARENT) } + + companion object { + const val QUESTIONS_EDIT_REQUEST = 111 + } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/recommends/AskQuestionsRecommendsAdapter.java b/app/src/main/java/com/gh/gamecenter/qa/recommends/AskQuestionsRecommendsAdapter.java index a7d9aa86a2..b55a419b47 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/recommends/AskQuestionsRecommendsAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/qa/recommends/AskQuestionsRecommendsAdapter.java @@ -1,201 +1,201 @@ -package com.gh.gamecenter.qa.recommends; - -import android.app.Activity; -import android.content.Context; - -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import kotlin.Pair; - -import android.view.View; -import android.view.ViewGroup; - -import com.gh.base.OnListClickListener; -import com.gh.common.constant.ItemViewType; -import com.gh.common.syncpage.ISyncAdapterHandler; -import com.gh.common.util.DialogHelper; -import com.gh.common.util.MtaHelper; -import com.gh.gamecenter.R; -import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; -import com.gh.gamecenter.adapter.viewholder.ReuseViewHolder; -import com.gh.gamecenter.baselist.ListAdapter; -import com.gh.gamecenter.databinding.AskRecommendsItemConcernBinding; -import com.gh.gamecenter.databinding.CommunityAnswerItemBinding; -import com.gh.gamecenter.manager.UserManager; -import com.gh.gamecenter.qa.answer.CommunityAnswerItemViewHolder; -import com.gh.gamecenter.qa.answer.detail.AnswerDetailActivity; -import com.gh.gamecenter.qa.article.detail.ArticleDetailActivity; -import com.gh.gamecenter.qa.entity.AnswerEntity; -import com.gh.gamecenter.qa.entity.Questions; -import com.gh.gamecenter.qa.questions.newdetail.NewQuestionDetailActivity; - -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.List; - -/** - * Created by khy on 2/12/17. - */ - -public class AskQuestionsRecommendsAdapter extends ListAdapter implements ISyncAdapterHandler { - - private OnListClickListener mListClickListener; - private AskQuestionsRecommendsViewModel mListViewModel; - - public AskQuestionsRecommendsAdapter(Context context, - AskQuestionsRecommendsViewModel listViewModel, - OnListClickListener listClickListener) { - super(context); - mListViewModel = listViewModel; - mListClickListener = listClickListener; - } - - @Override - protected void setListData(List updateData) { - mEntityList = new ArrayList<>(updateData); - notifyDataSetChanged(); - } - - @Override - protected boolean areContentsTheSame(RecommendItemData oldItem, RecommendItemData newItem) { - String oldId = oldItem.getAnswer() != null ? oldItem.getAnswer().getId() : ""; - String newId = newItem.getAnswer() != null ? newItem.getAnswer().getId() : ""; - return oldId != null && oldId.equals(newId); - } - - @Override - public int getItemViewType(int position) { - if (position == getItemCount() - 1) return ItemViewType.ITEM_FOOTER; - RecommendItemData itemData = mEntityList.get(position); - if (itemData.getRefresh() != null) return ItemViewType.ASK_REFRESH; - if (itemData.getFollowList() != null) return ItemViewType.ASK_CONCERN; - return ItemViewType.ITEM_BODY; - } - - @Override - public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View view; - switch (viewType) { - case ItemViewType.ITEM_FOOTER: - view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false); - return new FooterViewHolder(view, mListClickListener); - case ItemViewType.ASK_REFRESH: - view = mLayoutInflater.inflate(R.layout.ask_recommends_item_refresh, parent, false); - return new ReuseViewHolder(view, mListClickListener); - case ItemViewType.ASK_CONCERN: - view = mLayoutInflater.inflate(R.layout.ask_recommends_item_concern, parent, false); - return new RecommendConcernItemViewHolder(AskRecommendsItemConcernBinding.bind(view)); - default: - view = mLayoutInflater.inflate(R.layout.community_answer_item, parent, false); - return new CommunityAnswerItemViewHolder(CommunityAnswerItemBinding.bind(view)); - } - } - - @Override - public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { - switch (getItemViewType(position)) { - case ItemViewType.ITEM_BODY: - AnswerEntity answer = mEntityList.get(position).getAnswer(); - if ("community_article".equals(answer.getType())) { - Questions questions = new Questions(); - questions.setTitle(answer.getArticleTitle()); - answer.setQuestions(questions); - } - - CommunityAnswerItemViewHolder answerViewHolder = (CommunityAnswerItemViewHolder) holder; - answerViewHolder.bindAnswerItem(answer, "", AskQuestionsRecommendsFragment.QUESTION_RECOMMEND_PATH); - CommunityAnswerItemBinding binding = answerViewHolder.getBinding(); - binding.title.setOnClickListener(v -> { - if ("community_article".equals(answer.getType())) { - if (mContext instanceof Activity) { - ((Activity) mContext).startActivityForResult(ArticleDetailActivity.getRecommendsIntent(mContext, - UserManager.getInstance().getCommunity(), answer.getId(), "", - AskQuestionsRecommendsFragment.QUESTION_RECOMMEND_PATH), - AskQuestionsRecommendsFragment.RECOMMENDS_REQUEST_CODE); - } - - } else { - Questions questions = answer.getQuestions(); - mContext.startActivity(NewQuestionDetailActivity.getIntent(mContext, - questions.getId(), "", - AskQuestionsRecommendsFragment.QUESTION_RECOMMEND_PATH)); - } - }); - - binding.getRoot().setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if ("community_article".equals(answer.getType())) { - if (mContext instanceof Activity) { - ((Activity) mContext).startActivityForResult(ArticleDetailActivity.getRecommendsIntent(mContext, - UserManager.getInstance().getCommunity(), answer.getId(), "", - AskQuestionsRecommendsFragment.QUESTION_RECOMMEND_PATH), - AskQuestionsRecommendsFragment.RECOMMENDS_REQUEST_CODE); - - } - } else { - ((Activity) mContext).startActivityForResult(AnswerDetailActivity.getRecommendsIntent(mContext, - answer.getId(), "", - AskQuestionsRecommendsFragment.QUESTION_RECOMMEND_PATH), - AskQuestionsRecommendsFragment.RECOMMENDS_REQUEST_CODE); - } - } - }); - break; - case ItemViewType.ITEM_FOOTER: - FooterViewHolder footerViewHolder = (FooterViewHolder) holder; - footerViewHolder.initItemPadding(); - footerViewHolder.initFooterViewHolder(mIsLoading, mIsNetworkError, mIsOver); - break; - case ItemViewType.ASK_CONCERN: - RecommendConcernItemViewHolder concernViewHolder = (RecommendConcernItemViewHolder) holder; - AskRecommendsItemConcernBinding concernBind = concernViewHolder.getBinding(); - concernBind.concernList.setLayoutManager(new GridLayoutManager(mContext, 4)); - RecyclerView.Adapter concernAdapter = concernBind.concernList.getAdapter(); - if (concernAdapter == null) { - concernAdapter = new RecommendConcernAdapter(mContext, mListViewModel); - concernBind.concernList.setAdapter(concernAdapter); - - } - if (concernAdapter instanceof RecommendConcernAdapter) { - ((RecommendConcernAdapter) concernAdapter).updateData(mEntityList.get(position).getFollowList()); - } - - concernBind.concernDelete.setOnClickListener(v -> { - MtaHelper.onEvent("问答页面", UserManager.getInstance().getCommunity().getName(), "推荐关注-关闭"); - - RecyclerView.Adapter adapter = concernBind.concernList.getAdapter(); - if (adapter instanceof RecommendConcernAdapter) { - if (((RecommendConcernAdapter) adapter).isFollowed()) { - mListViewModel.deleteFollowList(); - return; - } - } - DialogHelper.showCenterDialog(mContext, - "放弃关注", - "你还没关注用户,确定关闭推荐吗?", - "确定", "再看看", () -> mListViewModel.deleteFollowList(), () -> {}); - }); - break; - } - } - - @Override - public int getItemCount() { - return (mEntityList.size() > 0 || mIsOver) ? mEntityList.size() + ListAdapter.FOOTER_ITEM_COUNT : 0; - } - - public boolean isOver() { - return mIsOver; - } - - @Nullable - @Override - public Pair getSyncData(int position) { - if (position >= mEntityList.size()) return null; - AnswerEntity entity = mEntityList.get(position).getAnswer(); - if (entity != null) return new Pair(entity.getId(), entity); - return null; - } -} +//package com.gh.gamecenter.qa.recommends; +// +//import android.app.Activity; +//import android.content.Context; +// +//import androidx.recyclerview.widget.GridLayoutManager; +//import androidx.recyclerview.widget.RecyclerView; +//import kotlin.Pair; +// +//import android.view.View; +//import android.view.ViewGroup; +// +//import com.gh.base.OnListClickListener; +//import com.gh.common.constant.ItemViewType; +//import com.gh.common.syncpage.ISyncAdapterHandler; +//import com.gh.common.util.DialogHelper; +//import com.gh.common.util.MtaHelper; +//import com.gh.gamecenter.R; +//import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; +//import com.gh.gamecenter.adapter.viewholder.ReuseViewHolder; +//import com.gh.gamecenter.baselist.ListAdapter; +//import com.gh.gamecenter.databinding.AskRecommendsItemConcernBinding; +//import com.gh.gamecenter.databinding.CommunityAnswerItemBinding; +//import com.gh.gamecenter.manager.UserManager; +//import com.gh.gamecenter.qa.answer.CommunityAnswerItemViewHolder; +//import com.gh.gamecenter.qa.answer.detail.AnswerDetailActivity; +//import com.gh.gamecenter.qa.article.detail.ArticleDetailActivity; +//import com.gh.gamecenter.qa.entity.AnswerEntity; +//import com.gh.gamecenter.qa.entity.Questions; +//import com.gh.gamecenter.qa.questions.newdetail.NewQuestionDetailActivity; +// +//import org.jetbrains.annotations.Nullable; +// +//import java.util.ArrayList; +//import java.util.List; +// +///** +// * Created by khy on 2/12/17. +// */ +// +//public class AskQuestionsRecommendsAdapter extends ListAdapter implements ISyncAdapterHandler { +// +// private OnListClickListener mListClickListener; +// private AskQuestionsRecommendsViewModel mListViewModel; +// +// public AskQuestionsRecommendsAdapter(Context context, +// AskQuestionsRecommendsViewModel listViewModel, +// OnListClickListener listClickListener) { +// super(context); +// mListViewModel = listViewModel; +// mListClickListener = listClickListener; +// } +// +// @Override +// protected void setListData(List updateData) { +// mEntityList = new ArrayList<>(updateData); +// notifyDataSetChanged(); +// } +// +// @Override +// protected boolean areContentsTheSame(RecommendItemData oldItem, RecommendItemData newItem) { +// String oldId = oldItem.getAnswer() != null ? oldItem.getAnswer().getId() : ""; +// String newId = newItem.getAnswer() != null ? newItem.getAnswer().getId() : ""; +// return oldId != null && oldId.equals(newId); +// } +// +// @Override +// public int getItemViewType(int position) { +// if (position == getItemCount() - 1) return ItemViewType.ITEM_FOOTER; +// RecommendItemData itemData = mEntityList.get(position); +// if (itemData.getRefresh() != null) return ItemViewType.ASK_REFRESH; +// if (itemData.getFollowList() != null) return ItemViewType.ASK_CONCERN; +// return ItemViewType.ITEM_BODY; +// } +// +// @Override +// public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { +// View view; +// switch (viewType) { +// case ItemViewType.ITEM_FOOTER: +// view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false); +// return new FooterViewHolder(view, mListClickListener); +// case ItemViewType.ASK_REFRESH: +// view = mLayoutInflater.inflate(R.layout.ask_recommends_item_refresh, parent, false); +// return new ReuseViewHolder(view, mListClickListener); +// case ItemViewType.ASK_CONCERN: +// view = mLayoutInflater.inflate(R.layout.ask_recommends_item_concern, parent, false); +// return new RecommendConcernItemViewHolder(AskRecommendsItemConcernBinding.bind(view)); +// default: +// view = mLayoutInflater.inflate(R.layout.community_answer_item, parent, false); +// return new CommunityAnswerItemViewHolder(CommunityAnswerItemBinding.bind(view)); +// } +// } +// +// @Override +// public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { +// switch (getItemViewType(position)) { +// case ItemViewType.ITEM_BODY: +// AnswerEntity answer = mEntityList.get(position).getAnswer(); +// if ("community_article".equals(answer.getType())) { +// Questions questions = new Questions(); +// questions.setTitle(answer.getArticleTitle()); +// answer.setQuestions(questions); +// } +// +// CommunityAnswerItemViewHolder answerViewHolder = (CommunityAnswerItemViewHolder) holder; +// answerViewHolder.bindAnswerItem(answer, "", AskQuestionsRecommendsFragment.QUESTION_RECOMMEND_PATH); +// CommunityAnswerItemBinding binding = answerViewHolder.getBinding(); +// binding.title.setOnClickListener(v -> { +// if ("community_article".equals(answer.getType())) { +// if (mContext instanceof Activity) { +// ((Activity) mContext).startActivityForResult(ArticleDetailActivity.getRecommendsIntent(mContext, +// UserManager.getInstance().getCommunity(), answer.getId(), "", +// AskQuestionsRecommendsFragment.QUESTION_RECOMMEND_PATH), +// AskQuestionsRecommendsFragment.RECOMMENDS_REQUEST_CODE); +// } +// +// } else { +// Questions questions = answer.getQuestions(); +// mContext.startActivity(NewQuestionDetailActivity.getIntent(mContext, +// questions.getId(), "", +// AskQuestionsRecommendsFragment.QUESTION_RECOMMEND_PATH)); +// } +// }); +// +// binding.getRoot().setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// if ("community_article".equals(answer.getType())) { +// if (mContext instanceof Activity) { +// ((Activity) mContext).startActivityForResult(ArticleDetailActivity.getRecommendsIntent(mContext, +// UserManager.getInstance().getCommunity(), answer.getId(), "", +// AskQuestionsRecommendsFragment.QUESTION_RECOMMEND_PATH), +// AskQuestionsRecommendsFragment.RECOMMENDS_REQUEST_CODE); +// +// } +// } else { +// ((Activity) mContext).startActivityForResult(AnswerDetailActivity.getRecommendsIntent(mContext, +// answer.getId(), "", +// AskQuestionsRecommendsFragment.QUESTION_RECOMMEND_PATH), +// AskQuestionsRecommendsFragment.RECOMMENDS_REQUEST_CODE); +// } +// } +// }); +// break; +// case ItemViewType.ITEM_FOOTER: +// FooterViewHolder footerViewHolder = (FooterViewHolder) holder; +// footerViewHolder.initItemPadding(); +// footerViewHolder.initFooterViewHolder(mIsLoading, mIsNetworkError, mIsOver); +// break; +// case ItemViewType.ASK_CONCERN: +// RecommendConcernItemViewHolder concernViewHolder = (RecommendConcernItemViewHolder) holder; +// AskRecommendsItemConcernBinding concernBind = concernViewHolder.getBinding(); +// concernBind.concernList.setLayoutManager(new GridLayoutManager(mContext, 4)); +// RecyclerView.Adapter concernAdapter = concernBind.concernList.getAdapter(); +// if (concernAdapter == null) { +// concernAdapter = new RecommendConcernAdapter(mContext, mListViewModel); +// concernBind.concernList.setAdapter(concernAdapter); +// +// } +// if (concernAdapter instanceof RecommendConcernAdapter) { +// ((RecommendConcernAdapter) concernAdapter).updateData(mEntityList.get(position).getFollowList()); +// } +// +// concernBind.concernDelete.setOnClickListener(v -> { +// MtaHelper.onEvent("问答页面", UserManager.getInstance().getCommunity().getName(), "推荐关注-关闭"); +// +// RecyclerView.Adapter adapter = concernBind.concernList.getAdapter(); +// if (adapter instanceof RecommendConcernAdapter) { +// if (((RecommendConcernAdapter) adapter).isFollowed()) { +// mListViewModel.deleteFollowList(); +// return; +// } +// } +// DialogHelper.showCenterDialog(mContext, +// "放弃关注", +// "你还没关注用户,确定关闭推荐吗?", +// "确定", "再看看", () -> mListViewModel.deleteFollowList(), () -> {}); +// }); +// break; +// } +// } +// +// @Override +// public int getItemCount() { +// return (mEntityList.size() > 0 || mIsOver) ? mEntityList.size() + ListAdapter.FOOTER_ITEM_COUNT : 0; +// } +// +// public boolean isOver() { +// return mIsOver; +// } +// +// @Nullable +// @Override +// public Pair getSyncData(int position) { +// if (position >= mEntityList.size()) return null; +// AnswerEntity entity = mEntityList.get(position).getAnswer(); +// if (entity != null) return new Pair(entity.getId(), entity); +// return null; +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/recommends/AskQuestionsRecommendsFragment.java b/app/src/main/java/com/gh/gamecenter/qa/recommends/AskQuestionsRecommendsFragment.java index 0235709149..0c02c7204c 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/recommends/AskQuestionsRecommendsFragment.java +++ b/app/src/main/java/com/gh/gamecenter/qa/recommends/AskQuestionsRecommendsFragment.java @@ -1,304 +1,306 @@ -package com.gh.gamecenter.qa.recommends; - -import android.app.Activity; -import android.content.Intent; -import android.content.SharedPreferences; -import android.os.Bundle; -import android.preference.PreferenceManager; -import android.text.TextUtils; -import android.view.View; - -import com.gh.common.util.CheckLoginUtils; -import com.gh.common.util.EntranceUtils; -import com.gh.common.util.LogUtils; -import com.gh.common.view.DumbRefreshLayout; -import com.gh.common.view.SwipeRefreshHeader; -import com.gh.common.view.VerticalItemDecoration; -import com.gh.gamecenter.R; -import com.gh.gamecenter.baselist.ListFragment; -import com.gh.gamecenter.baselist.LoadStatus; -import com.gh.gamecenter.baselist.LoadType; -import com.gh.gamecenter.eventbus.EBReuse; -import com.gh.gamecenter.eventbus.EBTypeChange; -import com.gh.gamecenter.eventbus.EBUserFollow; -import com.gh.gamecenter.fragment.MainWrapperFragment; -import com.gh.gamecenter.manager.UserManager; -import com.gh.gamecenter.qa.BbsType; -import com.gh.gamecenter.qa.CommunityFragment; -import com.gh.gamecenter.qa.entity.AnswerEntity; -import com.gh.gamecenter.qa.questions.edit.QuestionEditActivity; - -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.RecyclerView; - -import butterknife.BindView; -import butterknife.OnClick; - -import static com.gh.gamecenter.fragment.MainWrapperFragment.INDEX_BBS; -import static com.gh.gamecenter.personal.PersonalFragment.LOGIN_TAG; -import static com.gh.gamecenter.personal.PersonalFragment.LOGOUT_TAG; -import static com.gh.gamecenter.qa.CommunityFragment.COMMUNITIES_SELECT_REQUEST; - -/** - * Created by khy on 2/12/17. - */ - -public class AskQuestionsRecommendsFragment extends ListFragment { - - @BindView(R.id.reuse_nodata_skip_tv_btn) - View mSkipHint; - - public final static int RECOMMENDS_REQUEST_CODE = 199; - - public final static String QUESTION_RECOMMEND_PATH = "问答-推荐-按精选"; - - private AskQuestionsRecommendsAdapter mAdapter; - private CheckLoginUtils.OnLoginListener mOnLoginListener; - - private Fragment mParentFragment; - private SharedPreferences mPreference; - - private boolean mManualRefresh = false; - private boolean mIsRefreshInitData = false; - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - mPreference = PreferenceManager.getDefaultSharedPreferences(requireContext()); - - mOnLoginListener = () -> startActivity(QuestionEditActivity.Companion.getIntent(requireContext(), BbsType.GAME_BBS)); - - mParentFragment = exhaustParentFragment(); - - mListViewModel.getRefreshCount().observe(this, integer -> { - if (integer != null) { - switch (integer) { - case 0: - getSwipeRefreshHeader().setFinishText("已经没有新内容咯,请稍后再试"); - LogUtils.communityRefresh(integer, mManualRefresh); - getDumbRefreshLayout().finishRefresh(); - break; - case -1: - // 当前在屏幕上的 fragment 为 AskQuestionRecommendsFragment 时才弹 toast - if (mParentFragment instanceof MainWrapperFragment - && ((MainWrapperFragment) mParentFragment).getCurrentItem() == INDEX_BBS - && !TextUtils.isEmpty(UserManager.getInstance().getCommunity().getId())) { - toast("获取失败,请检查网络设置"); - getDumbRefreshLayout().finishRefresh(false); - } else { - getSwipeRefreshHeader().setFinishText("获取失败,请检查网络设置"); - getDumbRefreshLayout().finishRefresh(); - } - break; - default: - getSwipeRefreshHeader().setFinishText("成功获取" + integer + "条内容"); - getDumbRefreshLayout().finishRefresh(); - LogUtils.communityRefresh(integer, mManualRefresh); -// if (!TextUtils.isEmpty(UserManager.getInstance().getToken())) { // test -// mListViewModel.getSuggestedFollows(); +//package com.gh.gamecenter.qa.recommends; +// +//import static com.gh.gamecenter.fragment.MainWrapperFragment.INDEX_BBS; +//import static com.gh.gamecenter.personal.PersonalFragment.LOGIN_TAG; +//import static com.gh.gamecenter.personal.PersonalFragment.LOGOUT_TAG; +//import static com.gh.gamecenter.qa.CommunityFragment.COMMUNITIES_SELECT_REQUEST; +// +//import android.app.Activity; +//import android.content.Intent; +//import android.content.SharedPreferences; +//import android.os.Bundle; +//import android.preference.PreferenceManager; +//import android.text.TextUtils; +//import android.view.View; +// +//import androidx.annotation.NonNull; +//import androidx.annotation.Nullable; +//import androidx.fragment.app.Fragment; +//import androidx.recyclerview.widget.RecyclerView; +// +//import com.gh.common.constant.Constants; +//import com.gh.common.util.CheckLoginUtils; +//import com.gh.common.util.EntranceUtils; +//import com.gh.common.util.LogUtils; +//import com.gh.common.view.DumbRefreshLayout; +//import com.gh.common.view.SwipeRefreshHeader; +//import com.gh.common.view.VerticalItemDecoration; +//import com.gh.gamecenter.R; +//import com.gh.gamecenter.baselist.ListFragment; +//import com.gh.gamecenter.baselist.LoadStatus; +//import com.gh.gamecenter.baselist.LoadType; +//import com.gh.gamecenter.eventbus.EBReuse; +//import com.gh.gamecenter.eventbus.EBTypeChange; +//import com.gh.gamecenter.eventbus.EBUserFollow; +//import com.gh.gamecenter.forum.home.CommunityHomeFragment; +//import com.gh.gamecenter.fragment.MainWrapperFragment; +//import com.gh.gamecenter.manager.UserManager; +//import com.gh.gamecenter.qa.BbsType; +//import com.gh.gamecenter.qa.CommunityFragment; +//import com.gh.gamecenter.qa.entity.AnswerEntity; +//import com.gh.gamecenter.qa.questions.edit.QuestionEditActivity; +// +//import org.greenrobot.eventbus.EventBus; +//import org.greenrobot.eventbus.Subscribe; +//import org.greenrobot.eventbus.ThreadMode; +// +//import butterknife.BindView; +//import butterknife.OnClick; +// +///** +// * Created by khy on 2/12/17. +// */ +// +//public class AskQuestionsRecommendsFragment extends ListFragment { +// +// @BindView(R.id.reuse_nodata_skip_tv_btn) +// View mSkipHint; +// +// public final static int RECOMMENDS_REQUEST_CODE = 199; +// +// public final static String QUESTION_RECOMMEND_PATH = "问答-推荐-按精选"; +// +// private AskQuestionsRecommendsAdapter mAdapter; +// private CheckLoginUtils.OnLoginListener mOnLoginListener; +// +// private Fragment mParentFragment; +// private SharedPreferences mPreference; +// +// private boolean mManualRefresh = false; +// private boolean mIsRefreshInitData = false; +// +// @Override +// public void onCreate(@Nullable Bundle savedInstanceState) { +// super.onCreate(savedInstanceState); +// mPreference = PreferenceManager.getDefaultSharedPreferences(requireContext()); +// +// mOnLoginListener = () -> startActivity(QuestionEditActivity.Companion.getIntent(requireContext(), BbsType.GAME_BBS)); +// +// mParentFragment = exhaustParentFragment(); +// +// mListViewModel.getRefreshCount().observe(this, integer -> { +// if (integer != null) { +// switch (integer) { +// case 0: +// getSwipeRefreshHeader().setFinishText("已经没有新内容咯,请稍后再试"); +// LogUtils.communityRefresh(integer, mManualRefresh); +// getDumbRefreshLayout().finishRefresh(); +// break; +// case -1: +// // 当前在屏幕上的 fragment 为 AskQuestionRecommendsFragment 时才弹 toast +// if (mParentFragment instanceof MainWrapperFragment +// && ((MainWrapperFragment) mParentFragment).getCurrentItem() == INDEX_BBS +// && !TextUtils.isEmpty(UserManager.getInstance().getCommunity().getId())) { +// toast("获取失败,请检查网络设置"); +// getDumbRefreshLayout().finishRefresh(false); +// } else { +// getSwipeRefreshHeader().setFinishText("获取失败,请检查网络设置"); +// getDumbRefreshLayout().finishRefresh(); // } - break; - } - } - mManualRefresh = false; - if (mListLoading.getVisibility() == View.VISIBLE) mListLoading.setVisibility(View.GONE); - if (mListRv.getVisibility() == View.GONE) mListRv.setVisibility(View.VISIBLE); - }); - - mListRv.addOnScrollListener(new RecyclerView.OnScrollListener() { - @Override - public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { - if (dy > CommunityFragment.FOLLOW_HINT_TRIGGER_HEIGHT) { - EventBus.getDefault().post(new EBTypeChange(CommunityFragment.EB_HIDE_QUESTION_BUTTON, CommunityFragment.INDEX_RECOMMEND)); - } else if (dy < -CommunityFragment.FOLLOW_HINT_TRIGGER_HEIGHT) { - EventBus.getDefault().post(new EBTypeChange(CommunityFragment.EB_SHOW_QUESTION_BUTTON, CommunityFragment.INDEX_RECOMMEND)); - } - } - }); - } - - @Override - public void onLoadEmpty() { - if (isExistSubjectData()) { - super.onLoadDone(); - mAdapter.loadChange(LoadStatus.LIST_OVER); - } else { - super.onLoadEmpty(); - } - } - - @Override - public void onLoadError() { - if (isExistSubjectData()) { - super.onLoadDone(); - mAdapter.loadChange(LoadStatus.LIST_FAILED); - } else { - super.onLoadError(); - } - } - - @Override - protected int getLayoutId() { - return R.layout.fragment_ask_questions_recommends; - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - if (requestCode == COMMUNITIES_SELECT_REQUEST && resultCode == Activity.RESULT_OK) { - scrollToTop(true); - initList(); - } else if (requestCode == RECOMMENDS_REQUEST_CODE && resultCode == Activity.RESULT_OK) { - mListViewModel.removeDataByAnswerId(data.getStringExtra(EntranceUtils.KEY_ANSWER_ID)); - } - } - - protected AskQuestionsRecommendsAdapter provideListAdapter() { - return mAdapter == null ? mAdapter = - new AskQuestionsRecommendsAdapter(getContext(), mListViewModel, this) : mAdapter; - } - - @OnClick(R.id.reuse_nodata_skip_tv_btn) - public void onViewClick(View v) { - if (v.getId() == R.id.reuse_nodata_skip_tv_btn) { - CheckLoginUtils.checkLogin(getContext(), "问答-推荐-我要提问", mOnLoginListener); - } - } - - @Override - public void onListClick(View view, int position, Object data) { - AnswerEntity answerEntity; - switch (view.getId()) { - case R.id.footerview_item: - if (mAdapter.isNetworkError()) { - mListViewModel.load(LoadType.RETRY); - } else if (mAdapter.isOver()) { - scrollToTop(true); - getDumbRefreshLayout().autoRefresh(0, 500, 1); - } - break; - case R.id.ask_recommends_item_refresh: - scrollToTop(true); - getDumbRefreshLayout().autoRefresh(0, 500, 1); - break; - } - - } - - @Override - public void onRefresh() { - mManualRefresh = true; - mListViewModel.load(mIsRefreshInitData ? null : LoadType.REFRESH); - } - - @Override - public void onStop() { - super.onStop(); - getDumbRefreshLayout().finishRefresh(0); - mIsRefreshInitData = false; - } - - public void scrollToTop(boolean smooth) { - if (mLayoutManager != null && mListRv != null) { - mListRv.stopScroll(); - if (smooth) { - mLayoutManager.smoothScrollToPosition(mListRv, null, 0); - } else { - mLayoutManager.scrollToPosition(0); - } - if (getParentFragment() instanceof AskRecommendWrapperFragment) { - ((AskRecommendWrapperFragment) getParentFragment()).openAppBar(smooth); - } - } - } - - public void initList() { - provideListAdapter().loadChange(LoadStatus.INIT); - mReuseNoConn.setVisibility(View.GONE); - mReuseNoData.setVisibility(View.GONE); - mListLoading.setVisibility(View.VISIBLE); - mListRv.setVisibility(View.GONE); - if (mPreference.getBoolean(AskQuestionsRecommendsViewModel.getCheckIsHasCommunityDataKey(), false)) { - mIsRefreshInitData = true; - getDumbRefreshLayout().autoRefresh(0, 500, 1); - mBaseHandler.postDelayed(() -> mIsRefreshInitData = false, 1000); - } else { - mListViewModel.load(null); - } - } - - // 登录事件 - @Subscribe(threadMode = ThreadMode.MAIN) - public void onEventMainThread(EBReuse reuse) { - if (LOGIN_TAG.equals(reuse.getType()) || LOGOUT_TAG.equals(reuse.getType())) { - scrollToTop(true); - initList(); - } - } - - @Subscribe(threadMode = ThreadMode.MAIN) - public void onEventMainThread(EBUserFollow follow) { - if (follow != null && follow.isFollow()) { - mListViewModel.filterFollowedData(follow.getUserId()); - } - } - - @Override - protected RecyclerView.ItemDecoration getItemDecoration() { - return new VerticalItemDecoration(getContext(), 8, false); - } - - private SwipeRefreshHeader getSwipeRefreshHeader() { - Fragment parentFragment = getParentFragment(); - if (parentFragment instanceof AskRecommendWrapperFragment) { - return ((AskRecommendWrapperFragment) parentFragment).getRefreshHeader(); - } - return new SwipeRefreshHeader(getContext()); - } - - private DumbRefreshLayout getDumbRefreshLayout() { - Fragment parentFragment = getParentFragment(); - if (parentFragment instanceof AskRecommendWrapperFragment) { - return ((AskRecommendWrapperFragment) parentFragment).getRefreshLayout(); - } - return new DumbRefreshLayout(getContext()); - } - - private boolean isExistSubjectData() { - Fragment parentFragment = getParentFragment(); - if (parentFragment instanceof AskRecommendWrapperFragment) { - AskRecommendSubjectViewModel subjectViewModel = ((AskRecommendWrapperFragment) parentFragment).getSubjectViewModel(); - return subjectViewModel != null - && subjectViewModel.getSlideLiveData().getValue() != null - && subjectViewModel.getSlideLiveData().getValue().size() > 0; - } - return false; - } - - private Fragment exhaustParentFragment() { - Fragment parentFragment = getParentFragment(); - if (parentFragment == null) return null; - - while (parentFragment.getParentFragment() != null) { - parentFragment = parentFragment.getParentFragment(); - } - return parentFragment; - } - - @Nullable - @Override - protected RecyclerView.Adapter provideSyncAdapter() { - return mAdapter; - } - - @Override - protected boolean addSyncPageObserver() { - return true; - } -} +// break; +// default: +// getSwipeRefreshHeader().setFinishText("成功获取" + integer + "条内容"); +// getDumbRefreshLayout().finishRefresh(); +// LogUtils.communityRefresh(integer, mManualRefresh); +//// if (!TextUtils.isEmpty(UserManager.getInstance().getToken())) { // test +//// mListViewModel.getSuggestedFollows(); +//// } +// break; +// } +// } +// mManualRefresh = false; +// if (mListLoading.getVisibility() == View.VISIBLE) mListLoading.setVisibility(View.GONE); +// if (mListRv.getVisibility() == View.GONE) mListRv.setVisibility(View.VISIBLE); +// }); +// +// mListRv.addOnScrollListener(new RecyclerView.OnScrollListener() { +// @Override +// public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { +// if (dy > CommunityFragment.FOLLOW_HINT_TRIGGER_HEIGHT) { +// EventBus.getDefault().post(new EBTypeChange(CommunityFragment.EB_HIDE_QUESTION_BUTTON, CommunityFragment.INDEX_RECOMMEND)); +// } else if (dy < -CommunityFragment.FOLLOW_HINT_TRIGGER_HEIGHT) { +// EventBus.getDefault().post(new EBTypeChange(CommunityFragment.EB_SHOW_QUESTION_BUTTON, CommunityFragment.INDEX_RECOMMEND)); +// } +// } +// }); +// } +// +// @Override +// public void onLoadEmpty() { +// if (isExistSubjectData()) { +// super.onLoadDone(); +// mAdapter.loadChange(LoadStatus.LIST_OVER); +// } else { +// super.onLoadEmpty(); +// } +// } +// +// @Override +// public void onLoadError() { +// if (isExistSubjectData()) { +// super.onLoadDone(); +// mAdapter.loadChange(LoadStatus.LIST_FAILED); +// } else { +// super.onLoadError(); +// } +// } +// +// @Override +// protected int getLayoutId() { +// return R.layout.fragment_ask_questions_recommends; +// } +// +// @Override +// public void onActivityResult(int requestCode, int resultCode, Intent data) { +// super.onActivityResult(requestCode, resultCode, data); +// if (requestCode == COMMUNITIES_SELECT_REQUEST && resultCode == Activity.RESULT_OK) { +// scrollToTop(true); +// initList(); +// } else if (requestCode == RECOMMENDS_REQUEST_CODE && resultCode == Activity.RESULT_OK) { +// mListViewModel.removeDataByAnswerId(data.getStringExtra(EntranceUtils.KEY_ANSWER_ID)); +// } +// } +// +// protected AskQuestionsRecommendsAdapter provideListAdapter() { +// return mAdapter == null ? mAdapter = +// new AskQuestionsRecommendsAdapter(getContext(), mListViewModel, this) : mAdapter; +// } +// +// @OnClick(R.id.reuse_nodata_skip_tv_btn) +// public void onViewClick(View v) { +// if (v.getId() == R.id.reuse_nodata_skip_tv_btn) { +// CheckLoginUtils.checkLogin(getContext(), "问答-推荐-我要提问", mOnLoginListener); +// } +// } +// +// @Override +// public void onListClick(View view, int position, Object data) { +// AnswerEntity answerEntity; +// switch (view.getId()) { +// case R.id.footerview_item: +// if (mAdapter.isNetworkError()) { +// mListViewModel.load(LoadType.RETRY); +// } else if (mAdapter.isOver()) { +// scrollToTop(true); +// getDumbRefreshLayout().autoRefresh(0, 500, 1); +// } +// break; +// case R.id.ask_recommends_item_refresh: +// scrollToTop(true); +// getDumbRefreshLayout().autoRefresh(0, 500, 1); +// break; +// } +// +// } +// +// @Override +// public void onRefresh() { +// mManualRefresh = true; +// mListViewModel.load(mIsRefreshInitData ? null : LoadType.REFRESH); +// } +// +// @Override +// public void onStop() { +// super.onStop(); +// getDumbRefreshLayout().finishRefresh(0); +// mIsRefreshInitData = false; +// } +// +// public void scrollToTop(boolean smooth) { +// if (mLayoutManager != null && mListRv != null) { +// mListRv.stopScroll(); +// if (smooth) { +// mLayoutManager.smoothScrollToPosition(mListRv, null, 0); +// } else { +// mLayoutManager.scrollToPosition(0); +// } +// if (getParentFragment() instanceof AskRecommendWrapperFragment) { +// ((AskRecommendWrapperFragment) getParentFragment()).openAppBar(smooth); +// } +// } +// } +// +// public void initList() { +// provideListAdapter().loadChange(LoadStatus.INIT); +// mReuseNoConn.setVisibility(View.GONE); +// mReuseNoData.setVisibility(View.GONE); +// mListLoading.setVisibility(View.VISIBLE); +// mListRv.setVisibility(View.GONE); +// if (mPreference.getBoolean(AskQuestionsRecommendsViewModel.getCheckIsHasCommunityDataKey(), false)) { +// mIsRefreshInitData = true; +// getDumbRefreshLayout().autoRefresh(0, 500, 1); +// mBaseHandler.postDelayed(() -> mIsRefreshInitData = false, 1000); +// } else { +// mListViewModel.load(null); +// } +// } +// +// // 登录事件 +// @Subscribe(threadMode = ThreadMode.MAIN) +// public void onEventMainThread(EBReuse reuse) { +// if (LOGIN_TAG.equals(reuse.getType()) || LOGOUT_TAG.equals(reuse.getType())) { +// scrollToTop(true); +// initList(); +// } +// } +// +// @Subscribe(threadMode = ThreadMode.MAIN) +// public void onEventMainThread(EBUserFollow follow) { +// if (follow != null && follow.isFollow()) { +// mListViewModel.filterFollowedData(follow.getUserId()); +// } +// } +// +// @Override +// protected RecyclerView.ItemDecoration getItemDecoration() { +// return new VerticalItemDecoration(getContext(), 8, false); +// } +// +// private SwipeRefreshHeader getSwipeRefreshHeader() { +// Fragment parentFragment = getParentFragment(); +// if (parentFragment instanceof AskRecommendWrapperFragment) { +// return ((AskRecommendWrapperFragment) parentFragment).getRefreshHeader(); +// } +// return new SwipeRefreshHeader(getContext()); +// } +// +// private DumbRefreshLayout getDumbRefreshLayout() { +// Fragment parentFragment = getParentFragment(); +// if (parentFragment instanceof AskRecommendWrapperFragment) { +// return ((AskRecommendWrapperFragment) parentFragment).getRefreshLayout(); +// } +// return new DumbRefreshLayout(getContext()); +// } +// +// private boolean isExistSubjectData() { +// Fragment parentFragment = getParentFragment(); +// if (parentFragment instanceof AskRecommendWrapperFragment) { +// AskRecommendSubjectViewModel subjectViewModel = ((AskRecommendWrapperFragment) parentFragment).getSubjectViewModel(); +// return subjectViewModel != null +// && subjectViewModel.getSlideLiveData().getValue() != null +// && subjectViewModel.getSlideLiveData().getValue().size() > 0; +// } +// return false; +// } +// +// private Fragment exhaustParentFragment() { +// Fragment parentFragment = getParentFragment(); +// if (parentFragment == null) return null; +// +// while (parentFragment.getParentFragment() != null) { +// parentFragment = parentFragment.getParentFragment(); +// } +// return parentFragment; +// } +// +// @Nullable +// @Override +// protected RecyclerView.Adapter provideSyncAdapter() { +// return mAdapter; +// } +// +// @Override +// protected boolean addSyncPageObserver() { +// return true; +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/recommends/AskQuestionsRecommendsViewModel.java b/app/src/main/java/com/gh/gamecenter/qa/recommends/AskQuestionsRecommendsViewModel.java index 9accc1a274..24a053e120 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/recommends/AskQuestionsRecommendsViewModel.java +++ b/app/src/main/java/com/gh/gamecenter/qa/recommends/AskQuestionsRecommendsViewModel.java @@ -1,516 +1,516 @@ -package com.gh.gamecenter.qa.recommends; - -import android.app.Application; -import android.content.SharedPreferences; -import android.database.sqlite.SQLiteException; -import android.preference.PreferenceManager; -import android.text.TextUtils; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.lifecycle.LiveData; -import androidx.lifecycle.MediatorLiveData; -import androidx.lifecycle.MutableLiveData; - -import com.gh.common.util.UrlFilterUtils; -import com.gh.gamecenter.R; -import com.gh.gamecenter.baselist.BaseListViewModel; -import com.gh.gamecenter.baselist.LoadStatus; -import com.gh.gamecenter.baselist.LoadType; -import com.gh.gamecenter.eventbus.EBReuse; -import com.gh.gamecenter.manager.UserManager; -import com.gh.gamecenter.qa.entity.AnswerEntity; -import com.gh.gamecenter.qa.entity.SuggestedFollowEntity; -import com.gh.gamecenter.qa.follow.AskFollowFragment; -import com.gh.gamecenter.retrofit.Response; -import com.gh.gamecenter.retrofit.RetrofitManager; -import com.gh.gamecenter.room.AppDatabase; -import com.gh.gamecenter.room.dao.AnswerDao; -import com.lightgame.utils.Utils; - -import org.greenrobot.eventbus.EventBus; - -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Locale; - -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.schedulers.Schedulers; -import okhttp3.ResponseBody; -import retrofit2.Call; -import retrofit2.Callback; -import retrofit2.HttpException; - -/** - * Created by khy on 20/03/18. - */ - -public class AskQuestionsRecommendsViewModel extends BaseListViewModel { - - /** - * 等于 0 刷新结束(没有内容了) - * 小于 0 刷新失败 - * 大于 0 刷新成功(数量) - */ - private MutableLiveData mRefreshCount = new MutableLiveData<>(); - - private MediatorLiveData> mLiveData = new MediatorLiveData<>(); - private MutableLiveData mLoadStatusLiveData = new MutableLiveData<>(); - - private List mCacheFollowList = new ArrayList<>(); - - private AnswerDao mAnswerDao; - - private SharedPreferences mPreference; - - private boolean mIsLoading; - - public AskQuestionsRecommendsViewModel(@NonNull Application application) { - super(application); - mPreference = PreferenceManager.getDefaultSharedPreferences(getApplication()); - mAnswerDao = AppDatabase.getInstance().answerDao(); - } - - private String getFollowBindKey() { - return "SUGGESTED_FOLLOWS_BIND" + UserManager.getInstance().getCommunity().getId(); - } - - private String getDeleteFollowKey() { - return "SUGGESTED_FOLLOWS_DELETE" + UserManager.getInstance().getCommunity().getId(); - } - - private String getFollowDayKey() { - return "SUGGESTED_FOLLOWS_DAY_KEY" + UserManager.getInstance().getCommunity().getId(); - } - - private String getCurDayFormat() { - SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); - return format.format(new Date()); - } - - private void getSuggestedFollows() { - if (TextUtils.isEmpty(UserManager.getInstance().getToken())) return; - - String showUpdateTime = mPreference.getString(getFollowDayKey(), null); - String today = getCurDayFormat() + UserManager.getInstance().getCommunity().getId(); - String deleteTime = mPreference.getString(getDeleteFollowKey(), null); - - boolean isNewData; - if (!mCacheFollowList.isEmpty() || getCurDayFormat().equals(deleteTime)) { - return; - } else if (today.equals(showUpdateTime)) { - isNewData = false; - } else { - isNewData = true; - } - - RetrofitManager.getInstance().getApi() - .getSuggestedFollows(UserManager.getInstance().getCommunity().getId()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response>() { - @Override - public void onResponse(@Nullable List response) { - if (response != null && !response.isEmpty()) { - mPreference.edit().putString(getFollowDayKey(), today).apply(); - String bindKey = ""; - if (!isNewData) { - bindKey = mPreference.getString(getFollowBindKey(), ""); - } - addSuggestedFollowToList(response, bindKey); - mCacheFollowList.clear(); - mCacheFollowList.addAll(response); - } - } - }); - } - - private void addSuggestedFollowToList(List followList, String bindKey) { - List listData = mLiveData.getValue(); - if (listData != null && listData.size() > 0) { - // remove - for (int i = 0; i < listData.size(); i++) { - RecommendItemData data = listData.get(i); - if (data.getFollowList() != null) { - listData.remove(i); - i--; - } - } - - // add - RecommendItemData itemData = new RecommendItemData(); - itemData.setFollowList(followList); - - if (TextUtils.isEmpty(bindKey)) { - String bindId = null; - if (listData.size() > 3) { - for (int i = 2; i >= 0; i--) { - AnswerEntity answer = listData.get(i).getAnswer(); - if (answer != null) { - bindId = answer.getId(); - break; - } - } - listData.add(3, itemData); - } else { - for (int i = listData.size() - 1; i >= 0; i--) { - AnswerEntity answer = listData.get(i).getAnswer(); - if (answer != null) { - bindId = answer.getId(); - break; - } - } - listData.add(itemData); - } - mPreference.edit().putString(getFollowBindKey(), bindId).apply(); - } else { - for (int i = 0; i < listData.size(); i++) { - AnswerEntity answer = listData.get(i).getAnswer(); - if (answer != null && bindKey.equals(answer.getId())) { - listData.add(i + 1, itemData); - break; - } - } - } - mLiveData.postValue(listData); - } - } - - void deleteFollowList() { - List listData = mLiveData.getValue(); - if (listData != null) { - for (int i = 0; i < listData.size(); i++) { - RecommendItemData data = listData.get(i); - if (data.getFollowList() != null) { - listData.remove(i); - } - } - mLiveData.postValue(listData); - - mPreference.edit().putString(getDeleteFollowKey(), getCurDayFormat()).apply(); - } - } - - void deleteFollowById(String id) { - List listData = mLiveData.getValue(); - if (listData != null) { - for (int j = 0; j < listData.size(); j++) { - RecommendItemData data = listData.get(j); - List followList = data.getFollowList(); - if (followList != null) { - for (int i = 0; i < followList.size(); i++) { - SuggestedFollowEntity followEntity = followList.get(i); - if (followEntity.getId().equals(id)) { - followList.remove(i); - i--; - } - } - if (followList.size() == 0) { - listData.remove(j); - deleteFollowList(); - } - break; - } - } - mLiveData.postValue(listData); - } - } - - void followUser(String targetUserId, RecommendConcernAdapter.OnFollowCallback callback) { - RetrofitManager.getInstance().getApi() - .postFollowing(targetUserId) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response() { - @Override - public void onResponse(@Nullable ResponseBody response) { - Utils.toast(getApplication(), R.string.concern_success); - EventBus.getDefault().post(new EBReuse(AskFollowFragment.EB_NEW_FOLLOW)); - callback.onFollowSuccess(); - } - - @Override - public void onFailure(@Nullable HttpException e) { - Utils.toast(getApplication(), R.string.post_failure_hint); - } - }); - } - - void filterFollowedData(String userId) { - if (!TextUtils.isEmpty(userId)) { - List value = mLiveData.getValue(); - if (value != null) { - for (RecommendItemData data : value) { - List followList = data.getFollowList(); - if (followList != null) { - for (SuggestedFollowEntity followEntity : followList) { - if (userId.equals(followEntity.getId())) { - followList.remove(followEntity); - mLiveData.postValue(value); - return; - } - } - } - } - } - } - } - - private void loadData(boolean isUp, String sequenceId, LoadType loadType) { - if (mIsLoading && !TextUtils.isEmpty(sequenceId) && !isUp) return; - if (!isUp && mLiveData.getValue() != null && mLiveData.getValue().size() > 0) { - mLoadStatusLiveData.postValue(LoadStatus.LIST_LOADING); - } - mIsLoading = true; - String filter; - String communityId = UserManager.getInstance().getCommunity().getId(); - if (TextUtils.isEmpty(sequenceId)) { - filter = ""; - } else if (isUp) { - filter = UrlFilterUtils.getFilterQuery("action", "up", "sequence_id", sequenceId); - } else { - filter = UrlFilterUtils.getFilterQuery("action", "down", "sequence_id", sequenceId); - } - - RetrofitManager.getInstance() - .getApi().getAskRecommends(communityId, filter) - .enqueue(new Callback>() { - @Override - public void onResponse(Call> call, retrofit2.Response> response) { - if (!TextUtils.isEmpty(response.headers().get("Feed-Clean"))) { - deleteDB(); - } - List previousData = mLiveData.getValue(); - if (response.code() == 200) { - List body = response.body(); - loadStatusControl(body.size(), previousData == null || previousData.size() == 0, isUp); - - if ((TextUtils.isEmpty(sequenceId) || isUp) && body.size() > 0) { - insertDB(body); - } - - if (previousData == null) { - previousData = new ArrayList<>(); - } - - if (isUp) { - addRefreshData(previousData, body); - } else { - addAnswerToItemData(previousData, body, false); - } - mLiveData.postValue(previousData); - } else { - if (response.code() != 403) { - loadStatusControl(-1, previousData == null || previousData.size() == 0, isUp); - } else { // 整条时间线都不可用 - mLiveData.setValue(new ArrayList<>()); - mLoadStatusLiveData.postValue(LoadStatus.INIT_FAILED); - deleteDB(); - } - } - - // load suggested follows - if (loadType == LoadType.REFRESH) { - getSuggestedFollows(); - } - mIsLoading = false; - } - - @Override - public void onFailure(Call> call, Throwable t) { - loadStatusControl(-1, mLiveData.getValue() == null || mLiveData.getValue().size() == 0, isUp); - mIsLoading = false; - } - }); - - } - - // 下拉刷新添加数据 - private void addRefreshData(List previousData, List response) { - if (response.size() == 0) return; - - // 去除上次刷新提示ITEM - for (int i = 0; i < previousData.size(); i++) { - Object refresh = previousData.get(i).getRefresh(); - if (refresh != null) { - previousData.remove(i); - i--; - } - } - - if (response.size() > 0) { - addAnswerToItemData(previousData, response, true); - - // 添加刷新提示ITEM - RecommendItemData refreshItem = new RecommendItemData(); - refreshItem.setRefresh("refreshItem"); - previousData.add(response.size(), refreshItem); - } - } - - private void addAnswerToItemData(List previousData, List response, boolean isRefresh) { - List newData = new ArrayList<>(); - for (AnswerEntity answerEntity : response) { - RecommendItemData itemData = new RecommendItemData(); - itemData.setAnswer(answerEntity); - newData.add(itemData); - } - - if (isRefresh) { - previousData.addAll(0, newData); - } else { - previousData.addAll(newData); - } - } - - private void deleteDB() { - mPreference.edit().putBoolean(getCheckIsHasCommunityDataKey(), false).apply(); - mAnswerDao.deleteData(UserManager.getInstance().getCommunity().getId() + UserManager.getInstance().getUserId()); - } - - private void insertDB(List entityList) { - String communityId = UserManager.getInstance().getCommunity().getId(); - String userId = UserManager.getInstance().getUserId(); - long orderTag = System.currentTimeMillis(); - if (!TextUtils.isEmpty(communityId)) { - for (AnswerEntity answerEntity : entityList) { - answerEntity.setPrimaryKey(answerEntity.getId() + userId); - answerEntity.setCommunityId(communityId + userId); - answerEntity.setOrderTag(orderTag); - } - if (mAnswerDao.updateAnswerEntity(entityList) <= 0) { - try { - mAnswerDao.addAnswerEntity(entityList); - } catch (SQLiteException e) { - e.printStackTrace(); - } - } - mPreference.edit().putBoolean(getCheckIsHasCommunityDataKey(), true).apply(); - } - } - - private void loadStatusControl(int size, boolean isInit, boolean isUp) { - if (isInit) { // 初始化列表 - if (size == 0) { - mLoadStatusLiveData.postValue(LoadStatus.INIT_EMPTY); - } else if (size == -1) { - mLoadStatusLiveData.postValue(LoadStatus.INIT_FAILED); - } else { - mLoadStatusLiveData.postValue(LoadStatus.INIT_LOADED); - } - if (isUp) mRefreshCount.postValue(size); - } else if (isUp) { - mRefreshCount.postValue(size); - } else { - if (size == -1) { - mLoadStatusLiveData.postValue(LoadStatus.LIST_FAILED); - } else if (size == 0) { - mLoadStatusLiveData.postValue(LoadStatus.LIST_OVER); - } else { - mLoadStatusLiveData.postValue(LoadStatus.LIST_LOADED); - } - } - } - - - @Override - public void load(LoadType loadType) { - List value = mLiveData.getValue(); - - if (loadType != null && value != null && value.size() > 0) { - String sequenceId = null; - switch (loadType) { - case RETRY: - case NORMAL: - for (int i = value.size() - 1; i >= 0; i--) { - AnswerEntity entity = value.get(i).getAnswer(); - if (entity != null) { - sequenceId = entity.getSequenceId(); - break; - } - } - loadData(false, sequenceId, loadType); - break; - case REFRESH: { - for (RecommendItemData entity : value) { - if (entity.getAnswer() != null) { - sequenceId = entity.getAnswer().getSequenceId(); - break; - } - } - loadData(true, sequenceId, loadType); - } - break; - } - } else { - mCacheFollowList.clear(); - mLiveData.postValue(null); // 清空数据 - - String communityId = UserManager.getInstance().getCommunity().getId(); - String userId = UserManager.getInstance().getUserId(); - LiveData> dbData = mAnswerDao.getAnswerEntityById(communityId + userId); - mLiveData.addSource(dbData, entityList -> { - mLiveData.removeSource(dbData); - if (entityList == null || entityList.isEmpty()) { - loadData(true, null, loadType); - } else { - List itemList = new ArrayList<>(); - addAnswerToItemData(itemList, entityList, false); - mLiveData.postValue(itemList); - mLoadStatusLiveData.setValue(LoadStatus.INIT_LOADED); - - String sequenceId = null; - for (AnswerEntity entity : entityList) { - if (!TextUtils.isEmpty(entity.getSequenceId())) { - sequenceId = entity.getSequenceId(); - break; - } - } - loadData(true, sequenceId, loadType); - - getSuggestedFollows(); - } - }); - } - } - - public void removeDataByAnswerId(String answerId) { - if (!TextUtils.isEmpty(answerId)) { - List value = mLiveData.getValue(); - if (value != null) { - // 删除内存相关内容 - for (int i = 0; i < value.size(); i++) { - AnswerEntity entity = value.get(i).getAnswer(); - if (entity != null && answerId.equals(entity.getId())) { - value.remove(i); - i--; - } - } - // 更新页面 - mLiveData.postValue(value); - // 删除数据库内容 - mAnswerDao.deleteDataByAnswerId(answerId); - } - } - } - - @Override - public LiveData> getObsListData() { - return mLiveData; - } - - @Override - public LiveData getLoadStatusLiveData() { - return mLoadStatusLiveData; - } - - public LiveData getRefreshCount() { - return mRefreshCount; - } - - public static String getCheckIsHasCommunityDataKey() { - return "CheckCommunityDataKey" + UserManager.getInstance().getCommunity().getId() + UserManager.getInstance().getUserId(); - } -} +//package com.gh.gamecenter.qa.recommends; +// +//import android.app.Application; +//import android.content.SharedPreferences; +//import android.database.sqlite.SQLiteException; +//import android.preference.PreferenceManager; +//import android.text.TextUtils; +// +//import androidx.annotation.NonNull; +//import androidx.annotation.Nullable; +//import androidx.lifecycle.LiveData; +//import androidx.lifecycle.MediatorLiveData; +//import androidx.lifecycle.MutableLiveData; +// +//import com.gh.common.util.UrlFilterUtils; +//import com.gh.gamecenter.R; +//import com.gh.gamecenter.baselist.BaseListViewModel; +//import com.gh.gamecenter.baselist.LoadStatus; +//import com.gh.gamecenter.baselist.LoadType; +//import com.gh.gamecenter.eventbus.EBReuse; +//import com.gh.gamecenter.manager.UserManager; +//import com.gh.gamecenter.qa.entity.AnswerEntity; +//import com.gh.gamecenter.qa.entity.SuggestedFollowEntity; +//import com.gh.gamecenter.qa.follow.AskFollowFragment; +//import com.gh.gamecenter.retrofit.Response; +//import com.gh.gamecenter.retrofit.RetrofitManager; +//import com.gh.gamecenter.room.AppDatabase; +//import com.gh.gamecenter.room.dao.AnswerDao; +//import com.lightgame.utils.Utils; +// +//import org.greenrobot.eventbus.EventBus; +// +//import java.text.SimpleDateFormat; +//import java.util.ArrayList; +//import java.util.Date; +//import java.util.List; +//import java.util.Locale; +// +//import io.reactivex.android.schedulers.AndroidSchedulers; +//import io.reactivex.schedulers.Schedulers; +//import okhttp3.ResponseBody; +//import retrofit2.Call; +//import retrofit2.Callback; +//import retrofit2.HttpException; +// +///** +// * Created by khy on 20/03/18. +// */ +// +//public class AskQuestionsRecommendsViewModel extends BaseListViewModel { +// +// /** +// * 等于 0 刷新结束(没有内容了) +// * 小于 0 刷新失败 +// * 大于 0 刷新成功(数量) +// */ +// private MutableLiveData mRefreshCount = new MutableLiveData<>(); +// +// private MediatorLiveData> mLiveData = new MediatorLiveData<>(); +// private MutableLiveData mLoadStatusLiveData = new MutableLiveData<>(); +// +// private List mCacheFollowList = new ArrayList<>(); +// +// private AnswerDao mAnswerDao; +// +// private SharedPreferences mPreference; +// +// private boolean mIsLoading; +// +// public AskQuestionsRecommendsViewModel(@NonNull Application application) { +// super(application); +// mPreference = PreferenceManager.getDefaultSharedPreferences(getApplication()); +// mAnswerDao = AppDatabase.getInstance().answerDao(); +// } +// +// private String getFollowBindKey() { +// return "SUGGESTED_FOLLOWS_BIND" + UserManager.getInstance().getCommunity().getId(); +// } +// +// private String getDeleteFollowKey() { +// return "SUGGESTED_FOLLOWS_DELETE" + UserManager.getInstance().getCommunity().getId(); +// } +// +// private String getFollowDayKey() { +// return "SUGGESTED_FOLLOWS_DAY_KEY" + UserManager.getInstance().getCommunity().getId(); +// } +// +// private String getCurDayFormat() { +// SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); +// return format.format(new Date()); +// } +// +// private void getSuggestedFollows() { +// if (TextUtils.isEmpty(UserManager.getInstance().getToken())) return; +// +// String showUpdateTime = mPreference.getString(getFollowDayKey(), null); +// String today = getCurDayFormat() + UserManager.getInstance().getCommunity().getId(); +// String deleteTime = mPreference.getString(getDeleteFollowKey(), null); +// +// boolean isNewData; +// if (!mCacheFollowList.isEmpty() || getCurDayFormat().equals(deleteTime)) { +// return; +// } else if (today.equals(showUpdateTime)) { +// isNewData = false; +// } else { +// isNewData = true; +// } +// +// RetrofitManager.getInstance().getApi() +// .getSuggestedFollows(UserManager.getInstance().getCommunity().getId()) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new Response>() { +// @Override +// public void onResponse(@Nullable List response) { +// if (response != null && !response.isEmpty()) { +// mPreference.edit().putString(getFollowDayKey(), today).apply(); +// String bindKey = ""; +// if (!isNewData) { +// bindKey = mPreference.getString(getFollowBindKey(), ""); +// } +// addSuggestedFollowToList(response, bindKey); +// mCacheFollowList.clear(); +// mCacheFollowList.addAll(response); +// } +// } +// }); +// } +// +// private void addSuggestedFollowToList(List followList, String bindKey) { +// List listData = mLiveData.getValue(); +// if (listData != null && listData.size() > 0) { +// // remove +// for (int i = 0; i < listData.size(); i++) { +// RecommendItemData data = listData.get(i); +// if (data.getFollowList() != null) { +// listData.remove(i); +// i--; +// } +// } +// +// // add +// RecommendItemData itemData = new RecommendItemData(); +// itemData.setFollowList(followList); +// +// if (TextUtils.isEmpty(bindKey)) { +// String bindId = null; +// if (listData.size() > 3) { +// for (int i = 2; i >= 0; i--) { +// AnswerEntity answer = listData.get(i).getAnswer(); +// if (answer != null) { +// bindId = answer.getId(); +// break; +// } +// } +// listData.add(3, itemData); +// } else { +// for (int i = listData.size() - 1; i >= 0; i--) { +// AnswerEntity answer = listData.get(i).getAnswer(); +// if (answer != null) { +// bindId = answer.getId(); +// break; +// } +// } +// listData.add(itemData); +// } +// mPreference.edit().putString(getFollowBindKey(), bindId).apply(); +// } else { +// for (int i = 0; i < listData.size(); i++) { +// AnswerEntity answer = listData.get(i).getAnswer(); +// if (answer != null && bindKey.equals(answer.getId())) { +// listData.add(i + 1, itemData); +// break; +// } +// } +// } +// mLiveData.postValue(listData); +// } +// } +// +// void deleteFollowList() { +// List listData = mLiveData.getValue(); +// if (listData != null) { +// for (int i = 0; i < listData.size(); i++) { +// RecommendItemData data = listData.get(i); +// if (data.getFollowList() != null) { +// listData.remove(i); +// } +// } +// mLiveData.postValue(listData); +// +// mPreference.edit().putString(getDeleteFollowKey(), getCurDayFormat()).apply(); +// } +// } +// +// void deleteFollowById(String id) { +// List listData = mLiveData.getValue(); +// if (listData != null) { +// for (int j = 0; j < listData.size(); j++) { +// RecommendItemData data = listData.get(j); +// List followList = data.getFollowList(); +// if (followList != null) { +// for (int i = 0; i < followList.size(); i++) { +// SuggestedFollowEntity followEntity = followList.get(i); +// if (followEntity.getId().equals(id)) { +// followList.remove(i); +// i--; +// } +// } +// if (followList.size() == 0) { +// listData.remove(j); +// deleteFollowList(); +// } +// break; +// } +// } +// mLiveData.postValue(listData); +// } +// } +// +// void followUser(String targetUserId, RecommendConcernAdapter.OnFollowCallback callback) { +// RetrofitManager.getInstance().getApi() +// .postFollowing(targetUserId) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new Response() { +// @Override +// public void onResponse(@Nullable ResponseBody response) { +// Utils.toast(getApplication(), R.string.concern_success); +// EventBus.getDefault().post(new EBReuse(AskFollowFragment.EB_NEW_FOLLOW)); +// callback.onFollowSuccess(); +// } +// +// @Override +// public void onFailure(@Nullable HttpException e) { +// Utils.toast(getApplication(), R.string.post_failure_hint); +// } +// }); +// } +// +// void filterFollowedData(String userId) { +// if (!TextUtils.isEmpty(userId)) { +// List value = mLiveData.getValue(); +// if (value != null) { +// for (RecommendItemData data : value) { +// List followList = data.getFollowList(); +// if (followList != null) { +// for (SuggestedFollowEntity followEntity : followList) { +// if (userId.equals(followEntity.getId())) { +// followList.remove(followEntity); +// mLiveData.postValue(value); +// return; +// } +// } +// } +// } +// } +// } +// } +// +// private void loadData(boolean isUp, String sequenceId, LoadType loadType) { +// if (mIsLoading && !TextUtils.isEmpty(sequenceId) && !isUp) return; +// if (!isUp && mLiveData.getValue() != null && mLiveData.getValue().size() > 0) { +// mLoadStatusLiveData.postValue(LoadStatus.LIST_LOADING); +// } +// mIsLoading = true; +// String filter; +// String communityId = UserManager.getInstance().getCommunity().getId(); +// if (TextUtils.isEmpty(sequenceId)) { +// filter = ""; +// } else if (isUp) { +// filter = UrlFilterUtils.getFilterQuery("action", "up", "sequence_id", sequenceId); +// } else { +// filter = UrlFilterUtils.getFilterQuery("action", "down", "sequence_id", sequenceId); +// } +// +// RetrofitManager.getInstance() +// .getApi().getAskRecommends(communityId, filter) +// .enqueue(new Callback>() { +// @Override +// public void onResponse(Call> call, retrofit2.Response> response) { +// if (!TextUtils.isEmpty(response.headers().get("Feed-Clean"))) { +// deleteDB(); +// } +// List previousData = mLiveData.getValue(); +// if (response.code() == 200) { +// List body = response.body(); +// loadStatusControl(body.size(), previousData == null || previousData.size() == 0, isUp); +// +// if ((TextUtils.isEmpty(sequenceId) || isUp) && body.size() > 0) { +// insertDB(body); +// } +// +// if (previousData == null) { +// previousData = new ArrayList<>(); +// } +// +// if (isUp) { +// addRefreshData(previousData, body); +// } else { +// addAnswerToItemData(previousData, body, false); +// } +// mLiveData.postValue(previousData); +// } else { +// if (response.code() != 403) { +// loadStatusControl(-1, previousData == null || previousData.size() == 0, isUp); +// } else { // 整条时间线都不可用 +// mLiveData.setValue(new ArrayList<>()); +// mLoadStatusLiveData.postValue(LoadStatus.INIT_FAILED); +// deleteDB(); +// } +// } +// +// // load suggested follows +// if (loadType == LoadType.REFRESH) { +// getSuggestedFollows(); +// } +// mIsLoading = false; +// } +// +// @Override +// public void onFailure(Call> call, Throwable t) { +// loadStatusControl(-1, mLiveData.getValue() == null || mLiveData.getValue().size() == 0, isUp); +// mIsLoading = false; +// } +// }); +// +// } +// +// // 下拉刷新添加数据 +// private void addRefreshData(List previousData, List response) { +// if (response.size() == 0) return; +// +// // 去除上次刷新提示ITEM +// for (int i = 0; i < previousData.size(); i++) { +// Object refresh = previousData.get(i).getRefresh(); +// if (refresh != null) { +// previousData.remove(i); +// i--; +// } +// } +// +// if (response.size() > 0) { +// addAnswerToItemData(previousData, response, true); +// +// // 添加刷新提示ITEM +// RecommendItemData refreshItem = new RecommendItemData(); +// refreshItem.setRefresh("refreshItem"); +// previousData.add(response.size(), refreshItem); +// } +// } +// +// private void addAnswerToItemData(List previousData, List response, boolean isRefresh) { +// List newData = new ArrayList<>(); +// for (AnswerEntity answerEntity : response) { +// RecommendItemData itemData = new RecommendItemData(); +// itemData.setAnswer(answerEntity); +// newData.add(itemData); +// } +// +// if (isRefresh) { +// previousData.addAll(0, newData); +// } else { +// previousData.addAll(newData); +// } +// } +// +// private void deleteDB() { +// mPreference.edit().putBoolean(getCheckIsHasCommunityDataKey(), false).apply(); +// mAnswerDao.deleteData(UserManager.getInstance().getCommunity().getId() + UserManager.getInstance().getUserId()); +// } +// +// private void insertDB(List entityList) { +// String communityId = UserManager.getInstance().getCommunity().getId(); +// String userId = UserManager.getInstance().getUserId(); +// long orderTag = System.currentTimeMillis(); +// if (!TextUtils.isEmpty(communityId)) { +// for (AnswerEntity answerEntity : entityList) { +// answerEntity.setPrimaryKey(answerEntity.getId() + userId); +// answerEntity.setCommunityId(communityId + userId); +// answerEntity.setOrderTag(orderTag); +// } +// if (mAnswerDao.updateAnswerEntity(entityList) <= 0) { +// try { +// mAnswerDao.addAnswerEntity(entityList); +// } catch (SQLiteException e) { +// e.printStackTrace(); +// } +// } +// mPreference.edit().putBoolean(getCheckIsHasCommunityDataKey(), true).apply(); +// } +// } +// +// private void loadStatusControl(int size, boolean isInit, boolean isUp) { +// if (isInit) { // 初始化列表 +// if (size == 0) { +// mLoadStatusLiveData.postValue(LoadStatus.INIT_EMPTY); +// } else if (size == -1) { +// mLoadStatusLiveData.postValue(LoadStatus.INIT_FAILED); +// } else { +// mLoadStatusLiveData.postValue(LoadStatus.INIT_LOADED); +// } +// if (isUp) mRefreshCount.postValue(size); +// } else if (isUp) { +// mRefreshCount.postValue(size); +// } else { +// if (size == -1) { +// mLoadStatusLiveData.postValue(LoadStatus.LIST_FAILED); +// } else if (size == 0) { +// mLoadStatusLiveData.postValue(LoadStatus.LIST_OVER); +// } else { +// mLoadStatusLiveData.postValue(LoadStatus.LIST_LOADED); +// } +// } +// } +// +// +// @Override +// public void load(LoadType loadType) { +// List value = mLiveData.getValue(); +// +// if (loadType != null && value != null && value.size() > 0) { +// String sequenceId = null; +// switch (loadType) { +// case RETRY: +// case NORMAL: +// for (int i = value.size() - 1; i >= 0; i--) { +// AnswerEntity entity = value.get(i).getAnswer(); +// if (entity != null) { +// sequenceId = entity.getSequenceId(); +// break; +// } +// } +// loadData(false, sequenceId, loadType); +// break; +// case REFRESH: { +// for (RecommendItemData entity : value) { +// if (entity.getAnswer() != null) { +// sequenceId = entity.getAnswer().getSequenceId(); +// break; +// } +// } +// loadData(true, sequenceId, loadType); +// } +// break; +// } +// } else { +// mCacheFollowList.clear(); +// mLiveData.postValue(null); // 清空数据 +// +// String communityId = UserManager.getInstance().getCommunity().getId(); +// String userId = UserManager.getInstance().getUserId(); +// LiveData> dbData = mAnswerDao.getAnswerEntityById(communityId + userId); +// mLiveData.addSource(dbData, entityList -> { +// mLiveData.removeSource(dbData); +// if (entityList == null || entityList.isEmpty()) { +// loadData(true, null, loadType); +// } else { +// List itemList = new ArrayList<>(); +// addAnswerToItemData(itemList, entityList, false); +// mLiveData.postValue(itemList); +// mLoadStatusLiveData.setValue(LoadStatus.INIT_LOADED); +// +// String sequenceId = null; +// for (AnswerEntity entity : entityList) { +// if (!TextUtils.isEmpty(entity.getSequenceId())) { +// sequenceId = entity.getSequenceId(); +// break; +// } +// } +// loadData(true, sequenceId, loadType); +// +// getSuggestedFollows(); +// } +// }); +// } +// } +// +// public void removeDataByAnswerId(String answerId) { +// if (!TextUtils.isEmpty(answerId)) { +// List value = mLiveData.getValue(); +// if (value != null) { +// // 删除内存相关内容 +// for (int i = 0; i < value.size(); i++) { +// AnswerEntity entity = value.get(i).getAnswer(); +// if (entity != null && answerId.equals(entity.getId())) { +// value.remove(i); +// i--; +// } +// } +// // 更新页面 +// mLiveData.postValue(value); +// // 删除数据库内容 +// mAnswerDao.deleteDataByAnswerId(answerId); +// } +// } +// } +// +// @Override +// public LiveData> getObsListData() { +// return mLiveData; +// } +// +// @Override +// public LiveData getLoadStatusLiveData() { +// return mLoadStatusLiveData; +// } +// +// public LiveData getRefreshCount() { +// return mRefreshCount; +// } +// +// public static String getCheckIsHasCommunityDataKey() { +// return "CheckCommunityDataKey" + UserManager.getInstance().getCommunity().getId() + UserManager.getInstance().getUserId(); +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/recommends/AskRecommendSubjectViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/recommends/AskRecommendSubjectViewModel.kt index b9c9d4cbcc..de5a63c108 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/recommends/AskRecommendSubjectViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/recommends/AskRecommendSubjectViewModel.kt @@ -1,64 +1,64 @@ package com.gh.gamecenter.qa.recommends -import android.annotation.SuppressLint -import android.app.Application -import androidx.lifecycle.AndroidViewModel -import androidx.lifecycle.MediatorLiveData -import androidx.lifecycle.MutableLiveData -import com.gh.gamecenter.entity.LinkEntity -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.retrofit.BiResponse -import com.gh.gamecenter.retrofit.Response -import com.gh.gamecenter.retrofit.RetrofitManager -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.schedulers.Schedulers -import retrofit2.HttpException - -class AskRecommendSubjectViewModel(application: Application) : AndroidViewModel(application) { - val slideLiveData = MediatorLiveData>() - val recommendedEntrances = MutableLiveData>() - - init { - loadAskSlideColumn() - loadRecommendedEntrance() - } - - fun loadAskSlideColumn() { - val communityId = UserManager.getInstance().community.id - - RetrofitManager.getInstance().api - .getAskSlide(UserManager.getInstance().community.id) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(object : Response>() { - override fun onResponse(response: List?) { - super.onResponse(response) - - if (communityId == UserManager.getInstance().community.id) { - slideLiveData.postValue(response) - } - } - - override fun onFailure(e: HttpException?) { - super.onFailure(e) - slideLiveData.postValue(null) - } - }) - } - - @SuppressLint("CheckResult") - fun loadRecommendedEntrance() { - RetrofitManager.getInstance().api - .getCommunityRecommendedEntrances(UserManager.getInstance().community.id) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(object : BiResponse>() { - override fun onSuccess(data: ArrayList) { - for (link in data) { - link.communityId = link.community?.id - } - recommendedEntrances.postValue(data) - } - }) - } -} +//import android.annotation.SuppressLint +//import android.app.Application +//import androidx.lifecycle.AndroidViewModel +//import androidx.lifecycle.MediatorLiveData +//import androidx.lifecycle.MutableLiveData +//import com.gh.gamecenter.entity.LinkEntity +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.retrofit.BiResponse +//import com.gh.gamecenter.retrofit.Response +//import com.gh.gamecenter.retrofit.RetrofitManager +//import io.reactivex.android.schedulers.AndroidSchedulers +//import io.reactivex.schedulers.Schedulers +//import retrofit2.HttpException +// +//class AskRecommendSubjectViewModel(application: Application) : AndroidViewModel(application) { +// val slideLiveData = MediatorLiveData>() +// val recommendedEntrances = MutableLiveData>() +// +// init { +// loadAskSlideColumn() +// loadRecommendedEntrance() +// } +// +// fun loadAskSlideColumn() { +// val communityId = UserManager.getInstance().community.id +// +// RetrofitManager.getInstance().api +// .getAskSlide(UserManager.getInstance().community.id) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(object : Response>() { +// override fun onResponse(response: List?) { +// super.onResponse(response) +// +// if (communityId == UserManager.getInstance().community.id) { +// slideLiveData.postValue(response) +// } +// } +// +// override fun onFailure(e: HttpException?) { +// super.onFailure(e) +// slideLiveData.postValue(null) +// } +// }) +// } +// +// @SuppressLint("CheckResult") +// fun loadRecommendedEntrance() { +// RetrofitManager.getInstance().api +// .getCommunityRecommendedEntrances(UserManager.getInstance().community.id) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(object : BiResponse>() { +// override fun onSuccess(data: ArrayList) { +// for (link in data) { +// link.communityId = link.community?.id +// } +// recommendedEntrances.postValue(data) +// } +// }) +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/recommends/AskRecommendWrapperFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/recommends/AskRecommendWrapperFragment.kt index d6343c5bff..29f4c8b8d4 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/recommends/AskRecommendWrapperFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/recommends/AskRecommendWrapperFragment.kt @@ -1,314 +1,314 @@ -package com.gh.gamecenter.qa.recommends +//package com.gh.gamecenter.qa.recommends -import android.app.Activity -import android.content.Intent -import android.os.Bundle -import android.os.Message -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.LinearLayout -import android.widget.TextView -import androidx.fragment.app.Fragment -import androidx.fragment.app.FragmentTransaction -import androidx.lifecycle.Observer -import androidx.lifecycle.ViewModelProviders -import androidx.viewpager.widget.ViewPager -import com.facebook.drawee.view.SimpleDraweeView -import com.gh.base.fragment.BaseFragment -import com.gh.common.util.* -import com.gh.common.view.BugFixedPopupWindow -import com.gh.common.view.DumbRefreshLayout -import com.gh.common.view.SwipeRefreshHeader -import com.gh.gamecenter.R -import com.gh.gamecenter.entity.CommunityEntity -import com.gh.gamecenter.entity.LinkEntity -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.qa.CommunityFragment.Companion.COMMUNITIES_SELECT_REQUEST -import com.gh.gamecenter.qa.recommends.newest.RecommendNewestFragment -import com.google.android.material.appbar.AppBarLayout -import kotterknife.bindView - -class AskRecommendWrapperFragment : BaseFragment() { - - private val mAppBar by bindView(R.id.recommend_subject_bar) - private val mSubjectViewPager by bindView(R.id.ask_recommends_subject_vp) - private val mChangeBtn by bindView(R.id.ask_recommend_change) - private val mEntranceContainer by bindView(R.id.ask_recommend_entrance_container) - private val containerLl by bindView(R.id.containerLl) - - val refreshLayout by bindView(R.id.refresh_layout) - val refreshHeader by bindView(R.id.swipe_refresh_header) - - var subjectViewModel: AskRecommendSubjectViewModel? = null - - private var mNewestFragment: RecommendNewestFragment? = null - private var mRecommendsFragment: AskQuestionsRecommendsFragment? = null - - override fun handleMessage(msg: Message) { - if (msg.what == VIEWPAGER_HANDLE_KEY) { - var lastPosition = mSubjectViewPager.currentItem - val pageAdapter = mSubjectViewPager.adapter - if (pageAdapter is AskRecommendsSubjectPageAdapter && pageAdapter.touchPage) { - sendScrollMessage() - return - } - - val itemCount = pageAdapter?.count ?: 0 - var isPositivePatch: Boolean = if (mSubjectViewPager.tag is Boolean) { - mSubjectViewPager.tag as Boolean - } else { - true - } - val position = if (isPositivePatch) { - if (lastPosition == itemCount - 1) { - isPositivePatch = !isPositivePatch - --lastPosition - } else { - ++lastPosition - } - } else { - if (lastPosition == 0) { - isPositivePatch = !isPositivePatch - ++lastPosition - } else { - --lastPosition - } - } - - mSubjectViewPager.setCurrentItem(position, true) - mSubjectViewPager.tag = isPositivePatch - sendScrollMessage() - } - } - - override fun getLayoutId(): Int { - return R.layout.fragment_ask_recommends_wrapper - } - - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - if (requestCode == COMMUNITIES_SELECT_REQUEST && resultCode == Activity.RESULT_OK) { - if (CommunityEntity.SORT_TIME == UserManager.getInstance().community.refreshSort) { - changeFragment(true) - } else { - changeFragment(false) - } - - subjectViewModel?.loadAskSlideColumn() - subjectViewModel?.loadRecommendedEntrance() - } - - for (fragment in childFragmentManager.fragments) { - fragment.onActivityResult(requestCode, resultCode, data) - } - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - subjectViewModel = ViewModelProviders.of(this).get(AskRecommendSubjectViewModel::class.java) - subjectViewModel?.slideLiveData?.observe(this, Observer { - if (it != null && it.isNotEmpty()) { - mSubjectViewPager.visibility = View.VISIBLE - mEntranceContainer.visibility = View.VISIBLE - initViewPager(it) - } else { - mSubjectViewPager.visibility = View.GONE - } - }) - - subjectViewModel?.recommendedEntrances?.observeNonNull(this) { - initEntrance(it) - } - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - setViewPagerHeight() - - if (CommunityEntity.SORT_TIME == UserManager.getInstance().community.refreshSort) { - changeFragment(true) - } else { - changeFragment(false) - } - - mChangeBtn.setOnClickListener { - MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, "推荐-切换排序") - showMoreItemDialog() - } - - refreshLayout.setOnRefreshListener { - if (mRecommendsFragment != null && mRecommendsFragment!!.isVisible) { - mRecommendsFragment?.onRefresh() - } - if (mNewestFragment != null && mNewestFragment!!.isVisible) { - mNewestFragment?.onRefresh() - } - - subjectViewModel?.loadAskSlideColumn() - subjectViewModel?.loadRecommendedEntrance() - } - } - - private fun setViewPagerHeight() { - val height = (resources.displayMetrics.widthPixels.toFloat() - DisplayUtils.dip2px(40F)) * 0.4F - val params = mSubjectViewPager.layoutParams - params.height = height.toInt() - mSubjectViewPager.layoutParams = params - } - - private fun showMoreItemDialog() { - val topDrawable = resources.getDrawable(R.drawable.community_recommend_change_up) - topDrawable.setBounds(0, 0, topDrawable.minimumWidth, topDrawable.minimumHeight) - mChangeBtn.setCompoundDrawables(null, null, topDrawable, null) - - val view = LayoutInflater.from(context).inflate(R.layout.ask_recommend_change, null) - val popupWindow = BugFixedPopupWindow( - view, - LinearLayout.LayoutParams.WRAP_CONTENT, - LinearLayout.LayoutParams.WRAP_CONTENT - ) - popupWindow.isTouchable = true - popupWindow.isFocusable = true - popupWindow.setOnDismissListener { - val bottomDrawable = view.context.resources.getDrawable(R.drawable.community_recommend_change_down) - bottomDrawable.setBounds(0, 0, bottomDrawable.minimumWidth, bottomDrawable.minimumHeight) - mChangeBtn.setCompoundDrawables(null, null, bottomDrawable, null) - } - popupWindow.showAsDropDown(mChangeBtn, (-3F).dip2px(), 4F.dip2px()) - - val recommendSelect = view.findViewById(R.id.sort_recommend_select) - val timeSelect = view.findViewById(R.id.sort_time_select) - val itemRecommend = view.findViewById(R.id.sort_recommend) - val itemTime = view.findViewById(R.id.sort_time) - - itemRecommend.setOnClickListener { - recommendSelect.visibility = View.VISIBLE - timeSelect.visibility = View.INVISIBLE - popupWindow.dismiss() - changeFragment(false) - MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, "推荐-按精选排序") - } - itemTime.setOnClickListener { - recommendSelect.visibility = View.INVISIBLE - timeSelect.visibility = View.VISIBLE - popupWindow.dismiss() - changeFragment(true) - MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, "推荐-按时间排序") - } - - val recommendFragmentIsVisible = mRecommendsFragment != null && mRecommendsFragment!!.isVisible - recommendSelect.visibleIf(recommendFragmentIsVisible) - timeSelect.visibleIf(!recommendFragmentIsVisible) - } - - private fun initViewPager(slide: List) { - // init viewpager - containerLl.removeViewAt(0) - val pageAdapter = AskRecommendsSubjectPageAdapter(context, slide) - mSubjectViewPager.pageMargin = DisplayUtils.dip2px(10f) - mSubjectViewPager.offscreenPageLimit = 3 - mSubjectViewPager.adapter = pageAdapter - mSubjectViewPager.setCurrentItem(pageAdapter.actualFirstPositionInCenter,false) - containerLl.addView(mSubjectViewPager,0) - mSubjectViewPager.doOnScroll(onStateChanged = { - pageAdapter.setScrollState(it) - }) - sendScrollMessage() - } - - private fun initEntrance(linkList: List?) { - linkList?.let { - mEntranceContainer.removeAllViews() - - for ((index, link) in it.withIndex()) { - if (index == 5) break - - val entranceViewItem = LayoutInflater.from(requireContext()).inflate(R.layout.item_entrance, mEntranceContainer, false) - - val entranceViewTv = entranceViewItem.findViewById(R.id.entrance_tv) - val entranceViewIv = entranceViewItem.findViewById(R.id.entrance_iv) - - entranceViewTv.text = link.name - ImageUtils.display(entranceViewIv, link.image) - - entranceViewItem.setOnClickListener { - MtaHelper.onEvent("社区推荐入口", UserManager.getInstance().community.name, link.name) - DirectUtils.directToLinkPage(entranceViewTv.context, link, "", "推荐入口") - } - - mEntranceContainer.addView(entranceViewItem) - } - } - } - - override fun onResume() { - super.onResume() - sendScrollMessage() - } - - override fun onPause() { - super.onPause() - mBaseHandler.removeMessages(VIEWPAGER_HANDLE_KEY) - } - - private fun sendScrollMessage() { - mBaseHandler.removeMessages(VIEWPAGER_HANDLE_KEY) - mBaseHandler.sendEmptyMessageDelayed(VIEWPAGER_HANDLE_KEY, VIEWPAGER_INTERVAL) - } - - private fun changeFragment(isNewest: Boolean) { - if (isNewest) { - mChangeBtn.text = getString(R.string.community_recommend_sort_time) - } else { - mChangeBtn.text = getString(R.string.community_recommend_sort_choiceness) - } - - val transaction = childFragmentManager.beginTransaction() - hideFragments(transaction) - if (isNewest) { - mNewestFragment = alterFragment(transaction, RecommendNewestFragment::class.java) - } else { - mRecommendsFragment = alterFragment(transaction, AskQuestionsRecommendsFragment::class.java) - } - transaction.commitAllowingStateLoss() - } - - private fun alterFragment(transaction: FragmentTransaction, cls: Class): T? { - val findFragmentByTag = childFragmentManager.findFragmentByTag(cls.simpleName) - var fragmentByTag: T? = if (findFragmentByTag != null) { - findFragmentByTag as T - } else { - null - } - try { - if (fragmentByTag != null) { - transaction.show(fragmentByTag) - } else { - fragmentByTag = cls.newInstance() - transaction.add(R.id.layout_fragment_content, fragmentByTag, cls.simpleName) - } - } catch (e: Exception) { - e.printStackTrace() - } - return fragmentByTag - } - - fun scrollToTop(smooth: Boolean = true) { - if (mRecommendsFragment?.isVisible == true) { - mRecommendsFragment?.scrollToTop(smooth) - } - if (mNewestFragment?.isVisible == true) { - mNewestFragment?.scrollToTop(smooth) - } - } - - fun openAppBar(smooth: Boolean = true) { - mAppBar.setExpanded(true, smooth) - } - - companion object { - private const val VIEWPAGER_INTERVAL: Long = 3000 - private const val VIEWPAGER_HANDLE_KEY = 0 - } -} \ No newline at end of file +//import android.app.Activity +//import android.content.Intent +//import android.os.Bundle +//import android.os.Message +//import android.view.LayoutInflater +//import android.view.View +//import android.view.ViewGroup +//import android.widget.LinearLayout +//import android.widget.TextView +//import androidx.fragment.app.Fragment +//import androidx.fragment.app.FragmentTransaction +//import androidx.lifecycle.Observer +//import androidx.lifecycle.ViewModelProviders +//import androidx.viewpager.widget.ViewPager +//import com.facebook.drawee.view.SimpleDraweeView +//import com.gh.base.fragment.BaseFragment +//import com.gh.common.util.* +//import com.gh.common.view.BugFixedPopupWindow +//import com.gh.common.view.DumbRefreshLayout +//import com.gh.common.view.SwipeRefreshHeader +//import com.gh.gamecenter.R +//import com.gh.gamecenter.entity.CommunityEntity +//import com.gh.gamecenter.entity.LinkEntity +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.qa.CommunityFragment.Companion.COMMUNITIES_SELECT_REQUEST +//import com.gh.gamecenter.qa.recommends.newest.RecommendNewestFragment +//import com.google.android.material.appbar.AppBarLayout +//import kotterknife.bindView +// +//class AskRecommendWrapperFragment : BaseFragment() { +// +// private val mAppBar by bindView(R.id.recommend_subject_bar) +// private val mSubjectViewPager by bindView(R.id.ask_recommends_subject_vp) +// private val mChangeBtn by bindView(R.id.ask_recommend_change) +// private val mEntranceContainer by bindView(R.id.ask_recommend_entrance_container) +// private val containerLl by bindView(R.id.containerLl) +// +// val refreshLayout by bindView(R.id.refresh_layout) +// val refreshHeader by bindView(R.id.swipe_refresh_header) +// +// var subjectViewModel: AskRecommendSubjectViewModel? = null +// +// private var mNewestFragment: RecommendNewestFragment? = null +// private var mRecommendsFragment: AskQuestionsRecommendsFragment? = null +// +// override fun handleMessage(msg: Message) { +// if (msg.what == VIEWPAGER_HANDLE_KEY) { +// var lastPosition = mSubjectViewPager.currentItem +// val pageAdapter = mSubjectViewPager.adapter +// if (pageAdapter is AskRecommendsSubjectPageAdapter && pageAdapter.touchPage) { +// sendScrollMessage() +// return +// } +// +// val itemCount = pageAdapter?.count ?: 0 +// var isPositivePatch: Boolean = if (mSubjectViewPager.tag is Boolean) { +// mSubjectViewPager.tag as Boolean +// } else { +// true +// } +// val position = if (isPositivePatch) { +// if (lastPosition == itemCount - 1) { +// isPositivePatch = !isPositivePatch +// --lastPosition +// } else { +// ++lastPosition +// } +// } else { +// if (lastPosition == 0) { +// isPositivePatch = !isPositivePatch +// ++lastPosition +// } else { +// --lastPosition +// } +// } +// +// mSubjectViewPager.setCurrentItem(position, true) +// mSubjectViewPager.tag = isPositivePatch +// sendScrollMessage() +// } +// } +// +// override fun getLayoutId(): Int { +// return R.layout.fragment_ask_recommends_wrapper +// } +// +// override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { +// super.onActivityResult(requestCode, resultCode, data) +// if (requestCode == COMMUNITIES_SELECT_REQUEST && resultCode == Activity.RESULT_OK) { +// if (CommunityEntity.SORT_TIME == UserManager.getInstance().community.refreshSort) { +// changeFragment(true) +// } else { +// changeFragment(false) +// } +// +// subjectViewModel?.loadAskSlideColumn() +// subjectViewModel?.loadRecommendedEntrance() +// } +// +// for (fragment in childFragmentManager.fragments) { +// fragment.onActivityResult(requestCode, resultCode, data) +// } +// } +// +// override fun onCreate(savedInstanceState: Bundle?) { +// super.onCreate(savedInstanceState) +// subjectViewModel = ViewModelProviders.of(this).get(AskRecommendSubjectViewModel::class.java) +// subjectViewModel?.slideLiveData?.observe(this, Observer { +// if (it != null && it.isNotEmpty()) { +// mSubjectViewPager.visibility = View.VISIBLE +// mEntranceContainer.visibility = View.VISIBLE +// initViewPager(it) +// } else { +// mSubjectViewPager.visibility = View.GONE +// } +// }) +// +// subjectViewModel?.recommendedEntrances?.observeNonNull(this) { +// initEntrance(it) +// } +// } +// +// override fun onViewCreated(view: View, savedInstanceState: Bundle?) { +// super.onViewCreated(view, savedInstanceState) +// setViewPagerHeight() +// +// if (CommunityEntity.SORT_TIME == UserManager.getInstance().community.refreshSort) { +// changeFragment(true) +// } else { +// changeFragment(false) +// } +// +// mChangeBtn.setOnClickListener { +// MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, "推荐-切换排序") +// showMoreItemDialog() +// } +// +// refreshLayout.setOnRefreshListener { +// if (mRecommendsFragment != null && mRecommendsFragment!!.isVisible) { +// mRecommendsFragment?.onRefresh() +// } +// if (mNewestFragment != null && mNewestFragment!!.isVisible) { +// mNewestFragment?.onRefresh() +// } +// +// subjectViewModel?.loadAskSlideColumn() +// subjectViewModel?.loadRecommendedEntrance() +// } +// } +// +// private fun setViewPagerHeight() { +// val height = (resources.displayMetrics.widthPixels.toFloat() - DisplayUtils.dip2px(40F)) * 0.4F +// val params = mSubjectViewPager.layoutParams +// params.height = height.toInt() +// mSubjectViewPager.layoutParams = params +// } +// +// private fun showMoreItemDialog() { +// val topDrawable = resources.getDrawable(R.drawable.community_recommend_change_up) +// topDrawable.setBounds(0, 0, topDrawable.minimumWidth, topDrawable.minimumHeight) +// mChangeBtn.setCompoundDrawables(null, null, topDrawable, null) +// +// val view = LayoutInflater.from(context).inflate(R.layout.ask_recommend_change, null) +// val popupWindow = BugFixedPopupWindow( +// view, +// LinearLayout.LayoutParams.WRAP_CONTENT, +// LinearLayout.LayoutParams.WRAP_CONTENT +// ) +// popupWindow.isTouchable = true +// popupWindow.isFocusable = true +// popupWindow.setOnDismissListener { +// val bottomDrawable = view.context.resources.getDrawable(R.drawable.community_recommend_change_down) +// bottomDrawable.setBounds(0, 0, bottomDrawable.minimumWidth, bottomDrawable.minimumHeight) +// mChangeBtn.setCompoundDrawables(null, null, bottomDrawable, null) +// } +// popupWindow.showAsDropDown(mChangeBtn, (-3F).dip2px(), 4F.dip2px()) +// +// val recommendSelect = view.findViewById(R.id.sort_recommend_select) +// val timeSelect = view.findViewById(R.id.sort_time_select) +// val itemRecommend = view.findViewById(R.id.sort_recommend) +// val itemTime = view.findViewById(R.id.sort_time) +// +// itemRecommend.setOnClickListener { +// recommendSelect.visibility = View.VISIBLE +// timeSelect.visibility = View.INVISIBLE +// popupWindow.dismiss() +// changeFragment(false) +// MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, "推荐-按精选排序") +// } +// itemTime.setOnClickListener { +// recommendSelect.visibility = View.INVISIBLE +// timeSelect.visibility = View.VISIBLE +// popupWindow.dismiss() +// changeFragment(true) +// MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, "推荐-按时间排序") +// } +// +// val recommendFragmentIsVisible = mRecommendsFragment != null && mRecommendsFragment!!.isVisible +// recommendSelect.visibleIf(recommendFragmentIsVisible) +// timeSelect.visibleIf(!recommendFragmentIsVisible) +// } +// +// private fun initViewPager(slide: List) { +// // init viewpager +// containerLl.removeViewAt(0) +// val pageAdapter = AskRecommendsSubjectPageAdapter(context, slide) +// mSubjectViewPager.pageMargin = DisplayUtils.dip2px(10f) +// mSubjectViewPager.offscreenPageLimit = 3 +// mSubjectViewPager.adapter = pageAdapter +// mSubjectViewPager.setCurrentItem(pageAdapter.actualFirstPositionInCenter,false) +// containerLl.addView(mSubjectViewPager,0) +// mSubjectViewPager.doOnScroll(onStateChanged = { +// pageAdapter.setScrollState(it) +// }) +// sendScrollMessage() +// } +// +// private fun initEntrance(linkList: List?) { +// linkList?.let { +// mEntranceContainer.removeAllViews() +// +// for ((index, link) in it.withIndex()) { +// if (index == 5) break +// +// val entranceViewItem = LayoutInflater.from(requireContext()).inflate(R.layout.item_entrance, mEntranceContainer, false) +// +// val entranceViewTv = entranceViewItem.findViewById(R.id.entrance_tv) +// val entranceViewIv = entranceViewItem.findViewById(R.id.entrance_iv) +// +// entranceViewTv.text = link.name +// ImageUtils.display(entranceViewIv, link.image) +// +// entranceViewItem.setOnClickListener { +// MtaHelper.onEvent("社区推荐入口", UserManager.getInstance().community.name, link.name) +// DirectUtils.directToLinkPage(entranceViewTv.context, link, "", "推荐入口") +// } +// +// mEntranceContainer.addView(entranceViewItem) +// } +// } +// } +// +// override fun onResume() { +// super.onResume() +// sendScrollMessage() +// } +// +// override fun onPause() { +// super.onPause() +// mBaseHandler.removeMessages(VIEWPAGER_HANDLE_KEY) +// } +// +// private fun sendScrollMessage() { +// mBaseHandler.removeMessages(VIEWPAGER_HANDLE_KEY) +// mBaseHandler.sendEmptyMessageDelayed(VIEWPAGER_HANDLE_KEY, VIEWPAGER_INTERVAL) +// } +// +// private fun changeFragment(isNewest: Boolean) { +// if (isNewest) { +// mChangeBtn.text = getString(R.string.community_recommend_sort_time) +// } else { +// mChangeBtn.text = getString(R.string.community_recommend_sort_choiceness) +// } +// +// val transaction = childFragmentManager.beginTransaction() +// hideFragments(transaction) +// if (isNewest) { +// mNewestFragment = alterFragment(transaction, RecommendNewestFragment::class.java) +// } else { +// mRecommendsFragment = alterFragment(transaction, AskQuestionsRecommendsFragment::class.java) +// } +// transaction.commitAllowingStateLoss() +// } +// +// private fun alterFragment(transaction: FragmentTransaction, cls: Class): T? { +// val findFragmentByTag = childFragmentManager.findFragmentByTag(cls.simpleName) +// var fragmentByTag: T? = if (findFragmentByTag != null) { +// findFragmentByTag as T +// } else { +// null +// } +// try { +// if (fragmentByTag != null) { +// transaction.show(fragmentByTag) +// } else { +// fragmentByTag = cls.newInstance() +// transaction.add(R.id.layout_fragment_content, fragmentByTag, cls.simpleName) +// } +// } catch (e: Exception) { +// e.printStackTrace() +// } +// return fragmentByTag +// } +// +// fun scrollToTop(smooth: Boolean = true) { +// if (mRecommendsFragment?.isVisible == true) { +// mRecommendsFragment?.scrollToTop(smooth) +// } +// if (mNewestFragment?.isVisible == true) { +// mNewestFragment?.scrollToTop(smooth) +// } +// } +// +// fun openAppBar(smooth: Boolean = true) { +// mAppBar.setExpanded(true, smooth) +// } +// +// companion object { +// private const val VIEWPAGER_INTERVAL: Long = 3000 +// private const val VIEWPAGER_HANDLE_KEY = 0 +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/recommends/AskRecommendsSubjectPageAdapter.java b/app/src/main/java/com/gh/gamecenter/qa/recommends/AskRecommendsSubjectPageAdapter.java index 44a9643d82..9b13be224a 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/recommends/AskRecommendsSubjectPageAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/qa/recommends/AskRecommendsSubjectPageAdapter.java @@ -1,95 +1,95 @@ -package com.gh.gamecenter.qa.recommends; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.view.ViewGroup; - -import com.gh.common.util.DirectUtils; -import com.gh.common.util.ImageUtils; -import com.gh.common.util.MtaHelper; -import com.gh.gamecenter.R; -import com.gh.gamecenter.adapter.RecyclingPagerAdapter; -import com.gh.gamecenter.databinding.AskRecommendsSubjectItemBinding; -import com.gh.gamecenter.entity.LinkEntity; -import com.gh.gamecenter.manager.UserManager; - -import java.util.List; - -import androidx.databinding.DataBindingUtil; -import androidx.viewpager.widget.ViewPager; - -/** - * Created by khy on 1/04/18. - */ - -public class AskRecommendsSubjectPageAdapter extends RecyclingPagerAdapter { - - private Context mContext; - - private List mEntityList; - - private Boolean mIsTouchPage = false; - private int mScrollState = ViewPager.SCROLL_STATE_IDLE; - - public AskRecommendsSubjectPageAdapter(Context context, List entityList) { - mContext = context; - mEntityList = entityList; - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public View getView(int position, View convertView, ViewGroup container) { - AskRecommendsSubjectItemBinding binding; - if (convertView != null) { - binding = AskRecommendsSubjectItemBinding.bind(convertView); - } else { - binding = AskRecommendsSubjectItemBinding.inflate(LayoutInflater.from(mContext), null, false); - } - LinkEntity entity = mEntityList.get(position % mEntityList.size()); - ImageUtils.display(binding.subjectIcon, entity.getImage()); - binding.getRoot().setOnClickListener(v -> { - MtaHelper.onEvent("社区轮播图", UserManager.getInstance().getCommunity().getName(), String.valueOf(position + 1)); - DirectUtils.directToLinkPage(mContext, entity, "", "轮播图"); - }); - - binding.getRoot().setOnTouchListener((v, event) -> { - if (event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE) { - mIsTouchPage = true; - } else { - mIsTouchPage = false; - } - return false; - }); - return binding.getRoot(); - } - - public int getSize(List sourceList) { - return sourceList == null ? 0 : sourceList.size(); - } - - public Boolean getTouchPage() { - return mIsTouchPage || mScrollState != ViewPager.SCROLL_STATE_IDLE; - } - - public void setScrollState(int scrollState) { - this.mScrollState = scrollState; - } - - @Override - public int getCount() { - if (mEntityList == null) return 0; - return Integer.MAX_VALUE; - } - - public int getActualFirstPositionInCenter() { - if (mEntityList == null) return 0; - int index = getCount() / 2; - if (index % mEntityList.size() != 0) { - index = index - (index % mEntityList.size()); - } - return index; - } -} +//package com.gh.gamecenter.qa.recommends; +// +//import android.annotation.SuppressLint; +//import android.content.Context; +//import android.view.LayoutInflater; +//import android.view.MotionEvent; +//import android.view.View; +//import android.view.ViewGroup; +// +//import com.gh.common.util.DirectUtils; +//import com.gh.common.util.ImageUtils; +//import com.gh.common.util.MtaHelper; +//import com.gh.gamecenter.R; +//import com.gh.gamecenter.adapter.RecyclingPagerAdapter; +//import com.gh.gamecenter.databinding.AskRecommendsSubjectItemBinding; +//import com.gh.gamecenter.entity.LinkEntity; +//import com.gh.gamecenter.manager.UserManager; +// +//import java.util.List; +// +//import androidx.databinding.DataBindingUtil; +//import androidx.viewpager.widget.ViewPager; +// +///** +// * Created by khy on 1/04/18. +// */ +// +//public class AskRecommendsSubjectPageAdapter extends RecyclingPagerAdapter { +// +// private Context mContext; +// +// private List mEntityList; +// +// private Boolean mIsTouchPage = false; +// private int mScrollState = ViewPager.SCROLL_STATE_IDLE; +// +// public AskRecommendsSubjectPageAdapter(Context context, List entityList) { +// mContext = context; +// mEntityList = entityList; +// } +// +// @SuppressLint("ClickableViewAccessibility") +// @Override +// public View getView(int position, View convertView, ViewGroup container) { +// AskRecommendsSubjectItemBinding binding; +// if (convertView != null) { +// binding = AskRecommendsSubjectItemBinding.bind(convertView); +// } else { +// binding = AskRecommendsSubjectItemBinding.inflate(LayoutInflater.from(mContext), null, false); +// } +// LinkEntity entity = mEntityList.get(position % mEntityList.size()); +// ImageUtils.display(binding.subjectIcon, entity.getImage()); +// binding.getRoot().setOnClickListener(v -> { +// MtaHelper.onEvent("社区轮播图", UserManager.getInstance().getCommunity().getName(), String.valueOf(position + 1)); +// DirectUtils.directToLinkPage(mContext, entity, "", "轮播图"); +// }); +// +// binding.getRoot().setOnTouchListener((v, event) -> { +// if (event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE) { +// mIsTouchPage = true; +// } else { +// mIsTouchPage = false; +// } +// return false; +// }); +// return binding.getRoot(); +// } +// +// public int getSize(List sourceList) { +// return sourceList == null ? 0 : sourceList.size(); +// } +// +// public Boolean getTouchPage() { +// return mIsTouchPage || mScrollState != ViewPager.SCROLL_STATE_IDLE; +// } +// +// public void setScrollState(int scrollState) { +// this.mScrollState = scrollState; +// } +// +// @Override +// public int getCount() { +// if (mEntityList == null) return 0; +// return Integer.MAX_VALUE; +// } +// +// public int getActualFirstPositionInCenter() { +// if (mEntityList == null) return 0; +// int index = getCount() / 2; +// if (index % mEntityList.size() != 0) { +// index = index - (index % mEntityList.size()); +// } +// return index; +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/recommends/RecommendConcernAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/recommends/RecommendConcernAdapter.kt index 6f83bbb2bf..28ee764c69 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/recommends/RecommendConcernAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/recommends/RecommendConcernAdapter.kt @@ -1,77 +1,77 @@ -package com.gh.gamecenter.qa.recommends - -import android.content.Context -import android.view.ViewGroup -import androidx.core.content.ContextCompat -import com.gh.common.util.DirectUtils -import com.gh.common.util.MtaHelper -import com.gh.common.util.toColor -import com.gh.gamecenter.R -import com.gh.gamecenter.databinding.AskRecommendsConcernListItemBinding -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.qa.entity.SuggestedFollowEntity -import com.lightgame.adapter.BaseRecyclerAdapter - -class RecommendConcernAdapter(context: Context, - val listViewModel: AskQuestionsRecommendsViewModel) : - BaseRecyclerAdapter(context) { - private var mListData: List = ArrayList() - - var isFollowed = false - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecommendConcernListItemViewHolder { - val inflate = mLayoutInflater.inflate(R.layout.ask_recommends_concern_list_item, parent, false) - return RecommendConcernListItemViewHolder(AskRecommendsConcernListItemBinding.bind(inflate)) - } - - override fun getItemCount() = if (mListData.size > 4) { - 4 - } else { - mListData.size - } - - override fun onBindViewHolder(holder: RecommendConcernListItemViewHolder, position: Int) { - val entity = mListData[position] - holder.binding.data = entity - holder.binding.concernCommand.let { v -> - v.setBackgroundResource(R.drawable.questions_detail_tag_bg) - v.setTextColor(R.color.theme_font.toColor()) - v.text = "关注" - v.setOnClickListener { - MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, "推荐关注-关注") - listViewModel.followUser(entity.id, object : OnFollowCallback { - override fun onFollowSuccess() { - isFollowed = true - v.setBackgroundResource(R.drawable.questions_detail_tag_bg) - v.setTextColor(ContextCompat.getColor(mContext, R.color.text_subtitleDesc)) - v.text = "已关注" - v.postDelayed({ - listViewModel.deleteFollowById(entity.id) - }, 1000) - } - }) - } - } - - holder.binding.concernUserIconContainer.setOnClickListener { - skipPersonalHome(entity) - } - holder.binding.concernUserName.setOnClickListener { - skipPersonalHome(entity) - } - } - - private fun skipPersonalHome(entity: SuggestedFollowEntity) { - DirectUtils.directToHomeActivity(mContext, entity.id, "", - AskQuestionsRecommendsFragment.QUESTION_RECOMMEND_PATH + "-推荐关注") - } - - fun updateData(list: List) { - mListData = ArrayList(list) - notifyDataSetChanged() - } - - interface OnFollowCallback { - fun onFollowSuccess() - } -} \ No newline at end of file +//package com.gh.gamecenter.qa.recommends +// +//import android.content.Context +//import android.view.ViewGroup +//import androidx.core.content.ContextCompat +//import com.gh.common.util.DirectUtils +//import com.gh.common.util.MtaHelper +//import com.gh.common.util.toColor +//import com.gh.gamecenter.R +//import com.gh.gamecenter.databinding.AskRecommendsConcernListItemBinding +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.qa.entity.SuggestedFollowEntity +//import com.lightgame.adapter.BaseRecyclerAdapter +// +//class RecommendConcernAdapter(context: Context, +// val listViewModel: AskQuestionsRecommendsViewModel) : +// BaseRecyclerAdapter(context) { +// private var mListData: List = ArrayList() +// +// var isFollowed = false +// +// override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecommendConcernListItemViewHolder { +// val inflate = mLayoutInflater.inflate(R.layout.ask_recommends_concern_list_item, parent, false) +// return RecommendConcernListItemViewHolder(AskRecommendsConcernListItemBinding.bind(inflate)) +// } +// +// override fun getItemCount() = if (mListData.size > 4) { +// 4 +// } else { +// mListData.size +// } +// +// override fun onBindViewHolder(holder: RecommendConcernListItemViewHolder, position: Int) { +// val entity = mListData[position] +// holder.binding.data = entity +// holder.binding.concernCommand.let { v -> +// v.setBackgroundResource(R.drawable.questions_detail_tag_bg) +// v.setTextColor(R.color.theme_font.toColor()) +// v.text = "关注" +// v.setOnClickListener { +// MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, "推荐关注-关注") +// listViewModel.followUser(entity.id, object : OnFollowCallback { +// override fun onFollowSuccess() { +// isFollowed = true +// v.setBackgroundResource(R.drawable.questions_detail_tag_bg) +// v.setTextColor(ContextCompat.getColor(mContext, R.color.text_subtitleDesc)) +// v.text = "已关注" +// v.postDelayed({ +// listViewModel.deleteFollowById(entity.id) +// }, 1000) +// } +// }) +// } +// } +// +// holder.binding.concernUserIconContainer.setOnClickListener { +// skipPersonalHome(entity) +// } +// holder.binding.concernUserName.setOnClickListener { +// skipPersonalHome(entity) +// } +// } +// +// private fun skipPersonalHome(entity: SuggestedFollowEntity) { +// DirectUtils.directToHomeActivity(mContext, entity.id, "", +// AskQuestionsRecommendsFragment.QUESTION_RECOMMEND_PATH + "-推荐关注") +// } +// +// fun updateData(list: List) { +// mListData = ArrayList(list) +// notifyDataSetChanged() +// } +// +// interface OnFollowCallback { +// fun onFollowSuccess() +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/recommends/RecommendConcernItemViewHolder.kt b/app/src/main/java/com/gh/gamecenter/qa/recommends/RecommendConcernItemViewHolder.kt index b2131b3c98..f5e647b285 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/recommends/RecommendConcernItemViewHolder.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/recommends/RecommendConcernItemViewHolder.kt @@ -1,7 +1,7 @@ -package com.gh.gamecenter.qa.recommends - -import com.gh.base.BaseRecyclerViewHolder -import com.gh.gamecenter.databinding.AskRecommendsItemConcernBinding - -class RecommendConcernItemViewHolder(val binding: AskRecommendsItemConcernBinding) : BaseRecyclerViewHolder(binding.root) - +//package com.gh.gamecenter.qa.recommends +// +//import com.gh.base.BaseRecyclerViewHolder +//import com.gh.gamecenter.databinding.AskRecommendsItemConcernBinding +// +//class RecommendConcernItemViewHolder(val binding: AskRecommendsItemConcernBinding) : BaseRecyclerViewHolder(binding.root) +// diff --git a/app/src/main/java/com/gh/gamecenter/qa/recommends/RecommendConcernListItemViewHolder.kt b/app/src/main/java/com/gh/gamecenter/qa/recommends/RecommendConcernListItemViewHolder.kt index 40fb07c697..047c429157 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/recommends/RecommendConcernListItemViewHolder.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/recommends/RecommendConcernListItemViewHolder.kt @@ -1,7 +1,7 @@ -package com.gh.gamecenter.qa.recommends - -import com.gh.base.BaseRecyclerViewHolder -import com.gh.gamecenter.databinding.AskRecommendsConcernListItemBinding - -class RecommendConcernListItemViewHolder(val binding: AskRecommendsConcernListItemBinding) : BaseRecyclerViewHolder(binding.root) - +//package com.gh.gamecenter.qa.recommends +// +//import com.gh.base.BaseRecyclerViewHolder +//import com.gh.gamecenter.databinding.AskRecommendsConcernListItemBinding +// +//class RecommendConcernListItemViewHolder(val binding: AskRecommendsConcernListItemBinding) : BaseRecyclerViewHolder(binding.root) +// diff --git a/app/src/main/java/com/gh/gamecenter/qa/recommends/RecommendItemData.kt b/app/src/main/java/com/gh/gamecenter/qa/recommends/RecommendItemData.kt index e0f11cf6d6..ae6eae96ed 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/recommends/RecommendItemData.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/recommends/RecommendItemData.kt @@ -1,8 +1,8 @@ -package com.gh.gamecenter.qa.recommends - -import com.gh.gamecenter.qa.entity.AnswerEntity -import com.gh.gamecenter.qa.entity.SuggestedFollowEntity - -data class RecommendItemData(var answer: AnswerEntity? = null, - var refresh: Any? = null, - var followList: List? = null) \ No newline at end of file +//package com.gh.gamecenter.qa.recommends +// +//import com.gh.gamecenter.qa.entity.AnswerEntity +//import com.gh.gamecenter.qa.entity.SuggestedFollowEntity +// +//data class RecommendItemData(var answer: AnswerEntity? = null, +// var refresh: Any? = null, +// var followList: List? = null) \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/recommends/newest/RecommendNewestAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/recommends/newest/RecommendNewestAdapter.kt index 33ef6006d1..ec331b6693 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/recommends/newest/RecommendNewestAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/recommends/newest/RecommendNewestAdapter.kt @@ -1,98 +1,98 @@ -package com.gh.gamecenter.qa.recommends.newest - -import android.content.Context -import android.view.View -import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView -import com.gh.common.constant.ItemViewType -import com.gh.common.syncpage.ISyncAdapterHandler -import com.gh.gamecenter.R -import com.gh.gamecenter.adapter.viewholder.FooterViewHolder -import com.gh.gamecenter.baselist.ListAdapter -import com.gh.gamecenter.databinding.CommunityAnswerItemBinding -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.qa.answer.CommunityAnswerItemViewHolder -import com.gh.gamecenter.qa.answer.detail.SimpleAnswerDetailActivity -import com.gh.gamecenter.qa.article.detail.ArticleDetailActivity -import com.gh.gamecenter.qa.entity.AnswerEntity -import com.gh.gamecenter.qa.entity.Questions -import com.gh.gamecenter.qa.questions.newdetail.NewQuestionDetailActivity - -open class RecommendNewestAdapter(context: Context) : ListAdapter(context), ISyncAdapterHandler { - - override fun areItemsTheSame(oldItem: AnswerEntity?, newItem: AnswerEntity?): Boolean { - return oldItem?.id == newItem?.id - } - - override fun getItemViewType(position: Int): Int { - if (position == itemCount - 1) return ItemViewType.ITEM_FOOTER - return ItemViewType.ITEM_BODY - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - val view: View - return when (viewType) { - ItemViewType.ITEM_FOOTER -> { - view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false) - FooterViewHolder(view) - } - else -> { - view = mLayoutInflater.inflate(R.layout.community_answer_item, parent, false) - CommunityAnswerItemViewHolder(CommunityAnswerItemBinding.bind(view)) - } - } - } - - override fun getItemCount(): Int { - return if (mEntityList.isNotEmpty()) mEntityList.size + FOOTER_ITEM_COUNT else 0 - } - - override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - when (getItemViewType(position)) { - ItemViewType.ITEM_BODY -> { - val answer = mEntityList[position] - if ("community_article" == answer.type) { - val questions = Questions() - questions.title = answer.articleTitle - answer.questions = questions - } - - val answerViewHolder = holder as CommunityAnswerItemViewHolder - val binding = answerViewHolder.binding - answerViewHolder.bindAnswerItem(answer, "", getPath()) - binding.title.setOnClickListener { - if ("community_article" == answer.type) { - mContext.startActivity(ArticleDetailActivity.getIntent(mContext, UserManager.getInstance().community, answer.id!!, "", getPath())) - } else { - val questions = answer.questions - mContext.startActivity(NewQuestionDetailActivity.getIntent(mContext, questions.id, "", getPath())) - } - } - - answerViewHolder.itemView.setOnClickListener { - if ("community_article" == answer.type) { - mContext.startActivity(ArticleDetailActivity.getIntent(mContext, UserManager.getInstance().community, answer.id!!, "", getPath())) - } else { - mContext.startActivity(SimpleAnswerDetailActivity.getIntent(mContext, answer.id - ?: "", "", getPath())) - } - } - } - ItemViewType.ITEM_FOOTER -> { - val footerViewHolder = holder as FooterViewHolder - footerViewHolder.initItemPadding() - footerViewHolder.initFooterViewHolder(mIsLoading, mIsNetworkError, mIsOver) - } - } - } - - open fun getPath(): String { - return "问答-推荐-按时间" - } - - override fun getSyncData(position: Int): Pair? { - if (position >= mEntityList.size) return null - val entity = mEntityList[position] - return Pair(entity.id ?: "", entity) - } -} \ No newline at end of file +//package com.gh.gamecenter.qa.recommends.newest +// +//import android.content.Context +//import android.view.View +//import android.view.ViewGroup +//import androidx.recyclerview.widget.RecyclerView +//import com.gh.common.constant.ItemViewType +//import com.gh.common.syncpage.ISyncAdapterHandler +//import com.gh.gamecenter.R +//import com.gh.gamecenter.adapter.viewholder.FooterViewHolder +//import com.gh.gamecenter.baselist.ListAdapter +//import com.gh.gamecenter.databinding.CommunityAnswerItemBinding +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.qa.answer.CommunityAnswerItemViewHolder +//import com.gh.gamecenter.qa.answer.detail.SimpleAnswerDetailActivity +//import com.gh.gamecenter.qa.article.detail.ArticleDetailActivity +//import com.gh.gamecenter.qa.entity.AnswerEntity +//import com.gh.gamecenter.qa.entity.Questions +//import com.gh.gamecenter.qa.questions.newdetail.NewQuestionDetailActivity +// +//open class RecommendNewestAdapter(context: Context) : ListAdapter(context), ISyncAdapterHandler { +// +// override fun areItemsTheSame(oldItem: AnswerEntity?, newItem: AnswerEntity?): Boolean { +// return oldItem?.id == newItem?.id +// } +// +// override fun getItemViewType(position: Int): Int { +// if (position == itemCount - 1) return ItemViewType.ITEM_FOOTER +// return ItemViewType.ITEM_BODY +// } +// +// override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { +// val view: View +// return when (viewType) { +// ItemViewType.ITEM_FOOTER -> { +// view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false) +// FooterViewHolder(view) +// } +// else -> { +// view = mLayoutInflater.inflate(R.layout.community_answer_item, parent, false) +// CommunityAnswerItemViewHolder(CommunityAnswerItemBinding.bind(view)) +// } +// } +// } +// +// override fun getItemCount(): Int { +// return if (mEntityList.isNotEmpty()) mEntityList.size + FOOTER_ITEM_COUNT else 0 +// } +// +// override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { +// when (getItemViewType(position)) { +// ItemViewType.ITEM_BODY -> { +// val answer = mEntityList[position] +// if ("community_article" == answer.type) { +// val questions = Questions() +// questions.title = answer.articleTitle +// answer.questions = questions +// } +// +// val answerViewHolder = holder as CommunityAnswerItemViewHolder +// val binding = answerViewHolder.binding +// answerViewHolder.bindAnswerItem(answer, "", getPath()) +// binding.title.setOnClickListener { +// if ("community_article" == answer.type) { +// mContext.startActivity(ArticleDetailActivity.getIntent(mContext, UserManager.getInstance().community, answer.id!!, "", getPath())) +// } else { +// val questions = answer.questions +// mContext.startActivity(NewQuestionDetailActivity.getIntent(mContext, questions.id, "", getPath())) +// } +// } +// +// answerViewHolder.itemView.setOnClickListener { +// if ("community_article" == answer.type) { +// mContext.startActivity(ArticleDetailActivity.getIntent(mContext, UserManager.getInstance().community, answer.id!!, "", getPath())) +// } else { +// mContext.startActivity(SimpleAnswerDetailActivity.getIntent(mContext, answer.id +// ?: "", "", getPath())) +// } +// } +// } +// ItemViewType.ITEM_FOOTER -> { +// val footerViewHolder = holder as FooterViewHolder +// footerViewHolder.initItemPadding() +// footerViewHolder.initFooterViewHolder(mIsLoading, mIsNetworkError, mIsOver) +// } +// } +// } +// +// open fun getPath(): String { +// return "问答-推荐-按时间" +// } +// +// override fun getSyncData(position: Int): Pair? { +// if (position >= mEntityList.size) return null +// val entity = mEntityList[position] +// return Pair(entity.id ?: "", entity) +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/recommends/newest/RecommendNewestFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/recommends/newest/RecommendNewestFragment.kt index 749f4c6914..e706409ec5 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/recommends/newest/RecommendNewestFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/recommends/newest/RecommendNewestFragment.kt @@ -1,141 +1,142 @@ -package com.gh.gamecenter.qa.recommends.newest - -import android.app.Activity -import android.content.Intent -import android.os.Bundle -import android.view.View -import androidx.lifecycle.ViewModelProviders -import androidx.recyclerview.widget.RecyclerView -import com.gh.common.view.DumbRefreshLayout -import com.gh.common.view.VerticalItemDecoration -import com.gh.gamecenter.baselist.ListFragment -import com.gh.gamecenter.baselist.LoadStatus -import com.gh.gamecenter.baselist.LoadType -import com.gh.gamecenter.baselist.NormalListViewModel -import com.gh.gamecenter.eventbus.EBTypeChange -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.qa.CommunityFragment -import com.gh.gamecenter.qa.CommunityFragment.Companion.COMMUNITIES_SELECT_REQUEST -import com.gh.gamecenter.qa.entity.AnswerEntity -import com.gh.gamecenter.qa.recommends.AskRecommendWrapperFragment -import com.gh.gamecenter.retrofit.RetrofitManager -import com.halo.assistant.HaloApp -import io.reactivex.Observable -import org.greenrobot.eventbus.EventBus - -class RecommendNewestFragment : ListFragment>() { - - private var mAdapter: RecommendNewestAdapter? = null - - override fun provideListAdapter(): RecommendNewestAdapter { - if (mAdapter == null) { - mAdapter = RecommendNewestAdapter(requireContext()) - } - return mAdapter!! - } - - override fun getItemDecoration(): RecyclerView.ItemDecoration { - return VerticalItemDecoration(context, 8F, false) - } - - override fun provideDataObservable(page: Int): Observable> { - return RetrofitManager.getInstance().api.getCommunitiesRecommendNewest(UserManager.getInstance().community.id, page) - } - - override fun provideListViewModel(): NormalListViewModel { - val factory = NormalListViewModel.Factory(HaloApp.getInstance().application, this) - return ViewModelProviders.of(this, factory).get(NormalListViewModel::class.java) as NormalListViewModel - } - - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - if (requestCode == COMMUNITIES_SELECT_REQUEST && resultCode == Activity.RESULT_OK) { - scrollToTop() - mListViewModel.load(LoadType.REFRESH) - } - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - mListRv.addOnScrollListener(object : RecyclerView.OnScrollListener() { - override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { - if (dy > 5) { - EventBus.getDefault().post(EBTypeChange(CommunityFragment.EB_HIDE_QUESTION_BUTTON, CommunityFragment.INDEX_RECOMMEND)) - } else if (dy < -5) { - EventBus.getDefault().post(EBTypeChange(CommunityFragment.EB_SHOW_QUESTION_BUTTON, CommunityFragment.INDEX_RECOMMEND)) - } - } - }) - } - - fun scrollToTop(smooth: Boolean = true) { - if (mListRv != null) { - mListRv.stopScroll() - if (smooth) { - mLayoutManager.smoothScrollToPosition(mListRv, null, 0) - } else { - mLayoutManager.scrollToPosition(0) - } - if (parentFragment is AskRecommendWrapperFragment) { - (parentFragment as AskRecommendWrapperFragment).openAppBar(smooth) - } - } - } - - override fun onLoadEmpty() { - if (isExistSubjectData()) { - super.onLoadDone() - mAdapter?.loadChange(LoadStatus.LIST_OVER) - } else { - super.onLoadEmpty() - } - getDumbRefreshLayout().finishRefresh() - } - - override fun onLoadError() { - if (isExistSubjectData()) { - super.onLoadDone() - mAdapter?.loadChange(LoadStatus.LIST_FAILED) - } else { - super.onLoadError() - } - getDumbRefreshLayout().finishRefresh() - } - - override fun onLoadDone() { - super.onLoadDone() - getDumbRefreshLayout().finishRefresh() - } - - override fun onLoadRefresh() { - mBaseHandler.postDelayed({ mListViewModel.load(LoadType.REFRESH) }, 500) - } - - private fun isExistSubjectData(): Boolean { - val parentFragment = parentFragment - if (parentFragment is AskRecommendWrapperFragment) { - val subjectViewModel = parentFragment.subjectViewModel - return (subjectViewModel != null - && subjectViewModel.slideLiveData.value != null - && subjectViewModel.slideLiveData.value!!.isNotEmpty()) - } - return false - } - - private fun getDumbRefreshLayout(): DumbRefreshLayout { - val parentFragment = parentFragment - if (parentFragment is AskRecommendWrapperFragment) { - parentFragment.refreshHeader.setFinishText("刷新完成") - } - return (parentFragment as? AskRecommendWrapperFragment)?.refreshLayout - ?: DumbRefreshLayout(context) - } - - override fun provideSyncAdapter(): RecyclerView.Adapter<*>? { - return mAdapter - } - - override fun addSyncPageObserver(): Boolean { - return true - } -} \ No newline at end of file +//package com.gh.gamecenter.qa.recommends.newest +// +//import android.app.Activity +//import android.content.Intent +//import android.os.Bundle +//import android.view.View +//import androidx.lifecycle.ViewModelProviders +//import androidx.recyclerview.widget.RecyclerView +//import com.gh.common.view.DumbRefreshLayout +//import com.gh.common.view.VerticalItemDecoration +//import com.gh.gamecenter.baselist.ListFragment +//import com.gh.gamecenter.baselist.LoadStatus +//import com.gh.gamecenter.baselist.LoadType +//import com.gh.gamecenter.baselist.NormalListViewModel +//import com.gh.gamecenter.eventbus.EBTypeChange +//import com.gh.gamecenter.forum.home.CommunityHomeFragment +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.qa.CommunityFragment +//import com.gh.gamecenter.qa.CommunityFragment.Companion.COMMUNITIES_SELECT_REQUEST +//import com.gh.gamecenter.qa.entity.AnswerEntity +//import com.gh.gamecenter.qa.recommends.AskRecommendWrapperFragment +//import com.gh.gamecenter.retrofit.RetrofitManager +//import com.halo.assistant.HaloApp +//import io.reactivex.Observable +//import org.greenrobot.eventbus.EventBus +// +//class RecommendNewestFragment : ListFragment>() { +// +// private var mAdapter: RecommendNewestAdapter? = null +// +// override fun provideListAdapter(): RecommendNewestAdapter { +// if (mAdapter == null) { +// mAdapter = RecommendNewestAdapter(requireContext()) +// } +// return mAdapter!! +// } +// +// override fun getItemDecoration(): RecyclerView.ItemDecoration { +// return VerticalItemDecoration(context, 8F, false) +// } +// +// override fun provideDataObservable(page: Int): Observable> { +// return RetrofitManager.getInstance().api.getCommunitiesRecommendNewest(UserManager.getInstance().community.id, page) +// } +// +// override fun provideListViewModel(): NormalListViewModel { +// val factory = NormalListViewModel.Factory(HaloApp.getInstance().application, this) +// return ViewModelProviders.of(this, factory).get(NormalListViewModel::class.java) as NormalListViewModel +// } +// +// override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { +// super.onActivityResult(requestCode, resultCode, data) +// if (requestCode == COMMUNITIES_SELECT_REQUEST && resultCode == Activity.RESULT_OK) { +// scrollToTop() +// mListViewModel.load(LoadType.REFRESH) +// } +// } +// +// override fun onViewCreated(view: View, savedInstanceState: Bundle?) { +// super.onViewCreated(view, savedInstanceState) +// mListRv.addOnScrollListener(object : RecyclerView.OnScrollListener() { +// override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { +// if (dy > 5) { +// EventBus.getDefault().post(EBTypeChange(CommunityHomeFragment.EB_HIDE_QUESTION_BUTTON, CommunityFragment.INDEX_RECOMMEND)) +// } else if (dy < -5) { +// EventBus.getDefault().post(EBTypeChange(CommunityHomeFragment.EB_SHOW_QUESTION_BUTTON, CommunityFragment.INDEX_RECOMMEND)) +// } +// } +// }) +// } +// +// fun scrollToTop(smooth: Boolean = true) { +// if (mListRv != null) { +// mListRv.stopScroll() +// if (smooth) { +// mLayoutManager.smoothScrollToPosition(mListRv, null, 0) +// } else { +// mLayoutManager.scrollToPosition(0) +// } +// if (parentFragment is AskRecommendWrapperFragment) { +// (parentFragment as AskRecommendWrapperFragment).openAppBar(smooth) +// } +// } +// } +// +// override fun onLoadEmpty() { +// if (isExistSubjectData()) { +// super.onLoadDone() +// mAdapter?.loadChange(LoadStatus.LIST_OVER) +// } else { +// super.onLoadEmpty() +// } +// getDumbRefreshLayout().finishRefresh() +// } +// +// override fun onLoadError() { +// if (isExistSubjectData()) { +// super.onLoadDone() +// mAdapter?.loadChange(LoadStatus.LIST_FAILED) +// } else { +// super.onLoadError() +// } +// getDumbRefreshLayout().finishRefresh() +// } +// +// override fun onLoadDone() { +// super.onLoadDone() +// getDumbRefreshLayout().finishRefresh() +// } +// +// override fun onLoadRefresh() { +// mBaseHandler.postDelayed({ mListViewModel.load(LoadType.REFRESH) }, 500) +// } +// +// private fun isExistSubjectData(): Boolean { +// val parentFragment = parentFragment +// if (parentFragment is AskRecommendWrapperFragment) { +// val subjectViewModel = parentFragment.subjectViewModel +// return (subjectViewModel != null +// && subjectViewModel.slideLiveData.value != null +// && subjectViewModel.slideLiveData.value!!.isNotEmpty()) +// } +// return false +// } +// +// private fun getDumbRefreshLayout(): DumbRefreshLayout { +// val parentFragment = parentFragment +// if (parentFragment is AskRecommendWrapperFragment) { +// parentFragment.refreshHeader.setFinishText("刷新完成") +// } +// return (parentFragment as? AskRecommendWrapperFragment)?.refreshLayout +// ?: DumbRefreshLayout(context) +// } +// +// override fun provideSyncAdapter(): RecyclerView.Adapter<*>? { +// return mAdapter +// } +// +// override fun addSyncPageObserver(): Boolean { +// return true +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/search/AskSearchActivity.java b/app/src/main/java/com/gh/gamecenter/qa/search/AskSearchActivity.java index 60213f2a3b..dd35189e81 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/search/AskSearchActivity.java +++ b/app/src/main/java/com/gh/gamecenter/qa/search/AskSearchActivity.java @@ -1,335 +1,335 @@ -package com.gh.gamecenter.qa.search; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.os.Message; -import android.text.Editable; -import android.text.InputFilter; -import android.text.TextUtils; -import android.text.TextWatcher; -import android.view.View; -import android.view.inputmethod.EditorInfo; -import android.widget.EditText; -import android.widget.ImageView; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentTransaction; - -import com.gh.base.ToolBarActivity; -import com.gh.common.util.CheckLoginUtils; -import com.gh.common.util.EntranceUtils; -import com.gh.common.util.LogUtils; -import com.gh.common.util.MtaHelper; -import com.gh.common.util.PatternUtils; -import com.gh.common.util.PermissionHelper; -import com.gh.common.util.TextHelper; -import com.gh.gamecenter.R; -import com.gh.gamecenter.db.AskSearchHistoryDao; -import com.gh.gamecenter.eventbus.EBSearch; -import com.gh.gamecenter.manager.UserManager; -import com.gh.gamecenter.qa.questions.edit.QuestionEditActivity; -import com.gh.gamecenter.qa.search.history.HistoryFragment; -import com.gh.gamecenter.retrofit.Response; -import com.gh.gamecenter.retrofit.RetrofitManager; -import com.lightgame.utils.Util_System_Keyboard; - -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; -import org.json.JSONArray; - -import java.util.List; - -import butterknife.BindView; -import butterknife.OnClick; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.schedulers.Schedulers; -import okhttp3.ResponseBody; - -/** - * Created by khy on 8/12/17. - */ - -public class AskSearchActivity extends ToolBarActivity { - - private static final int POST_SEARCH_WHAT = 2; - private static final int QUESTION_REQUEST_CODE = 2; - public static final String ASK_SEARCH_EB_TYPE = "invoke_search"; - - @BindView(R.id.bar_search_edit) - EditText mSearchEt; - @BindView(R.id.bar_search_delete) - ImageView mSearchCancel; - @BindView(R.id.ask_search_hint) - View mSearchHint; - @BindView(R.id.ask_search_shadow) - View mSearchShadow; - @BindView(R.id.bar_question_btn) - TextView questionBtn; - - private AskSearchHistoryDao mDao; - - private String mSearchKey; - private String mPostedKey; - private String mColumnId; - private String mQuestionTag; - private String mDefaultSearchKey; - - public static Intent getIntent(Context context, String entrance) { - Intent intent = new Intent(context, AskSearchActivity.class); - intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance); - return intent; - } - - public static Intent getQuestionTagSearchIntent(Context context, String questionTag, String entrance) { - Intent intent = new Intent(context, AskSearchActivity.class); - intent.putExtra(EntranceUtils.KEY_QUESTION_TAG, questionTag); - intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance); - return intent; - } - - public static Intent getColumnSearchIntent(Context context, String columnId, String entrance) { - Intent intent = new Intent(context, AskSearchActivity.class); - intent.putExtra(EntranceUtils.KEY_COLUMN_ID, columnId); - intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance); - return intent; - } - - @Override - protected void handleMessage(Message msg) { - if (msg.what == 1) { - search(); - } else if (msg.what == POST_SEARCH_WHAT) { - LogUtils.uploadSearch(mSearchKey); - mPostedKey = mSearchKey; - } - } - - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - if (requestCode == QUESTION_REQUEST_CODE && resultCode == Activity.RESULT_OK) { - finish(); - } - } - - @Override - protected int getLayoutId() { - return R.layout.activity_ask_search; - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - mDao = new AskSearchHistoryDao(this); - mColumnId = getIntent().getStringExtra(EntranceUtils.KEY_COLUMN_ID); - mQuestionTag = getIntent().getStringExtra(EntranceUtils.KEY_QUESTION_TAG); - if (!TextUtils.isEmpty(mColumnId) || !TextUtils.isEmpty(mQuestionTag)) { - questionBtn.setText("搜索"); - if (!TextUtils.isEmpty(mColumnId)) { - mSearchEt.setHint("专栏内搜索"); - } else { - mSearchEt.setHint("标签内搜索"); - } - } else { - getCommunityDefaultSearch(); - } - - changeFragment(TextUtils.isEmpty(mSearchKey)); - - mSearchEt.postDelayed(() -> { - Util_System_Keyboard.showSoftKeyboard(this, mSearchEt); - }, 300); - mSearchEt.setOnEditorActionListener((v, actionId, event) -> { - if (actionId == EditorInfo.IME_ACTION_SEARCH) { - Util_System_Keyboard.hideSoftKeyboard(this, mSearchEt); - search(); - mDao.add(mSearchKey, UserManager.getInstance().getCommunity().getId()); - } - return false; - }); - - mSearchEt.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - String etContent = s.toString(); - - // 多个空格保留一个 - if(PatternUtils.isHasSpace(etContent)){ - mSearchEt.setText(PatternUtils.replaceSpace(etContent)); - mSearchEt.setSelection(start); - return; - } - if (s.length() > 0) { - mSearchCancel.setVisibility(View.VISIBLE); - } else { - mSearchCancel.setVisibility(View.GONE); - } - } - - @Override - public void afterTextChanged(Editable s) { - String newSearchKey = s.toString().trim(); - if (!newSearchKey.equals(mSearchKey)) { - mBaseHandler.removeMessages(1); - mSearchKey = newSearchKey; - mBaseHandler.sendEmptyMessageDelayed(1, 500); - } - } - }); - mSearchEt.setFilters(new InputFilter[]{TextHelper.getFilter(50, "最多输入50个字")}); - } - - @OnClick({R.id.bar_search_delete, R.id.bar_question_btn, R.id.search_questions_skip, R.id.bar_back}) - public void onClick(View v) { - if (v.getId() == R.id.bar_search_delete) { - mSearchCancel.setVisibility(View.GONE); - mSearchEt.setText(""); - } else if (v.getId() == R.id.search_questions_skip) { - CheckLoginUtils.checkLogin(this, "问答-搜索-提问", () -> { - PermissionHelper.checkStoragePermissionBeforeAction(this, () -> { - startActivityForResult(QuestionEditActivity.Companion.getIntent(this, mSearchKey), QUESTION_REQUEST_CODE); - }); - }); - } else if (v.getId() == R.id.bar_question_btn) { - String key = mSearchEt.getText().toString().trim(); - if (TextUtils.isEmpty(key)) { - if (!TextUtils.isEmpty(mDefaultSearchKey)) { - mSearchEt.setText(mDefaultSearchKey); - mSearchEt.setSelection(mSearchEt.getText().length()); - mDao.add(mDefaultSearchKey, UserManager.getInstance().getCommunity().getId()); - Util_System_Keyboard.hideSoftKeyboard(this, mSearchEt); - - MtaHelper.onEvent("社区搜索", "默认搜索", UserManager.getInstance().getCommunity().getName() + "-" + mDefaultSearchKey); - } - } else { - Util_System_Keyboard.hideSoftKeyboard(this, mSearchEt); - mDao.add(mSearchKey, UserManager.getInstance().getCommunity().getId()); - MtaHelper.onEvent("社区搜索", "主动搜索", UserManager.getInstance().getCommunity().getName() + "-" + mSearchKey); - } - } else if (v.getId() == R.id.bar_back) { - onBackPressed(); - } - } - - private void getCommunityDefaultSearch() { - RetrofitManager - .getInstance() - .getApi() - .getCommunityDefaultSearch(UserManager.getInstance().getCommunity().getId()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response() { - @Override - public void onResponse(@Nullable ResponseBody response) { - try { - JSONArray array = new JSONArray(response.string()); - if (array.length() > 0) { - mDefaultSearchKey = array.getString(0); - mSearchEt.setHint(mDefaultSearchKey); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - - private void search() { - if (mSearchKey == null) return; - - changeFragment(TextUtils.isEmpty(mSearchKey)); - - if (mSearchHint.getVisibility() == View.GONE) { - mSearchHint.setVisibility(View.VISIBLE); - mSearchShadow.setVisibility(View.VISIBLE); - } - - postLog(true); - } - - public void visibleOrGoneSearchHint(int visibility) { - mSearchHint.setVisibility(visibility); - mSearchShadow.setVisibility(visibility); - } - - @Override - public void onDestroy() { - if (TextUtils.isEmpty(mPostedKey) || !mPostedKey.equals(mSearchKey)) { - postLog(false); - } - super.onDestroy(); - } - - public void postLog(boolean isDelayed) { - mBaseHandler.removeMessages(POST_SEARCH_WHAT); - if (isDelayed) { - mBaseHandler.sendEmptyMessageDelayed(POST_SEARCH_WHAT, 2000); - } else { - mBaseHandler.sendEmptyMessage(POST_SEARCH_WHAT); - } - } - - private void changeFragment(boolean isShowHistory) { - FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); - List list = getSupportFragmentManager().getFragments(); - for (Fragment fragment : list) { - transaction.hide(fragment); - } - if (isShowHistory) { - String historyTag = HistoryFragment.class.getSimpleName(); - Fragment fragment = getSupportFragmentManager().findFragmentByTag(historyTag); - if (fragment != null) { - transaction.show(fragment); - } else { - HistoryFragment historyFragment = new HistoryFragment(); - transaction.add(R.id.layout_fragment_content, historyFragment, historyTag); - } - } else { - String searchTag = AskSearchFragment.class.getSimpleName(); - Fragment fragment = getSupportFragmentManager().findFragmentByTag(searchTag); - if (fragment instanceof AskSearchFragment) { - ((AskSearchFragment) fragment).updateSearch(mSearchKey); - transaction.show(fragment); - } else { - AskSearchFragment searchFragment = new AskSearchFragment(); - Bundle args = new Bundle(); - args.putString(EntranceUtils.KEY_SEARCHKEY, mSearchKey); - args.putString(EntranceUtils.KEY_COLUMN_ID, mColumnId); - args.putString(EntranceUtils.KEY_QUESTION_TAG, mQuestionTag); - searchFragment.setArguments(args); - transaction.add(R.id.layout_fragment_content, searchFragment, AskSearchFragment.class.getSimpleName()); - } - } - transaction.commitAllowingStateLoss(); - } - - @Subscribe(threadMode = ThreadMode.MAIN) - public void onEvent(EBSearch search) { - if (ASK_SEARCH_EB_TYPE.equals(search.getType()) && search.getKey() != null) { - mSearchKey = search.getKey(); - mSearchEt.setText(mSearchKey); - mSearchEt.setSelection(mSearchEt.getText().length()); - search(); - } - } - - @Override - protected boolean handleBackPressed() { - Fragment fragment = getSupportFragmentManager().findFragmentByTag(HistoryFragment.class.getSimpleName()); - if (fragment == null || !fragment.isVisible()) { - changeFragment(true); - mSearchEt.setText(""); - return true; - } - return super.handleBackPressed(); - } -} +//package com.gh.gamecenter.qa.search; +// +//import android.app.Activity; +//import android.content.Context; +//import android.content.Intent; +//import android.os.Bundle; +//import android.os.Message; +//import android.text.Editable; +//import android.text.InputFilter; +//import android.text.TextUtils; +//import android.text.TextWatcher; +//import android.view.View; +//import android.view.inputmethod.EditorInfo; +//import android.widget.EditText; +//import android.widget.ImageView; +//import android.widget.TextView; +// +//import androidx.annotation.Nullable; +//import androidx.fragment.app.Fragment; +//import androidx.fragment.app.FragmentTransaction; +// +//import com.gh.base.ToolBarActivity; +//import com.gh.common.util.CheckLoginUtils; +//import com.gh.common.util.EntranceUtils; +//import com.gh.common.util.LogUtils; +//import com.gh.common.util.MtaHelper; +//import com.gh.common.util.PatternUtils; +//import com.gh.common.util.PermissionHelper; +//import com.gh.common.util.TextHelper; +//import com.gh.gamecenter.R; +//import com.gh.gamecenter.db.AskSearchHistoryDao; +//import com.gh.gamecenter.eventbus.EBSearch; +//import com.gh.gamecenter.manager.UserManager; +//import com.gh.gamecenter.qa.questions.edit.QuestionEditActivity; +//import com.gh.gamecenter.qa.search.history.HistoryFragment; +//import com.gh.gamecenter.retrofit.Response; +//import com.gh.gamecenter.retrofit.RetrofitManager; +//import com.lightgame.utils.Util_System_Keyboard; +// +//import org.greenrobot.eventbus.Subscribe; +//import org.greenrobot.eventbus.ThreadMode; +//import org.json.JSONArray; +// +//import java.util.List; +// +//import butterknife.BindView; +//import butterknife.OnClick; +//import io.reactivex.android.schedulers.AndroidSchedulers; +//import io.reactivex.schedulers.Schedulers; +//import okhttp3.ResponseBody; +// +///** +// * Created by khy on 8/12/17. +// */ +// +//public class AskSearchActivity extends ToolBarActivity { +// +// private static final int POST_SEARCH_WHAT = 2; +// private static final int QUESTION_REQUEST_CODE = 2; +// public static final String ASK_SEARCH_EB_TYPE = "invoke_search"; +// +// @BindView(R.id.bar_search_edit) +// EditText mSearchEt; +// @BindView(R.id.bar_search_delete) +// ImageView mSearchCancel; +// @BindView(R.id.ask_search_hint) +// View mSearchHint; +// @BindView(R.id.ask_search_shadow) +// View mSearchShadow; +// @BindView(R.id.bar_question_btn) +// TextView questionBtn; +// +// private AskSearchHistoryDao mDao; +// +// private String mSearchKey; +// private String mPostedKey; +// private String mColumnId; +// private String mQuestionTag; +// private String mDefaultSearchKey; +// +// public static Intent getIntent(Context context, String entrance) { +// Intent intent = new Intent(context, AskSearchActivity.class); +// intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance); +// return intent; +// } +// +// public static Intent getQuestionTagSearchIntent(Context context, String questionTag, String entrance) { +// Intent intent = new Intent(context, AskSearchActivity.class); +// intent.putExtra(EntranceUtils.KEY_QUESTION_TAG, questionTag); +// intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance); +// return intent; +// } +// +// public static Intent getColumnSearchIntent(Context context, String columnId, String entrance) { +// Intent intent = new Intent(context, AskSearchActivity.class); +// intent.putExtra(EntranceUtils.KEY_COLUMN_ID, columnId); +// intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance); +// return intent; +// } +// +// @Override +// protected void handleMessage(Message msg) { +// if (msg.what == 1) { +// search(); +// } else if (msg.what == POST_SEARCH_WHAT) { +// LogUtils.uploadSearch(mSearchKey); +// mPostedKey = mSearchKey; +// } +// } +// +// @Override +// protected void onActivityResult(int requestCode, int resultCode, Intent data) { +// super.onActivityResult(requestCode, resultCode, data); +// if (requestCode == QUESTION_REQUEST_CODE && resultCode == Activity.RESULT_OK) { +// finish(); +// } +// } +// +// @Override +// protected int getLayoutId() { +// return R.layout.activity_ask_search; +// } +// +// @Override +// protected void onCreate(Bundle savedInstanceState) { +// super.onCreate(savedInstanceState); +// mDao = new AskSearchHistoryDao(this); +// mColumnId = getIntent().getStringExtra(EntranceUtils.KEY_COLUMN_ID); +// mQuestionTag = getIntent().getStringExtra(EntranceUtils.KEY_QUESTION_TAG); +// if (!TextUtils.isEmpty(mColumnId) || !TextUtils.isEmpty(mQuestionTag)) { +// questionBtn.setText("搜索"); +// if (!TextUtils.isEmpty(mColumnId)) { +// mSearchEt.setHint("专栏内搜索"); +// } else { +// mSearchEt.setHint("标签内搜索"); +// } +// } else { +// getCommunityDefaultSearch(); +// } +// +// changeFragment(TextUtils.isEmpty(mSearchKey)); +// +// mSearchEt.postDelayed(() -> { +// Util_System_Keyboard.showSoftKeyboard(this, mSearchEt); +// }, 300); +// mSearchEt.setOnEditorActionListener((v, actionId, event) -> { +// if (actionId == EditorInfo.IME_ACTION_SEARCH) { +// Util_System_Keyboard.hideSoftKeyboard(this, mSearchEt); +// search(); +// mDao.add(mSearchKey, UserManager.getInstance().getCommunity().getId()); +// } +// return false; +// }); +// +// mSearchEt.addTextChangedListener(new TextWatcher() { +// @Override +// public void beforeTextChanged(CharSequence s, int start, int count, int after) { +// +// } +// +// @Override +// public void onTextChanged(CharSequence s, int start, int before, int count) { +// String etContent = s.toString(); +// +// // 多个空格保留一个 +// if(PatternUtils.isHasSpace(etContent)){ +// mSearchEt.setText(PatternUtils.replaceSpace(etContent)); +// mSearchEt.setSelection(start); +// return; +// } +// if (s.length() > 0) { +// mSearchCancel.setVisibility(View.VISIBLE); +// } else { +// mSearchCancel.setVisibility(View.GONE); +// } +// } +// +// @Override +// public void afterTextChanged(Editable s) { +// String newSearchKey = s.toString().trim(); +// if (!newSearchKey.equals(mSearchKey)) { +// mBaseHandler.removeMessages(1); +// mSearchKey = newSearchKey; +// mBaseHandler.sendEmptyMessageDelayed(1, 500); +// } +// } +// }); +// mSearchEt.setFilters(new InputFilter[]{TextHelper.getFilter(50, "最多输入50个字")}); +// } +// +// @OnClick({R.id.bar_search_delete, R.id.bar_question_btn, R.id.search_questions_skip, R.id.bar_back}) +// public void onClick(View v) { +// if (v.getId() == R.id.bar_search_delete) { +// mSearchCancel.setVisibility(View.GONE); +// mSearchEt.setText(""); +// } else if (v.getId() == R.id.search_questions_skip) { +// CheckLoginUtils.checkLogin(this, "问答-搜索-提问", () -> { +// PermissionHelper.checkStoragePermissionBeforeAction(this, () -> { +// startActivityForResult(QuestionEditActivity.Companion.getIntent(this, mSearchKey), QUESTION_REQUEST_CODE); +// }); +// }); +// } else if (v.getId() == R.id.bar_question_btn) { +// String key = mSearchEt.getText().toString().trim(); +// if (TextUtils.isEmpty(key)) { +// if (!TextUtils.isEmpty(mDefaultSearchKey)) { +// mSearchEt.setText(mDefaultSearchKey); +// mSearchEt.setSelection(mSearchEt.getText().length()); +// mDao.add(mDefaultSearchKey, UserManager.getInstance().getCommunity().getId()); +// Util_System_Keyboard.hideSoftKeyboard(this, mSearchEt); +// +// MtaHelper.onEvent("社区搜索", "默认搜索", UserManager.getInstance().getCommunity().getName() + "-" + mDefaultSearchKey); +// } +// } else { +// Util_System_Keyboard.hideSoftKeyboard(this, mSearchEt); +// mDao.add(mSearchKey, UserManager.getInstance().getCommunity().getId()); +// MtaHelper.onEvent("社区搜索", "主动搜索", UserManager.getInstance().getCommunity().getName() + "-" + mSearchKey); +// } +// } else if (v.getId() == R.id.bar_back) { +// onBackPressed(); +// } +// } +// +// private void getCommunityDefaultSearch() { +// RetrofitManager +// .getInstance() +// .getApi() +// .getCommunityDefaultSearch(UserManager.getInstance().getCommunity().getId()) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new Response() { +// @Override +// public void onResponse(@Nullable ResponseBody response) { +// try { +// JSONArray array = new JSONArray(response.string()); +// if (array.length() > 0) { +// mDefaultSearchKey = array.getString(0); +// mSearchEt.setHint(mDefaultSearchKey); +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// }); +// } +// +// private void search() { +// if (mSearchKey == null) return; +// +// changeFragment(TextUtils.isEmpty(mSearchKey)); +// +// if (mSearchHint.getVisibility() == View.GONE) { +// mSearchHint.setVisibility(View.VISIBLE); +// mSearchShadow.setVisibility(View.VISIBLE); +// } +// +// postLog(true); +// } +// +// public void visibleOrGoneSearchHint(int visibility) { +// mSearchHint.setVisibility(visibility); +// mSearchShadow.setVisibility(visibility); +// } +// +// @Override +// public void onDestroy() { +// if (TextUtils.isEmpty(mPostedKey) || !mPostedKey.equals(mSearchKey)) { +// postLog(false); +// } +// super.onDestroy(); +// } +// +// public void postLog(boolean isDelayed) { +// mBaseHandler.removeMessages(POST_SEARCH_WHAT); +// if (isDelayed) { +// mBaseHandler.sendEmptyMessageDelayed(POST_SEARCH_WHAT, 2000); +// } else { +// mBaseHandler.sendEmptyMessage(POST_SEARCH_WHAT); +// } +// } +// +// private void changeFragment(boolean isShowHistory) { +// FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); +// List list = getSupportFragmentManager().getFragments(); +// for (Fragment fragment : list) { +// transaction.hide(fragment); +// } +// if (isShowHistory) { +// String historyTag = HistoryFragment.class.getSimpleName(); +// Fragment fragment = getSupportFragmentManager().findFragmentByTag(historyTag); +// if (fragment != null) { +// transaction.show(fragment); +// } else { +// HistoryFragment historyFragment = new HistoryFragment(); +// transaction.add(R.id.layout_fragment_content, historyFragment, historyTag); +// } +// } else { +// String searchTag = AskSearchFragment.class.getSimpleName(); +// Fragment fragment = getSupportFragmentManager().findFragmentByTag(searchTag); +// if (fragment instanceof AskSearchFragment) { +// ((AskSearchFragment) fragment).updateSearch(mSearchKey); +// transaction.show(fragment); +// } else { +// AskSearchFragment searchFragment = new AskSearchFragment(); +// Bundle args = new Bundle(); +// args.putString(EntranceUtils.KEY_SEARCHKEY, mSearchKey); +// args.putString(EntranceUtils.KEY_COLUMN_ID, mColumnId); +// args.putString(EntranceUtils.KEY_QUESTION_TAG, mQuestionTag); +// searchFragment.setArguments(args); +// transaction.add(R.id.layout_fragment_content, searchFragment, AskSearchFragment.class.getSimpleName()); +// } +// } +// transaction.commitAllowingStateLoss(); +// } +// +// @Subscribe(threadMode = ThreadMode.MAIN) +// public void onEvent(EBSearch search) { +// if (ASK_SEARCH_EB_TYPE.equals(search.getType()) && search.getKey() != null) { +// mSearchKey = search.getKey(); +// mSearchEt.setText(mSearchKey); +// mSearchEt.setSelection(mSearchEt.getText().length()); +// search(); +// } +// } +// +// @Override +// protected boolean handleBackPressed() { +// Fragment fragment = getSupportFragmentManager().findFragmentByTag(HistoryFragment.class.getSimpleName()); +// if (fragment == null || !fragment.isVisible()) { +// changeFragment(true); +// mSearchEt.setText(""); +// return true; +// } +// return super.handleBackPressed(); +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/search/AskSearchFragment.java b/app/src/main/java/com/gh/gamecenter/qa/search/AskSearchFragment.java index 3e7d385c30..a692d126c7 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/search/AskSearchFragment.java +++ b/app/src/main/java/com/gh/gamecenter/qa/search/AskSearchFragment.java @@ -1,104 +1,104 @@ -package com.gh.gamecenter.qa.search; - -import android.os.Bundle; -import android.text.TextUtils; -import android.view.View; - -import com.gh.base.fragment.BaseFragment_TabLayout; -import com.gh.common.util.EntranceUtils; -import com.gh.gamecenter.R; -import com.gh.gamecenter.qa.search.artilce.ArticleFragment; -import com.gh.gamecenter.qa.search.base.BaseAskSearchFragment; -import com.gh.gamecenter.qa.search.hottest.HottestFragment; -import com.gh.gamecenter.qa.search.newest.NewestFragment; -import com.gh.gamecenter.qa.search.question.QuestionFragment; -import com.gh.gamecenter.qa.search.user.UserFragment; - -import java.util.List; - -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentActivity; -import butterknife.BindView; - -public class AskSearchFragment extends BaseFragment_TabLayout { - - @BindView(R.id.fragment_tab_container) - public View mTabContainer; - - private String mQuestionTag; - private String mColumnId; - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - Bundle arguments = getArguments(); - if (arguments != null) { - mQuestionTag = arguments.getString(EntranceUtils.KEY_QUESTION_TAG); - mColumnId = arguments.getString(EntranceUtils.KEY_COLUMN_ID); - } - super.onCreate(savedInstanceState); - } - - @Override - protected void initFragmentList(List fragments) { - fragments.add(new HottestFragment()); - fragments.add(new NewestFragment()); - if (TextUtils.isEmpty(mQuestionTag) && TextUtils.isEmpty(mColumnId)) { - fragments.add(new ArticleFragment()); - } - fragments.add(new QuestionFragment()); - if (TextUtils.isEmpty(mQuestionTag) && TextUtils.isEmpty(mColumnId)) { - fragments.add(new UserFragment()); - } - - Bundle arguments = getArguments(); - for (Fragment fragment : mFragmentsList) { - fragment.setArguments(arguments); - } - } - - @Override - protected void initTabTitleList(List tabTitleList) { - if (TextUtils.isEmpty(mQuestionTag) && TextUtils.isEmpty(mColumnId)) { - tabTitleList.add("最热"); - tabTitleList.add("最新"); - tabTitleList.add("帖子"); - tabTitleList.add("问题"); - tabTitleList.add("用户"); - } else { - tabTitleList.add("最热回答"); - tabTitleList.add("最新回答"); - tabTitleList.add("只看问题"); - } - } - - @Override - public void onPageSelected(int position) { - FragmentActivity activity = getActivity(); - if (mFragmentsList.get(position) instanceof UserFragment) { - if (activity instanceof AskSearchActivity) { - ((AskSearchActivity) activity).visibleOrGoneSearchHint(View.GONE); - } - } else { - if (activity instanceof AskSearchActivity) { - ((AskSearchActivity) activity).visibleOrGoneSearchHint(View.VISIBLE); - } - } - } - - void updateSearch(String key) { - if (!isAdded()) return; - - for (Fragment fragment : mFragmentsList) { - if (fragment instanceof BaseAskSearchFragment && fragment.isAdded()) { - ((BaseAskSearchFragment) fragment).search(key); - Bundle arguments = fragment.getArguments(); - // 处于 state saved 状态的 fragment 不可 setArguments - if (arguments != null && !fragment.isStateSaved()) { - arguments.putString(EntranceUtils.KEY_SEARCHKEY, key); - fragment.setArguments(arguments); - } - } - } - } -} +//package com.gh.gamecenter.qa.search; +// +//import android.os.Bundle; +//import android.text.TextUtils; +//import android.view.View; +// +//import com.gh.base.fragment.BaseFragment_TabLayout; +//import com.gh.common.util.EntranceUtils; +//import com.gh.gamecenter.R; +//import com.gh.gamecenter.qa.search.artilce.ArticleFragment; +//import com.gh.gamecenter.qa.search.base.BaseAskSearchFragment; +//import com.gh.gamecenter.qa.search.hottest.HottestFragment; +//import com.gh.gamecenter.qa.search.newest.NewestFragment; +//import com.gh.gamecenter.qa.search.question.QuestionFragment; +//import com.gh.gamecenter.qa.search.user.UserFragment; +// +//import java.util.List; +// +//import androidx.annotation.Nullable; +//import androidx.fragment.app.Fragment; +//import androidx.fragment.app.FragmentActivity; +//import butterknife.BindView; +// +//public class AskSearchFragment extends BaseFragment_TabLayout { +// +// @BindView(R.id.fragment_tab_container) +// public View mTabContainer; +// +// private String mQuestionTag; +// private String mColumnId; +// +// @Override +// public void onCreate(@Nullable Bundle savedInstanceState) { +// Bundle arguments = getArguments(); +// if (arguments != null) { +// mQuestionTag = arguments.getString(EntranceUtils.KEY_QUESTION_TAG); +// mColumnId = arguments.getString(EntranceUtils.KEY_COLUMN_ID); +// } +// super.onCreate(savedInstanceState); +// } +// +// @Override +// protected void initFragmentList(List fragments) { +// fragments.add(new HottestFragment()); +// fragments.add(new NewestFragment()); +// if (TextUtils.isEmpty(mQuestionTag) && TextUtils.isEmpty(mColumnId)) { +// fragments.add(new ArticleFragment()); +// } +// fragments.add(new QuestionFragment()); +// if (TextUtils.isEmpty(mQuestionTag) && TextUtils.isEmpty(mColumnId)) { +// fragments.add(new UserFragment()); +// } +// +// Bundle arguments = getArguments(); +// for (Fragment fragment : mFragmentsList) { +// fragment.setArguments(arguments); +// } +// } +// +// @Override +// protected void initTabTitleList(List tabTitleList) { +// if (TextUtils.isEmpty(mQuestionTag) && TextUtils.isEmpty(mColumnId)) { +// tabTitleList.add("最热"); +// tabTitleList.add("最新"); +// tabTitleList.add("帖子"); +// tabTitleList.add("问题"); +// tabTitleList.add("用户"); +// } else { +// tabTitleList.add("最热回答"); +// tabTitleList.add("最新回答"); +// tabTitleList.add("只看问题"); +// } +// } +// +// @Override +// public void onPageSelected(int position) { +// FragmentActivity activity = getActivity(); +// if (mFragmentsList.get(position) instanceof UserFragment) { +// if (activity instanceof AskSearchActivity) { +// ((AskSearchActivity) activity).visibleOrGoneSearchHint(View.GONE); +// } +// } else { +// if (activity instanceof AskSearchActivity) { +// ((AskSearchActivity) activity).visibleOrGoneSearchHint(View.VISIBLE); +// } +// } +// } +// +// void updateSearch(String key) { +// if (!isAdded()) return; +// +// for (Fragment fragment : mFragmentsList) { +// if (fragment instanceof BaseAskSearchFragment && fragment.isAdded()) { +// ((BaseAskSearchFragment) fragment).search(key); +// Bundle arguments = fragment.getArguments(); +// // 处于 state saved 状态的 fragment 不可 setArguments +// if (arguments != null && !fragment.isStateSaved()) { +// arguments.putString(EntranceUtils.KEY_SEARCHKEY, key); +// fragment.setArguments(arguments); +// } +// } +// } +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/search/AskSearchNormalItemViewHolder.java b/app/src/main/java/com/gh/gamecenter/qa/search/AskSearchNormalItemViewHolder.java index eb1eb09f42..7e7893347f 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/search/AskSearchNormalItemViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/qa/search/AskSearchNormalItemViewHolder.java @@ -1,42 +1,42 @@ -package com.gh.gamecenter.qa.search; - -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import com.facebook.drawee.view.SimpleDraweeView; -import com.gh.base.BaseRecyclerViewHolder; -import com.gh.common.view.DrawableView; -import com.gh.gamecenter.R; -import com.gh.gamecenter.qa.entity.SearchHottestEntity; - -import butterknife.BindView; - -/** - * Created by khy on 8/12/17. - */ - -public class AskSearchNormalItemViewHolder extends BaseRecyclerViewHolder { - - @BindView(R.id.ask_search_item_title) - public TextView mTitle; - @BindView(R.id.ask_search_item_content) - public TextView mContent; - @BindView(R.id.ask_search_item_answercount) - public TextView mAnswerCount; - @BindView(R.id.ask_search_item_image) - public SimpleDraweeView mImage; - @BindView(R.id.ask_search_item_image_container) - public View mImageContainer; - @BindView(R.id.ask_search_item_votecount) - public TextView mVoteCount; - @BindView(R.id.ask_search_item_type_icon) - public ImageView mTypeIcon; - @BindView(R.id.ask_search_item_video_duration) - public TextView mVideoDuration; - - public AskSearchNormalItemViewHolder(View itemView) { - super(itemView); - mVideoDuration.setBackground(DrawableView.getOvalDrawable(R.color.black_alpha_80, 999F)); - } -} +//package com.gh.gamecenter.qa.search; +// +//import android.view.View; +//import android.widget.ImageView; +//import android.widget.TextView; +// +//import com.facebook.drawee.view.SimpleDraweeView; +//import com.gh.base.BaseRecyclerViewHolder; +//import com.gh.common.view.DrawableView; +//import com.gh.gamecenter.R; +//import com.gh.gamecenter.qa.entity.SearchHottestEntity; +// +//import butterknife.BindView; +// +///** +// * Created by khy on 8/12/17. +// */ +// +//public class AskSearchNormalItemViewHolder extends BaseRecyclerViewHolder { +// +// @BindView(R.id.ask_search_item_title) +// public TextView mTitle; +// @BindView(R.id.ask_search_item_content) +// public TextView mContent; +// @BindView(R.id.ask_search_item_answercount) +// public TextView mAnswerCount; +// @BindView(R.id.ask_search_item_image) +// public SimpleDraweeView mImage; +// @BindView(R.id.ask_search_item_image_container) +// public View mImageContainer; +// @BindView(R.id.ask_search_item_votecount) +// public TextView mVoteCount; +// @BindView(R.id.ask_search_item_type_icon) +// public ImageView mTypeIcon; +// @BindView(R.id.ask_search_item_video_duration) +// public TextView mVideoDuration; +// +// public AskSearchNormalItemViewHolder(View itemView) { +// super(itemView); +// mVideoDuration.setBackground(DrawableView.getOvalDrawable(R.color.black_alpha_80, 999F)); +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/search/AskSearchQuestionItemViewHolder.kt b/app/src/main/java/com/gh/gamecenter/qa/search/AskSearchQuestionItemViewHolder.kt index 1f6e6b6347..3cc9d26e2a 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/search/AskSearchQuestionItemViewHolder.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/search/AskSearchQuestionItemViewHolder.kt @@ -1,6 +1,6 @@ -package com.gh.gamecenter.qa.search - -import com.gh.base.BaseRecyclerViewHolder -import com.gh.gamecenter.databinding.AskSearchQuestionItemBinding - -class AskSearchQuestionItemViewHolder(val binding: AskSearchQuestionItemBinding) : BaseRecyclerViewHolder(binding.root) \ No newline at end of file +//package com.gh.gamecenter.qa.search +// +//import com.gh.base.BaseRecyclerViewHolder +//import com.gh.gamecenter.databinding.AskSearchQuestionItemBinding +// +//class AskSearchQuestionItemViewHolder(val binding: AskSearchQuestionItemBinding) : BaseRecyclerViewHolder(binding.root) \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/search/artilce/ArticleAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/search/artilce/ArticleAdapter.kt index b5739fa89d..04a3e67456 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/search/artilce/ArticleAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/search/artilce/ArticleAdapter.kt @@ -1,61 +1,61 @@ -package com.gh.gamecenter.qa.search.artilce - -import android.content.Context -import android.text.Html -import android.view.View -import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView -import com.gh.common.util.ImageUtils -import com.gh.common.util.NumberUtils -import com.gh.gamecenter.R -import com.gh.gamecenter.baselist.NormalListViewModel -import com.gh.gamecenter.qa.entity.ArticleEntity -import com.gh.gamecenter.qa.search.AskSearchNormalItemViewHolder -import com.gh.gamecenter.qa.search.base.BaseAskSearchAdapter - -class ArticleAdapter(context: Context, - entrance: String, - path: String, - viewModel: NormalListViewModel) - : BaseAskSearchAdapter(context, entrance, path, viewModel) { - - override fun onCreateBodyViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - val view = mLayoutInflater.inflate(R.layout.ask_search_item, parent, false) - return AskSearchNormalItemViewHolder(view) - } - - override fun onBindBodyViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - if (holder is AskSearchNormalItemViewHolder) { - val entity = mEntityList[position] - val videos = entity.videos - when { - videos.isNotEmpty() -> { - holder.mImageContainer.visibility = View.VISIBLE - holder.mVideoDuration.visibility = View.VISIBLE - holder.mVideoDuration.text = videos[0].duration - ImageUtils.display(holder.mImage, videos[0].poster) - } - entity.images.isNotEmpty() -> { - holder.mImageContainer.visibility = View.VISIBLE - holder.mVideoDuration.visibility = View.GONE - ImageUtils.display(holder.mImage, entity.images[0]) - } - else -> { - holder.mImageContainer.visibility = View.GONE - holder.mVideoDuration.visibility = View.GONE - } - } - holder.mAnswerCount.visibility = View.GONE - holder.mVoteCount.text = mContext.getString(R.string.ask_vote_count, NumberUtils.transSimpleCount(entity.count.vote)) - holder.mTitle.text = Html.fromHtml(replayKeyword(entity.title)) - holder.mContent.text = Html.fromHtml(replayKeyword(entity.brief)) - holder.itemView.setOnClickListener { skipArticleDetail(entity.id) } - } - } - - override fun getSyncData(position: Int): Pair? { - if (position >= mEntityList.size) return null - val entity = mEntityList[position] - return Pair(entity.id, entity) - } -} \ No newline at end of file +//package com.gh.gamecenter.qa.search.artilce +// +//import android.content.Context +//import android.text.Html +//import android.view.View +//import android.view.ViewGroup +//import androidx.recyclerview.widget.RecyclerView +//import com.gh.common.util.ImageUtils +//import com.gh.common.util.NumberUtils +//import com.gh.gamecenter.R +//import com.gh.gamecenter.baselist.NormalListViewModel +//import com.gh.gamecenter.qa.entity.ArticleEntity +//import com.gh.gamecenter.qa.search.AskSearchNormalItemViewHolder +//import com.gh.gamecenter.qa.search.base.BaseAskSearchAdapter +// +//class ArticleAdapter(context: Context, +// entrance: String, +// path: String, +// viewModel: NormalListViewModel) +// : BaseAskSearchAdapter(context, entrance, path, viewModel) { +// +// override fun onCreateBodyViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { +// val view = mLayoutInflater.inflate(R.layout.ask_search_item, parent, false) +// return AskSearchNormalItemViewHolder(view) +// } +// +// override fun onBindBodyViewHolder(holder: RecyclerView.ViewHolder, position: Int) { +// if (holder is AskSearchNormalItemViewHolder) { +// val entity = mEntityList[position] +// val videos = entity.videos +// when { +// videos.isNotEmpty() -> { +// holder.mImageContainer.visibility = View.VISIBLE +// holder.mVideoDuration.visibility = View.VISIBLE +// holder.mVideoDuration.text = videos[0].duration +// ImageUtils.display(holder.mImage, videos[0].poster) +// } +// entity.images.isNotEmpty() -> { +// holder.mImageContainer.visibility = View.VISIBLE +// holder.mVideoDuration.visibility = View.GONE +// ImageUtils.display(holder.mImage, entity.images[0]) +// } +// else -> { +// holder.mImageContainer.visibility = View.GONE +// holder.mVideoDuration.visibility = View.GONE +// } +// } +// holder.mAnswerCount.visibility = View.GONE +// holder.mVoteCount.text = mContext.getString(R.string.ask_vote_count, NumberUtils.transSimpleCount(entity.count.vote)) +// holder.mTitle.text = Html.fromHtml(replayKeyword(entity.title)) +// holder.mContent.text = Html.fromHtml(replayKeyword(entity.brief)) +// holder.itemView.setOnClickListener { skipArticleDetail(entity.id) } +// } +// } +// +// override fun getSyncData(position: Int): Pair? { +// if (position >= mEntityList.size) return null +// val entity = mEntityList[position] +// return Pair(entity.id, entity) +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/search/artilce/ArticleFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/search/artilce/ArticleFragment.kt index d01e2ccc77..5efe2f4804 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/search/artilce/ArticleFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/search/artilce/ArticleFragment.kt @@ -1,52 +1,52 @@ -package com.gh.gamecenter.qa.search.artilce - -import androidx.lifecycle.ViewModelProviders -import android.text.TextUtils -import com.gh.common.util.EntranceUtils -import com.gh.common.util.UrlFilterUtils -import com.gh.gamecenter.baselist.NormalListViewModel -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.qa.entity.ArticleEntity -import com.gh.gamecenter.qa.search.base.BaseAskSearchFragment -import com.gh.gamecenter.retrofit.RetrofitManager -import com.halo.assistant.HaloApp -import io.reactivex.Observable - -class ArticleFragment : BaseAskSearchFragment>() { - - private var mAdapter: ArticleAdapter? = null - - override fun setBaseAskListAdapter(): ArticleAdapter { - if (mAdapter == null) { - val path = if (!questionTag.isNullOrEmpty()) { - "标签专栏搜索-帖子" - } else if (!columnId.isNullOrEmpty()) { - "专栏搜索-帖子" - } else { - "问答-搜索-帖子" - } - mAdapter = ArticleAdapter(requireContext(), mEntrance, path, mListViewModel) - } - return mAdapter!! - } - - override fun provideListViewModel(): NormalListViewModel { - val factory = NormalListViewModel.Factory(HaloApp.getInstance().application, this) - return ViewModelProviders.of(this, factory).get(NormalListViewModel::class.java) as NormalListViewModel - } - - override fun provideDataObservable(page: Int): Observable>? { - questionTag = activity?.intent?.getStringExtra(EntranceUtils.KEY_QUESTION_TAG) - columnId = activity?.intent?.getStringExtra(EntranceUtils.KEY_COLUMN_ID) - val api = RetrofitManager.getInstance().api - return if (TextUtils.isEmpty(mSearchKey)) null - else if (!questionTag.isNullOrEmpty()) { - api.getAskSearchArticle(UserManager.getInstance().community.id, mSearchKey, - UrlFilterUtils.getFilterQuery("question_tag", questionTag, "type", "community_article"), "community_article_vote:-1", page) - } else if (!columnId.isNullOrEmpty()) { - api.getAskSearchArticle(UserManager.getInstance().community.id, mSearchKey, - UrlFilterUtils.getFilterQuery("column_id", columnId, "type", "community_article"), "community_article_vote:-1", page) - } else api.getAskSearchArticle(UserManager.getInstance().community.id, mSearchKey, - UrlFilterUtils.getFilterQuery("type", "community_article"), "community_article_vote:-1", page) - } -} \ No newline at end of file +//package com.gh.gamecenter.qa.search.artilce +// +//import androidx.lifecycle.ViewModelProviders +//import android.text.TextUtils +//import com.gh.common.util.EntranceUtils +//import com.gh.common.util.UrlFilterUtils +//import com.gh.gamecenter.baselist.NormalListViewModel +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.qa.entity.ArticleEntity +//import com.gh.gamecenter.qa.search.base.BaseAskSearchFragment +//import com.gh.gamecenter.retrofit.RetrofitManager +//import com.halo.assistant.HaloApp +//import io.reactivex.Observable +// +//class ArticleFragment : BaseAskSearchFragment>() { +// +// private var mAdapter: ArticleAdapter? = null +// +// override fun setBaseAskListAdapter(): ArticleAdapter { +// if (mAdapter == null) { +// val path = if (!questionTag.isNullOrEmpty()) { +// "标签专栏搜索-帖子" +// } else if (!columnId.isNullOrEmpty()) { +// "专栏搜索-帖子" +// } else { +// "问答-搜索-帖子" +// } +// mAdapter = ArticleAdapter(requireContext(), mEntrance, path, mListViewModel) +// } +// return mAdapter!! +// } +// +// override fun provideListViewModel(): NormalListViewModel { +// val factory = NormalListViewModel.Factory(HaloApp.getInstance().application, this) +// return ViewModelProviders.of(this, factory).get(NormalListViewModel::class.java) as NormalListViewModel +// } +// +// override fun provideDataObservable(page: Int): Observable>? { +// questionTag = activity?.intent?.getStringExtra(EntranceUtils.KEY_QUESTION_TAG) +// columnId = activity?.intent?.getStringExtra(EntranceUtils.KEY_COLUMN_ID) +// val api = RetrofitManager.getInstance().api +// return if (TextUtils.isEmpty(mSearchKey)) null +// else if (!questionTag.isNullOrEmpty()) { +// api.getAskSearchArticle(UserManager.getInstance().community.id, mSearchKey, +// UrlFilterUtils.getFilterQuery("question_tag", questionTag, "type", "community_article"), "community_article_vote:-1", page) +// } else if (!columnId.isNullOrEmpty()) { +// api.getAskSearchArticle(UserManager.getInstance().community.id, mSearchKey, +// UrlFilterUtils.getFilterQuery("column_id", columnId, "type", "community_article"), "community_article_vote:-1", page) +// } else api.getAskSearchArticle(UserManager.getInstance().community.id, mSearchKey, +// UrlFilterUtils.getFilterQuery("type", "community_article"), "community_article_vote:-1", page) +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/search/base/BaseAskSearchAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/search/base/BaseAskSearchAdapter.kt index 270d552676..925195f131 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/search/base/BaseAskSearchAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/search/base/BaseAskSearchAdapter.kt @@ -1,141 +1,140 @@ -package com.gh.gamecenter.qa.search.base - -import android.content.Context -import android.text.TextUtils -import android.view.View -import android.view.ViewGroup -import com.gh.common.constant.ItemViewType -import com.gh.common.syncpage.ISyncAdapterHandler -import com.gh.common.util.DirectUtils -import com.gh.gamecenter.R -import com.gh.gamecenter.adapter.viewholder.FooterViewHolder -import com.gh.gamecenter.baselist.ListAdapter -import com.gh.gamecenter.baselist.ListViewModel -import com.gh.gamecenter.db.AskSearchHistoryDao -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.qa.answer.detail.SimpleAnswerDetailActivity -import com.gh.gamecenter.qa.article.detail.ArticleDetailActivity -import com.gh.gamecenter.qa.column.detail.AskColumnDetailActivity -import com.gh.gamecenter.qa.entity.Questions -import com.gh.gamecenter.qa.questions.newdetail.NewQuestionDetailActivity -import com.gh.gamecenter.qa.search.AskSearchActivity -import com.gh.gamecenter.qa.subject.CommunitySubjectActivity - -abstract class BaseAskSearchAdapter(context: Context, - val mEntrance: String, - val mPath: String, - private val mViewModel: ListViewModel) : ListAdapter(context), ISyncAdapterHandler { - - protected var mSearchKey = "" - - protected var mDao: AskSearchHistoryDao = AskSearchHistoryDao(mContext) - - public override fun setListData(updateData: List?) { - super.setListData(updateData) - } - - protected fun replayKeyword(title: String?): String? { - val translationKey = escapeExprSpecialWord(mSearchKey) - return if (TextUtils.isEmpty(translationKey)) title - else title?.replace("", "") - ?.replace("", "") - ?.replace(translationKey?.toRegex()!!, getHtmlKeyword()) - } - - // 特殊符号转译 - private fun escapeExprSpecialWord(s: String?): String? { - var keyword = s - if (!keyword.isNullOrEmpty()) { - val fbsArr = arrayOf("\\", "$", "(", ")", "*", "+", ".", "[", "]", "?", "^", "{", "}", "|") - for (key in fbsArr) { - if (keyword!!.contains(key)) { - keyword = keyword.replace(key, "\\" + key) - } - } - } - return keyword - } - - private fun getHtmlKeyword(): String { - return "$mSearchKey" - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): androidx.recyclerview.widget.RecyclerView.ViewHolder { - val view: View - return when (viewType) { - ItemViewType.ITEM_FOOTER -> { - view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false) - FooterViewHolder(view) - } - else -> { - onCreateBodyViewHolder(parent, viewType) - } - } - } - - abstract fun onCreateBodyViewHolder(parent: ViewGroup, viewType: Int): androidx.recyclerview.widget.RecyclerView.ViewHolder - - override fun onBindViewHolder(holder: androidx.recyclerview.widget.RecyclerView.ViewHolder, position: Int) { - if (holder is FooterViewHolder) { - holder.initItemPadding() - holder.initFooterViewHolder(mViewModel, mIsLoading, mIsNetworkError, mIsOver) - } else { - onBindBodyViewHolder(holder, position) - } - } - - abstract fun onBindBodyViewHolder(holder: androidx.recyclerview.widget.RecyclerView.ViewHolder, position: Int) - - override fun getItemViewType(position: Int): Int { - return if (position == itemCount - 1) ItemViewType.ITEM_FOOTER else ItemViewType.ITEM_BODY - } - - override fun getItemCount(): Int { - return if (mEntityList == null || mEntityList.isEmpty()) 0 else mEntityList.size + ListAdapter.FOOTER_ITEM_COUNT - } - - fun setSearchKey(searchKey: String) { - this.mSearchKey = searchKey - } - - protected fun skipAnswerDetail(answerId: String) { - mContext.startActivity(SimpleAnswerDetailActivity.getIntent(mContext, answerId, mEntrance, mPath)) - postSearchLogAndSearchHistory() - } - - protected fun skipQuestionDetail(questions: Questions) { - mContext.startActivity(NewQuestionDetailActivity.getIntent(mContext, questions.id, mEntrance, mPath)) - postSearchLogAndSearchHistory() - } - - protected fun skipArticleDetail(id: String) { - mContext.startActivity(ArticleDetailActivity.getIntent(mContext, - UserManager.getInstance().community, id, mEntrance, mPath)) - postSearchLogAndSearchHistory() - } - - protected fun skipPersonalHome(id: String) { - DirectUtils.directToHomeActivity(mContext, id, mEntrance, mPath) - postSearchLogAndSearchHistory() - } - - protected fun skipColumn(id: String) { - mContext.startActivity(CommunitySubjectActivity.getIntent(mContext, - UserManager.getInstance().community, id, mEntrance, mPath)) - postSearchLogAndSearchHistory() - } - - protected fun skipSpecialColumn(id: String) { - mContext.startActivity(AskColumnDetailActivity.getIntentByColumnId(mContext, - id, UserManager.getInstance().community, mEntrance, mPath)) - postSearchLogAndSearchHistory() - } - - private fun postSearchLogAndSearchHistory() { - if (mContext is AskSearchActivity) { - (mContext as AskSearchActivity).postLog(false) - } - mDao.add(mSearchKey, UserManager.getInstance().community.id) - } - -} +//package com.gh.gamecenter.qa.search.base +// +//import android.content.Context +//import android.text.TextUtils +//import android.view.View +//import android.view.ViewGroup +//import com.gh.common.constant.ItemViewType +//import com.gh.common.syncpage.ISyncAdapterHandler +//import com.gh.common.util.DirectUtils +//import com.gh.gamecenter.R +//import com.gh.gamecenter.adapter.viewholder.FooterViewHolder +//import com.gh.gamecenter.baselist.ListAdapter +//import com.gh.gamecenter.baselist.ListViewModel +//import com.gh.gamecenter.db.AskSearchHistoryDao +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.qa.answer.detail.SimpleAnswerDetailActivity +//import com.gh.gamecenter.qa.article.detail.ArticleDetailActivity +//import com.gh.gamecenter.qa.column.detail.AskColumnDetailActivity +//import com.gh.gamecenter.qa.entity.Questions +//import com.gh.gamecenter.qa.questions.newdetail.NewQuestionDetailActivity +//import com.gh.gamecenter.qa.search.AskSearchActivity +// +//abstract class BaseAskSearchAdapter(context: Context, +// val mEntrance: String, +// val mPath: String, +// private val mViewModel: ListViewModel) : ListAdapter(context), ISyncAdapterHandler { +// +// protected var mSearchKey = "" +// +// protected var mDao: AskSearchHistoryDao = AskSearchHistoryDao(mContext) +// +// public override fun setListData(updateData: List?) { +// super.setListData(updateData) +// } +// +// protected fun replayKeyword(title: String?): String? { +// val translationKey = escapeExprSpecialWord(mSearchKey) +// return if (TextUtils.isEmpty(translationKey)) title +// else title?.replace("", "") +// ?.replace("", "") +// ?.replace(translationKey?.toRegex()!!, getHtmlKeyword()) +// } +// +// // 特殊符号转译 +// private fun escapeExprSpecialWord(s: String?): String? { +// var keyword = s +// if (!keyword.isNullOrEmpty()) { +// val fbsArr = arrayOf("\\", "$", "(", ")", "*", "+", ".", "[", "]", "?", "^", "{", "}", "|") +// for (key in fbsArr) { +// if (keyword!!.contains(key)) { +// keyword = keyword.replace(key, "\\" + key) +// } +// } +// } +// return keyword +// } +// +// private fun getHtmlKeyword(): String { +// return "$mSearchKey" +// } +// +// override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): androidx.recyclerview.widget.RecyclerView.ViewHolder { +// val view: View +// return when (viewType) { +// ItemViewType.ITEM_FOOTER -> { +// view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false) +// FooterViewHolder(view) +// } +// else -> { +// onCreateBodyViewHolder(parent, viewType) +// } +// } +// } +// +// abstract fun onCreateBodyViewHolder(parent: ViewGroup, viewType: Int): androidx.recyclerview.widget.RecyclerView.ViewHolder +// +// override fun onBindViewHolder(holder: androidx.recyclerview.widget.RecyclerView.ViewHolder, position: Int) { +// if (holder is FooterViewHolder) { +// holder.initItemPadding() +// holder.initFooterViewHolder(mViewModel, mIsLoading, mIsNetworkError, mIsOver) +// } else { +// onBindBodyViewHolder(holder, position) +// } +// } +// +// abstract fun onBindBodyViewHolder(holder: androidx.recyclerview.widget.RecyclerView.ViewHolder, position: Int) +// +// override fun getItemViewType(position: Int): Int { +// return if (position == itemCount - 1) ItemViewType.ITEM_FOOTER else ItemViewType.ITEM_BODY +// } +// +// override fun getItemCount(): Int { +// return if (mEntityList == null || mEntityList.isEmpty()) 0 else mEntityList.size + ListAdapter.FOOTER_ITEM_COUNT +// } +// +// fun setSearchKey(searchKey: String) { +// this.mSearchKey = searchKey +// } +// +// protected fun skipAnswerDetail(answerId: String) { +// mContext.startActivity(SimpleAnswerDetailActivity.getIntent(mContext, answerId, mEntrance, mPath)) +// postSearchLogAndSearchHistory() +// } +// +// protected fun skipQuestionDetail(questions: Questions) { +// mContext.startActivity(NewQuestionDetailActivity.getIntent(mContext, questions.id, mEntrance, mPath)) +// postSearchLogAndSearchHistory() +// } +// +// protected fun skipArticleDetail(id: String) { +// mContext.startActivity(ArticleDetailActivity.getIntent(mContext, +// UserManager.getInstance().community, id, mEntrance, mPath)) +// postSearchLogAndSearchHistory() +// } +// +// protected fun skipPersonalHome(id: String) { +// DirectUtils.directToHomeActivity(mContext, id, mEntrance, mPath) +// postSearchLogAndSearchHistory() +// } +// +// protected fun skipColumn(id: String) { +//// mContext.startActivity(CommunitySubjectActivity.getIntent(mContext, +//// UserManager.getInstance().community, id, mEntrance, mPath)) +//// postSearchLogAndSearchHistory() +// } +// +// protected fun skipSpecialColumn(id: String) { +// mContext.startActivity(AskColumnDetailActivity.getIntentByColumnId(mContext, +// id, UserManager.getInstance().community, mEntrance, mPath)) +// postSearchLogAndSearchHistory() +// } +// +// private fun postSearchLogAndSearchHistory() { +// if (mContext is AskSearchActivity) { +// (mContext as AskSearchActivity).postLog(false) +// } +// mDao.add(mSearchKey, UserManager.getInstance().community.id) +// } +// +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/search/base/BaseAskSearchFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/search/base/BaseAskSearchFragment.kt index 4fc692db6d..57d53cf8cd 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/search/base/BaseAskSearchFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/search/base/BaseAskSearchFragment.kt @@ -1,93 +1,93 @@ -package com.gh.gamecenter.qa.search.base - -import android.os.Bundle -import android.text.TextUtils -import android.view.View -import com.gh.common.util.EntranceUtils -import com.gh.gamecenter.baselist.BaseListViewModel -import com.gh.gamecenter.baselist.ListAdapter -import com.gh.gamecenter.baselist.ListFragment -import com.gh.gamecenter.baselist.LoadType - -abstract class BaseAskSearchFragment> : ListFragment() { - - protected var mSearchKey = "" - protected var questionTag: String? = "" - protected var columnId: String? = "" - - protected abstract fun setBaseAskListAdapter(): BaseAskSearchAdapter - - override fun provideListAdapter(): ListAdapter<*> { - return setBaseAskListAdapter() - } - - override fun onCreate(savedInstanceState: Bundle?) { - questionTag = arguments?.getString(EntranceUtils.KEY_QUESTION_TAG) - columnId = arguments?.getString(EntranceUtils.KEY_COLUMN_ID) - super.onCreate(savedInstanceState) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - val searchKey = arguments?.getString(EntranceUtils.KEY_SEARCHKEY) - mListRefresh?.isEnabled = false - mListLoading?.visibility = View.GONE - if (searchKey != null) search(searchKey) - } - - override fun onRefresh() { - mReuseNoConn?.visibility = View.GONE - mReuseNoData?.visibility = View.GONE - mListLoading?.visibility = View.VISIBLE - mListRefresh?.isRefreshing = false - - mListViewModel.load(LoadType.REFRESH) - } - - - override fun onLoadDone() { - mReuseNoConn?.visibility = View.GONE - mReuseNoData?.visibility = View.GONE - mListLoading?.visibility = View.GONE - mListRefresh?.isRefreshing = false - } - - override fun onLoadError() { - mReuseNoConn?.visibility = View.VISIBLE - mReuseNoData?.visibility = View.GONE - mListLoading?.visibility = View.GONE - mListRefresh!!.isRefreshing = false - setBaseAskListAdapter().setListData(null) // 刷新页面 - } - - override fun onLoadEmpty() { - mReuseNoConn?.visibility = View.GONE - mReuseNoData?.visibility = View.VISIBLE - mListLoading?.visibility = View.GONE - mListRefresh!!.isRefreshing = false - setBaseAskListAdapter().setListData(null) // 刷新页面 - } - - - fun search(searchKey: String) { - mSearchKey = searchKey - if (TextUtils.isEmpty(searchKey)) { // 恢复默认状态 - mReuseNoConn?.visibility = View.GONE - mReuseNoData?.visibility = View.GONE - mListLoading?.visibility = View.GONE - setBaseAskListAdapter().setListData(null) - return - } - - setBaseAskListAdapter().setSearchKey(searchKey) - onRefresh() - } - - override fun addSyncPageObserver(): Boolean { - return true - } - - override fun provideSyncAdapter(): BaseAskSearchAdapter? { - return setBaseAskListAdapter() - } -} +//package com.gh.gamecenter.qa.search.base +// +//import android.os.Bundle +//import android.text.TextUtils +//import android.view.View +//import com.gh.common.util.EntranceUtils +//import com.gh.gamecenter.baselist.BaseListViewModel +//import com.gh.gamecenter.baselist.ListAdapter +//import com.gh.gamecenter.baselist.ListFragment +//import com.gh.gamecenter.baselist.LoadType +// +//abstract class BaseAskSearchFragment> : ListFragment() { +// +// protected var mSearchKey = "" +// protected var questionTag: String? = "" +// protected var columnId: String? = "" +// +// protected abstract fun setBaseAskListAdapter(): BaseAskSearchAdapter +// +// override fun provideListAdapter(): ListAdapter<*> { +// return setBaseAskListAdapter() +// } +// +// override fun onCreate(savedInstanceState: Bundle?) { +// questionTag = arguments?.getString(EntranceUtils.KEY_QUESTION_TAG) +// columnId = arguments?.getString(EntranceUtils.KEY_COLUMN_ID) +// super.onCreate(savedInstanceState) +// } +// +// override fun onViewCreated(view: View, savedInstanceState: Bundle?) { +// super.onViewCreated(view, savedInstanceState) +// val searchKey = arguments?.getString(EntranceUtils.KEY_SEARCHKEY) +// mListRefresh?.isEnabled = false +// mListLoading?.visibility = View.GONE +// if (searchKey != null) search(searchKey) +// } +// +// override fun onRefresh() { +// mReuseNoConn?.visibility = View.GONE +// mReuseNoData?.visibility = View.GONE +// mListLoading?.visibility = View.VISIBLE +// mListRefresh?.isRefreshing = false +// +// mListViewModel.load(LoadType.REFRESH) +// } +// +// +// override fun onLoadDone() { +// mReuseNoConn?.visibility = View.GONE +// mReuseNoData?.visibility = View.GONE +// mListLoading?.visibility = View.GONE +// mListRefresh?.isRefreshing = false +// } +// +// override fun onLoadError() { +// mReuseNoConn?.visibility = View.VISIBLE +// mReuseNoData?.visibility = View.GONE +// mListLoading?.visibility = View.GONE +// mListRefresh!!.isRefreshing = false +// setBaseAskListAdapter().setListData(null) // 刷新页面 +// } +// +// override fun onLoadEmpty() { +// mReuseNoConn?.visibility = View.GONE +// mReuseNoData?.visibility = View.VISIBLE +// mListLoading?.visibility = View.GONE +// mListRefresh!!.isRefreshing = false +// setBaseAskListAdapter().setListData(null) // 刷新页面 +// } +// +// +// fun search(searchKey: String) { +// mSearchKey = searchKey +// if (TextUtils.isEmpty(searchKey)) { // 恢复默认状态 +// mReuseNoConn?.visibility = View.GONE +// mReuseNoData?.visibility = View.GONE +// mListLoading?.visibility = View.GONE +// setBaseAskListAdapter().setListData(null) +// return +// } +// +// setBaseAskListAdapter().setSearchKey(searchKey) +// onRefresh() +// } +// +// override fun addSyncPageObserver(): Boolean { +// return true +// } +// +// override fun provideSyncAdapter(): BaseAskSearchAdapter? { +// return setBaseAskListAdapter() +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/search/history/HistoryFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/search/history/HistoryFragment.kt index 1dbfd73d11..6f5b35466d 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/search/history/HistoryFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/search/history/HistoryFragment.kt @@ -1,78 +1,78 @@ -package com.gh.gamecenter.qa.search.history - -import androidx.lifecycle.Observer -import androidx.lifecycle.ViewModelProviders -import android.os.Bundle -import androidx.recyclerview.widget.GridLayoutManager -import androidx.recyclerview.widget.RecyclerView -import android.view.View -import butterknife.OnClick -import com.gh.base.fragment.BaseFragment -import com.gh.common.util.DialogHelper -import com.gh.common.util.DialogUtils -import com.gh.common.util.EntranceUtils -import com.gh.gamecenter.R -import com.gh.gamecenter.db.AskSearchHistoryDao -import kotterknife.bindView - -class HistoryFragment : BaseFragment() { - - private val mRecyclerView by bindView(R.id.search_history_list) - private val mHotRecyclerView by bindView(R.id.search_hot_rv) - private val mHistoryContainer by bindView(R.id.search_history_container) - private val mCleanBtn by bindView(R.id.search_history_clean) - private val mHotContainer by bindView(R.id.search_hot_container) - - private var mDao: AskSearchHistoryDao? = null - private var mHistoryAdapter: HistoryFragmentAdapter? = null - - private lateinit var mViewModel: HistoryViewModel - - override fun getLayoutId(): Int { - return R.layout.fragment_ask_search_history - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - mDao = AskSearchHistoryDao(context) - mViewModel = ViewModelProviders.of(this).get(HistoryViewModel::class.java) - mViewModel.hotSearchLiveData.observe(viewLifecycleOwner, Observer { - if (it?.size!! > 0) { - mHotRecyclerView.adapter = HotFragmentAdapter(requireContext(), it, mDao!!) - mHotContainer.visibility = View.VISIBLE - } else { - mHotContainer.visibility = View.GONE - } - }) - mRecyclerView.layoutManager = object : androidx.recyclerview.widget.GridLayoutManager(activity, 2) { - override fun canScrollVertically(): Boolean { - return false - } - } - mHotRecyclerView.layoutManager = object : androidx.recyclerview.widget.GridLayoutManager(activity, 2) { - override fun canScrollVertically(): Boolean { - return false - } - } - mHistoryAdapter = HistoryFragmentAdapter(requireContext(), mDao!!, historyEmptyCallback = { - mHistoryContainer.visibility = View.GONE - }) - mRecyclerView.adapter = mHistoryAdapter - - if (activity?.intent?.getStringExtra(EntranceUtils.KEY_QUESTION_TAG).isNullOrEmpty() && - activity?.intent?.getStringExtra(EntranceUtils.KEY_COLUMN_ID).isNullOrEmpty()) { - mViewModel.getHotSearch() - } - } - - - @OnClick(R.id.search_history_clean) - fun onDeleteClick() { - DialogHelper.showCenterWarningDialog(requireContext(), "清空记录", "确定清空历史搜索记录?", confirmClickCallback = { - mDao?.deleteAll() - mHistoryAdapter?.clearSearchResult() - mHistoryContainer.visibility = View.GONE - }) - } - -} \ No newline at end of file +//package com.gh.gamecenter.qa.search.history +// +//import androidx.lifecycle.Observer +//import androidx.lifecycle.ViewModelProviders +//import android.os.Bundle +//import androidx.recyclerview.widget.GridLayoutManager +//import androidx.recyclerview.widget.RecyclerView +//import android.view.View +//import butterknife.OnClick +//import com.gh.base.fragment.BaseFragment +//import com.gh.common.util.DialogHelper +//import com.gh.common.util.DialogUtils +//import com.gh.common.util.EntranceUtils +//import com.gh.gamecenter.R +//import com.gh.gamecenter.db.AskSearchHistoryDao +//import kotterknife.bindView +// +//class HistoryFragment : BaseFragment() { +// +// private val mRecyclerView by bindView(R.id.search_history_list) +// private val mHotRecyclerView by bindView(R.id.search_hot_rv) +// private val mHistoryContainer by bindView(R.id.search_history_container) +// private val mCleanBtn by bindView(R.id.search_history_clean) +// private val mHotContainer by bindView(R.id.search_hot_container) +// +// private var mDao: AskSearchHistoryDao? = null +// private var mHistoryAdapter: HistoryFragmentAdapter? = null +// +// private lateinit var mViewModel: HistoryViewModel +// +// override fun getLayoutId(): Int { +// return R.layout.fragment_ask_search_history +// } +// +// override fun onViewCreated(view: View, savedInstanceState: Bundle?) { +// super.onViewCreated(view, savedInstanceState) +// mDao = AskSearchHistoryDao(context) +// mViewModel = ViewModelProviders.of(this).get(HistoryViewModel::class.java) +// mViewModel.hotSearchLiveData.observe(viewLifecycleOwner, Observer { +// if (it?.size!! > 0) { +// mHotRecyclerView.adapter = HotFragmentAdapter(requireContext(), it, mDao!!) +// mHotContainer.visibility = View.VISIBLE +// } else { +// mHotContainer.visibility = View.GONE +// } +// }) +// mRecyclerView.layoutManager = object : androidx.recyclerview.widget.GridLayoutManager(activity, 2) { +// override fun canScrollVertically(): Boolean { +// return false +// } +// } +// mHotRecyclerView.layoutManager = object : androidx.recyclerview.widget.GridLayoutManager(activity, 2) { +// override fun canScrollVertically(): Boolean { +// return false +// } +// } +// mHistoryAdapter = HistoryFragmentAdapter(requireContext(), mDao!!, historyEmptyCallback = { +// mHistoryContainer.visibility = View.GONE +// }) +// mRecyclerView.adapter = mHistoryAdapter +// +// if (activity?.intent?.getStringExtra(EntranceUtils.KEY_QUESTION_TAG).isNullOrEmpty() && +// activity?.intent?.getStringExtra(EntranceUtils.KEY_COLUMN_ID).isNullOrEmpty()) { +// mViewModel.getHotSearch() +// } +// } +// +// +// @OnClick(R.id.search_history_clean) +// fun onDeleteClick() { +// DialogHelper.showCenterWarningDialog(requireContext(), "清空记录", "确定清空历史搜索记录?", confirmClickCallback = { +// mDao?.deleteAll() +// mHistoryAdapter?.clearSearchResult() +// mHistoryContainer.visibility = View.GONE +// }) +// } +// +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/search/history/HistoryFragmentAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/search/history/HistoryFragmentAdapter.kt index 20357a0495..7cc16950f0 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/search/history/HistoryFragmentAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/search/history/HistoryFragmentAdapter.kt @@ -1,59 +1,59 @@ -package com.gh.gamecenter.qa.search.history - -import android.content.Context -import android.view.ViewGroup -import com.gh.base.BaseRecyclerViewHolder -import com.gh.common.util.MtaHelper -import com.gh.gamecenter.R -import com.gh.gamecenter.databinding.CommunitySearchHistoryItemBinding -import com.gh.gamecenter.db.AskSearchHistoryDao -import com.gh.gamecenter.eventbus.EBSearch -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.qa.search.AskSearchActivity -import com.lightgame.adapter.BaseRecyclerAdapter -import com.lightgame.utils.Util_System_Keyboard -import org.greenrobot.eventbus.EventBus - -class HistoryFragmentAdapter(context: Context, dao: AskSearchHistoryDao, historyEmptyCallback: () -> Unit) : - BaseRecyclerAdapter(context) { - - private val mDao: AskSearchHistoryDao = dao - - private val mHistoryList: MutableList = dao.getAll(UserManager.getInstance().community.id) - - init { - if (mHistoryList.isEmpty()) { - historyEmptyCallback.invoke() - } - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HistoryViewHolder { - val view = mLayoutInflater.inflate(R.layout.community_search_history_item, parent, false) - return HistoryViewHolder(CommunitySearchHistoryItemBinding.bind(view)) - } - - override fun getItemCount(): Int { - if (mHistoryList.size > 10) return 10 - return mHistoryList.size - } - - override fun onBindViewHolder(holder: HistoryViewHolder, position: Int) { - val key = mHistoryList[position] - holder.binding.key = key - holder.itemView.setOnClickListener { v -> - mDao.add(key, UserManager.getInstance().community.id) - EventBus.getDefault().post(EBSearch(AskSearchActivity.ASK_SEARCH_EB_TYPE, key)) - Util_System_Keyboard.hideSoftKeyboardByIBinder(mContext, v.windowToken) - - MtaHelper.onEvent("社区搜索", "历史搜索", UserManager.getInstance().community.name + "-" + key) - } - } - - - fun clearSearchResult() { - mHistoryList.clear() - notifyDataSetChanged() - } - - class HistoryViewHolder(val binding: CommunitySearchHistoryItemBinding) : BaseRecyclerViewHolder(binding.root) -} \ No newline at end of file +//package com.gh.gamecenter.qa.search.history +// +//import android.content.Context +//import android.view.ViewGroup +//import com.gh.base.BaseRecyclerViewHolder +//import com.gh.common.util.MtaHelper +//import com.gh.gamecenter.R +//import com.gh.gamecenter.databinding.CommunitySearchHistoryItemBinding +//import com.gh.gamecenter.db.AskSearchHistoryDao +//import com.gh.gamecenter.eventbus.EBSearch +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.qa.search.AskSearchActivity +//import com.lightgame.adapter.BaseRecyclerAdapter +//import com.lightgame.utils.Util_System_Keyboard +//import org.greenrobot.eventbus.EventBus +// +//class HistoryFragmentAdapter(context: Context, dao: AskSearchHistoryDao, historyEmptyCallback: () -> Unit) : +// BaseRecyclerAdapter(context) { +// +// private val mDao: AskSearchHistoryDao = dao +// +// private val mHistoryList: MutableList = dao.getAll(UserManager.getInstance().community.id) +// +// init { +// if (mHistoryList.isEmpty()) { +// historyEmptyCallback.invoke() +// } +// } +// +// override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HistoryViewHolder { +// val view = mLayoutInflater.inflate(R.layout.community_search_history_item, parent, false) +// return HistoryViewHolder(CommunitySearchHistoryItemBinding.bind(view)) +// } +// +// override fun getItemCount(): Int { +// if (mHistoryList.size > 10) return 10 +// return mHistoryList.size +// } +// +// override fun onBindViewHolder(holder: HistoryViewHolder, position: Int) { +// val key = mHistoryList[position] +// holder.binding.key = key +// holder.itemView.setOnClickListener { v -> +// mDao.add(key, UserManager.getInstance().community.id) +// EventBus.getDefault().post(EBSearch(AskSearchActivity.ASK_SEARCH_EB_TYPE, key)) +// Util_System_Keyboard.hideSoftKeyboardByIBinder(mContext, v.windowToken) +// +// MtaHelper.onEvent("社区搜索", "历史搜索", UserManager.getInstance().community.name + "-" + key) +// } +// } +// +// +// fun clearSearchResult() { +// mHistoryList.clear() +// notifyDataSetChanged() +// } +// +// class HistoryViewHolder(val binding: CommunitySearchHistoryItemBinding) : BaseRecyclerViewHolder(binding.root) +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/search/history/HistoryViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/search/history/HistoryViewModel.kt index 3522a0c144..20e2d064c1 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/search/history/HistoryViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/search/history/HistoryViewModel.kt @@ -1,28 +1,28 @@ -package com.gh.gamecenter.qa.search.history - -import android.app.Application -import androidx.lifecycle.AndroidViewModel -import androidx.lifecycle.MutableLiveData -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.qa.entity.CommunityHotSearch -import com.gh.gamecenter.retrofit.Response -import com.gh.gamecenter.retrofit.RetrofitManager -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.schedulers.Schedulers - -class HistoryViewModel(application: Application) : AndroidViewModel(application) { - - val hotSearchLiveData = MutableLiveData>() - - fun getHotSearch() { - RetrofitManager.getInstance().api - .getCommunityHotSearch(UserManager.getInstance().community.id) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(object : Response>() { - override fun onResponse(response: List?) { - if (response != null) hotSearchLiveData.postValue(response) - } - }) - } -} \ No newline at end of file +//package com.gh.gamecenter.qa.search.history +// +//import android.app.Application +//import androidx.lifecycle.AndroidViewModel +//import androidx.lifecycle.MutableLiveData +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.qa.entity.CommunityHotSearch +//import com.gh.gamecenter.retrofit.Response +//import com.gh.gamecenter.retrofit.RetrofitManager +//import io.reactivex.android.schedulers.AndroidSchedulers +//import io.reactivex.schedulers.Schedulers +// +//class HistoryViewModel(application: Application) : AndroidViewModel(application) { +// +// val hotSearchLiveData = MutableLiveData>() +// +// fun getHotSearch() { +// RetrofitManager.getInstance().api +// .getCommunityHotSearch(UserManager.getInstance().community.id) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(object : Response>() { +// override fun onResponse(response: List?) { +// if (response != null) hotSearchLiveData.postValue(response) +// } +// }) +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/search/history/HotFragmentAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/search/history/HotFragmentAdapter.kt index 1c33e8354c..0ddd65dbb0 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/search/history/HotFragmentAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/search/history/HotFragmentAdapter.kt @@ -1,47 +1,47 @@ -package com.gh.gamecenter.qa.search.history - -import android.content.Context -import android.view.ViewGroup -import com.gh.base.BaseRecyclerViewHolder -import com.gh.common.util.MtaHelper -import com.gh.gamecenter.R -import com.gh.gamecenter.databinding.CommunitySearchHotItemBinding -import com.gh.gamecenter.db.AskSearchHistoryDao -import com.gh.gamecenter.eventbus.EBSearch -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.qa.entity.CommunityHotSearch -import com.gh.gamecenter.qa.search.AskSearchActivity -import com.lightgame.adapter.BaseRecyclerAdapter -import com.lightgame.utils.Util_System_Keyboard -import org.greenrobot.eventbus.EventBus - -class HotFragmentAdapter(context: Context, - private val mListEntity: List, - private val mDao:AskSearchHistoryDao) - : BaseRecyclerAdapter(context) { - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HotFragmentAdapter.HotViewHolder { - val view = mLayoutInflater.inflate(R.layout.community_search_hot_item, parent, false) - return HotViewHolder(CommunitySearchHotItemBinding.bind(view)) - } - - override fun getItemCount(): Int { - if (mListEntity.size > 8) return 8 // 最多显示8个 - return mListEntity.size - } - - override fun onBindViewHolder(holder: HotFragmentAdapter.HotViewHolder, position: Int) { - val data = mListEntity[position] - holder.binding.setPosition(position + 1) - holder.binding.data = data - holder.itemView.setOnClickListener { v -> - mDao.add(data.keyword, UserManager.getInstance().community.id) - EventBus.getDefault().post(EBSearch(AskSearchActivity.ASK_SEARCH_EB_TYPE, data.keyword)) - Util_System_Keyboard.hideSoftKeyboardByIBinder(mContext, v.windowToken) - - MtaHelper.onEvent("社区搜索", "热门搜索", UserManager.getInstance().community.name + "-" + data.keyword) - } - } - - class HotViewHolder(val binding: CommunitySearchHotItemBinding) : BaseRecyclerViewHolder(binding.root) -} \ No newline at end of file +//package com.gh.gamecenter.qa.search.history +// +//import android.content.Context +//import android.view.ViewGroup +//import com.gh.base.BaseRecyclerViewHolder +//import com.gh.common.util.MtaHelper +//import com.gh.gamecenter.R +//import com.gh.gamecenter.databinding.CommunitySearchHotItemBinding +//import com.gh.gamecenter.db.AskSearchHistoryDao +//import com.gh.gamecenter.eventbus.EBSearch +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.qa.entity.CommunityHotSearch +//import com.gh.gamecenter.qa.search.AskSearchActivity +//import com.lightgame.adapter.BaseRecyclerAdapter +//import com.lightgame.utils.Util_System_Keyboard +//import org.greenrobot.eventbus.EventBus +// +//class HotFragmentAdapter(context: Context, +// private val mListEntity: List, +// private val mDao:AskSearchHistoryDao) +// : BaseRecyclerAdapter(context) { +// +// override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HotFragmentAdapter.HotViewHolder { +// val view = mLayoutInflater.inflate(R.layout.community_search_hot_item, parent, false) +// return HotViewHolder(CommunitySearchHotItemBinding.bind(view)) +// } +// +// override fun getItemCount(): Int { +// if (mListEntity.size > 8) return 8 // 最多显示8个 +// return mListEntity.size +// } +// +// override fun onBindViewHolder(holder: HotFragmentAdapter.HotViewHolder, position: Int) { +// val data = mListEntity[position] +// holder.binding.setPosition(position + 1) +// holder.binding.data = data +// holder.itemView.setOnClickListener { v -> +// mDao.add(data.keyword, UserManager.getInstance().community.id) +// EventBus.getDefault().post(EBSearch(AskSearchActivity.ASK_SEARCH_EB_TYPE, data.keyword)) +// Util_System_Keyboard.hideSoftKeyboardByIBinder(mContext, v.windowToken) +// +// MtaHelper.onEvent("社区搜索", "热门搜索", UserManager.getInstance().community.name + "-" + data.keyword) +// } +// } +// +// class HotViewHolder(val binding: CommunitySearchHotItemBinding) : BaseRecyclerViewHolder(binding.root) +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/search/hottest/HottestAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/search/hottest/HottestAdapter.kt index 1ed415bb44..2397c4a968 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/search/hottest/HottestAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/search/hottest/HottestAdapter.kt @@ -1,187 +1,187 @@ -package com.gh.gamecenter.qa.search.hottest - -import android.content.Context -import androidx.recyclerview.widget.RecyclerView -import android.text.Html -import android.text.SpannableString -import android.text.style.LeadingMarginSpan -import android.view.View -import android.view.ViewGroup -import com.gh.base.BaseRecyclerViewHolder -import com.gh.common.constant.ItemViewType -import com.gh.common.util.DisplayUtils -import com.gh.common.util.ImageUtils -import com.gh.common.util.NumberUtils -import com.gh.gamecenter.R -import com.gh.gamecenter.baselist.NormalListViewModel -import com.gh.gamecenter.databinding.AskSearchQuestionItemBinding -import com.gh.gamecenter.databinding.CommunitySearchColummItemBinding -import com.gh.gamecenter.databinding.CommunitySearchSpecialColummItemBinding -import com.gh.gamecenter.qa.entity.Questions -import com.gh.gamecenter.qa.entity.SearchHottestEntity -import com.gh.gamecenter.qa.search.AskSearchNormalItemViewHolder -import com.gh.gamecenter.qa.search.AskSearchQuestionItemViewHolder -import com.gh.gamecenter.qa.search.base.BaseAskSearchAdapter - -class HottestAdapter(context: Context, - entrance: String, - path: String, - viewModel: NormalListViewModel) - : BaseAskSearchAdapter(context, entrance, path, viewModel) { - - override fun areItemsTheSame(oldItem: SearchHottestEntity?, newItem: SearchHottestEntity?): Boolean { - return oldItem == newItem - } - - override fun getItemViewType(position: Int): Int { - // 普通样式(包括answer) - if (position == itemCount - 1) return ItemViewType.ITEM_FOOTER - val entity = mEntityList[position] - if (entity.type == "community_article") { - return ARTICLE_TYPE - } - - // 置顶样式 - return when (entity.topSearchType) { - "community_article" -> { - ARTICLE_TYPE - } - "community_special_column" -> { - SPECIAL_COLUMN_TYPE - } - "community_column" -> { - COLUMN_TYPE - } - "question" -> { - QUESTION_TYPE - } - else -> { - ANSWER_TYPE - } - } - } - - override fun onCreateBodyViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - return when (viewType) { - COLUMN_TYPE -> { - val view = mLayoutInflater.inflate(R.layout.community_search_columm_item, parent, false) - ColumnViewHolder(CommunitySearchColummItemBinding.bind(view)) - } - SPECIAL_COLUMN_TYPE -> { - val view = mLayoutInflater.inflate(R.layout.community_search_special_columm_item, parent, false) - SpecialColumnViewHolder(CommunitySearchSpecialColummItemBinding.bind(view)) - } - QUESTION_TYPE -> { - val view = mLayoutInflater.inflate(R.layout.ask_search_question_item, parent, false) - return AskSearchQuestionItemViewHolder(AskSearchQuestionItemBinding.bind(view)) - } - else -> { - val view = mLayoutInflater.inflate(R.layout.ask_search_item, parent, false) - AskSearchNormalItemViewHolder(view) - } - } - } - - override fun onBindBodyViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - val entity = mEntityList[position] - when (holder) { - is AskSearchNormalItemViewHolder -> { - - holder.mVoteCount.text = mContext.getString(R.string.ask_vote_count, - NumberUtils.transSimpleCount(entity.count.vote)) - holder.mContent.text = Html.fromHtml(replayKeyword(entity.brief)) - - val videos = entity.videos - when { - videos.isNotEmpty() -> { - holder.mImageContainer.visibility = View.VISIBLE - holder.mVideoDuration.visibility = View.VISIBLE - holder.mVideoDuration.text = videos[0].duration - ImageUtils.display(holder.mImage, videos[0].poster) - } - entity.images.isNotEmpty() -> { - holder.mImageContainer.visibility = View.VISIBLE - holder.mVideoDuration.visibility = View.GONE - ImageUtils.display(holder.mImage, entity.images[0]) - } - else -> { - holder.mImageContainer.visibility = View.GONE - holder.mVideoDuration.visibility = View.GONE - } - } - - if (getItemViewType(position) == ARTICLE_TYPE) { - val titleSpan = SpannableString(Html.fromHtml(replayKeyword(entity.title))) - if (entity.topSearchType == "community_article") { - setFirstLineMarginSpan(titleSpan) - holder.mTypeIcon.visibility = View.VISIBLE - holder.mTypeIcon.setImageResource(R.drawable.search_article_icon) - } else { - holder.mTypeIcon.visibility = View.GONE - } - holder.mTitle.text = titleSpan - - holder.mAnswerCount.visibility = View.GONE - holder.mAnswerCount.text = mContext.getString(R.string.ask_answer_count, - NumberUtils.transSimpleCount(entity.count.comment)) - holder.itemView.setOnClickListener { skipArticleDetail(entity.id) } - } else { - val question = entity.question - val titleSpan = SpannableString(Html.fromHtml(replayKeyword(question.title))) - if (entity.topSearchType == "answer") { - setFirstLineMarginSpan(titleSpan) - holder.mTypeIcon.visibility = View.VISIBLE - holder.mTypeIcon.setImageResource(R.drawable.search_answer_icon) - } else { - holder.mTypeIcon.visibility = View.GONE - } - holder.mTitle.text = titleSpan - - holder.mAnswerCount.visibility = View.GONE - holder.mAnswerCount.text = mContext.getString(R.string.ask_answer_count, - NumberUtils.transSimpleCount(entity.count.answer)) - holder.mTitle.setOnClickListener { skipQuestionDetail(question) } - holder.itemView.setOnClickListener { skipAnswerDetail(entity.id) } - } - } - is ColumnViewHolder -> { - holder.binding.data = entity - holder.itemView.setOnClickListener { skipColumn(entity.id) } - } - is SpecialColumnViewHolder -> { - holder.binding.data = entity - holder.itemView.setOnClickListener { skipSpecialColumn(entity.id) } - } - is AskSearchQuestionItemViewHolder -> { - val titleSpan = SpannableString(Html.fromHtml(replayKeyword(entity.title))) - setFirstLineMarginSpan(titleSpan) - holder.binding.questionHintIcon.visibility = View.VISIBLE - holder.binding.questionsTitle.text = titleSpan - holder.binding.questionsAnswerCount.text = (NumberUtils.transSimpleCount(entity.count.answer) + " 回答") - holder.itemView.setOnClickListener { skipQuestionDetail(Questions(id = entity.id)) } - } - } - } - - private fun setFirstLineMarginSpan(span: SpannableString) { - span.setSpan(LeadingMarginSpan.Standard(DisplayUtils.dip2px(60F), 0), 0, span.length, 0) - } - - override fun getSyncData(position: Int): Pair? { - if (position >= mEntityList.size) return null - val entity = mEntityList[position] - return Pair(entity.id, entity) - } - - companion object { - const val ANSWER_TYPE = 200 - const val SPECIAL_COLUMN_TYPE = 201 - const val COLUMN_TYPE = 202 - const val ARTICLE_TYPE = 203 - const val QUESTION_TYPE = 204 - } - - class ColumnViewHolder(val binding: CommunitySearchColummItemBinding) : BaseRecyclerViewHolder(binding.root) - - class SpecialColumnViewHolder(val binding: CommunitySearchSpecialColummItemBinding) : BaseRecyclerViewHolder(binding.root) -} \ No newline at end of file +//package com.gh.gamecenter.qa.search.hottest +// +//import android.content.Context +//import androidx.recyclerview.widget.RecyclerView +//import android.text.Html +//import android.text.SpannableString +//import android.text.style.LeadingMarginSpan +//import android.view.View +//import android.view.ViewGroup +//import com.gh.base.BaseRecyclerViewHolder +//import com.gh.common.constant.ItemViewType +//import com.gh.common.util.DisplayUtils +//import com.gh.common.util.ImageUtils +//import com.gh.common.util.NumberUtils +//import com.gh.gamecenter.R +//import com.gh.gamecenter.baselist.NormalListViewModel +//import com.gh.gamecenter.databinding.AskSearchQuestionItemBinding +//import com.gh.gamecenter.databinding.CommunitySearchColummItemBinding +//import com.gh.gamecenter.databinding.CommunitySearchSpecialColummItemBinding +//import com.gh.gamecenter.qa.entity.Questions +//import com.gh.gamecenter.qa.entity.SearchHottestEntity +//import com.gh.gamecenter.qa.search.AskSearchNormalItemViewHolder +//import com.gh.gamecenter.qa.search.AskSearchQuestionItemViewHolder +//import com.gh.gamecenter.qa.search.base.BaseAskSearchAdapter +// +//class HottestAdapter(context: Context, +// entrance: String, +// path: String, +// viewModel: NormalListViewModel) +// : BaseAskSearchAdapter(context, entrance, path, viewModel) { +// +// override fun areItemsTheSame(oldItem: SearchHottestEntity?, newItem: SearchHottestEntity?): Boolean { +// return oldItem == newItem +// } +// +// override fun getItemViewType(position: Int): Int { +// // 普通样式(包括answer) +// if (position == itemCount - 1) return ItemViewType.ITEM_FOOTER +// val entity = mEntityList[position] +// if (entity.type == "community_article") { +// return ARTICLE_TYPE +// } +// +// // 置顶样式 +// return when (entity.topSearchType) { +// "community_article" -> { +// ARTICLE_TYPE +// } +// "community_special_column" -> { +// SPECIAL_COLUMN_TYPE +// } +// "community_column" -> { +// COLUMN_TYPE +// } +// "question" -> { +// QUESTION_TYPE +// } +// else -> { +// ANSWER_TYPE +// } +// } +// } +// +// override fun onCreateBodyViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { +// return when (viewType) { +// COLUMN_TYPE -> { +// val view = mLayoutInflater.inflate(R.layout.community_search_columm_item, parent, false) +// ColumnViewHolder(CommunitySearchColummItemBinding.bind(view)) +// } +// SPECIAL_COLUMN_TYPE -> { +// val view = mLayoutInflater.inflate(R.layout.community_search_special_columm_item, parent, false) +// SpecialColumnViewHolder(CommunitySearchSpecialColummItemBinding.bind(view)) +// } +// QUESTION_TYPE -> { +// val view = mLayoutInflater.inflate(R.layout.ask_search_question_item, parent, false) +// return AskSearchQuestionItemViewHolder(AskSearchQuestionItemBinding.bind(view)) +// } +// else -> { +// val view = mLayoutInflater.inflate(R.layout.ask_search_item, parent, false) +// AskSearchNormalItemViewHolder(view) +// } +// } +// } +// +// override fun onBindBodyViewHolder(holder: RecyclerView.ViewHolder, position: Int) { +// val entity = mEntityList[position] +// when (holder) { +// is AskSearchNormalItemViewHolder -> { +// +// holder.mVoteCount.text = mContext.getString(R.string.ask_vote_count, +// NumberUtils.transSimpleCount(entity.count.vote)) +// holder.mContent.text = Html.fromHtml(replayKeyword(entity.brief)) +// +// val videos = entity.videos +// when { +// videos.isNotEmpty() -> { +// holder.mImageContainer.visibility = View.VISIBLE +// holder.mVideoDuration.visibility = View.VISIBLE +// holder.mVideoDuration.text = videos[0].duration +// ImageUtils.display(holder.mImage, videos[0].poster) +// } +// entity.images.isNotEmpty() -> { +// holder.mImageContainer.visibility = View.VISIBLE +// holder.mVideoDuration.visibility = View.GONE +// ImageUtils.display(holder.mImage, entity.images[0]) +// } +// else -> { +// holder.mImageContainer.visibility = View.GONE +// holder.mVideoDuration.visibility = View.GONE +// } +// } +// +// if (getItemViewType(position) == ARTICLE_TYPE) { +// val titleSpan = SpannableString(Html.fromHtml(replayKeyword(entity.title))) +// if (entity.topSearchType == "community_article") { +// setFirstLineMarginSpan(titleSpan) +// holder.mTypeIcon.visibility = View.VISIBLE +// holder.mTypeIcon.setImageResource(R.drawable.search_article_icon) +// } else { +// holder.mTypeIcon.visibility = View.GONE +// } +// holder.mTitle.text = titleSpan +// +// holder.mAnswerCount.visibility = View.GONE +// holder.mAnswerCount.text = mContext.getString(R.string.ask_answer_count, +// NumberUtils.transSimpleCount(entity.count.comment)) +// holder.itemView.setOnClickListener { skipArticleDetail(entity.id) } +// } else { +// val question = entity.question +// val titleSpan = SpannableString(Html.fromHtml(replayKeyword(question.title))) +// if (entity.topSearchType == "answer") { +// setFirstLineMarginSpan(titleSpan) +// holder.mTypeIcon.visibility = View.VISIBLE +// holder.mTypeIcon.setImageResource(R.drawable.search_answer_icon) +// } else { +// holder.mTypeIcon.visibility = View.GONE +// } +// holder.mTitle.text = titleSpan +// +// holder.mAnswerCount.visibility = View.GONE +// holder.mAnswerCount.text = mContext.getString(R.string.ask_answer_count, +// NumberUtils.transSimpleCount(entity.count.answer)) +// holder.mTitle.setOnClickListener { skipQuestionDetail(question) } +// holder.itemView.setOnClickListener { skipAnswerDetail(entity.id) } +// } +// } +// is ColumnViewHolder -> { +// holder.binding.data = entity +// holder.itemView.setOnClickListener { skipColumn(entity.id) } +// } +// is SpecialColumnViewHolder -> { +// holder.binding.data = entity +// holder.itemView.setOnClickListener { skipSpecialColumn(entity.id) } +// } +// is AskSearchQuestionItemViewHolder -> { +// val titleSpan = SpannableString(Html.fromHtml(replayKeyword(entity.title))) +// setFirstLineMarginSpan(titleSpan) +// holder.binding.questionHintIcon.visibility = View.VISIBLE +// holder.binding.questionsTitle.text = titleSpan +// holder.binding.questionsAnswerCount.text = (NumberUtils.transSimpleCount(entity.count.answer) + " 回答") +// holder.itemView.setOnClickListener { skipQuestionDetail(Questions(id = entity.id)) } +// } +// } +// } +// +// private fun setFirstLineMarginSpan(span: SpannableString) { +// span.setSpan(LeadingMarginSpan.Standard(DisplayUtils.dip2px(60F), 0), 0, span.length, 0) +// } +// +// override fun getSyncData(position: Int): Pair? { +// if (position >= mEntityList.size) return null +// val entity = mEntityList[position] +// return Pair(entity.id, entity) +// } +// +// companion object { +// const val ANSWER_TYPE = 200 +// const val SPECIAL_COLUMN_TYPE = 201 +// const val COLUMN_TYPE = 202 +// const val ARTICLE_TYPE = 203 +// const val QUESTION_TYPE = 204 +// } +// +// class ColumnViewHolder(val binding: CommunitySearchColummItemBinding) : BaseRecyclerViewHolder(binding.root) +// +// class SpecialColumnViewHolder(val binding: CommunitySearchSpecialColummItemBinding) : BaseRecyclerViewHolder(binding.root) +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/search/hottest/HottestFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/search/hottest/HottestFragment.kt index 669e2dc233..4e2a1521e4 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/search/hottest/HottestFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/search/hottest/HottestFragment.kt @@ -1,51 +1,51 @@ -package com.gh.gamecenter.qa.search.hottest - -import android.text.TextUtils -import androidx.lifecycle.ViewModelProviders -import com.gh.common.util.UrlFilterUtils -import com.gh.gamecenter.baselist.NormalListViewModel -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.qa.entity.SearchHottestEntity -import com.gh.gamecenter.qa.search.base.BaseAskSearchFragment -import com.gh.gamecenter.retrofit.RetrofitManager -import com.halo.assistant.HaloApp -import io.reactivex.Observable - -class HottestFragment : BaseAskSearchFragment>() { - - private var mAdapter: HottestAdapter? = null - - override fun setBaseAskListAdapter(): HottestAdapter { - if (mAdapter == null) { - val path = if (!questionTag.isNullOrEmpty()) { - "标签专栏搜索-最热回答" - } else if (!columnId.isNullOrEmpty()) { - "专栏搜索-最热回答" - } else { - "问答-搜索-最热" - } - mAdapter = HottestAdapter(requireContext(), mEntrance, path, mListViewModel) - } - return mAdapter!! - } - - override fun provideListViewModel(): NormalListViewModel { - val factory = NormalListViewModel.Factory(HaloApp.getInstance().application, this) - return ViewModelProviders.of(this, factory).get(NormalListViewModel::class.java) as NormalListViewModel - } - - override fun provideDataObservable(page: Int): Observable>? { - val api = RetrofitManager.getInstance().api - return if (TextUtils.isEmpty(mSearchKey)) null - else if (!questionTag.isNullOrEmpty()) { - api.getAskSearch(UserManager.getInstance().community.id, mSearchKey, - UrlFilterUtils.getFilterQuery("question_tag", questionTag), "answer_vote:-1", page) - } else if (!columnId.isNullOrEmpty()) { - api.getAskSearch(UserManager.getInstance().community.id, mSearchKey, - UrlFilterUtils.getFilterQuery("column_id", columnId), "answer_vote:-1", page) - } else { - api.getAskSearch(UserManager.getInstance().community.id, mSearchKey, - UrlFilterUtils.getFilterQuery("", ""), "answer_vote:-1", page) - } - } -} +//package com.gh.gamecenter.qa.search.hottest +// +//import android.text.TextUtils +//import androidx.lifecycle.ViewModelProviders +//import com.gh.common.util.UrlFilterUtils +//import com.gh.gamecenter.baselist.NormalListViewModel +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.qa.entity.SearchHottestEntity +//import com.gh.gamecenter.qa.search.base.BaseAskSearchFragment +//import com.gh.gamecenter.retrofit.RetrofitManager +//import com.halo.assistant.HaloApp +//import io.reactivex.Observable +// +//class HottestFragment : BaseAskSearchFragment>() { +// +// private var mAdapter: HottestAdapter? = null +// +// override fun setBaseAskListAdapter(): HottestAdapter { +// if (mAdapter == null) { +// val path = if (!questionTag.isNullOrEmpty()) { +// "标签专栏搜索-最热回答" +// } else if (!columnId.isNullOrEmpty()) { +// "专栏搜索-最热回答" +// } else { +// "问答-搜索-最热" +// } +// mAdapter = HottestAdapter(requireContext(), mEntrance, path, mListViewModel) +// } +// return mAdapter!! +// } +// +// override fun provideListViewModel(): NormalListViewModel { +// val factory = NormalListViewModel.Factory(HaloApp.getInstance().application, this) +// return ViewModelProviders.of(this, factory).get(NormalListViewModel::class.java) as NormalListViewModel +// } +// +// override fun provideDataObservable(page: Int): Observable>? { +// val api = RetrofitManager.getInstance().api +// return if (TextUtils.isEmpty(mSearchKey)) null +// else if (!questionTag.isNullOrEmpty()) { +// api.getAskSearch(UserManager.getInstance().community.id, mSearchKey, +// UrlFilterUtils.getFilterQuery("question_tag", questionTag), "answer_vote:-1", page) +// } else if (!columnId.isNullOrEmpty()) { +// api.getAskSearch(UserManager.getInstance().community.id, mSearchKey, +// UrlFilterUtils.getFilterQuery("column_id", columnId), "answer_vote:-1", page) +// } else { +// api.getAskSearch(UserManager.getInstance().community.id, mSearchKey, +// UrlFilterUtils.getFilterQuery("", ""), "answer_vote:-1", page) +// } +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/search/newest/NewestAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/search/newest/NewestAdapter.kt index 571762b78c..b78c965603 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/search/newest/NewestAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/search/newest/NewestAdapter.kt @@ -1,103 +1,103 @@ -package com.gh.gamecenter.qa.search.newest - -import android.content.Context -import androidx.recyclerview.widget.RecyclerView -import android.text.Html -import android.view.View -import android.view.ViewGroup -import com.gh.common.constant.ItemViewType -import com.gh.common.util.ImageUtils -import com.gh.common.util.NumberUtils -import com.gh.gamecenter.R -import com.gh.gamecenter.baselist.NormalListViewModel -import com.gh.gamecenter.qa.entity.SearchNewestEntity -import com.gh.gamecenter.qa.search.AskSearchNormalItemViewHolder -import com.gh.gamecenter.qa.search.base.BaseAskSearchAdapter -import com.gh.gamecenter.qa.search.hottest.HottestAdapter - -class NewestAdapter(context: Context, - entrance: String, - path: String, - viewModel: NormalListViewModel) - : BaseAskSearchAdapter(context, entrance, path, viewModel) { - override fun getItemViewType(position: Int): Int { - if (position == itemCount - 1) return ItemViewType.ITEM_FOOTER - val entity = mEntityList[position] - return if (entity.type == "community_article") { - HottestAdapter.ARTICLE_TYPE - } else { - HottestAdapter.ANSWER_TYPE - } - } - - override fun onCreateBodyViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - val view = mLayoutInflater.inflate(R.layout.ask_search_item, parent, false) - return AskSearchNormalItemViewHolder(view) - } - - override fun onBindBodyViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - if (getItemViewType(position) == HottestAdapter.ANSWER_TYPE) { - holder as AskSearchNormalItemViewHolder - val searchEntity = mEntityList[position] - val question = searchEntity.question - val videos = searchEntity.videos - when { - videos.isNotEmpty() -> { - holder.mImageContainer.visibility = View.VISIBLE - holder.mVideoDuration.visibility = View.VISIBLE - holder.mVideoDuration.text = videos[0].duration - ImageUtils.display(holder.mImage, videos[0].poster) - } - searchEntity.images.isNotEmpty() -> { - holder.mImageContainer.visibility = View.VISIBLE - holder.mVideoDuration.visibility = View.GONE - ImageUtils.display(holder.mImage, searchEntity.images[0]) - } - else -> { - holder.mImageContainer.visibility = View.GONE - holder.mVideoDuration.visibility = View.GONE - } - } - holder.mAnswerCount.visibility = View.GONE - holder.mAnswerCount.text = mContext.getString(R.string.ask_answer_count, NumberUtils.transSimpleCount(searchEntity.count.answer)) - holder.mVoteCount.text = mContext.getString(R.string.ask_vote_count, NumberUtils.transSimpleCount(searchEntity.count.vote)) - holder.mTitle.text = Html.fromHtml(replayKeyword(question.title)) - holder.mContent.text = Html.fromHtml(replayKeyword(searchEntity.brief)) - holder.mTitle.setOnClickListener { skipQuestionDetail(question) } - holder.itemView.setOnClickListener { skipAnswerDetail(searchEntity.id) } - } else if (getItemViewType(position) == HottestAdapter.ARTICLE_TYPE) { - holder as AskSearchNormalItemViewHolder - val entity = mEntityList[position] - val videos = entity.videos - when { - videos.isNotEmpty() -> { - holder.mImageContainer.visibility = View.VISIBLE - holder.mVideoDuration.visibility = View.VISIBLE - holder.mVideoDuration.text = videos[0].duration - ImageUtils.display(holder.mImage, videos[0].poster) - } - entity.images.isNotEmpty() -> { - holder.mImageContainer.visibility = View.VISIBLE - holder.mVideoDuration.visibility = View.GONE - ImageUtils.display(holder.mImage, entity.images[0]) - } - else -> { - holder.mImageContainer.visibility = View.GONE - holder.mVideoDuration.visibility = View.GONE - } - } - holder.mAnswerCount.visibility = View.GONE - holder.mAnswerCount.text = mContext.getString(R.string.ask_answer_count, NumberUtils.transSimpleCount(entity.count.comment)) - holder.mVoteCount.text = mContext.getString(R.string.ask_vote_count, NumberUtils.transSimpleCount(entity.count.vote)) - holder.mTitle.text = Html.fromHtml(replayKeyword(entity.title)) - holder.mContent.text = Html.fromHtml(replayKeyword(entity.brief)) - holder.itemView.setOnClickListener { skipArticleDetail(entity.id) } - } - } - - override fun getSyncData(position: Int): Pair? { - if (position >= mEntityList.size) return null - val entity = mEntityList[position] - return Pair(entity.id, entity) - } -} \ No newline at end of file +//package com.gh.gamecenter.qa.search.newest +// +//import android.content.Context +//import androidx.recyclerview.widget.RecyclerView +//import android.text.Html +//import android.view.View +//import android.view.ViewGroup +//import com.gh.common.constant.ItemViewType +//import com.gh.common.util.ImageUtils +//import com.gh.common.util.NumberUtils +//import com.gh.gamecenter.R +//import com.gh.gamecenter.baselist.NormalListViewModel +//import com.gh.gamecenter.qa.entity.SearchNewestEntity +//import com.gh.gamecenter.qa.search.AskSearchNormalItemViewHolder +//import com.gh.gamecenter.qa.search.base.BaseAskSearchAdapter +//import com.gh.gamecenter.qa.search.hottest.HottestAdapter +// +//class NewestAdapter(context: Context, +// entrance: String, +// path: String, +// viewModel: NormalListViewModel) +// : BaseAskSearchAdapter(context, entrance, path, viewModel) { +// override fun getItemViewType(position: Int): Int { +// if (position == itemCount - 1) return ItemViewType.ITEM_FOOTER +// val entity = mEntityList[position] +// return if (entity.type == "community_article") { +// HottestAdapter.ARTICLE_TYPE +// } else { +// HottestAdapter.ANSWER_TYPE +// } +// } +// +// override fun onCreateBodyViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { +// val view = mLayoutInflater.inflate(R.layout.ask_search_item, parent, false) +// return AskSearchNormalItemViewHolder(view) +// } +// +// override fun onBindBodyViewHolder(holder: RecyclerView.ViewHolder, position: Int) { +// if (getItemViewType(position) == HottestAdapter.ANSWER_TYPE) { +// holder as AskSearchNormalItemViewHolder +// val searchEntity = mEntityList[position] +// val question = searchEntity.question +// val videos = searchEntity.videos +// when { +// videos.isNotEmpty() -> { +// holder.mImageContainer.visibility = View.VISIBLE +// holder.mVideoDuration.visibility = View.VISIBLE +// holder.mVideoDuration.text = videos[0].duration +// ImageUtils.display(holder.mImage, videos[0].poster) +// } +// searchEntity.images.isNotEmpty() -> { +// holder.mImageContainer.visibility = View.VISIBLE +// holder.mVideoDuration.visibility = View.GONE +// ImageUtils.display(holder.mImage, searchEntity.images[0]) +// } +// else -> { +// holder.mImageContainer.visibility = View.GONE +// holder.mVideoDuration.visibility = View.GONE +// } +// } +// holder.mAnswerCount.visibility = View.GONE +// holder.mAnswerCount.text = mContext.getString(R.string.ask_answer_count, NumberUtils.transSimpleCount(searchEntity.count.answer)) +// holder.mVoteCount.text = mContext.getString(R.string.ask_vote_count, NumberUtils.transSimpleCount(searchEntity.count.vote)) +// holder.mTitle.text = Html.fromHtml(replayKeyword(question.title)) +// holder.mContent.text = Html.fromHtml(replayKeyword(searchEntity.brief)) +// holder.mTitle.setOnClickListener { skipQuestionDetail(question) } +// holder.itemView.setOnClickListener { skipAnswerDetail(searchEntity.id) } +// } else if (getItemViewType(position) == HottestAdapter.ARTICLE_TYPE) { +// holder as AskSearchNormalItemViewHolder +// val entity = mEntityList[position] +// val videos = entity.videos +// when { +// videos.isNotEmpty() -> { +// holder.mImageContainer.visibility = View.VISIBLE +// holder.mVideoDuration.visibility = View.VISIBLE +// holder.mVideoDuration.text = videos[0].duration +// ImageUtils.display(holder.mImage, videos[0].poster) +// } +// entity.images.isNotEmpty() -> { +// holder.mImageContainer.visibility = View.VISIBLE +// holder.mVideoDuration.visibility = View.GONE +// ImageUtils.display(holder.mImage, entity.images[0]) +// } +// else -> { +// holder.mImageContainer.visibility = View.GONE +// holder.mVideoDuration.visibility = View.GONE +// } +// } +// holder.mAnswerCount.visibility = View.GONE +// holder.mAnswerCount.text = mContext.getString(R.string.ask_answer_count, NumberUtils.transSimpleCount(entity.count.comment)) +// holder.mVoteCount.text = mContext.getString(R.string.ask_vote_count, NumberUtils.transSimpleCount(entity.count.vote)) +// holder.mTitle.text = Html.fromHtml(replayKeyword(entity.title)) +// holder.mContent.text = Html.fromHtml(replayKeyword(entity.brief)) +// holder.itemView.setOnClickListener { skipArticleDetail(entity.id) } +// } +// } +// +// override fun getSyncData(position: Int): Pair? { +// if (position >= mEntityList.size) return null +// val entity = mEntityList[position] +// return Pair(entity.id, entity) +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/search/newest/NewestFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/search/newest/NewestFragment.kt index 4d4b7f7c5b..4d9e9fa3c9 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/search/newest/NewestFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/search/newest/NewestFragment.kt @@ -1,49 +1,49 @@ -package com.gh.gamecenter.qa.search.newest - -import android.text.TextUtils -import androidx.lifecycle.ViewModelProviders -import com.gh.common.util.UrlFilterUtils -import com.gh.gamecenter.baselist.NormalListViewModel -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.qa.entity.SearchNewestEntity -import com.gh.gamecenter.qa.search.base.BaseAskSearchFragment -import com.gh.gamecenter.retrofit.RetrofitManager -import com.halo.assistant.HaloApp -import io.reactivex.Observable - -class NewestFragment : BaseAskSearchFragment>() { - - private var mAdapter: NewestAdapter? = null - - override fun setBaseAskListAdapter(): NewestAdapter { - if (mAdapter == null) { - val path = if (!questionTag.isNullOrEmpty()) { - "标签专栏搜索-最新回答" - } else if (!columnId.isNullOrEmpty()) { - "专栏搜索-最新回答" - } else { - "问答-搜索-最新" - } - mAdapter = NewestAdapter(requireContext(), mEntrance, path, mListViewModel) - } - return mAdapter!! - } - - override fun provideListViewModel(): NormalListViewModel { - val factory = NormalListViewModel.Factory(HaloApp.getInstance().application, this) - return ViewModelProviders.of(this, factory).get(NormalListViewModel::class.java) as NormalListViewModel - } - - override fun provideDataObservable(page: Int): Observable>? { - val api = RetrofitManager.getInstance().api - return if (TextUtils.isEmpty(mSearchKey)) null - else if (!questionTag.isNullOrEmpty()) { - api.getAskSearchNewest(UserManager.getInstance().community.id, mSearchKey, - UrlFilterUtils.getFilterQuery("question_tag", questionTag), "answer_time:-1", page) - } else if (!columnId.isNullOrEmpty()) { - api.getAskSearchNewest(UserManager.getInstance().community.id, mSearchKey, - UrlFilterUtils.getFilterQuery("column_id", columnId), "answer_time:-1", page) - } else api.getAskSearchNewest(UserManager.getInstance().community.id, mSearchKey, - UrlFilterUtils.getFilterQuery("", ""), "answer_time:-1", page) - } -} +//package com.gh.gamecenter.qa.search.newest +// +//import android.text.TextUtils +//import androidx.lifecycle.ViewModelProviders +//import com.gh.common.util.UrlFilterUtils +//import com.gh.gamecenter.baselist.NormalListViewModel +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.qa.entity.SearchNewestEntity +//import com.gh.gamecenter.qa.search.base.BaseAskSearchFragment +//import com.gh.gamecenter.retrofit.RetrofitManager +//import com.halo.assistant.HaloApp +//import io.reactivex.Observable +// +//class NewestFragment : BaseAskSearchFragment>() { +// +// private var mAdapter: NewestAdapter? = null +// +// override fun setBaseAskListAdapter(): NewestAdapter { +// if (mAdapter == null) { +// val path = if (!questionTag.isNullOrEmpty()) { +// "标签专栏搜索-最新回答" +// } else if (!columnId.isNullOrEmpty()) { +// "专栏搜索-最新回答" +// } else { +// "问答-搜索-最新" +// } +// mAdapter = NewestAdapter(requireContext(), mEntrance, path, mListViewModel) +// } +// return mAdapter!! +// } +// +// override fun provideListViewModel(): NormalListViewModel { +// val factory = NormalListViewModel.Factory(HaloApp.getInstance().application, this) +// return ViewModelProviders.of(this, factory).get(NormalListViewModel::class.java) as NormalListViewModel +// } +// +// override fun provideDataObservable(page: Int): Observable>? { +// val api = RetrofitManager.getInstance().api +// return if (TextUtils.isEmpty(mSearchKey)) null +// else if (!questionTag.isNullOrEmpty()) { +// api.getAskSearchNewest(UserManager.getInstance().community.id, mSearchKey, +// UrlFilterUtils.getFilterQuery("question_tag", questionTag), "answer_time:-1", page) +// } else if (!columnId.isNullOrEmpty()) { +// api.getAskSearchNewest(UserManager.getInstance().community.id, mSearchKey, +// UrlFilterUtils.getFilterQuery("column_id", columnId), "answer_time:-1", page) +// } else api.getAskSearchNewest(UserManager.getInstance().community.id, mSearchKey, +// UrlFilterUtils.getFilterQuery("", ""), "answer_time:-1", page) +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/search/question/QuestionAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/search/question/QuestionAdapter.kt index 47e5599aa1..aa868f24cf 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/search/question/QuestionAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/search/question/QuestionAdapter.kt @@ -1,43 +1,43 @@ -package com.gh.gamecenter.qa.search.question - -import android.content.Context -import android.text.Html -import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView -import com.gh.common.util.NumberUtils -import com.gh.gamecenter.R -import com.gh.gamecenter.baselist.NormalListViewModel -import com.gh.gamecenter.databinding.AskSearchQuestionItemBinding -import com.gh.gamecenter.qa.entity.Questions -import com.gh.gamecenter.qa.search.AskSearchQuestionItemViewHolder -import com.gh.gamecenter.qa.search.base.BaseAskSearchAdapter - -class QuestionAdapter(context: Context, - entrance: String, - path: String, - viewModel: NormalListViewModel) - : BaseAskSearchAdapter(context, entrance, path, viewModel) { - - override fun areItemsTheSame(oldItem: Questions?, newItem: Questions?): Boolean { - return oldItem?.id == newItem?.id - } - - override fun onCreateBodyViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - val view = mLayoutInflater.inflate(R.layout.ask_search_question_item, parent, false) - return AskSearchQuestionItemViewHolder(AskSearchQuestionItemBinding.bind(view)) - } - - override fun onBindBodyViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - if (holder is AskSearchQuestionItemViewHolder) { - val entity = mEntityList[position] - holder.binding.questionsTitle.text = Html.fromHtml(replayKeyword(entity.title)) - holder.binding.questionsAnswerCount.text = (NumberUtils.transSimpleCount(entity.count.answer) + " 回答") - holder.itemView.setOnClickListener { skipQuestionDetail(entity) } - } - } - - override fun getSyncData(position: Int): Pair? { - // todo 字段冲突,搁置 - return null - } -} \ No newline at end of file +//package com.gh.gamecenter.qa.search.question +// +//import android.content.Context +//import android.text.Html +//import android.view.ViewGroup +//import androidx.recyclerview.widget.RecyclerView +//import com.gh.common.util.NumberUtils +//import com.gh.gamecenter.R +//import com.gh.gamecenter.baselist.NormalListViewModel +//import com.gh.gamecenter.databinding.AskSearchQuestionItemBinding +//import com.gh.gamecenter.qa.entity.Questions +//import com.gh.gamecenter.qa.search.AskSearchQuestionItemViewHolder +//import com.gh.gamecenter.qa.search.base.BaseAskSearchAdapter +// +//class QuestionAdapter(context: Context, +// entrance: String, +// path: String, +// viewModel: NormalListViewModel) +// : BaseAskSearchAdapter(context, entrance, path, viewModel) { +// +// override fun areItemsTheSame(oldItem: Questions?, newItem: Questions?): Boolean { +// return oldItem?.id == newItem?.id +// } +// +// override fun onCreateBodyViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { +// val view = mLayoutInflater.inflate(R.layout.ask_search_question_item, parent, false) +// return AskSearchQuestionItemViewHolder(AskSearchQuestionItemBinding.bind(view)) +// } +// +// override fun onBindBodyViewHolder(holder: RecyclerView.ViewHolder, position: Int) { +// if (holder is AskSearchQuestionItemViewHolder) { +// val entity = mEntityList[position] +// holder.binding.questionsTitle.text = Html.fromHtml(replayKeyword(entity.title)) +// holder.binding.questionsAnswerCount.text = (NumberUtils.transSimpleCount(entity.count.answer) + " 回答") +// holder.itemView.setOnClickListener { skipQuestionDetail(entity) } +// } +// } +// +// override fun getSyncData(position: Int): Pair? { +// // todo 字段冲突,搁置 +// return null +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/search/question/QuestionFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/search/question/QuestionFragment.kt index dd4f9eb2c5..3d7a465fa3 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/search/question/QuestionFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/search/question/QuestionFragment.kt @@ -1,54 +1,54 @@ -package com.gh.gamecenter.qa.search.question - -import android.text.TextUtils -import androidx.lifecycle.ViewModelProviders -import com.gh.common.util.UrlFilterUtils -import com.gh.gamecenter.baselist.NormalListViewModel -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.qa.entity.Questions -import com.gh.gamecenter.qa.search.base.BaseAskSearchFragment -import com.gh.gamecenter.retrofit.RetrofitManager -import com.halo.assistant.HaloApp -import io.reactivex.Observable - -class QuestionFragment : BaseAskSearchFragment>() { - - private var mAdapter: QuestionAdapter? = null - - override fun setBaseAskListAdapter(): QuestionAdapter { - if (mAdapter == null) { - val path = if (!questionTag.isNullOrEmpty()) { - "标签专栏搜索-只看问题" - } else if (!columnId.isNullOrEmpty()) { - "专栏搜索-只看问题" - } else { - "问答-搜索-问题" - } - mAdapter = QuestionAdapter(requireContext(), mEntrance, path, mListViewModel) - } - return mAdapter!! - } - - override fun provideListViewModel(): NormalListViewModel { - val factory = NormalListViewModel.Factory(HaloApp.getInstance().application, this) - return ViewModelProviders.of(this, factory).get(NormalListViewModel::class.java) as NormalListViewModel - } - - override fun provideDataObservable(page: Int): Observable>? { - val api = RetrofitManager.getInstance().api - return if (TextUtils.isEmpty(mSearchKey)) null - else if (!questionTag.isNullOrEmpty()) { - api.getAskSearchQuestion(UserManager.getInstance().community.id, mSearchKey, - UrlFilterUtils.getFilterQuery("question_tag", questionTag, "type", "question"), "question_time:-1", page) - } else if (!columnId.isNullOrEmpty()) { - api.getAskSearchQuestion(UserManager.getInstance().community.id, mSearchKey, - UrlFilterUtils.getFilterQuery("column_id", columnId, "type", "question"), "question_time:-1", page) - } else - api.getAskSearchQuestion(UserManager.getInstance().community.id, mSearchKey, - UrlFilterUtils.getFilterQuery("type", "question"), "question_time:-1", page) - } - - override fun addSyncPageObserver(): Boolean { - return false - } -} +//package com.gh.gamecenter.qa.search.question +// +//import android.text.TextUtils +//import androidx.lifecycle.ViewModelProviders +//import com.gh.common.util.UrlFilterUtils +//import com.gh.gamecenter.baselist.NormalListViewModel +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.qa.entity.Questions +//import com.gh.gamecenter.qa.search.base.BaseAskSearchFragment +//import com.gh.gamecenter.retrofit.RetrofitManager +//import com.halo.assistant.HaloApp +//import io.reactivex.Observable +// +//class QuestionFragment : BaseAskSearchFragment>() { +// +// private var mAdapter: QuestionAdapter? = null +// +// override fun setBaseAskListAdapter(): QuestionAdapter { +// if (mAdapter == null) { +// val path = if (!questionTag.isNullOrEmpty()) { +// "标签专栏搜索-只看问题" +// } else if (!columnId.isNullOrEmpty()) { +// "专栏搜索-只看问题" +// } else { +// "问答-搜索-问题" +// } +// mAdapter = QuestionAdapter(requireContext(), mEntrance, path, mListViewModel) +// } +// return mAdapter!! +// } +// +// override fun provideListViewModel(): NormalListViewModel { +// val factory = NormalListViewModel.Factory(HaloApp.getInstance().application, this) +// return ViewModelProviders.of(this, factory).get(NormalListViewModel::class.java) as NormalListViewModel +// } +// +// override fun provideDataObservable(page: Int): Observable>? { +// val api = RetrofitManager.getInstance().api +// return if (TextUtils.isEmpty(mSearchKey)) null +// else if (!questionTag.isNullOrEmpty()) { +// api.getAskSearchQuestion(UserManager.getInstance().community.id, mSearchKey, +// UrlFilterUtils.getFilterQuery("question_tag", questionTag, "type", "question"), "question_time:-1", page) +// } else if (!columnId.isNullOrEmpty()) { +// api.getAskSearchQuestion(UserManager.getInstance().community.id, mSearchKey, +// UrlFilterUtils.getFilterQuery("column_id", columnId, "type", "question"), "question_time:-1", page) +// } else +// api.getAskSearchQuestion(UserManager.getInstance().community.id, mSearchKey, +// UrlFilterUtils.getFilterQuery("type", "question"), "question_time:-1", page) +// } +// +// override fun addSyncPageObserver(): Boolean { +// return false +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/search/user/UserAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/search/user/UserAdapter.kt index 0bf9e4f37e..9fe2a920d3 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/search/user/UserAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/search/user/UserAdapter.kt @@ -1,94 +1,94 @@ -package com.gh.gamecenter.qa.search.user - -import android.content.Context -import android.view.View -import android.view.ViewGroup -import androidx.core.content.ContextCompat -import com.gh.common.util.* -import com.gh.gamecenter.R -import com.gh.gamecenter.databinding.FollowersOrFansItemBinding -import com.gh.gamecenter.entity.FollowersOrFansEntity -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.personalhome.FollowersOrFansViewHolder -import com.gh.gamecenter.qa.search.base.BaseAskSearchAdapter - -class UserAdapter(context: Context, - entrance: String, - path: String, - private val mViewModel: UserViewModel) - : BaseAskSearchAdapter(context, entrance, path, mViewModel) { - - override fun areItemsTheSame(oldItem: FollowersOrFansEntity?, newItem: FollowersOrFansEntity?): Boolean { - return oldItem?.id == newItem?.id - } - - override fun areContentsTheSame(oldItem: FollowersOrFansEntity?, newItem: FollowersOrFansEntity?): Boolean { - return oldItem == newItem - } - - override fun onCreateBodyViewHolder(parent: ViewGroup, viewType: Int): androidx.recyclerview.widget.RecyclerView.ViewHolder { - val view = mLayoutInflater.inflate(R.layout.followers_or_fans_item, parent, false) - return FollowersOrFansViewHolder(FollowersOrFansItemBinding.bind(view)) - } - - override fun onBindBodyViewHolder(holder: androidx.recyclerview.widget.RecyclerView.ViewHolder, position: Int) { - if (holder is FollowersOrFansViewHolder) { - val entity = mEntityList[position] - holder.binding.entity = entity - holder.binding.followerBtn.run { - when { - entity.id == UserManager.getInstance().userId -> { - setText(R.string.myself) - setTextColor(ContextCompat.getColor(mContext, R.color.button_gray)) - setBackgroundResource(R.drawable.button_border_gray) - } - entity?.me?.isFollower!! -> { - setText(R.string.concerned) - setTextColor(ContextCompat.getColor(mContext, R.color.hint)) - setBackgroundResource(R.drawable.questions_detail_tag_bg) - } - else -> { - setText(R.string.concern) - setTextColor(ContextCompat.getColor(mContext, R.color.theme_font)) - setBackgroundResource(R.drawable.questions_detail_tag_bg) - } - } - } - - if (entity.badge != null) { - holder.binding.sdvUserBadge.visibility = View.VISIBLE - ImageUtils.display(holder.binding.sdvUserBadge, entity.badge.icon) - } else { - holder.binding.sdvUserBadge.visibility = View.GONE - } - - holder.binding.sdvUserBadge.setOnClickListener { v -> - DialogUtils.showViewBadgeDialog(mContext, entity.badge) { - MtaHelper.onEvent("进入徽章墙_用户记录","问答-搜索-用户列表","${entity.name}(${entity.id})") - MtaHelper.onEvent("徽章中心","进入徽章中心","问答-搜索-用户列表") - DirectUtils.directToBadgeWall(mContext, entity.id, entity.name, entity.icon) - } - } - - holder.binding.followerBtn.setOnClickListener { - mContext.ifLogin(mEntrance) { - if (entity.id != UserManager.getInstance().userId) { - if (entity?.me?.isFollower!!) { - DialogHelper.showDialog(mContext, "取消关注", "确定要取消关注 ${entity.name} 吗?", - "确定取消", "暂不取消", { - mViewModel.followingCommand(!entity.me.isFollower, entity.id, position) - }) - } else { - mViewModel.followingCommand(!entity.me.isFollower, entity.id, position) - } - } - } - } - holder.itemView.setOnClickListener { skipPersonalHome(entity.id) } - } - } - - override fun getSyncData(position: Int): Pair? { - return null - } -} \ No newline at end of file +//package com.gh.gamecenter.qa.search.user +// +//import android.content.Context +//import android.view.View +//import android.view.ViewGroup +//import androidx.core.content.ContextCompat +//import com.gh.common.util.* +//import com.gh.gamecenter.R +//import com.gh.gamecenter.databinding.FollowersOrFansItemBinding +//import com.gh.gamecenter.entity.FollowersOrFansEntity +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.personalhome.FollowersOrFansViewHolder +//import com.gh.gamecenter.qa.search.base.BaseAskSearchAdapter +// +//class UserAdapter(context: Context, +// entrance: String, +// path: String, +// private val mViewModel: UserViewModel) +// : BaseAskSearchAdapter(context, entrance, path, mViewModel) { +// +// override fun areItemsTheSame(oldItem: FollowersOrFansEntity?, newItem: FollowersOrFansEntity?): Boolean { +// return oldItem?.id == newItem?.id +// } +// +// override fun areContentsTheSame(oldItem: FollowersOrFansEntity?, newItem: FollowersOrFansEntity?): Boolean { +// return oldItem == newItem +// } +// +// override fun onCreateBodyViewHolder(parent: ViewGroup, viewType: Int): androidx.recyclerview.widget.RecyclerView.ViewHolder { +// val view = mLayoutInflater.inflate(R.layout.followers_or_fans_item, parent, false) +// return FollowersOrFansViewHolder(FollowersOrFansItemBinding.bind(view)) +// } +// +// override fun onBindBodyViewHolder(holder: androidx.recyclerview.widget.RecyclerView.ViewHolder, position: Int) { +// if (holder is FollowersOrFansViewHolder) { +// val entity = mEntityList[position] +// holder.binding.entity = entity +// holder.binding.followerBtn.run { +// when { +// entity.id == UserManager.getInstance().userId -> { +// setText(R.string.myself) +// setTextColor(ContextCompat.getColor(mContext, R.color.button_gray)) +// setBackgroundResource(R.drawable.button_border_gray) +// } +// entity?.me?.isFollower!! -> { +// setText(R.string.concerned) +// setTextColor(ContextCompat.getColor(mContext, R.color.hint)) +// setBackgroundResource(R.drawable.questions_detail_tag_bg) +// } +// else -> { +// setText(R.string.concern) +// setTextColor(ContextCompat.getColor(mContext, R.color.theme_font)) +// setBackgroundResource(R.drawable.questions_detail_tag_bg) +// } +// } +// } +// +// if (entity.badge != null) { +// holder.binding.sdvUserBadge.visibility = View.VISIBLE +// ImageUtils.display(holder.binding.sdvUserBadge, entity.badge.icon) +// } else { +// holder.binding.sdvUserBadge.visibility = View.GONE +// } +// +// holder.binding.sdvUserBadge.setOnClickListener { v -> +// DialogUtils.showViewBadgeDialog(mContext, entity.badge) { +// MtaHelper.onEvent("进入徽章墙_用户记录","问答-搜索-用户列表","${entity.name}(${entity.id})") +// MtaHelper.onEvent("徽章中心","进入徽章中心","问答-搜索-用户列表") +// DirectUtils.directToBadgeWall(mContext, entity.id, entity.name, entity.icon) +// } +// } +// +// holder.binding.followerBtn.setOnClickListener { +// mContext.ifLogin(mEntrance) { +// if (entity.id != UserManager.getInstance().userId) { +// if (entity?.me?.isFollower!!) { +// DialogHelper.showDialog(mContext, "取消关注", "确定要取消关注 ${entity.name} 吗?", +// "确定取消", "暂不取消", { +// mViewModel.followingCommand(!entity.me.isFollower, entity.id, position) +// }) +// } else { +// mViewModel.followingCommand(!entity.me.isFollower, entity.id, position) +// } +// } +// } +// } +// holder.itemView.setOnClickListener { skipPersonalHome(entity.id) } +// } +// } +// +// override fun getSyncData(position: Int): Pair? { +// return null +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/search/user/UserFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/search/user/UserFragment.kt index d93cf2133e..58927a4262 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/search/user/UserFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/search/user/UserFragment.kt @@ -1,65 +1,65 @@ -package com.gh.gamecenter.qa.search.user - -import android.os.Bundle -import android.text.TextUtils -import androidx.lifecycle.Observer -import androidx.lifecycle.ViewModelProviders -import com.gh.common.util.UrlFilterUtils -import com.gh.gamecenter.entity.FollowersOrFansEntity -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.qa.search.base.BaseAskSearchFragment -import com.gh.gamecenter.retrofit.RetrofitManager -import com.halo.assistant.HaloApp -import io.reactivex.Observable - -class UserFragment : BaseAskSearchFragment() { - - private var mAdapter: UserAdapter? = null - - override fun setBaseAskListAdapter(): UserAdapter { - if (mAdapter == null) { - val path = if (!questionTag.isNullOrEmpty()) { - "标签专栏搜索-用户" - } else if (!columnId.isNullOrEmpty()) { - "专栏搜索-用户" - } else { - "问答-搜索-用户" - } - mAdapter = UserAdapter(requireContext(), mEntrance, path, mListViewModel) - } - return mAdapter!! - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - mListViewModel.followingLiveData.observe(this, Observer { - if (it != null && mAdapter != null && mAdapter!!.itemCount > it) { - mAdapter?.notifyItemChanged(it) - } - }) - } - - - override fun provideListViewModel(): UserViewModel { - val factory = UserViewModel.Factory(HaloApp.getInstance().application, this) - return ViewModelProviders.of(this, factory).get(UserViewModel::class.java) - } - - override fun provideDataObservable(page: Int): Observable>? { - val api = RetrofitManager.getInstance().api - return if (TextUtils.isEmpty(mSearchKey)) null - else if (!questionTag.isNullOrEmpty()) { - api.getAskSearchUser(UserManager.getInstance().community.id, mSearchKey, - UrlFilterUtils.getFilterQuery("question_tag", questionTag, "type", "user"), page) - } else if (!columnId.isNullOrEmpty()) { - api.getAskSearchUser(UserManager.getInstance().community.id, mSearchKey, - UrlFilterUtils.getFilterQuery("column_id", columnId, "type", "user"), page) - } else - api.getAskSearchUser(UserManager.getInstance().community.id, mSearchKey, - UrlFilterUtils.getFilterQuery("type", "user"), page) - } - - override fun addSyncPageObserver(): Boolean { - return false - } -} \ No newline at end of file +//package com.gh.gamecenter.qa.search.user +// +//import android.os.Bundle +//import android.text.TextUtils +//import androidx.lifecycle.Observer +//import androidx.lifecycle.ViewModelProviders +//import com.gh.common.util.UrlFilterUtils +//import com.gh.gamecenter.entity.FollowersOrFansEntity +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.qa.search.base.BaseAskSearchFragment +//import com.gh.gamecenter.retrofit.RetrofitManager +//import com.halo.assistant.HaloApp +//import io.reactivex.Observable +// +//class UserFragment : BaseAskSearchFragment() { +// +// private var mAdapter: UserAdapter? = null +// +// override fun setBaseAskListAdapter(): UserAdapter { +// if (mAdapter == null) { +// val path = if (!questionTag.isNullOrEmpty()) { +// "标签专栏搜索-用户" +// } else if (!columnId.isNullOrEmpty()) { +// "专栏搜索-用户" +// } else { +// "问答-搜索-用户" +// } +// mAdapter = UserAdapter(requireContext(), mEntrance, path, mListViewModel) +// } +// return mAdapter!! +// } +// +// override fun onCreate(savedInstanceState: Bundle?) { +// super.onCreate(savedInstanceState) +// mListViewModel.followingLiveData.observe(this, Observer { +// if (it != null && mAdapter != null && mAdapter!!.itemCount > it) { +// mAdapter?.notifyItemChanged(it) +// } +// }) +// } +// +// +// override fun provideListViewModel(): UserViewModel { +// val factory = UserViewModel.Factory(HaloApp.getInstance().application, this) +// return ViewModelProviders.of(this, factory).get(UserViewModel::class.java) +// } +// +// override fun provideDataObservable(page: Int): Observable>? { +// val api = RetrofitManager.getInstance().api +// return if (TextUtils.isEmpty(mSearchKey)) null +// else if (!questionTag.isNullOrEmpty()) { +// api.getAskSearchUser(UserManager.getInstance().community.id, mSearchKey, +// UrlFilterUtils.getFilterQuery("question_tag", questionTag, "type", "user"), page) +// } else if (!columnId.isNullOrEmpty()) { +// api.getAskSearchUser(UserManager.getInstance().community.id, mSearchKey, +// UrlFilterUtils.getFilterQuery("column_id", columnId, "type", "user"), page) +// } else +// api.getAskSearchUser(UserManager.getInstance().community.id, mSearchKey, +// UrlFilterUtils.getFilterQuery("type", "user"), page) +// } +// +// override fun addSyncPageObserver(): Boolean { +// return false +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/search/user/UserViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/search/user/UserViewModel.kt index 3de7d3193e..ec225e681f 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/search/user/UserViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/search/user/UserViewModel.kt @@ -1,73 +1,73 @@ -package com.gh.gamecenter.qa.search.user - -import android.app.Application -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.ViewModel -import androidx.lifecycle.ViewModelProvider -import com.gh.gamecenter.R -import com.gh.gamecenter.baselist.ListViewModel -import com.gh.gamecenter.baselist.OnDataObservable -import com.gh.gamecenter.entity.FollowersOrFansEntity -import com.gh.gamecenter.eventbus.EBUserFollow -import com.gh.gamecenter.retrofit.Response -import com.gh.gamecenter.retrofit.RetrofitManager -import com.lightgame.utils.Utils -import io.reactivex.Observable -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.schedulers.Schedulers -import okhttp3.ResponseBody -import org.greenrobot.eventbus.EventBus -import retrofit2.HttpException - -class UserViewModel(application: Application, - private val mDataObservable: OnDataObservable) - : ListViewModel(application) { - - val followingLiveData: MutableLiveData = MutableLiveData() - - override fun provideDataObservable(page: Int): Observable>? { - return mDataObservable.provideDataObservable(page) - } - - override fun mergeResultLiveData() { - mResultLiveData.addSource(mListLiveData) { mResultLiveData.postValue(it) } - } - - fun followingCommand(isFollow: Boolean, targetUserId: String, position: Int) { - val observable = if (isFollow) { - RetrofitManager.getInstance().api.postFollowing(targetUserId) - } else { - RetrofitManager.getInstance().api.deleteFollowing(targetUserId) - } - observable - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(object : Response() { - override fun onResponse(response: ResponseBody?) { - if (isFollow) { - // 关注成功 - Utils.toast(getApplication(), R.string.concern_success) - } - - val list = mResultLiveData.value - if (list != null && list.size > position) { - list[position].me.isFollower = isFollow - } - - followingLiveData.postValue(position) - EventBus.getDefault().post(EBUserFollow(targetUserId, isFollow)) - } - - override fun onFailure(e: HttpException?) { - Utils.toast(getApplication(), R.string.post_failure_hint) - } - }) - } - - class Factory(private val mApplication: Application, private val mDataObservable: OnDataObservable) - : ViewModelProvider.NewInstanceFactory() { - override fun create(modelClass: Class): T { - return UserViewModel(mApplication, mDataObservable) as T - } - } -} \ No newline at end of file +//package com.gh.gamecenter.qa.search.user +// +//import android.app.Application +//import androidx.lifecycle.MutableLiveData +//import androidx.lifecycle.ViewModel +//import androidx.lifecycle.ViewModelProvider +//import com.gh.gamecenter.R +//import com.gh.gamecenter.baselist.ListViewModel +//import com.gh.gamecenter.baselist.OnDataObservable +//import com.gh.gamecenter.entity.FollowersOrFansEntity +//import com.gh.gamecenter.eventbus.EBUserFollow +//import com.gh.gamecenter.retrofit.Response +//import com.gh.gamecenter.retrofit.RetrofitManager +//import com.lightgame.utils.Utils +//import io.reactivex.Observable +//import io.reactivex.android.schedulers.AndroidSchedulers +//import io.reactivex.schedulers.Schedulers +//import okhttp3.ResponseBody +//import org.greenrobot.eventbus.EventBus +//import retrofit2.HttpException +// +//class UserViewModel(application: Application, +// private val mDataObservable: OnDataObservable) +// : ListViewModel(application) { +// +// val followingLiveData: MutableLiveData = MutableLiveData() +// +// override fun provideDataObservable(page: Int): Observable>? { +// return mDataObservable.provideDataObservable(page) +// } +// +// override fun mergeResultLiveData() { +// mResultLiveData.addSource(mListLiveData) { mResultLiveData.postValue(it) } +// } +// +// fun followingCommand(isFollow: Boolean, targetUserId: String, position: Int) { +// val observable = if (isFollow) { +// RetrofitManager.getInstance().api.postFollowing(targetUserId) +// } else { +// RetrofitManager.getInstance().api.deleteFollowing(targetUserId) +// } +// observable +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(object : Response() { +// override fun onResponse(response: ResponseBody?) { +// if (isFollow) { +// // 关注成功 +// Utils.toast(getApplication(), R.string.concern_success) +// } +// +// val list = mResultLiveData.value +// if (list != null && list.size > position) { +// list[position].me.isFollower = isFollow +// } +// +// followingLiveData.postValue(position) +// EventBus.getDefault().post(EBUserFollow(targetUserId, isFollow)) +// } +// +// override fun onFailure(e: HttpException?) { +// Utils.toast(getApplication(), R.string.post_failure_hint) +// } +// }) +// } +// +// class Factory(private val mApplication: Application, private val mDataObservable: OnDataObservable) +// : ViewModelProvider.NewInstanceFactory() { +// override fun create(modelClass: Class): T { +// return UserViewModel(mApplication, mDataObservable) as T +// } +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/select/AskSelectGameItemViewHolder.java b/app/src/main/java/com/gh/gamecenter/qa/select/AskSelectGameItemViewHolder.java index 8522edfadf..f5a642f890 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/select/AskSelectGameItemViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/qa/select/AskSelectGameItemViewHolder.java @@ -1,31 +1,31 @@ -package com.gh.gamecenter.qa.select; - -import android.view.View; -import android.widget.TextView; - -import com.gh.base.BaseRecyclerViewHolder; -import com.gh.base.OnListClickListener; -import com.gh.common.view.GameIconView; -import com.gh.gamecenter.R; -import com.gh.gamecenter.qa.entity.CommunitySelectEntity; - -import butterknife.BindView; - -/** - * Created by khy on 6/12/17. - */ - -public class AskSelectGameItemViewHolder extends BaseRecyclerViewHolder { - @BindView(R.id.ask_selectgame_item_icon) - public GameIconView mIcon; - @BindView(R.id.ask_selectgame_item_votecount) - public TextView mVotecount; - @BindView(R.id.ask_selectgame_item_name) - public TextView mName; - - - public AskSelectGameItemViewHolder(View itemView, OnListClickListener listClickListener) { - super(itemView, listClickListener); - itemView.setOnClickListener(this); - } -} +//package com.gh.gamecenter.qa.select; +// +//import android.view.View; +//import android.widget.TextView; +// +//import com.gh.base.BaseRecyclerViewHolder; +//import com.gh.base.OnListClickListener; +//import com.gh.common.view.GameIconView; +//import com.gh.gamecenter.R; +//import com.gh.gamecenter.qa.entity.CommunitySelectEntity; +// +//import butterknife.BindView; +// +///** +// * Created by khy on 6/12/17. +// */ +// +//public class AskSelectGameItemViewHolder extends BaseRecyclerViewHolder { +// @BindView(R.id.ask_selectgame_item_icon) +// public GameIconView mIcon; +// @BindView(R.id.ask_selectgame_item_votecount) +// public TextView mVotecount; +// @BindView(R.id.ask_selectgame_item_name) +// public TextView mName; +// +// +// public AskSelectGameItemViewHolder(View itemView, OnListClickListener listClickListener) { +// super(itemView, listClickListener); +// itemView.setOnClickListener(this); +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/select/CommunitiesSelectActivity.java b/app/src/main/java/com/gh/gamecenter/qa/select/CommunitiesSelectActivity.java index 62aaee1004..5bd93118c8 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/select/CommunitiesSelectActivity.java +++ b/app/src/main/java/com/gh/gamecenter/qa/select/CommunitiesSelectActivity.java @@ -1,26 +1,26 @@ -package com.gh.gamecenter.qa.select; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; - -import com.gh.gamecenter.NormalActivity; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -/** - * Created by khy on 10/04/18. - */ - -public class CommunitiesSelectActivity extends NormalActivity { - - public static Intent getIntent(Context context) { - return getTargetIntent(context, CommunitiesSelectActivity.class, CommunitiesSelectWrapperFragment.class); - } - - @Nullable - public static Intent getIntent(@Nullable Context context, @NotNull Bundle bundle) { - return getTargetIntent(context, CommunitiesSelectActivity.class, CommunitiesSelectWrapperFragment.class, bundle); - } -} +//package com.gh.gamecenter.qa.select; +// +//import android.content.Context; +//import android.content.Intent; +//import android.os.Bundle; +// +//import com.gh.gamecenter.NormalActivity; +// +//import org.jetbrains.annotations.NotNull; +//import org.jetbrains.annotations.Nullable; +// +///** +// * Created by khy on 10/04/18. +// */ +// +//public class CommunitiesSelectActivity extends NormalActivity { +// +// public static Intent getIntent(Context context) { +// return getTargetIntent(context, CommunitiesSelectActivity.class, CommunitiesSelectWrapperFragment.class); +// } +// +// @Nullable +// public static Intent getIntent(@Nullable Context context, @NotNull Bundle bundle) { +// return getTargetIntent(context, CommunitiesSelectActivity.class, CommunitiesSelectWrapperFragment.class, bundle); +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/select/CommunitiesSelectWrapperFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/select/CommunitiesSelectWrapperFragment.kt index 0c7fac3f41..9aee916601 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/select/CommunitiesSelectWrapperFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/select/CommunitiesSelectWrapperFragment.kt @@ -1,26 +1,26 @@ -package com.gh.gamecenter.qa.select - -import android.os.Bundle -import androidx.fragment.app.Fragment -import com.gh.base.fragment.BaseFragment_TabLayout -import com.gh.gamecenter.R - -class CommunitiesSelectWrapperFragment : BaseFragment_TabLayout() { - - override fun initFragmentList(fragments: MutableList) { - fragments.add(OpenedFragment()) - val element = VotingFragment() - element.arguments = arguments - fragments.add(element) - } - - override fun initTabTitleList(tabTitleList: MutableList) { - tabTitleList.add("已开通") - tabTitleList.add("投票中") - } - - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) - setNavigationTitle(getString(R.string.title_community_select)) - } -} +//package com.gh.gamecenter.qa.select +// +//import android.os.Bundle +//import androidx.fragment.app.Fragment +//import com.gh.base.fragment.BaseFragment_TabLayout +//import com.gh.gamecenter.R +// +//class CommunitiesSelectWrapperFragment : BaseFragment_TabLayout() { +// +// override fun initFragmentList(fragments: MutableList) { +// fragments.add(OpenedFragment()) +// val element = VotingFragment() +// element.arguments = arguments +// fragments.add(element) +// } +// +// override fun initTabTitleList(tabTitleList: MutableList) { +// tabTitleList.add("已开通") +// tabTitleList.add("投票中") +// } +// +// override fun onActivityCreated(savedInstanceState: Bundle?) { +// super.onActivityCreated(savedInstanceState) +// setNavigationTitle(getString(R.string.title_community_select)) +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/select/OpenedAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/select/OpenedAdapter.kt index ea1c786c62..01eafee74d 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/select/OpenedAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/select/OpenedAdapter.kt @@ -1,208 +1,208 @@ -package com.gh.gamecenter.qa.select - -import android.app.Activity -import android.content.Context -import android.view.Gravity -import android.view.View -import android.view.ViewGroup -import android.widget.LinearLayout -import android.widget.TextView -import androidx.constraintlayout.widget.ConstraintLayout -import androidx.constraintlayout.widget.ConstraintSet -import androidx.core.content.ContextCompat -import com.gh.common.constant.ItemViewType -import com.gh.common.util.dip2px -import com.gh.common.util.toColor -import com.gh.common.view.GameIconView -import com.gh.gamecenter.R -import com.gh.gamecenter.adapter.viewholder.FooterViewHolder -import com.gh.gamecenter.baselist.ListAdapter -import com.gh.gamecenter.baselist.LoadType -import com.gh.gamecenter.databinding.CommunitySelectOpenedHeadItemBinding -import com.gh.gamecenter.databinding.CommunitySelectOpenedItemBinding -import com.gh.gamecenter.entity.CommunityEntity -import com.gh.gamecenter.eventbus.EBReuse -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.qa.CommunityFragment -import com.gh.gamecenter.qa.entity.CommunitySelectEntity -import org.greenrobot.eventbus.EventBus - -class OpenedAdapter(context: Context, val mListViewModel: OpenedViewModel) : ListAdapter(context) { - - private val mCommunityId: String = UserManager.getInstance().community.id - - override fun areItemsTheSame(oldItem: CommunitySelectOpenItem?, newItem: CommunitySelectOpenItem?): Boolean { - if (oldItem?.rightData != null && newItem?.rightData != null) { - return oldItem.rightData == newItem.rightData - } - - if (oldItem?.leftData != null && newItem?.leftData != null) { - return oldItem.leftData == newItem.leftData - } - return oldItem == newItem - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): androidx.recyclerview.widget.RecyclerView.ViewHolder { - val view: View - return when (viewType) { - ItemViewType.ITEM_HEADER -> { - view = mLayoutInflater.inflate(R.layout.community_select_opened_head_item, parent, false) - OpenedHeadViewHolder(CommunitySelectOpenedHeadItemBinding.bind(view)) - } - ItemViewType.ITEM_FOOTER -> { - FooterViewHolder(mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false)) - } - else -> { - view = mLayoutInflater.inflate(R.layout.community_select_opened_item, parent, false) - OpenedViewHolder(CommunitySelectOpenedItemBinding.bind(view)) - } - } - } - - override fun onBindViewHolder(holder: androidx.recyclerview.widget.RecyclerView.ViewHolder, position: Int) { - when (holder) { - is OpenedViewHolder -> bindBodyItem(holder) - is FooterViewHolder -> bindFooterItem(holder) - is OpenedHeadViewHolder -> holder.bind.categoryName = mEntityList[position].categoryName - } - } - - override fun getItemViewType(position: Int): Int { - if (itemCount - 1 == position) { - return ItemViewType.ITEM_FOOTER - } - val itemData = mEntityList[position] - if (itemData.leftData != null) { - return ItemViewType.ITEM_BODY - } - return ItemViewType.ITEM_HEADER - } - - override fun getItemCount(): Int { - return if (mEntityList == null || mEntityList.isEmpty()) 0 else mEntityList.size + 1 - } - - private fun bindFooterItem(holder: FooterViewHolder) { - holder.itemView.setBackgroundColor(ContextCompat.getColor(mContext, R.color.background)) - val item = holder.itemView as LinearLayout - when { - mIsNetworkError -> { - holder.loading.visibility = View.GONE - holder.hint.setText(R.string.loading_failed_retry) - holder.hint.setCompoundDrawables(null, null, null, null) - holder.hint.setPadding(0, 0, 0, 0) - item.gravity = Gravity.CENTER - } - mIsLoading -> { - holder.loading.visibility = View.VISIBLE - holder.hint.setText(R.string.loading) - holder.hint.setCompoundDrawables(null, null, null, null) - holder.hint.setPadding(0, 0, 0, 0) - item.gravity = Gravity.CENTER - } - else -> { - holder.loading.visibility = View.GONE - holder.hint.setText(R.string.loading_more_hint) - holder.hint.setCompoundDrawables(null, null, null, null) - holder.hint.setPadding(0, 0, 0, 0) - item.gravity = Gravity.CENTER - } - } - if (!mIsOver) { - holder.itemView.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) - } else { - holder.itemView.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0) - } - - holder.itemView.setOnClickListener { - mListViewModel.load(LoadType.RETRY) - } - } - - private fun bindBodyItem(holder: OpenedViewHolder) { - val position = holder.adapterPosition - val entity = mEntityList[position] - val isSelectLeft = mCommunityId == entity.leftData?.id - val isSelectRight = mCommunityId == entity.rightData?.id - - holder.bind.data = entity - holder.bind.isSelectLeft = isSelectLeft - holder.bind.isSelectRight = isSelectRight - - holder.bind.gameIconLeft.displayGameIcon(entity.leftData?.game?.getRawIconIfExisted(), entity.leftData?.game?.iconSubscript) - holder.bind.gameIconRight.displayGameIcon(entity.rightData?.game?.getRawIconIfExisted(), entity.rightData?.game?.iconSubscript) - - if (isSelectLeft) { - holder.bind.communityNameLeft.setTextColor(R.color.theme_font.toColor()) - } else { - holder.bind.communityNameLeft.setTextColor(R.color.text_title.toColor()) - } - if (isSelectRight) { - holder.bind.communityNameRight.setTextColor(R.color.theme_font.toColor()) - } else { - holder.bind.communityNameRight.setTextColor(R.color.text_title.toColor()) - } - - holder.bind.communityNameLeft.setSelected(isSelectLeft, offsetCallback = { - resetSelectStatus(holder.bind.leftContainer, holder.bind.communityStatusLeft, holder.bind.communityNameLeft, holder.bind.gameIconLeft, it) - }) - holder.bind.communityNameRight.setSelected(isSelectRight, offsetCallback = { - resetSelectStatus(holder.bind.rightContainer, holder.bind.communityStatusRight, holder.bind.communityNameRight, holder.bind.gameIconRight, it) - }) - - if (position + 1 >= mEntityList.size - 1 || mEntityList[position + 1].leftData == null) { - holder.bind.root.setPadding(0, 12F.dip2px(), 0, 16F.dip2px()) - } else { - holder.bind.root.setPadding(0, 12F.dip2px(), 0, 12F.dip2px()) - } - - holder.bind.leftContainer.setOnClickListener { - handelClick(entity.leftData!!) - } - - holder.bind.rightContainer.setOnClickListener { - handelClick(entity.rightData!!) - } - } - - private fun resetSelectStatus(container: ConstraintLayout, - status: TextView, - name: TextView, - icon: GameIconView, - offset: Float) { - if (offset == -1F && name.lineCount == 1) { - val constraintSet = ConstraintSet() - constraintSet.clone(container) - constraintSet.clear(status.id, ConstraintSet.RIGHT) - constraintSet.clear(status.id, ConstraintSet.BOTTOM) - constraintSet.connect(name.id, ConstraintSet.BOTTOM, status.id, ConstraintSet.TOP) - constraintSet.connect(status.id, ConstraintSet.LEFT, name.id, ConstraintSet.LEFT) - constraintSet.connect(status.id, ConstraintSet.BOTTOM, icon.id, ConstraintSet.BOTTOM) - constraintSet.connect(status.id, ConstraintSet.TOP, name.id, ConstraintSet.BOTTOM) - constraintSet.applyTo(container) - } else { - status.visibility = View.GONE - val constraintSet = ConstraintSet() - constraintSet.clone(container) - constraintSet.clear(status.id, ConstraintSet.BOTTOM) - constraintSet.clear(status.id, ConstraintSet.TOP) - constraintSet.connect(name.id, ConstraintSet.BOTTOM, icon.id, ConstraintSet.BOTTOM) - constraintSet.connect(status.id, ConstraintSet.LEFT, name.id, ConstraintSet.LEFT, offset.toInt()) - constraintSet.connect(status.id, ConstraintSet.BOTTOM, name.id, ConstraintSet.BOTTOM) - constraintSet.applyTo(container) - status.postDelayed({ - status.visibility = View.VISIBLE - }, 100) - } - } - - private fun handelClick(entity: CommunitySelectEntity) { - UserManager.getInstance().setCommunityData(CommunityEntity(entity.id, entity.name, entity.refreshSort, entity.game.getRawIconIfExisted(), entity.game.iconSubscript)) - if (mContext is CommunitiesSelectActivity && UserManager.getInstance().community.id.isNotEmpty()) { - (mContext as Activity).setResult(Activity.RESULT_OK) - (mContext as Activity).finish() - } else { - EventBus.getDefault().post(EBReuse(CommunityFragment.EB_SELECT_KEY)) - } - } -} \ No newline at end of file +//package com.gh.gamecenter.qa.select +// +//import android.app.Activity +//import android.content.Context +//import android.view.Gravity +//import android.view.View +//import android.view.ViewGroup +//import android.widget.LinearLayout +//import android.widget.TextView +//import androidx.constraintlayout.widget.ConstraintLayout +//import androidx.constraintlayout.widget.ConstraintSet +//import androidx.core.content.ContextCompat +//import com.gh.common.constant.ItemViewType +//import com.gh.common.util.dip2px +//import com.gh.common.util.toColor +//import com.gh.common.view.GameIconView +//import com.gh.gamecenter.R +//import com.gh.gamecenter.adapter.viewholder.FooterViewHolder +//import com.gh.gamecenter.baselist.ListAdapter +//import com.gh.gamecenter.baselist.LoadType +//import com.gh.gamecenter.databinding.CommunitySelectOpenedHeadItemBinding +//import com.gh.gamecenter.databinding.CommunitySelectOpenedItemBinding +//import com.gh.gamecenter.entity.CommunityEntity +//import com.gh.gamecenter.eventbus.EBReuse +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.qa.CommunityFragment +//import com.gh.gamecenter.qa.entity.CommunitySelectEntity +//import org.greenrobot.eventbus.EventBus +// +//class OpenedAdapter(context: Context, val mListViewModel: OpenedViewModel) : ListAdapter(context) { +// +// private val mCommunityId: String = UserManager.getInstance().community.id +// +// override fun areItemsTheSame(oldItem: CommunitySelectOpenItem?, newItem: CommunitySelectOpenItem?): Boolean { +// if (oldItem?.rightData != null && newItem?.rightData != null) { +// return oldItem.rightData == newItem.rightData +// } +// +// if (oldItem?.leftData != null && newItem?.leftData != null) { +// return oldItem.leftData == newItem.leftData +// } +// return oldItem == newItem +// } +// +// override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): androidx.recyclerview.widget.RecyclerView.ViewHolder { +// val view: View +// return when (viewType) { +// ItemViewType.ITEM_HEADER -> { +// view = mLayoutInflater.inflate(R.layout.community_select_opened_head_item, parent, false) +// OpenedHeadViewHolder(CommunitySelectOpenedHeadItemBinding.bind(view)) +// } +// ItemViewType.ITEM_FOOTER -> { +// FooterViewHolder(mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false)) +// } +// else -> { +// view = mLayoutInflater.inflate(R.layout.community_select_opened_item, parent, false) +// OpenedViewHolder(CommunitySelectOpenedItemBinding.bind(view)) +// } +// } +// } +// +// override fun onBindViewHolder(holder: androidx.recyclerview.widget.RecyclerView.ViewHolder, position: Int) { +// when (holder) { +// is OpenedViewHolder -> bindBodyItem(holder) +// is FooterViewHolder -> bindFooterItem(holder) +// is OpenedHeadViewHolder -> holder.bind.categoryName = mEntityList[position].categoryName +// } +// } +// +// override fun getItemViewType(position: Int): Int { +// if (itemCount - 1 == position) { +// return ItemViewType.ITEM_FOOTER +// } +// val itemData = mEntityList[position] +// if (itemData.leftData != null) { +// return ItemViewType.ITEM_BODY +// } +// return ItemViewType.ITEM_HEADER +// } +// +// override fun getItemCount(): Int { +// return if (mEntityList == null || mEntityList.isEmpty()) 0 else mEntityList.size + 1 +// } +// +// private fun bindFooterItem(holder: FooterViewHolder) { +// holder.itemView.setBackgroundColor(ContextCompat.getColor(mContext, R.color.background)) +// val item = holder.itemView as LinearLayout +// when { +// mIsNetworkError -> { +// holder.loading.visibility = View.GONE +// holder.hint.setText(R.string.loading_failed_retry) +// holder.hint.setCompoundDrawables(null, null, null, null) +// holder.hint.setPadding(0, 0, 0, 0) +// item.gravity = Gravity.CENTER +// } +// mIsLoading -> { +// holder.loading.visibility = View.VISIBLE +// holder.hint.setText(R.string.loading) +// holder.hint.setCompoundDrawables(null, null, null, null) +// holder.hint.setPadding(0, 0, 0, 0) +// item.gravity = Gravity.CENTER +// } +// else -> { +// holder.loading.visibility = View.GONE +// holder.hint.setText(R.string.loading_more_hint) +// holder.hint.setCompoundDrawables(null, null, null, null) +// holder.hint.setPadding(0, 0, 0, 0) +// item.gravity = Gravity.CENTER +// } +// } +// if (!mIsOver) { +// holder.itemView.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) +// } else { +// holder.itemView.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0) +// } +// +// holder.itemView.setOnClickListener { +// mListViewModel.load(LoadType.RETRY) +// } +// } +// +// private fun bindBodyItem(holder: OpenedViewHolder) { +// val position = holder.adapterPosition +// val entity = mEntityList[position] +// val isSelectLeft = mCommunityId == entity.leftData?.id +// val isSelectRight = mCommunityId == entity.rightData?.id +// +// holder.bind.data = entity +// holder.bind.isSelectLeft = isSelectLeft +// holder.bind.isSelectRight = isSelectRight +// +// holder.bind.gameIconLeft.displayGameIcon(entity.leftData?.game?.getRawIconIfExisted(), entity.leftData?.game?.iconSubscript) +// holder.bind.gameIconRight.displayGameIcon(entity.rightData?.game?.getRawIconIfExisted(), entity.rightData?.game?.iconSubscript) +// +// if (isSelectLeft) { +// holder.bind.communityNameLeft.setTextColor(R.color.theme_font.toColor()) +// } else { +// holder.bind.communityNameLeft.setTextColor(R.color.text_title.toColor()) +// } +// if (isSelectRight) { +// holder.bind.communityNameRight.setTextColor(R.color.theme_font.toColor()) +// } else { +// holder.bind.communityNameRight.setTextColor(R.color.text_title.toColor()) +// } +// +// holder.bind.communityNameLeft.setSelected(isSelectLeft, offsetCallback = { +// resetSelectStatus(holder.bind.leftContainer, holder.bind.communityStatusLeft, holder.bind.communityNameLeft, holder.bind.gameIconLeft, it) +// }) +// holder.bind.communityNameRight.setSelected(isSelectRight, offsetCallback = { +// resetSelectStatus(holder.bind.rightContainer, holder.bind.communityStatusRight, holder.bind.communityNameRight, holder.bind.gameIconRight, it) +// }) +// +// if (position + 1 >= mEntityList.size - 1 || mEntityList[position + 1].leftData == null) { +// holder.bind.root.setPadding(0, 12F.dip2px(), 0, 16F.dip2px()) +// } else { +// holder.bind.root.setPadding(0, 12F.dip2px(), 0, 12F.dip2px()) +// } +// +// holder.bind.leftContainer.setOnClickListener { +// handelClick(entity.leftData!!) +// } +// +// holder.bind.rightContainer.setOnClickListener { +// handelClick(entity.rightData!!) +// } +// } +// +// private fun resetSelectStatus(container: ConstraintLayout, +// status: TextView, +// name: TextView, +// icon: GameIconView, +// offset: Float) { +// if (offset == -1F && name.lineCount == 1) { +// val constraintSet = ConstraintSet() +// constraintSet.clone(container) +// constraintSet.clear(status.id, ConstraintSet.RIGHT) +// constraintSet.clear(status.id, ConstraintSet.BOTTOM) +// constraintSet.connect(name.id, ConstraintSet.BOTTOM, status.id, ConstraintSet.TOP) +// constraintSet.connect(status.id, ConstraintSet.LEFT, name.id, ConstraintSet.LEFT) +// constraintSet.connect(status.id, ConstraintSet.BOTTOM, icon.id, ConstraintSet.BOTTOM) +// constraintSet.connect(status.id, ConstraintSet.TOP, name.id, ConstraintSet.BOTTOM) +// constraintSet.applyTo(container) +// } else { +// status.visibility = View.GONE +// val constraintSet = ConstraintSet() +// constraintSet.clone(container) +// constraintSet.clear(status.id, ConstraintSet.BOTTOM) +// constraintSet.clear(status.id, ConstraintSet.TOP) +// constraintSet.connect(name.id, ConstraintSet.BOTTOM, icon.id, ConstraintSet.BOTTOM) +// constraintSet.connect(status.id, ConstraintSet.LEFT, name.id, ConstraintSet.LEFT, offset.toInt()) +// constraintSet.connect(status.id, ConstraintSet.BOTTOM, name.id, ConstraintSet.BOTTOM) +// constraintSet.applyTo(container) +// status.postDelayed({ +// status.visibility = View.VISIBLE +// }, 100) +// } +// } +// +// private fun handelClick(entity: CommunitySelectEntity) { +// UserManager.getInstance().setCommunityData(CommunityEntity(entity.id, entity.name, entity.refreshSort, entity.game.getRawIconIfExisted(), entity.game.iconSubscript)) +// if (mContext is CommunitiesSelectActivity && UserManager.getInstance().community.id.isNotEmpty()) { +// (mContext as Activity).setResult(Activity.RESULT_OK) +// (mContext as Activity).finish() +// } else { +// EventBus.getDefault().post(EBReuse(CommunityFragment.EB_SELECT_KEY)) +// } +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/select/OpenedFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/select/OpenedFragment.kt index 9390f2ae74..7ea6604513 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/select/OpenedFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/select/OpenedFragment.kt @@ -1,28 +1,28 @@ -package com.gh.gamecenter.qa.select - -import android.os.Bundle -import android.view.View -import androidx.recyclerview.widget.RecyclerView -import com.gh.gamecenter.baselist.ListFragment - -class OpenedFragment : ListFragment() { - - private var mAdapter: OpenedAdapter? = null - - override fun getItemDecoration(): RecyclerView.ItemDecoration? { - return null - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - mLayoutManager.initialPrefetchItemCount = 20 - mListRv.setItemViewCacheSize(20) - } - - override fun provideListAdapter(): OpenedAdapter { - if (mAdapter == null) { - mAdapter = OpenedAdapter(requireContext(), mListViewModel) - } - return mAdapter!! - } -} +//package com.gh.gamecenter.qa.select +// +//import android.os.Bundle +//import android.view.View +//import androidx.recyclerview.widget.RecyclerView +//import com.gh.gamecenter.baselist.ListFragment +// +//class OpenedFragment : ListFragment() { +// +// private var mAdapter: OpenedAdapter? = null +// +// override fun getItemDecoration(): RecyclerView.ItemDecoration? { +// return null +// } +// +// override fun onViewCreated(view: View, savedInstanceState: Bundle?) { +// super.onViewCreated(view, savedInstanceState) +// mLayoutManager.initialPrefetchItemCount = 20 +// mListRv.setItemViewCacheSize(20) +// } +// +// override fun provideListAdapter(): OpenedAdapter { +// if (mAdapter == null) { +// mAdapter = OpenedAdapter(requireContext(), mListViewModel) +// } +// return mAdapter!! +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/select/SelectGameDialogAdapter.java b/app/src/main/java/com/gh/gamecenter/qa/select/SelectGameDialogAdapter.java index 10ba7190c5..67770b25c0 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/select/SelectGameDialogAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/qa/select/SelectGameDialogAdapter.java @@ -17,6 +17,7 @@ import com.gh.common.util.BitmapUtils; import com.gh.common.util.PackageUtils; import com.gh.common.util.UrlFilterUtils; import com.gh.gamecenter.R; +import com.gh.gamecenter.databinding.DialogVotingSelectGameItemBinding; import com.gh.gamecenter.entity.GameInstall; import com.gh.gamecenter.entity.InstallGameEntity; import com.gh.gamecenter.manager.PackagesManager; @@ -162,7 +163,7 @@ public class SelectGameDialogAdapter extends BaseRecyclerAdapter { diff --git a/app/src/main/java/com/gh/gamecenter/qa/select/VotingAdapter.java b/app/src/main/java/com/gh/gamecenter/qa/select/VotingAdapter.java index 765275e025..9d42b2f5da 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/select/VotingAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/qa/select/VotingAdapter.java @@ -1,153 +1,153 @@ -package com.gh.gamecenter.qa.select; - -import android.content.Context; -import android.view.View; -import android.view.ViewGroup; - -import androidx.recyclerview.widget.RecyclerView; - -import com.gh.base.OnListClickListener; -import com.gh.common.constant.ItemViewType; -import com.gh.gamecenter.R; -import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; -import com.gh.gamecenter.adapter.viewholder.ReuseViewHolder; -import com.gh.gamecenter.baselist.ListAdapter; -import com.gh.gamecenter.entity.MeEntity; -import com.gh.gamecenter.manager.UserManager; -import com.gh.gamecenter.qa.entity.CommunitiesGameEntity; -import com.gh.gamecenter.qa.entity.CommunitySelectEntity; - -import java.util.ArrayList; -import java.util.List; - -/** - * Created by khy on 6/12/17. - */ - -public class VotingAdapter extends ListAdapter { - - private OnListClickListener mListClickListener; - - private String mCommunityId; - - - public VotingAdapter(Context context, OnListClickListener listClickListener) { - super(context); - mListClickListener = listClickListener; - mCommunityId = UserManager.getInstance().getCommunity().getId(); - } - - @Override - protected void setListData(List updateData) { - int oldSize = TOP_ITEM_COUNT; - if (mEntityList != null && mEntityList.size() > 0) { - oldSize += mEntityList.size(); - } - mEntityList = new ArrayList<>(updateData); - if (oldSize == 0 || oldSize > updateData.size()) { - notifyDataSetChanged(); - } else { - notifyItemRangeInserted(oldSize, updateData.size() + TOP_ITEM_COUNT - oldSize); - } - } - - @Override - public int getItemViewType(int position) { - if (position == 0) { - return ItemViewType.ITEM_HEADER; - } else if (position == getItemCount() - 1) { - return ItemViewType.ITEM_FOOTER; - } - return ItemViewType.ITEM_BODY; - } - - @Override - public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View view; - switch (viewType) { - case ItemViewType.ITEM_HEADER: - view = mLayoutInflater.inflate(R.layout.voting_top_item, parent, false); - return new ReuseViewHolder(view); - case ItemViewType.ITEM_BODY: - view = mLayoutInflater.inflate(R.layout.ask_selectgame_item, parent, false); - return new AskSelectGameItemViewHolder(view, mListClickListener); - case ItemViewType.ITEM_FOOTER: - view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false); - return new FooterViewHolder(view, mListClickListener); - } - return null; - } - - @Override - public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { - CommunitySelectEntity entity; - switch (getItemViewType(position)) { - case ItemViewType.ITEM_BODY: - AskSelectGameItemViewHolder bodyHolder = (AskSelectGameItemViewHolder) holder; - entity = mEntityList.get(position - TOP_ITEM_COUNT); - CommunitiesGameEntity game = entity.getGame(); - bodyHolder.mIcon.displayGameIcon(game.getRawIconIfExisted(), game.getIconSubscript()); - bodyHolder.setClickData(entity); - bodyHolder.mName.setText(game.getName()); - bodyHolder.mVotecount.setText(entity.getVote() + "票"); - break; - case ItemViewType.ITEM_FOOTER: - FooterViewHolder footerViewHolder = (FooterViewHolder) holder; - if (mIsNetworkError) { - footerViewHolder.loading.setVisibility(View.GONE); - footerViewHolder.hint.setText(R.string.loading_failed_retry); - } else if (mIsOver) { - footerViewHolder.loading.setVisibility(View.GONE); - footerViewHolder.hint.setText("光环小编会综合根据游戏投票数选择开放社区"); - } else if (mIsLoading) { - footerViewHolder.loading.setVisibility(View.VISIBLE); - footerViewHolder.hint.setText(R.string.loading); - } else { - footerViewHolder.loading.setVisibility(View.GONE); - footerViewHolder.hint.setText(R.string.loading_more_hint); - } - break; - case ItemViewType.ITEM_HEADER: - holder.itemView.findViewById(R.id.voting_top_btn).setOnClickListener(v -> - mListClickListener.onListClick(v, -1, null)); - break; - } - } - - @Override - public int getItemCount() { - return mEntityList == null || mEntityList.isEmpty() ? 0 : mEntityList.size() + FOOTER_ITEM_COUNT + TOP_ITEM_COUNT; - } - - public boolean isOver() { - return mIsOver; - } - - public void resetCommunityId(String id) { - mCommunityId = id; - notifyDataSetChanged(); - } - - public String getCommunityId() { - return mCommunityId; - } - - public void voteSuccess(String communityId) { - for (CommunitySelectEntity entity : mEntityList) { - if (communityId.equals(entity.getId())) { - MeEntity me = entity.getMe(); - if (me == null) me = new MeEntity(); - me.setCommunityVoted(true); - entity.setMe(me); - entity.setVote(entity.getVote() + 1); - notifyDataSetChanged(); - break; - } - } - } - - public void postCommunitiesSuccess(CommunitySelectEntity entity) { - mEntityList.add(entity); - notifyDataSetChanged(); - } -} +//package com.gh.gamecenter.qa.select; +// +//import android.content.Context; +//import android.view.View; +//import android.view.ViewGroup; +// +//import androidx.recyclerview.widget.RecyclerView; +// +//import com.gh.base.OnListClickListener; +//import com.gh.common.constant.ItemViewType; +//import com.gh.gamecenter.R; +//import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; +//import com.gh.gamecenter.adapter.viewholder.ReuseViewHolder; +//import com.gh.gamecenter.baselist.ListAdapter; +//import com.gh.gamecenter.entity.MeEntity; +//import com.gh.gamecenter.manager.UserManager; +//import com.gh.gamecenter.qa.entity.CommunitiesGameEntity; +//import com.gh.gamecenter.qa.entity.CommunitySelectEntity; +// +//import java.util.ArrayList; +//import java.util.List; +// +///** +// * Created by khy on 6/12/17. +// */ +// +//public class VotingAdapter extends ListAdapter { +// +// private OnListClickListener mListClickListener; +// +// private String mCommunityId; +// +// +// public VotingAdapter(Context context, OnListClickListener listClickListener) { +// super(context); +// mListClickListener = listClickListener; +// mCommunityId = UserManager.getInstance().getCommunity().getId(); +// } +// +// @Override +// protected void setListData(List updateData) { +// int oldSize = TOP_ITEM_COUNT; +// if (mEntityList != null && mEntityList.size() > 0) { +// oldSize += mEntityList.size(); +// } +// mEntityList = new ArrayList<>(updateData); +// if (oldSize == 0 || oldSize > updateData.size()) { +// notifyDataSetChanged(); +// } else { +// notifyItemRangeInserted(oldSize, updateData.size() + TOP_ITEM_COUNT - oldSize); +// } +// } +// +// @Override +// public int getItemViewType(int position) { +// if (position == 0) { +// return ItemViewType.ITEM_HEADER; +// } else if (position == getItemCount() - 1) { +// return ItemViewType.ITEM_FOOTER; +// } +// return ItemViewType.ITEM_BODY; +// } +// +// @Override +// public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { +// View view; +// switch (viewType) { +// case ItemViewType.ITEM_HEADER: +// view = mLayoutInflater.inflate(R.layout.voting_top_item, parent, false); +// return new ReuseViewHolder(view); +// case ItemViewType.ITEM_BODY: +// view = mLayoutInflater.inflate(R.layout.ask_selectgame_item, parent, false); +// return new AskSelectGameItemViewHolder(view, mListClickListener); +// case ItemViewType.ITEM_FOOTER: +// view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false); +// return new FooterViewHolder(view, mListClickListener); +// } +// return null; +// } +// +// @Override +// public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { +// CommunitySelectEntity entity; +// switch (getItemViewType(position)) { +// case ItemViewType.ITEM_BODY: +// AskSelectGameItemViewHolder bodyHolder = (AskSelectGameItemViewHolder) holder; +// entity = mEntityList.get(position - TOP_ITEM_COUNT); +// CommunitiesGameEntity game = entity.getGame(); +// bodyHolder.mIcon.displayGameIcon(game.getRawIconIfExisted(), game.getIconSubscript()); +// bodyHolder.setClickData(entity); +// bodyHolder.mName.setText(game.getName()); +// bodyHolder.mVotecount.setText(entity.getVote() + "票"); +// break; +// case ItemViewType.ITEM_FOOTER: +// FooterViewHolder footerViewHolder = (FooterViewHolder) holder; +// if (mIsNetworkError) { +// footerViewHolder.loading.setVisibility(View.GONE); +// footerViewHolder.hint.setText(R.string.loading_failed_retry); +// } else if (mIsOver) { +// footerViewHolder.loading.setVisibility(View.GONE); +// footerViewHolder.hint.setText("光环小编会综合根据游戏投票数选择开放社区"); +// } else if (mIsLoading) { +// footerViewHolder.loading.setVisibility(View.VISIBLE); +// footerViewHolder.hint.setText(R.string.loading); +// } else { +// footerViewHolder.loading.setVisibility(View.GONE); +// footerViewHolder.hint.setText(R.string.loading_more_hint); +// } +// break; +// case ItemViewType.ITEM_HEADER: +// holder.itemView.findViewById(R.id.voting_top_btn).setOnClickListener(v -> +// mListClickListener.onListClick(v, -1, null)); +// break; +// } +// } +// +// @Override +// public int getItemCount() { +// return mEntityList == null || mEntityList.isEmpty() ? 0 : mEntityList.size() + FOOTER_ITEM_COUNT + TOP_ITEM_COUNT; +// } +// +// public boolean isOver() { +// return mIsOver; +// } +// +// public void resetCommunityId(String id) { +// mCommunityId = id; +// notifyDataSetChanged(); +// } +// +// public String getCommunityId() { +// return mCommunityId; +// } +// +// public void voteSuccess(String communityId) { +// for (CommunitySelectEntity entity : mEntityList) { +// if (communityId.equals(entity.getId())) { +// MeEntity me = entity.getMe(); +// if (me == null) me = new MeEntity(); +// me.setCommunityVoted(true); +// entity.setMe(me); +// entity.setVote(entity.getVote() + 1); +// notifyDataSetChanged(); +// break; +// } +// } +// } +// +// public void postCommunitiesSuccess(CommunitySelectEntity entity) { +// mEntityList.add(entity); +// notifyDataSetChanged(); +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/select/VotingFragment.java b/app/src/main/java/com/gh/gamecenter/qa/select/VotingFragment.java index 5c85c0295c..b329bd9e61 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/select/VotingFragment.java +++ b/app/src/main/java/com/gh/gamecenter/qa/select/VotingFragment.java @@ -1,117 +1,117 @@ -package com.gh.gamecenter.qa.select; - -import android.app.Dialog; -import android.os.Bundle; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import android.view.View; -import android.view.Window; -import android.widget.ProgressBar; -import android.widget.TextView; - -import com.gh.base.fragment.WaitingDialogFragment; -import com.gh.common.util.CheckLoginUtils; -import com.gh.common.view.VerticalItemDecoration; -import com.gh.gamecenter.GameDetailActivity; -import com.gh.gamecenter.R; -import com.gh.gamecenter.baselist.ListFragment; -import com.gh.gamecenter.baselist.LoadType; -import com.gh.gamecenter.entity.GameInstall; -import com.gh.gamecenter.entity.InstallGameEntity; -import com.gh.gamecenter.qa.entity.CommunitySelectEntity; - -import java.util.List; - -/** - * Created by khy on 11/12/17. - */ - -public class VotingFragment extends ListFragment { - - private WaitingDialogFragment mLoadingDialog; - private Dialog mSelectGameDialog; - - private VotingAdapter mAdapter; - - @Override - protected VotingAdapter provideListAdapter() { - return mAdapter == null ? mAdapter = new VotingAdapter(getContext(), this) : mAdapter; - } - - @Override - protected RecyclerView.ItemDecoration getItemDecoration() { - return new VerticalItemDecoration(getContext(), false); - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - mListViewModel.setOverLimitSize(1000); // 该页面不需要分页 - mListViewModel.getPostLiveData().observe(this, aBoolean -> { - if (mLoadingDialog != null) mLoadingDialog.dismiss(); - if (mSelectGameDialog != null) mSelectGameDialog.dismiss(); - }); - } - - @Override - public void onListClick(View view, int position, Object data) { - super.onListClick(view, position, data); - switch (view.getId()) { - case R.id.footerview_item: - if (mAdapter.isNetworkError()) { - mListViewModel.load(LoadType.RETRY); - } - break; - case R.id.voting_top_btn: - CheckLoginUtils.checkLogin(getContext(), "问答-选择游戏-[我要投票]", this::showSelectDialog); - break; - case R.id.ask_selectgame_item_constraintlayout: - if (data instanceof CommunitySelectEntity) { - CommunitySelectEntity entity = (CommunitySelectEntity) data; - GameDetailActivity.startGameDetailActivity(getContext(),entity.getGame().getId(), mEntrance,null); - } - break; - } - } - - private void showSelectDialog() { - mSelectGameDialog = new Dialog(getContext()); - - View view = View.inflate(getContext(), R.layout.dialog_suggest_voting, null); - RecyclerView recyclerView = view.findViewById(R.id.dialog_suggest_game_rv); - TextView negative = view.findViewById(R.id.dialog_suggest_negative); - TextView positive = view.findViewById(R.id.dialog_suggest_positive); - ProgressBar pb = view.findViewById(R.id.dialog_suggest_game_load); - recyclerView.setVisibility(View.GONE); - recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 4)); - SelectGameDialogAdapter dialogAdapter = new SelectGameDialogAdapter(getContext(), pb, recyclerView); - recyclerView.setAdapter(dialogAdapter); - - mSelectGameDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); - mSelectGameDialog.setCanceledOnTouchOutside(false); - mSelectGameDialog.setContentView(view); - mSelectGameDialog.show(); - - negative.setOnClickListener((v) -> mSelectGameDialog.cancel()); - - positive.setOnClickListener(v -> { - List selectGameList = dialogAdapter.getSelectGameList(); - List selectApkList = dialogAdapter.getSelectApkList(); - if (selectApkList.size() + selectGameList.size() == 0) { - toast("请先选择游戏"); - return; - } - for (InstallGameEntity entity : selectApkList) { - mListViewModel.sendSuggestion(entity); - } - - mLoadingDialog = WaitingDialogFragment.newInstance(getString(R.string.vote_post)); - mLoadingDialog.show(getChildFragmentManager(), null); - mListViewModel.postCommunities(selectGameList); - }); - } -} +//package com.gh.gamecenter.qa.select; +// +//import android.app.Dialog; +//import android.os.Bundle; +// +//import androidx.annotation.NonNull; +//import androidx.annotation.Nullable; +//import androidx.recyclerview.widget.GridLayoutManager; +//import androidx.recyclerview.widget.RecyclerView; +// +//import android.view.View; +//import android.view.Window; +//import android.widget.ProgressBar; +//import android.widget.TextView; +// +//import com.gh.base.fragment.WaitingDialogFragment; +//import com.gh.common.util.CheckLoginUtils; +//import com.gh.common.view.VerticalItemDecoration; +//import com.gh.gamecenter.GameDetailActivity; +//import com.gh.gamecenter.R; +//import com.gh.gamecenter.baselist.ListFragment; +//import com.gh.gamecenter.baselist.LoadType; +//import com.gh.gamecenter.entity.GameInstall; +//import com.gh.gamecenter.entity.InstallGameEntity; +//import com.gh.gamecenter.qa.entity.CommunitySelectEntity; +// +//import java.util.List; +// +///** +// * Created by khy on 11/12/17. +// */ +// +//public class VotingFragment extends ListFragment { +// +// private WaitingDialogFragment mLoadingDialog; +// private Dialog mSelectGameDialog; +// +// private VotingAdapter mAdapter; +// +// @Override +// protected VotingAdapter provideListAdapter() { +// return mAdapter == null ? mAdapter = new VotingAdapter(getContext(), this) : mAdapter; +// } +// +// @Override +// protected RecyclerView.ItemDecoration getItemDecoration() { +// return new VerticalItemDecoration(getContext(), false); +// } +// +// @Override +// public void onCreate(@Nullable Bundle savedInstanceState) { +// super.onCreate(savedInstanceState); +// mListViewModel.setOverLimitSize(1000); // 该页面不需要分页 +// mListViewModel.getPostLiveData().observe(this, aBoolean -> { +// if (mLoadingDialog != null) mLoadingDialog.dismiss(); +// if (mSelectGameDialog != null) mSelectGameDialog.dismiss(); +// }); +// } +// +// @Override +// public void onListClick(View view, int position, Object data) { +// super.onListClick(view, position, data); +// switch (view.getId()) { +// case R.id.footerview_item: +// if (mAdapter.isNetworkError()) { +// mListViewModel.load(LoadType.RETRY); +// } +// break; +// case R.id.voting_top_btn: +// CheckLoginUtils.checkLogin(getContext(), "问答-选择游戏-[我要投票]", this::showSelectDialog); +// break; +// case R.id.ask_selectgame_item_constraintlayout: +// if (data instanceof CommunitySelectEntity) { +// CommunitySelectEntity entity = (CommunitySelectEntity) data; +// GameDetailActivity.startGameDetailActivity(getContext(),entity.getGame().getId(), mEntrance,null); +// } +// break; +// } +// } +// +// private void showSelectDialog() { +// mSelectGameDialog = new Dialog(getContext()); +// +// View view = View.inflate(getContext(), R.layout.dialog_suggest_voting, null); +// RecyclerView recyclerView = view.findViewById(R.id.dialog_suggest_game_rv); +// TextView negative = view.findViewById(R.id.dialog_suggest_negative); +// TextView positive = view.findViewById(R.id.dialog_suggest_positive); +// ProgressBar pb = view.findViewById(R.id.dialog_suggest_game_load); +// recyclerView.setVisibility(View.GONE); +// recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 4)); +// SelectGameDialogAdapter dialogAdapter = new SelectGameDialogAdapter(getContext(), pb, recyclerView); +// recyclerView.setAdapter(dialogAdapter); +// +// mSelectGameDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); +// mSelectGameDialog.setCanceledOnTouchOutside(false); +// mSelectGameDialog.setContentView(view); +// mSelectGameDialog.show(); +// +// negative.setOnClickListener((v) -> mSelectGameDialog.cancel()); +// +// positive.setOnClickListener(v -> { +// List selectGameList = dialogAdapter.getSelectGameList(); +// List selectApkList = dialogAdapter.getSelectApkList(); +// if (selectApkList.size() + selectGameList.size() == 0) { +// toast("请先选择游戏"); +// return; +// } +// for (InstallGameEntity entity : selectApkList) { +// mListViewModel.sendSuggestion(entity); +// } +// +// mLoadingDialog = WaitingDialogFragment.newInstance(getString(R.string.vote_post)); +// mLoadingDialog.show(getChildFragmentManager(), null); +// mListViewModel.postCommunities(selectGameList); +// }); +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/select/VotingSelectGameViewHolder.java b/app/src/main/java/com/gh/gamecenter/qa/select/VotingSelectGameViewHolder.java index cdaec22e93..5242fb2809 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/select/VotingSelectGameViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/qa/select/VotingSelectGameViewHolder.java @@ -1,24 +1,14 @@ package com.gh.gamecenter.qa.select; -import android.view.View; -import android.widget.TextView; - import com.gh.base.BaseRecyclerViewHolder; -import com.gh.common.view.GameIconView; -import com.gh.gamecenter.R; - -import butterknife.BindView; +import com.gh.gamecenter.databinding.DialogVotingSelectGameItemBinding; public class VotingSelectGameViewHolder extends BaseRecyclerViewHolder { - @BindView(R.id.game_icon) - public GameIconView gameIcon; - @BindView(R.id.game_name) - public TextView gameName; - @BindView(R.id.game_select) - public View select; + public DialogVotingSelectGameItemBinding binding; - public VotingSelectGameViewHolder(View itemView) { - super(itemView); + public VotingSelectGameViewHolder(DialogVotingSelectGameItemBinding binding) { + super(binding.getRoot()); + this.binding = binding; } } diff --git a/app/src/main/java/com/gh/gamecenter/qa/subject/AskSubjectAdapter.java b/app/src/main/java/com/gh/gamecenter/qa/subject/AskSubjectAdapter.java index fee42fe339..b637d91484 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/subject/AskSubjectAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/qa/subject/AskSubjectAdapter.java @@ -1,165 +1,165 @@ -package com.gh.gamecenter.qa.subject; - -import android.content.Context; -import android.view.View; -import android.view.ViewGroup; - -import com.gh.base.OnListClickListener; -import com.gh.common.constant.ItemViewType; -import com.gh.common.syncpage.ISyncAdapterHandler; -import com.gh.gamecenter.R; -import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; -import com.gh.gamecenter.baselist.ListAdapter; -import com.gh.gamecenter.databinding.AskSubjectTopItemBinding; -import com.gh.gamecenter.databinding.CommunityAnswerItemBinding; -import com.gh.gamecenter.entity.CommunityEntity; -import com.gh.gamecenter.qa.answer.CommunityAnswerItemViewHolder; -import com.gh.gamecenter.qa.answer.detail.SimpleAnswerDetailActivity; -import com.gh.gamecenter.qa.article.detail.ArticleDetailActivity; -import com.gh.gamecenter.qa.entity.AnswerEntity; -import com.gh.gamecenter.qa.entity.AskSubjectEntity; -import com.gh.gamecenter.qa.entity.Questions; -import com.gh.gamecenter.qa.questions.newdetail.NewQuestionDetailActivity; - -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.List; - -import androidx.databinding.DataBindingUtil; -import androidx.recyclerview.widget.RecyclerView; -import kotlin.Pair; - -/** - * Created by khy on 1/04/18. - */ - -public class AskSubjectAdapter extends ListAdapter implements ISyncAdapterHandler { - - private OnListClickListener mListClickListener; - - private AskSubjectEntity mSubjectEntity; - - private String mEntrance; - - public AskSubjectAdapter(Context context, OnListClickListener listClickListener, String entrance) { - super(context); - mListClickListener = listClickListener; - mEntrance = entrance; - } - - @Override - protected void setListData(List updateData) { - if (mSubjectEntity == null) { - notifyDataSetChanged(); - return; - } - int oldSize = mEntityList == null || mEntityList.isEmpty() ? 0 : mEntityList.size() + TOP_ITEM_COUNT; - mEntityList = new ArrayList<>(updateData); - if (oldSize == 0 || oldSize > updateData.size()) { - notifyDataSetChanged(); - } else { - notifyItemRangeInserted(oldSize, updateData.size() + TOP_ITEM_COUNT - oldSize); - } - } - - public void setSubjectEntity(AskSubjectEntity subjectEntity) { - mSubjectEntity = subjectEntity; - notifyDataSetChanged(); - } - - @Override - public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View view; - switch (viewType) { - case ItemViewType.ITEM_HEADER: - view = mLayoutInflater.inflate(R.layout.ask_subject_top_item, parent, false); - AskSubjectTopItemBinding binding = DataBindingUtil.bind(view); - return new AskSubjectViewHolder(binding, mListClickListener); - case ItemViewType.ITEM_FOOTER: - view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false); - return new FooterViewHolder(view, mListClickListener); - case ItemViewType.ITEM_BODY: - view = mLayoutInflater.inflate(R.layout.community_answer_item, parent, false); - return new CommunityAnswerItemViewHolder(CommunityAnswerItemBinding.bind(view)); - } - return null; - } - - @Override - public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { - switch (getItemViewType(position)) { - case ItemViewType.ITEM_HEADER: - AskSubjectViewHolder subjectViewHolder = (AskSubjectViewHolder) holder; - subjectViewHolder.mBinding.setEntity(mSubjectEntity); - if (mEntityList == null || mEntityList.isEmpty()) { - subjectViewHolder.mBinding.askSubjectTopTag.setVisibility(View.GONE); - } else { - subjectViewHolder.mBinding.askSubjectTopTag.setVisibility(View.VISIBLE); - } - break; - case ItemViewType.ITEM_FOOTER: - FooterViewHolder footerViewHolder = (FooterViewHolder) holder; - footerViewHolder.initItemPadding(); - footerViewHolder.initFooterViewHolder(mIsLoading, mIsNetworkError, mIsOver); - break; - case ItemViewType.ITEM_BODY: - String path = "问答专题详情"; - - int index = position - ListAdapter.TOP_ITEM_COUNT; - if (index != -1) { - AnswerEntity entity = mEntityList.get(index); - CommunityAnswerItemViewHolder viewHolder = (CommunityAnswerItemViewHolder) holder; - CommunityAnswerItemBinding binding = viewHolder.getBinding(); - if ("community_article".equals(entity.getType())) { - Questions questions = new Questions(); - questions.setTitle(entity.getArticleTitle()); - entity.setQuestions(questions); - } - - viewHolder.bindAnswerItem(entity, mEntrance, path); - binding.title.setOnClickListener(v -> { - if ("answer".equals(entity.getType())) { - Questions questions = entity.getQuestions(); - mContext.startActivity(NewQuestionDetailActivity.getIntent(mContext, questions.getId(), mEntrance, path)); - } else { - mContext.startActivity(ArticleDetailActivity.getIntent(mContext, new CommunityEntity(entity.getArticleCommunityId(), ""), entity.getId(), mEntrance, path, null)); - } - }); - - holder.itemView.setOnClickListener(v -> { - if ("answer".equals(entity.getType())) { - mContext.startActivity(SimpleAnswerDetailActivity.getIntent(mContext, entity.getId(), mEntrance, path)); - } else { - mContext.startActivity(ArticleDetailActivity.getIntent(mContext, new CommunityEntity(entity.getArticleCommunityId(), ""), entity.getId(), mEntrance, path, null)); - } - }); - } - break; - } - } - - @Override - public int getItemViewType(int position) { - if (position == 0) return ItemViewType.ITEM_HEADER; - if (position == getItemCount() - 1) return ItemViewType.ITEM_FOOTER; - return ItemViewType.ITEM_BODY; - } - - @Override - public int getItemCount() { - if (mSubjectEntity == null) return 0; - return mEntityList == null ? TOP_ITEM_COUNT + FOOTER_ITEM_COUNT : mEntityList.size() + FOOTER_ITEM_COUNT + TOP_ITEM_COUNT; - } - - @Nullable - @Override - public Pair getSyncData(int position) { - // position:0 -> head - int index = position - ListAdapter.TOP_ITEM_COUNT; - if (index < 0 || index >= mEntityList.size()) return null; - - AnswerEntity entity = mEntityList.get(index); - return new Pair(entity.getId(), entity); - } -} +//package com.gh.gamecenter.qa.subject; +// +//import android.content.Context; +//import android.view.View; +//import android.view.ViewGroup; +// +//import com.gh.base.OnListClickListener; +//import com.gh.common.constant.ItemViewType; +//import com.gh.common.syncpage.ISyncAdapterHandler; +//import com.gh.gamecenter.R; +//import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; +//import com.gh.gamecenter.baselist.ListAdapter; +//import com.gh.gamecenter.databinding.AskSubjectTopItemBinding; +//import com.gh.gamecenter.databinding.CommunityAnswerItemBinding; +//import com.gh.gamecenter.entity.CommunityEntity; +//import com.gh.gamecenter.qa.answer.CommunityAnswerItemViewHolder; +//import com.gh.gamecenter.qa.answer.detail.SimpleAnswerDetailActivity; +//import com.gh.gamecenter.qa.article.detail.ArticleDetailActivity; +//import com.gh.gamecenter.qa.entity.AnswerEntity; +//import com.gh.gamecenter.qa.entity.AskSubjectEntity; +//import com.gh.gamecenter.qa.entity.Questions; +//import com.gh.gamecenter.qa.questions.newdetail.NewQuestionDetailActivity; +// +//import org.jetbrains.annotations.Nullable; +// +//import java.util.ArrayList; +//import java.util.List; +// +//import androidx.databinding.DataBindingUtil; +//import androidx.recyclerview.widget.RecyclerView; +//import kotlin.Pair; +// +///** +// * Created by khy on 1/04/18. +// */ +// +//public class AskSubjectAdapter extends ListAdapter implements ISyncAdapterHandler { +// +// private OnListClickListener mListClickListener; +// +// private AskSubjectEntity mSubjectEntity; +// +// private String mEntrance; +// +// public AskSubjectAdapter(Context context, OnListClickListener listClickListener, String entrance) { +// super(context); +// mListClickListener = listClickListener; +// mEntrance = entrance; +// } +// +// @Override +// protected void setListData(List updateData) { +// if (mSubjectEntity == null) { +// notifyDataSetChanged(); +// return; +// } +// int oldSize = mEntityList == null || mEntityList.isEmpty() ? 0 : mEntityList.size() + TOP_ITEM_COUNT; +// mEntityList = new ArrayList<>(updateData); +// if (oldSize == 0 || oldSize > updateData.size()) { +// notifyDataSetChanged(); +// } else { +// notifyItemRangeInserted(oldSize, updateData.size() + TOP_ITEM_COUNT - oldSize); +// } +// } +// +// public void setSubjectEntity(AskSubjectEntity subjectEntity) { +// mSubjectEntity = subjectEntity; +// notifyDataSetChanged(); +// } +// +// @Override +// public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { +// View view; +// switch (viewType) { +// case ItemViewType.ITEM_HEADER: +// view = mLayoutInflater.inflate(R.layout.ask_subject_top_item, parent, false); +// AskSubjectTopItemBinding binding = DataBindingUtil.bind(view); +// return new AskSubjectViewHolder(binding, mListClickListener); +// case ItemViewType.ITEM_FOOTER: +// view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false); +// return new FooterViewHolder(view, mListClickListener); +// case ItemViewType.ITEM_BODY: +// view = mLayoutInflater.inflate(R.layout.community_answer_item, parent, false); +// return new CommunityAnswerItemViewHolder(CommunityAnswerItemBinding.bind(view)); +// } +// return null; +// } +// +// @Override +// public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { +// switch (getItemViewType(position)) { +// case ItemViewType.ITEM_HEADER: +// AskSubjectViewHolder subjectViewHolder = (AskSubjectViewHolder) holder; +// subjectViewHolder.mBinding.setEntity(mSubjectEntity); +// if (mEntityList == null || mEntityList.isEmpty()) { +// subjectViewHolder.mBinding.askSubjectTopTag.setVisibility(View.GONE); +// } else { +// subjectViewHolder.mBinding.askSubjectTopTag.setVisibility(View.VISIBLE); +// } +// break; +// case ItemViewType.ITEM_FOOTER: +// FooterViewHolder footerViewHolder = (FooterViewHolder) holder; +// footerViewHolder.initItemPadding(); +// footerViewHolder.initFooterViewHolder(mIsLoading, mIsNetworkError, mIsOver); +// break; +// case ItemViewType.ITEM_BODY: +// String path = "问答专题详情"; +// +// int index = position - ListAdapter.TOP_ITEM_COUNT; +// if (index != -1) { +// AnswerEntity entity = mEntityList.get(index); +// CommunityAnswerItemViewHolder viewHolder = (CommunityAnswerItemViewHolder) holder; +// CommunityAnswerItemBinding binding = viewHolder.getBinding(); +// if ("community_article".equals(entity.getType())) { +// Questions questions = new Questions(); +// questions.setTitle(entity.getArticleTitle()); +// entity.setQuestions(questions); +// } +// +// viewHolder.bindAnswerItem(entity, mEntrance, path); +// binding.title.setOnClickListener(v -> { +// if ("answer".equals(entity.getType())) { +// Questions questions = entity.getQuestions(); +// mContext.startActivity(NewQuestionDetailActivity.getIntent(mContext, questions.getId(), mEntrance, path)); +// } else { +// mContext.startActivity(ArticleDetailActivity.getIntent(mContext, new CommunityEntity(entity.getArticleCommunityId(), ""), entity.getId(), mEntrance, path, null)); +// } +// }); +// +// holder.itemView.setOnClickListener(v -> { +// if ("answer".equals(entity.getType())) { +// mContext.startActivity(SimpleAnswerDetailActivity.getIntent(mContext, entity.getId(), mEntrance, path)); +// } else { +// mContext.startActivity(ArticleDetailActivity.getIntent(mContext, new CommunityEntity(entity.getArticleCommunityId(), ""), entity.getId(), mEntrance, path, null)); +// } +// }); +// } +// break; +// } +// } +// +// @Override +// public int getItemViewType(int position) { +// if (position == 0) return ItemViewType.ITEM_HEADER; +// if (position == getItemCount() - 1) return ItemViewType.ITEM_FOOTER; +// return ItemViewType.ITEM_BODY; +// } +// +// @Override +// public int getItemCount() { +// if (mSubjectEntity == null) return 0; +// return mEntityList == null ? TOP_ITEM_COUNT + FOOTER_ITEM_COUNT : mEntityList.size() + FOOTER_ITEM_COUNT + TOP_ITEM_COUNT; +// } +// +// @Nullable +// @Override +// public Pair getSyncData(int position) { +// // position:0 -> head +// int index = position - ListAdapter.TOP_ITEM_COUNT; +// if (index < 0 || index >= mEntityList.size()) return null; +// +// AnswerEntity entity = mEntityList.get(index); +// return new Pair(entity.getId(), entity); +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/subject/AskSubjectFragment.java b/app/src/main/java/com/gh/gamecenter/qa/subject/AskSubjectFragment.java index 3c5c044b22..f06c577f0b 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/subject/AskSubjectFragment.java +++ b/app/src/main/java/com/gh/gamecenter/qa/subject/AskSubjectFragment.java @@ -1,138 +1,138 @@ -package com.gh.gamecenter.qa.subject; - -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.recyclerview.widget.RecyclerView; - -import android.view.View; -import android.widget.TextView; - -import com.gh.common.TimeElapsedHelper; -import com.gh.common.util.DataUtils; -import com.gh.common.util.DisplayUtils; -import com.gh.common.util.EntranceUtils; -import com.gh.common.view.VerticalItemDecoration; -import com.gh.gamecenter.R; -import com.gh.gamecenter.baselist.ListAdapter; -import com.gh.gamecenter.baselist.ListFragment; -import com.gh.gamecenter.baselist.LoadType; -import com.gh.gamecenter.mvvm.Status; -import com.gh.gamecenter.qa.entity.AnswerEntity; - -import butterknife.BindView; - -/** - * Created by khy on 1/04/18. - */ - -public class AskSubjectFragment extends ListFragment { - - @BindView(R.id.reuse_tv_none_data) - TextView mNoDataTv; - - private AskSubjectAdapter mAdapter; - - private TimeElapsedHelper mElapsedHelper; - - private int height; - - @Override - protected RecyclerView.ItemDecoration getItemDecoration() { - return new VerticalItemDecoration(getContext(), 8, false); - } - - @Override - protected boolean isAutomaticLoad() { - return false; - } - - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - setNavigationTitle("问答专题"); - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - Bundle arguments = getArguments(); - if (arguments != null) { - mListViewModel.initData(arguments.getParcelable(EntranceUtils.KEY_COMMUNITY_DATA) - , arguments.getString(EntranceUtils.KEY_COLUMN_ID)); - } - - mNoDataTv.setText(R.string.content_delete_hint); - height = (int) (getResources().getDisplayMetrics().widthPixels * 0.44) + DisplayUtils.dip2px(getContext(), 20); - mListRv.addOnScrollListener(new RecyclerView.OnScrollListener() { - - @Override - public void onScrollStateChanged(RecyclerView recyclerView, int newState) { - super.onScrollStateChanged(recyclerView, newState); - } - - @Override - public void onScrolled(RecyclerView recyclerView, int dx, int dy) { - super.onScrolled(recyclerView, dx, dy); - View view = mLayoutManager.findViewByPosition(0); - if (view == null) return; - int top = view.getTop(); - if (-top > height && mListViewModel.getCacheSubjectData() != null) { - setNavigationTitle(mListViewModel.getCacheSubjectData().getTitle()); - } else { - setNavigationTitle("问答专题"); - } - } - }); - - mListViewModel.getHeadLiveData().observe(this, it -> { - if (it != null && it.status == Status.SUCCESS) { - mAdapter.setSubjectEntity(it.data); - } - }); - - mElapsedHelper = new TimeElapsedHelper(this); - } - - @Override - public void onDestroyView() { - if (mListViewModel.getCacheSubjectData() != null) { - DataUtils.trackTimeEvent(getContext(), "问答专题", mElapsedHelper.getElapsedTime(), - mListViewModel.getCommunityData().getName(), mListViewModel.getCacheSubjectData().getTitle()); - } - super.onDestroyView(); - } - - @Override - protected ListAdapter provideListAdapter() { - return mAdapter == null ? mAdapter = new AskSubjectAdapter(getContext(), this, mEntrance + "+(问答专题)") : mAdapter; - } - - @Override - protected void autoLoadMore() { - mListViewModel.load(LoadType.NORMAL); - } - - @Override - public void onListClick(View view, int position, Object data) { - switch (view.getId()) { - case R.id.footerview_item: - if (mAdapter.isNetworkError()) { - mListViewModel.load(LoadType.RETRY); - } - break; - } - - } - - @Override - protected boolean addSyncPageObserver() { - return true; - } - - @Nullable - @Override - protected RecyclerView.Adapter provideSyncAdapter() { - return mAdapter; - } -} +//package com.gh.gamecenter.qa.subject; +// +//import android.os.Bundle; +// +//import androidx.annotation.Nullable; +//import androidx.recyclerview.widget.RecyclerView; +// +//import android.view.View; +//import android.widget.TextView; +// +//import com.gh.common.TimeElapsedHelper; +//import com.gh.common.util.DataUtils; +//import com.gh.common.util.DisplayUtils; +//import com.gh.common.util.EntranceUtils; +//import com.gh.common.view.VerticalItemDecoration; +//import com.gh.gamecenter.R; +//import com.gh.gamecenter.baselist.ListAdapter; +//import com.gh.gamecenter.baselist.ListFragment; +//import com.gh.gamecenter.baselist.LoadType; +//import com.gh.gamecenter.mvvm.Status; +//import com.gh.gamecenter.qa.entity.AnswerEntity; +// +//import butterknife.BindView; +// +///** +// * Created by khy on 1/04/18. +// */ +// +//public class AskSubjectFragment extends ListFragment { +// +// @BindView(R.id.reuse_tv_none_data) +// TextView mNoDataTv; +// +// private AskSubjectAdapter mAdapter; +// +// private TimeElapsedHelper mElapsedHelper; +// +// private int height; +// +// @Override +// protected RecyclerView.ItemDecoration getItemDecoration() { +// return new VerticalItemDecoration(getContext(), 8, false); +// } +// +// @Override +// protected boolean isAutomaticLoad() { +// return false; +// } +// +// @Override +// public void onActivityCreated(@Nullable Bundle savedInstanceState) { +// super.onActivityCreated(savedInstanceState); +// setNavigationTitle("问答专题"); +// } +// +// @Override +// public void onCreate(@Nullable Bundle savedInstanceState) { +// super.onCreate(savedInstanceState); +// Bundle arguments = getArguments(); +// if (arguments != null) { +// mListViewModel.initData(arguments.getParcelable(EntranceUtils.KEY_COMMUNITY_DATA) +// , arguments.getString(EntranceUtils.KEY_COLUMN_ID)); +// } +// +// mNoDataTv.setText(R.string.content_delete_hint); +// height = (int) (getResources().getDisplayMetrics().widthPixels * 0.44) + DisplayUtils.dip2px(getContext(), 20); +// mListRv.addOnScrollListener(new RecyclerView.OnScrollListener() { +// +// @Override +// public void onScrollStateChanged(RecyclerView recyclerView, int newState) { +// super.onScrollStateChanged(recyclerView, newState); +// } +// +// @Override +// public void onScrolled(RecyclerView recyclerView, int dx, int dy) { +// super.onScrolled(recyclerView, dx, dy); +// View view = mLayoutManager.findViewByPosition(0); +// if (view == null) return; +// int top = view.getTop(); +// if (-top > height && mListViewModel.getCacheSubjectData() != null) { +// setNavigationTitle(mListViewModel.getCacheSubjectData().getTitle()); +// } else { +// setNavigationTitle("问答专题"); +// } +// } +// }); +// +// mListViewModel.getHeadLiveData().observe(this, it -> { +// if (it != null && it.status == Status.SUCCESS) { +// mAdapter.setSubjectEntity(it.data); +// } +// }); +// +// mElapsedHelper = new TimeElapsedHelper(this); +// } +// +// @Override +// public void onDestroyView() { +// if (mListViewModel.getCacheSubjectData() != null) { +// DataUtils.trackTimeEvent(getContext(), "问答专题", mElapsedHelper.getElapsedTime(), +// mListViewModel.getCommunityData().getName(), mListViewModel.getCacheSubjectData().getTitle()); +// } +// super.onDestroyView(); +// } +// +// @Override +// protected ListAdapter provideListAdapter() { +// return mAdapter == null ? mAdapter = new AskSubjectAdapter(getContext(), this, mEntrance + "+(问答专题)") : mAdapter; +// } +// +// @Override +// protected void autoLoadMore() { +// mListViewModel.load(LoadType.NORMAL); +// } +// +// @Override +// public void onListClick(View view, int position, Object data) { +// switch (view.getId()) { +// case R.id.footerview_item: +// if (mAdapter.isNetworkError()) { +// mListViewModel.load(LoadType.RETRY); +// } +// break; +// } +// +// } +// +// @Override +// protected boolean addSyncPageObserver() { +// return true; +// } +// +// @Nullable +// @Override +// protected RecyclerView.Adapter provideSyncAdapter() { +// return mAdapter; +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/subject/AskSubjectViewHolder.java b/app/src/main/java/com/gh/gamecenter/qa/subject/AskSubjectViewHolder.java index 6aff389ea5..03e4489e7a 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/subject/AskSubjectViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/qa/subject/AskSubjectViewHolder.java @@ -1,20 +1,20 @@ -package com.gh.gamecenter.qa.subject; - -import com.gh.base.BaseRecyclerViewHolder; -import com.gh.base.OnListClickListener; -import com.gh.gamecenter.databinding.AskSubjectTopItemBinding; -import com.gh.gamecenter.qa.entity.AskSubjectEntity; - -/** - * Created by khy on 1/04/18. - */ - -public class AskSubjectViewHolder extends BaseRecyclerViewHolder { - - AskSubjectTopItemBinding mBinding; - - public AskSubjectViewHolder(AskSubjectTopItemBinding binding, OnListClickListener listClickListener) { - super(binding.getRoot(), listClickListener); - mBinding = binding; - } -} +//package com.gh.gamecenter.qa.subject; +// +//import com.gh.base.BaseRecyclerViewHolder; +//import com.gh.base.OnListClickListener; +//import com.gh.gamecenter.databinding.AskSubjectTopItemBinding; +//import com.gh.gamecenter.qa.entity.AskSubjectEntity; +// +///** +// * Created by khy on 1/04/18. +// */ +// +//public class AskSubjectViewHolder extends BaseRecyclerViewHolder { +// +// AskSubjectTopItemBinding mBinding; +// +// public AskSubjectViewHolder(AskSubjectTopItemBinding binding, OnListClickListener listClickListener) { +// super(binding.getRoot(), listClickListener); +// mBinding = binding; +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/subject/AskSubjectViewModel.java b/app/src/main/java/com/gh/gamecenter/qa/subject/AskSubjectViewModel.java index d0867c7a0e..880fbd7cff 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/subject/AskSubjectViewModel.java +++ b/app/src/main/java/com/gh/gamecenter/qa/subject/AskSubjectViewModel.java @@ -1,72 +1,72 @@ -package com.gh.gamecenter.qa.subject; - -import android.app.Application; - -import androidx.annotation.NonNull; -import androidx.lifecycle.MediatorLiveData; -import androidx.lifecycle.MutableLiveData; - -import com.gh.gamecenter.baselist.ListHeadViewModel; -import com.gh.gamecenter.baselist.LoadType; -import com.gh.gamecenter.entity.CommunityEntity; -import com.gh.gamecenter.mvvm.Resource; -import com.gh.gamecenter.mvvm.Status; -import com.gh.gamecenter.qa.entity.AnswerEntity; -import com.gh.gamecenter.qa.entity.AskSubjectEntity; -import com.gh.gamecenter.retrofit.RetrofitManager; - -import java.util.List; - -import io.reactivex.Observable; - -/** - * Created by khy on 1/04/18. - */ - -public class AskSubjectViewModel extends ListHeadViewModel { - - private MutableLiveData> mSubjectLiveData = new MediatorLiveData<>(); - private CommunityEntity communityData; - private AskSubjectEntity mCacheSubjectData; - private String columnId; - - public AskSubjectViewModel(@NonNull Application application) { - super(application); - mResultLiveData.addSource(mSubjectLiveData, it -> { - if (it != null && it.status == Status.SUCCESS) { - mCacheSubjectData = it.data; - } - }); - } - - @NonNull - @Override - protected Observable provideHeadDataObservable() { - return mApi.getAskSubjectData(communityData.getId(), columnId); - } - - @Override - protected void mergeResultLiveData() { - mResultLiveData.addSource(mListLiveData, mResultLiveData::postValue); - } - - public AskSubjectEntity getCacheSubjectData() { - return mCacheSubjectData; - } - - public CommunityEntity getCommunityData() { - return communityData; - } - - public void initData(CommunityEntity community, String columnId) { - this.communityData = community; - this.columnId = columnId; - load(LoadType.REFRESH); - } - - @Override - public Observable> provideDataObservable(int page) { - return RetrofitManager.getInstance().getApi() - .getAskSubjectColumnAnswers(communityData.getId(), columnId, page, "recommend", 20); - } -} +//package com.gh.gamecenter.qa.subject; +// +//import android.app.Application; +// +//import androidx.annotation.NonNull; +//import androidx.lifecycle.MediatorLiveData; +//import androidx.lifecycle.MutableLiveData; +// +//import com.gh.gamecenter.baselist.ListHeadViewModel; +//import com.gh.gamecenter.baselist.LoadType; +//import com.gh.gamecenter.entity.CommunityEntity; +//import com.gh.gamecenter.mvvm.Resource; +//import com.gh.gamecenter.mvvm.Status; +//import com.gh.gamecenter.qa.entity.AnswerEntity; +//import com.gh.gamecenter.qa.entity.AskSubjectEntity; +//import com.gh.gamecenter.retrofit.RetrofitManager; +// +//import java.util.List; +// +//import io.reactivex.Observable; +// +///** +// * Created by khy on 1/04/18. +// */ +// +//public class AskSubjectViewModel extends ListHeadViewModel { +// +// private MutableLiveData> mSubjectLiveData = new MediatorLiveData<>(); +// private CommunityEntity communityData; +// private AskSubjectEntity mCacheSubjectData; +// private String columnId; +// +// public AskSubjectViewModel(@NonNull Application application) { +// super(application); +// mResultLiveData.addSource(mSubjectLiveData, it -> { +// if (it != null && it.status == Status.SUCCESS) { +// mCacheSubjectData = it.data; +// } +// }); +// } +// +// @NonNull +// @Override +// protected Observable provideHeadDataObservable() { +// return mApi.getAskSubjectData(communityData.getId(), columnId); +// } +// +// @Override +// protected void mergeResultLiveData() { +// mResultLiveData.addSource(mListLiveData, mResultLiveData::postValue); +// } +// +// public AskSubjectEntity getCacheSubjectData() { +// return mCacheSubjectData; +// } +// +// public CommunityEntity getCommunityData() { +// return communityData; +// } +// +// public void initData(CommunityEntity community, String columnId) { +// this.communityData = community; +// this.columnId = columnId; +// load(LoadType.REFRESH); +// } +// +// @Override +// public Observable> provideDataObservable(int page) { +// return RetrofitManager.getInstance().getApi() +// .getAskSubjectColumnAnswers(communityData.getId(), columnId, page, "recommend", 20); +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/subject/CommunitySubjectActivity.java b/app/src/main/java/com/gh/gamecenter/qa/subject/CommunitySubjectActivity.java index 31b4a0b28a..bcf4b177e5 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/subject/CommunitySubjectActivity.java +++ b/app/src/main/java/com/gh/gamecenter/qa/subject/CommunitySubjectActivity.java @@ -1,29 +1,29 @@ -package com.gh.gamecenter.qa.subject; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; - -import com.gh.common.util.EntranceUtils; -import com.gh.gamecenter.NormalActivity; -import com.gh.gamecenter.entity.CommunityEntity; - -/** - * Created by khy on 10/04/18. - */ - -public class CommunitySubjectActivity extends NormalActivity { - - public static Intent getIntent(Context context, CommunityEntity community, String subjectId, String entrance, String path) { - Bundle bundle = new Bundle(); - bundle.putString(EntranceUtils.KEY_ENTRANCE, mergeEntranceAndPath(entrance, path)); - bundle.putString(EntranceUtils.KEY_COLUMN_ID, subjectId); - bundle.putParcelable(EntranceUtils.KEY_COMMUNITY_DATA, community); - return getTargetIntent(context, CommunitySubjectActivity.class, AskSubjectFragment.class, bundle); - } - - @Override - protected Intent provideNormalIntent() { - return getTargetIntent(this, CommunitySubjectActivity.class, AskSubjectFragment.class); - } -} +//package com.gh.gamecenter.qa.subject; +// +//import android.content.Context; +//import android.content.Intent; +//import android.os.Bundle; +// +//import com.gh.common.util.EntranceUtils; +//import com.gh.gamecenter.NormalActivity; +//import com.gh.gamecenter.entity.CommunityEntity; +// +///** +// * Created by khy on 10/04/18. +// */ +// +//public class CommunitySubjectActivity extends NormalActivity { +// +// public static Intent getIntent(Context context, CommunityEntity community, String subjectId, String entrance, String path) { +// Bundle bundle = new Bundle(); +// bundle.putString(EntranceUtils.KEY_ENTRANCE, mergeEntranceAndPath(entrance, path)); +// bundle.putString(EntranceUtils.KEY_COLUMN_ID, subjectId); +// bundle.putParcelable(EntranceUtils.KEY_COMMUNITY_DATA, community); +// return getTargetIntent(context, CommunitySubjectActivity.class, AskSubjectFragment.class, bundle); +// } +// +// @Override +// protected Intent provideNormalIntent() { +// return getTargetIntent(this, CommunitySubjectActivity.class, AskSubjectFragment.class); +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/tags/AskTagPagerFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/qa/tags/AskTagPagerFragmentAdapter.java index 6963f02d19..0f6fc97f9a 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/tags/AskTagPagerFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/qa/tags/AskTagPagerFragmentAdapter.java @@ -1,33 +1,33 @@ -package com.gh.gamecenter.qa.tags; - -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentStatePagerAdapter; - -import com.gh.gamecenter.qa.newest.AskQuestionsNewBodyFragment; -import com.gh.gamecenter.qa.entity.AskTagGroupsEntity; - -import java.util.List; - -/** - * Created by khy on 28/01/18. - */ - -public class AskTagPagerFragmentAdapter extends FragmentStatePagerAdapter { - private List mTagList; - - public AskTagPagerFragmentAdapter(FragmentManager fm, List tagList) { - super(fm); - mTagList = tagList; - } - - @Override - public Fragment getItem(int position) { - return AskQuestionsNewBodyFragment.newInstance(mTagList.get(position).getName()); - } - - @Override - public int getCount() { - return mTagList.size(); - } -} +//package com.gh.gamecenter.qa.tags; +// +//import androidx.fragment.app.Fragment; +//import androidx.fragment.app.FragmentManager; +//import androidx.fragment.app.FragmentStatePagerAdapter; +// +//import com.gh.gamecenter.qa.newest.AskQuestionsNewBodyFragment; +//import com.gh.gamecenter.qa.entity.AskTagGroupsEntity; +// +//import java.util.List; +// +///** +// * Created by khy on 28/01/18. +// */ +// +//public class AskTagPagerFragmentAdapter extends FragmentStatePagerAdapter { +// private List mTagList; +// +// public AskTagPagerFragmentAdapter(FragmentManager fm, List tagList) { +// super(fm); +// mTagList = tagList; +// } +// +// @Override +// public Fragment getItem(int position) { +// return AskQuestionsNewBodyFragment.newInstance(mTagList.get(position).getName()); +// } +// +// @Override +// public int getCount() { +// return mTagList.size(); +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/qa/video/detail/ForumTopVideoView.kt b/app/src/main/java/com/gh/gamecenter/qa/video/detail/ForumTopVideoView.kt index e366c6b6f6..1cdde81230 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/video/detail/ForumTopVideoView.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/video/detail/ForumTopVideoView.kt @@ -3,19 +3,21 @@ package com.gh.gamecenter.qa.video.detail import android.app.Activity import android.content.Context import android.util.AttributeSet -import android.view.* +import android.view.GestureDetector +import android.view.MotionEvent +import android.view.Surface +import android.view.View import android.widget.ImageView import android.widget.SeekBar -import android.widget.TextView import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager -import com.facebook.drawee.view.SimpleDraweeView import com.gh.common.constant.Constants import com.gh.common.observer.MuteCallback import com.gh.common.observer.VolumeObserver import com.gh.common.util.* import com.gh.gamecenter.R +import com.gh.gamecenter.databinding.LayoutForumVideoDetailVideoviewPortraitBinding import com.gh.gamecenter.entity.ForumVideoEntity import com.gh.gamecenter.forum.home.ForumScrollCalculatorHelper import com.gh.gamecenter.video.detail.CustomManager @@ -25,9 +27,6 @@ import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer import com.shuyu.gsyvideoplayer.video.base.GSYVideoView import com.shuyu.gsyvideoplayer.video.base.GSYVideoViewBridge import io.reactivex.disposables.Disposable -import kotlinx.android.synthetic.main.layout_game_detail_video_portrait.view.* -import kotlinx.android.synthetic.main.piece_forum_top_video_replay.view.* -import kotlinx.android.synthetic.main.piece_video_control.view.* import java.util.* class ForumTopVideoView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) : StandardGSYVideoPlayer(context, attrs) { @@ -35,12 +34,10 @@ class ForumTopVideoView @JvmOverloads constructor(context: Context, attrs: Attri private var mVolumeObserver: VolumeObserver private var mMuteDisposable: Disposable? = null private var mIsAutoPlay = false + private lateinit var mBinding: LayoutForumVideoDetailVideoviewPortraitBinding var mForumVideoEntity: ForumVideoEntity? = null var viewModel: ForumVideoDetailViewModel? = null var uuid = UUID.randomUUID().toString() - var thumbImage: SimpleDraweeView = findViewById(R.id.thumbImage) - var pendingView: TextView = findViewById(R.id.pendingView) - var titleTv: TextView = findViewById(R.id.title) init { post { @@ -59,7 +56,7 @@ class ForumTopVideoView @JvmOverloads constructor(context: Context, attrs: Attri hideBackBtn() } - volume.setOnClickListener { toggleMute() } + mBinding.layoutBottom.volume.setOnClickListener { toggleMute() } } mMuteCallback = object : MuteCallback { @@ -78,12 +75,12 @@ class ForumTopVideoView @JvmOverloads constructor(context: Context, attrs: Attri clearFullscreenLayout() } - errorBtn?.setOnClickListener { - debounceActionWithInterval(errorBtn.id, 1000) { + mBinding.errorBtn.setOnClickListener { + debounceActionWithInterval(mBinding.errorBtn.id, 1000) { if (!com.shuyu.gsyvideoplayer.utils.NetworkUtils.isAvailable(mContext)) { Utils.toast(context, "网络异常,请检查手机网络状态") setViewShowState(mStartButton, View.INVISIBLE) - errorContainer.visibility = View.VISIBLE + mBinding.errorContainer.visibility = View.VISIBLE return@debounceActionWithInterval } startPlayLogic(false) @@ -91,9 +88,14 @@ class ForumTopVideoView @JvmOverloads constructor(context: Context, attrs: Attri } } + override fun init(context: Context?) { + super.init(context) + mBinding = LayoutForumVideoDetailVideoviewPortraitBinding.bind(this.getChildAt(0)) + } + fun setForumVideoEntity(entity: ForumVideoEntity?) { this.mForumVideoEntity = entity - titleTv.text = if (mIfCurrentIsFullscreen) entity?.title else "" + mBinding.title.text = if (mIfCurrentIsFullscreen) entity?.title else "" } //这个必须配置最上面的构造才能生效 @@ -103,17 +105,19 @@ class ForumTopVideoView @JvmOverloads constructor(context: Context, attrs: Attri fun observeVolume(fragment: Fragment?) { fragment?.context?.applicationContext?.contentResolver?.registerContentObserver( - android.provider.Settings.System.CONTENT_URI, true, mVolumeObserver) + android.provider.Settings.System.CONTENT_URI, true, mVolumeObserver + ) fragment?.fragmentManager?.registerFragmentLifecycleCallbacks( - object : FragmentManager.FragmentLifecycleCallbacks() { - override fun onFragmentPaused(fm: FragmentManager, f: Fragment) { - if (f === fragment) { - fragment.context?.applicationContext?.contentResolver?.unregisterContentObserver(mVolumeObserver) - fragment.fragmentManager?.unregisterFragmentLifecycleCallbacks(this) - } + object : FragmentManager.FragmentLifecycleCallbacks() { + override fun onFragmentPaused(fm: FragmentManager, f: Fragment) { + if (f === fragment) { + fragment.context?.applicationContext?.contentResolver?.unregisterContentObserver(mVolumeObserver) + fragment.fragmentManager?.unregisterFragmentLifecycleCallbacks(this) } - }, false) + } + }, false + ) } fun startPlayLogic(isAutoPlay: Boolean) { @@ -165,7 +169,7 @@ class ForumTopVideoView @JvmOverloads constructor(context: Context, attrs: Attri private fun mute(isManual: Boolean = false) { viewModel?.videoIsMuted = true - volume.setImageResource(R.drawable.ic_game_detail_volume_off) + mBinding.layoutBottom.volume.setImageResource(R.drawable.ic_game_detail_volume_off) CustomManager.getCustomManager(getKey()).isNeedMute = true SPUtils.setBoolean(Constants.SP_VIDEO_PLAY_MUTE, true) if (isManual) { @@ -176,7 +180,7 @@ class ForumTopVideoView @JvmOverloads constructor(context: Context, attrs: Attri private fun unMute(isManual: Boolean = false) { viewModel?.videoIsMuted = false - volume.setImageResource(R.drawable.ic_game_detail_volume_on) + mBinding.layoutBottom.volume.setImageResource(R.drawable.ic_game_detail_volume_on) CustomManager.getCustomManager(getKey()).isNeedMute = false SPUtils.setBoolean(Constants.SP_VIDEO_PLAY_MUTE, false) if (isManual) { @@ -197,7 +201,7 @@ class ForumTopVideoView @JvmOverloads constructor(context: Context, attrs: Attri } fun updateThumb(url: String) { - ImageUtils.display(thumbImage, url) + ImageUtils.display(mBinding.thumbImage, url) } override fun touchDoubleUp(e: MotionEvent?) { @@ -273,18 +277,18 @@ class ForumTopVideoView @JvmOverloads constructor(context: Context, attrs: Attri if (state == CURRENT_STATE_AUTO_COMPLETE) { hideAllWidget() - replayContainer.visibility = View.VISIBLE + mBinding.replayContainer.root.visibility = View.VISIBLE mTopContainer.visibility = View.VISIBLE - replayTv.setOnClickListener { + mBinding.replayContainer.replayTv.setOnClickListener { startButton.performClick() violenceUpdateMuteStatus() uploadVideoStreamingPlaying("重新播放") } - shareTv.setOnClickListener { + mBinding.replayContainer.shareTv.setOnClickListener { share() } } else { - replayContainer.visibility = View.GONE + mBinding.replayContainer.root.visibility = View.GONE } } @@ -297,35 +301,35 @@ class ForumTopVideoView @JvmOverloads constructor(context: Context, attrs: Attri "https://resource.ghzs.com/page/video_play/video/video.html?video=${it.id}" } ShareUtils.getInstance(context).showShareWindowsCallback(context as Activity, - this, - shareUrl, - shareIcon, - it.title, - it.des, - ShareUtils.ShareEntrance.video, it.id, object : ShareUtils.ShareCallBack { - override fun onSuccess(label: String) { - if ("短信" == label || "复制链接" == label) viewModel?.shareVideoStatistics(it) - } + this, + shareUrl, + shareIcon, + it.title, + it.des, + ShareUtils.ShareEntrance.video, it.id, object : ShareUtils.ShareCallBack { + override fun onSuccess(label: String) { + if ("短信" == label || "复制链接" == label) viewModel?.shareVideoStatistics(it) + } - override fun onCancel() { - uploadVideoStreamingPlaying("取消分享") - } - }) + override fun onCancel() { + uploadVideoStreamingPlaying("取消分享") + } + }) } } private fun showBackBtn() { mTopContainer.background = ContextCompat.getDrawable(context, R.drawable.video_title_bg) - back.visibility = View.VISIBLE + mBinding.back.visibility = View.VISIBLE mForumVideoEntity?.run { - titleTv.text = title + mBinding.title.text = title } } private fun hideBackBtn() { mTopContainer?.setBackgroundResource(0) - back.visibility = View.GONE - titleTv.text = "" + mBinding.back.visibility = View.GONE + mBinding.title.text = "" } override fun getEnlargeImageRes(): Int { @@ -357,40 +361,40 @@ class ForumTopVideoView @JvmOverloads constructor(context: Context, attrs: Attri override fun changeUiToNormal() { super.changeUiToNormal() - errorContainer.visibility = View.GONE + mBinding.errorContainer.visibility = View.GONE } override fun changeUiToPreparingShow() { super.changeUiToPreparingShow() - errorContainer.visibility = View.GONE + mBinding.errorContainer.visibility = View.GONE } override fun changeUiToPlayingShow() { super.changeUiToPlayingShow() - errorContainer.visibility = View.GONE + mBinding.errorContainer.visibility = View.GONE } override fun changeUiToPauseShow() { super.changeUiToPauseShow() - errorContainer.visibility = View.GONE + mBinding.errorContainer.visibility = View.GONE } override fun changeUiToCompleteShow() { super.changeUiToCompleteShow() - errorContainer.visibility = View.GONE + mBinding.errorContainer.visibility = View.GONE } override fun changeUiToError() { super.changeUiToError() setViewShowState(mStartButton, View.INVISIBLE) - errorContainer.visibility = View.VISIBLE + mBinding.errorContainer.visibility = View.VISIBLE } override fun netWorkErrorLogic() { super.netWorkErrorLogic() Utils.toast(context, "网络错误,视频播放失败") setViewShowState(mStartButton, View.INVISIBLE) - errorContainer.visibility = View.VISIBLE + mBinding.errorContainer.visibility = View.VISIBLE } //监控播放错误 @@ -398,7 +402,7 @@ class ForumTopVideoView @JvmOverloads constructor(context: Context, attrs: Attri super.onError(what, extra) Utils.toast(context, "网络错误,视频播放失败") setViewShowState(mStartButton, View.INVISIBLE) - errorContainer.visibility = View.VISIBLE + mBinding.errorContainer.visibility = View.VISIBLE } override fun releaseVideos() { @@ -413,13 +417,13 @@ class ForumTopVideoView @JvmOverloads constructor(context: Context, attrs: Attri fun setVideoStatus(status: String) { if (status == "pending" || status == "fail") { - pendingView.text = if (status == "pending") "审核中...请耐心等待" else "审核不通过" - pendingView.visibility = View.VISIBLE + mBinding.pendingView.text = if (status == "pending") "审核中...请耐心等待" else "审核不通过" + mBinding.pendingView.visibility = View.VISIBLE mBottomContainer?.visibility = View.GONE mStartButton?.visibility = View.GONE mBottomProgressBar?.visibility = View.GONE } else { - pendingView.visibility = View.GONE + mBinding.pendingView.visibility = View.GONE mBottomContainer?.visibility = View.VISIBLE mStartButton?.visibility = View.VISIBLE mBottomProgressBar?.visibility = View.VISIBLE diff --git a/app/src/main/java/com/gh/gamecenter/video/data/VideoDataAdapter.kt b/app/src/main/java/com/gh/gamecenter/video/data/VideoDataAdapter.kt index 47e675666d..9671d29968 100644 --- a/app/src/main/java/com/gh/gamecenter/video/data/VideoDataAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/video/data/VideoDataAdapter.kt @@ -3,9 +3,10 @@ package com.gh.gamecenter.video.data import android.content.Context import android.view.ViewGroup import androidx.core.content.ContextCompat -import androidx.databinding.DataBindingUtil import androidx.recyclerview.widget.RecyclerView +import com.gh.common.util.NumberUtils import com.gh.common.util.SpanBuilder +import com.gh.common.util.toBinding import com.gh.common.view.CustomMarkerView import com.gh.gamecenter.R import com.gh.gamecenter.baselist.ListAdapter @@ -21,7 +22,6 @@ import com.github.mikephil.charting.data.LineData import com.github.mikephil.charting.data.LineDataSet import com.github.mikephil.charting.formatter.ValueFormatter import com.halo.assistant.HaloApp -import java.util.* import kotlin.math.ceil class VideoDataAdapter(context: Context) : ListAdapter(context) { @@ -32,9 +32,9 @@ class VideoDataAdapter(context: Context) : ListAdapter(context) { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return when (viewType) { - DATA_OVERVIEW -> VideoDataOverviewViewHolder(DataBindingUtil.inflate(mLayoutInflater, R.layout.item_video_data_overview, parent, false)) - FANS_COUNT -> VideoDataFansChartViewHolder(DataBindingUtil.inflate(mLayoutInflater, R.layout.item_video_data_chart, parent, false)) - else -> VideoDataPlayCountChartViewHolder(DataBindingUtil.inflate(mLayoutInflater, R.layout.item_video_data_chart, parent, false)) + DATA_OVERVIEW -> VideoDataOverviewViewHolder(parent.toBinding()) + FANS_COUNT -> VideoDataFansChartViewHolder(parent.toBinding()) + else -> VideoDataPlayCountChartViewHolder(parent.toBinding()) } } @@ -55,9 +55,7 @@ class VideoDataAdapter(context: Context) : ListAdapter(context) { val videoDataItem = mEntityList[position] when (holder) { is VideoDataOverviewViewHolder -> { - holder.binding.entity = videoDataItem.videoDataOverView - val updateTime = "每天 10:00 更新昨日数据" - holder.binding.updateTimeTv.text = SpanBuilder(updateTime).color(HaloApp.getInstance().application, 3, 8, R.color.text_FEDD26).build() + bindVideoDataOverviewViewHolder(videoDataItem, holder) } is VideoDataFansChartViewHolder -> { holder.binding.chartTitleTv.text = "粉丝量" @@ -72,6 +70,32 @@ class VideoDataAdapter(context: Context) : ListAdapter(context) { } } + private fun bindVideoDataOverviewViewHolder( + videoDataItem: VideoDataItem, + holder: VideoDataOverviewViewHolder + ) { + val entity = videoDataItem.videoDataOverView + if (entity != null) { + val updateTime = "每天 10:00 更新昨日数据" + holder.binding.run { + updateTimeTv.text = + SpanBuilder(updateTime).color(HaloApp.getInstance().application, 3, 8, R.color.text_FEDD26).build() + fansCountTv.text = NumberUtils.transSimpleLetterCount(entity.fan) + increaseFansCountTv.text = entity.yesterdayFan.toString() + videoPlayCountTv.text = NumberUtils.transSimpleLetterCount(entity.play) + increaseVideoPlayCountTv.text = entity.yesterdayPlay.toString() + voteTv.text = NumberUtils.transSimpleLetterCount(entity.vote) + increaseVoteTv.text = entity.yesterdayVote.toString() + commentCountTv.text = NumberUtils.transSimpleLetterCount(entity.comment) + increaseCommentCountTv.text = entity.yesterdayComment.toString() + shareCountTv.text = NumberUtils.transSimpleLetterCount(entity.share) + increaseShareCountTv.text = entity.yesterdayShare.toString() + collectTv.text = NumberUtils.transSimpleLetterCount(entity.favorite) + increaseCollectTv.text = entity.yesterdayFavorite.toString() + } + } + } + private fun initLineChart(lineChart: LineChart, datasX: ArrayList, datasY: ArrayList) { lineChart.clear() //设置数据 diff --git a/app/src/main/java/com/gh/gamecenter/video/data/VideoDataFragment.kt b/app/src/main/java/com/gh/gamecenter/video/data/VideoDataFragment.kt index fb62230f49..20d24441a4 100644 --- a/app/src/main/java/com/gh/gamecenter/video/data/VideoDataFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/video/data/VideoDataFragment.kt @@ -1,10 +1,10 @@ package com.gh.gamecenter.video.data import android.os.Bundle +import android.view.LayoutInflater import android.view.View import androidx.core.content.ContextCompat import androidx.lifecycle.Observer -import androidx.recyclerview.widget.LinearLayoutManager import com.gh.base.fragment.BaseFragment import com.gh.common.util.DisplayUtils import com.gh.common.util.dip2px @@ -13,34 +13,37 @@ import com.gh.common.util.viewModelProvider import com.gh.common.view.FixLinearLayoutManager import com.gh.common.view.VerticalItemDecoration import com.gh.gamecenter.R +import com.gh.gamecenter.databinding.FragmentVideoDataBinding import com.gh.gamecenter.mvvm.Status -import kotlinx.android.synthetic.main.fragment_video_data.* -import kotlinx.android.synthetic.main.reuse_loading.* -import kotlinx.android.synthetic.main.reuse_no_connection.* -import kotlinx.android.synthetic.main.reuse_toolbar.* -import retrofit2.HttpException class VideoDataFragment : BaseFragment() { private lateinit var mViewModel: VideoDataViewModel private var mAdapter: VideoDataAdapter? = null + private lateinit var mBinding: FragmentVideoDataBinding - override fun getLayoutId(): Int = R.layout.fragment_video_data + override fun getLayoutId(): Int = 0 + + override fun getInflatedLayout(): View { + return FragmentVideoDataBinding.inflate(LayoutInflater.from(requireContext()), null, false).apply { + mBinding = this + }.root + } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - backBtn.setImageDrawable(R.drawable.ic_bar_back_light.toDrawable()) - normal_title.setTextColor(ContextCompat.getColor(requireContext(), R.color.white)) - normal_toolbar.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.transparent)) - normal_title.text = "视频数据" + mBinding.reuseToolbar.backBtn.setImageDrawable(R.drawable.ic_bar_back_light.toDrawable()) + mBinding.reuseToolbar.normalTitle.setTextColor(ContextCompat.getColor(requireContext(), R.color.white)) + mBinding.reuseToolbar.normalToolbar.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.transparent)) + mBinding.reuseToolbar.normalTitle.text = "视频数据" - refreshView?.setProgressViewOffset(false, 0, 80F.dip2px() + DisplayUtils.getStatusBarHeight(requireContext().resources)) - refreshView?.setOnRefreshListener { + mBinding.refreshView.setProgressViewOffset(false, 0, 80F.dip2px() + DisplayUtils.getStatusBarHeight(requireContext().resources)) + mBinding.refreshView.setOnRefreshListener { mViewModel.loadData() } mViewModel = viewModelProvider() mAdapter = VideoDataAdapter(requireContext()) - listRv.apply { + mBinding.listRv.apply { layoutManager = FixLinearLayoutManager(requireContext()) addItemDecoration(VerticalItemDecoration(requireContext(), 40F, false, R.color.white)) adapter = mAdapter @@ -48,11 +51,11 @@ class VideoDataFragment : BaseFragment() { mViewModel.loadData() mViewModel.videoDataLiveData.observe(viewLifecycleOwner, Observer { - refreshView?.isRefreshing = false - reuse_ll_loading.visibility = View.GONE + mBinding.refreshView.isRefreshing = false + mBinding.reuseLoading.root.visibility = View.GONE if (it.status == Status.SUCCESS) { - listRv.visibility = View.VISIBLE - reuse_no_connection.visibility = View.GONE + mBinding.listRv.visibility = View.VISIBLE + mBinding.reuseNoConnection.root.visibility = View.GONE mAdapter?.setListData(it.data) mAdapter?.notifyDataSetChanged() } else { @@ -63,11 +66,11 @@ class VideoDataFragment : BaseFragment() { } private fun loadErrorControl() { - listRv.visibility = View.GONE - reuse_no_connection.visibility = View.VISIBLE - reuse_no_connection.setOnClickListener { - reuse_no_connection.visibility = View.GONE - reuse_ll_loading.visibility = View.VISIBLE + mBinding.listRv.visibility = View.GONE + mBinding.reuseNoConnection.root.visibility = View.VISIBLE + mBinding.reuseNoConnection.root.setOnClickListener { + mBinding.reuseNoConnection.root.visibility = View.GONE + mBinding.reuseLoading.root.visibility = View.VISIBLE mViewModel.loadData() } } diff --git a/app/src/main/java/com/gh/gamecenter/video/detail/DetailPlayerView.kt b/app/src/main/java/com/gh/gamecenter/video/detail/DetailPlayerView.kt index 68e5562bac..fff1b6dd0c 100644 --- a/app/src/main/java/com/gh/gamecenter/video/detail/DetailPlayerView.kt +++ b/app/src/main/java/com/gh/gamecenter/video/detail/DetailPlayerView.kt @@ -29,6 +29,7 @@ import com.gh.common.util.* import com.gh.download.cache.ExoCacheManager import com.gh.gamecenter.GameDetailActivity import com.gh.gamecenter.R +import com.gh.gamecenter.databinding.LayoutVideoDetailSurfaceBinding import com.gh.gamecenter.entity.VideoEntity import com.gh.gamecenter.eventbus.EBRecommed import com.gh.gamecenter.manager.UserManager @@ -47,17 +48,15 @@ import com.shuyu.gsyvideoplayer.video.base.GSYVideoView import com.shuyu.gsyvideoplayer.video.base.GSYVideoViewBridge import com.squareup.picasso.Picasso import io.reactivex.disposables.Disposable -import kotlinx.android.synthetic.main.layout_video_detail_base.view.* -import kotlinx.android.synthetic.main.layout_video_detail_surface.view.* import org.greenrobot.eventbus.EventBus import java.util.concurrent.TimeUnit -class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) - : StandardGSYVideoPlayer(context, attrs) { +class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) : StandardGSYVideoPlayer(context, attrs) { private val mEntrance = "(视频详情)" private var mVideoEntity: VideoEntity? = null private var mViewModel: VideoDetailContainerViewModel? = null + private lateinit var mBinding: LayoutVideoDetailSurfaceBinding private var mGameName = "" private var mCombinedTitleAndId = "" @@ -80,12 +79,12 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib var watchedTv = findViewById(R.id.watchedTv) init { - mHandler = Handler(Handler.Callback { + mHandler = Handler { if (!mChangePosition && !mChangeVolume && !mBrightness) { onClickUiToggle(null) } true - }) + } gestureDetector = GestureDetector(getContext().applicationContext, object : GestureDetector.SimpleOnGestureListener() { }) @@ -117,7 +116,7 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib override fun init(context: Context) { super.init(context) - + mBinding = LayoutVideoDetailSurfaceBinding.bind(this.getChildAt(0)) if (mThumbImageViewLayout != null && (mCurrentState == -1 || mCurrentState == GSYVideoView.CURRENT_STATE_NORMAL || mCurrentState == GSYVideoView.CURRENT_STATE_ERROR)) { mThumbImageViewLayout.visibility = View.VISIBLE } @@ -135,7 +134,7 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib fun setViewModel(viewModel: VideoDetailContainerViewModel) { mViewModel = viewModel unMute() - volume.setOnClickListener { + mBinding.volume.setOnClickListener { toggleMute() } @@ -143,7 +142,8 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib fun observeVolume(activity: AppCompatActivity) { activity.contentResolver?.registerContentObserver( - android.provider.Settings.System.CONTENT_URI, true, mVolumeObserver) + android.provider.Settings.System.CONTENT_URI, true, mVolumeObserver + ) } fun unObserveVolume(activity: AppCompatActivity) { @@ -155,17 +155,17 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib mVideoEntity = videoEntity mGameName = videoEntity.game?.name ?: videoEntity.gameName ?: "" mCombinedTitleAndId = StringUtils.combineTwoString(videoEntity.title, videoEntity.id) - gameNameTv.text = mGameName - usernameTv.text = "@${videoEntity.user.name}" - videoTitleTv.text = videoEntity.title + mBinding.gameNameTv.text = mGameName + mBinding.usernameTv.text = "@${videoEntity.user.name}" + mBinding.videoTitleTv.text = videoEntity.title if (videoEntity.user.badge != null) { - sdv_user_badge.visibility = View.VISIBLE - ImageUtils.display(sdv_user_badge, videoEntity.user.badge.icon) + mBinding.sdvUserBadge.visibility = View.VISIBLE + ImageUtils.display(mBinding.sdvUserBadge, videoEntity.user.badge.icon) } else { - sdv_user_badge.visibility = View.GONE + mBinding.sdvUserBadge.visibility = View.GONE } - sdv_user_badge.setOnClickListener { + mBinding.sdvUserBadge.setOnClickListener { DialogUtils.showViewBadgeDialog(context, videoEntity.user.badge) { MtaHelper.onEvent("进入徽章墙_用户记录", "视频详情", "${videoEntity.user.name}(${videoEntity.user.id})") MtaHelper.onEvent("徽章中心", "进入徽章中心", "视频详情") @@ -174,50 +174,56 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib } if (videoEntity.me.isVoted && UserManager.getInstance().isLoggedIn) { - likeIv.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_video_detail_liked)) + mBinding.likeIv.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_video_detail_liked)) } else { - likeIv.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_video_detail_like)) + mBinding.likeIv.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_video_detail_like)) } - attentionIv.goneIf(videoEntity.user.id == UserManager.getInstance().userId || videoEntity.me.isFollower) - attentionIv.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_video_detail_follow)) - if (!likeContainer.hasOnClickListeners()) - RxView.clicks(likeContainer) - .throttleFirst(1, TimeUnit.SECONDS) - .subscribe { - like() - } + mBinding.attentionIv.goneIf(videoEntity.user.id == UserManager.getInstance().userId || videoEntity.me.isFollower) + mBinding.attentionIv.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_video_detail_follow)) + if (!mBinding.likeContainer.hasOnClickListeners()) + RxView.clicks(mBinding.likeContainer) + .throttleFirst(1, TimeUnit.SECONDS) + .subscribe { + like() + } - shareCountTv.text = videoEntity.shareCount.toString() - likeCountTv.text = videoEntity.vote.toString() - commentCountTv.text = videoEntity.commentCount.toString() + mBinding.shareCountTv.text = videoEntity.shareCount.toString() + mBinding.likeCountTv.text = videoEntity.vote.toString() + mBinding.commentCountTv.text = videoEntity.commentCount.toString() - gameIconView.displayGameIcon(videoEntity.game?.rawIcon - ?: videoEntity.gameIcon, videoEntity.game?.iconSubscript) - ImageUtils.display(userIconIv, videoEntity.user.icon) + mBinding.gameIconView.displayGameIcon( + videoEntity.game?.rawIcon + ?: videoEntity.gameIcon, videoEntity.game?.iconSubscript + ) + ImageUtils.display(mBinding.userIconIv, videoEntity.user.icon) if (videoEntity.user.border.isNotEmpty()) { - userIconBorderIv.visibility = View.VISIBLE - ImageUtils.display(userIconBorderIv, videoEntity.user.border) + mBinding.userIconBorderIv.visibility = View.VISIBLE + ImageUtils.display(mBinding.userIconBorderIv, videoEntity.user.border) } else { - userIconBorderIv.visibility = View.INVISIBLE + mBinding.userIconBorderIv.visibility = View.INVISIBLE } - usernameTv.setOnClickListener { + mBinding.usernameTv.setOnClickListener { recordMta("点击用户名字") MtaHelper.onEvent("视频详情", "点击名字", mCombinedTitleAndId) uploadVideoStreamingPlaying("点击昵称") - DirectUtils.directToHomeActivity(context, videoEntity.user.id - ?: "", 2, mEntrance, "视频详情") + DirectUtils.directToHomeActivity( + context, videoEntity.user.id + ?: "", 2, mEntrance, "视频详情" + ) } - userIconIv.setOnClickListener { + mBinding.userIconIv.setOnClickListener { recordMta("点击用户头像") MtaHelper.onEvent("视频详情", "点击用户头像", mCombinedTitleAndId) uploadVideoStreamingPlaying("点击头像") - DirectUtils.directToHomeActivity(context, videoEntity.user.id - ?: "", 2, mEntrance, "视频详情") + DirectUtils.directToHomeActivity( + context, videoEntity.user.id + ?: "", 2, mEntrance, "视频详情" + ) } - gameName.setOnClickListener { + mBinding.gameName.setOnClickListener { if (videoEntity.gameActive) { recordMta("点击游戏名字") MtaHelper.onEvent("视频详情", "点击游戏名字", mCombinedTitleAndId) @@ -226,7 +232,7 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib } } - gameIconView.setOnClickListener { + mBinding.gameIconView.setOnClickListener { recordMta("查看游戏") MtaHelper.onEvent("视频详情", "查看游戏", mCombinedTitleAndId) uploadVideoStreamingPlaying("点击游戏图标") @@ -235,7 +241,7 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib } } - commentContainer.setOnClickListener { + mBinding.commentContainer.setOnClickListener { recordMta("评论") MtaHelper.onEvent("视频详情", "评论", mCombinedTitleAndId) uploadVideoStreamingPlaying("打开评论弹窗") @@ -244,7 +250,13 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib if (mViewModel != null) { mViewModel?.isPauseVideo = false } - val intent = CommentActivity.getVideoCommentIntent(context, videoEntity.id, videoEntity.commentCount, videoEntity.user.id == UserManager.getInstance().userId, false) + val intent = CommentActivity.getVideoCommentIntent( + context, + videoEntity.id, + videoEntity.commentCount, + videoEntity.user.id == UserManager.getInstance().userId, + false + ) (context as Activity).startActivityForResult(intent, CommentActivity.REQUEST_CODE) } "pending", "fail" -> { @@ -253,7 +265,7 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib } } - attentionIv.setOnClickListener { + mBinding.attentionIv.setOnClickListener { if (!videoEntity.me.isFollower) { if (!CheckLoginUtils.isLogin()) { CheckLoginUtils.checkLogin(context, mEntrance) {} @@ -266,12 +278,12 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib return@setOnClickListener } mViewModel?.follow(videoEntity) - attentionLottie.visibility = View.VISIBLE - attentionIv.visibility = View.GONE - attentionLottie.setAnimation("lottie/follow.json") - attentionLottie.playAnimation() - attentionLottie.doOnAnimationEnd { - attentionLottie.visibility = View.GONE + mBinding.attentionLottie.visibility = View.VISIBLE + mBinding.attentionIv.visibility = View.GONE + mBinding.attentionLottie.setAnimation("lottie/follow.json") + mBinding.attentionLottie.playAnimation() + mBinding.attentionLottie.doOnAnimationEnd { + mBinding.attentionLottie.visibility = View.GONE recordMta("关注用户") uploadVideoStreamingPlaying("关注用户") MtaHelper.onEvent("视频详情", "关注用户", mCombinedTitleAndId) @@ -280,7 +292,7 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib } } - shareContainer.setOnClickListener { + mBinding.shareContainer.setOnClickListener { recordMta("分享") mVideoEntity?.let { val shareIcon = it.poster @@ -291,43 +303,49 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib "https://resource.ghzs.com/page/video_play/video/video.html?video=${it.id}" } ShareUtils.getInstance(context).showShareWindowsCallback(context as Activity, - this, - shareUrl, - shareIcon, - it.title, - shareSummary, - ShareUtils.ShareEntrance.video, it.id, object : ShareUtils.ShareCallBack { - override fun onSuccess(label: String) { - removeWechatAnimation() - if ("短信" == label || "复制链接" == label) mViewModel?.shareVideoStatistics(mVideoEntity) - } + this, + shareUrl, + shareIcon, + it.title, + shareSummary, + ShareUtils.ShareEntrance.video, it.id, object : ShareUtils.ShareCallBack { + override fun onSuccess(label: String) { + removeWechatAnimation() + if ("短信" == label || "复制链接" == label) mViewModel?.shareVideoStatistics(mVideoEntity) + } - override fun onCancel() { - uploadVideoStreamingPlaying("更多-取消分享") - } - }) + override fun onCancel() { + uploadVideoStreamingPlaying("更多-取消分享") + } + }) } } - watchedContainer.setOnClickListener { - watchedContainer.visibility = View.GONE + mBinding.watchedContainer.setOnClickListener { + mBinding.watchedContainer.visibility = View.GONE EventBus.getDefault().post(EBRecommed()) } - closeIv.setOnClickListener { - watchedContainer.visibility = View.GONE + mBinding.closeIv.setOnClickListener { + mBinding.watchedContainer.visibility = View.GONE } - censoringContainer.setOnClickListener { DirectUtils.directToWebView(context, "https://resource.ghzs.com/page/video_rule/video_rule.html", mEntrance) } + mBinding.censoringContainer.setOnClickListener { + DirectUtils.directToWebView( + context, + "https://resource.ghzs.com/page/video_rule/video_rule.html", + mEntrance + ) + } - errorBtn.setOnClickListener { + mBinding.errorBtn.setOnClickListener { recordMta("手动点击重试") MtaHelper.onEvent("视频详情", "点击重试", mCombinedTitleAndId) if (!NetworkUtils.isAvailable(mContext)) { Utils.toast(context, "网络错误,视频播放失败") setViewShowState(mStartButton, View.INVISIBLE) - errorContainer.visibility = View.VISIBLE + mBinding.errorContainer.visibility = View.VISIBLE return@setOnClickListener } mRetry = true @@ -337,24 +355,24 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib if (mViewModel?.showComment == true) { mViewModel?.showComment = false - commentContainer.performClick() + mBinding.commentContainer.performClick() } if (!videoEntity.gameActive) { - gameContainer.visibility = View.GONE - censoringContainer.visibility = View.GONE + mBinding.gameContainer.visibility = View.GONE + mBinding.censoringContainer.visibility = View.GONE } else { when (videoEntity.status) { "pass" -> { - gameContainer.visibility = View.VISIBLE - censoringContainer.visibility = View.GONE + mBinding.gameContainer.visibility = View.VISIBLE + mBinding.censoringContainer.visibility = View.GONE } "fail" -> { - gameContainer.visibility = View.GONE - censoringContainer.visibility = View.GONE + mBinding.gameContainer.visibility = View.GONE + mBinding.censoringContainer.visibility = View.GONE } "pending" -> { - gameContainer.visibility = View.INVISIBLE - censoringContainer.visibility = View.VISIBLE + mBinding.gameContainer.visibility = View.INVISIBLE + mBinding.censoringContainer.visibility = View.VISIBLE } } } @@ -393,7 +411,8 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib mViewModel?.voteVideo(mVideoEntity) if (mViewModel?.entrance?.contains(EntranceUtils.ENTRANCE_WELCOME) == true - && mViewModel?.entrance?.countOccurrences("+")!! <= 1) { + && mViewModel?.entrance?.countOccurrences("+")!! <= 1 + ) { LogUtils.uploadLikeFromWelcomeDialog() } @@ -415,21 +434,21 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib mLottieLike = LottieAnimationView(context) mLottieLike?.setAnimation("lottie/like.json") val location = IntArray(2) - likeIv.getLocationInWindow(location) - val width = likeIv.width - val height = likeIv.height + mBinding.likeIv.getLocationInWindow(location) + val width = mBinding.likeIv.width + val height = mBinding.likeIv.height val centerX = location[0] + width / 2 val centerY = location[1] + height / 2 val params = RelativeLayout.LayoutParams(60f.dip2px(), 60f.dip2px()) params.leftMargin = centerX - 60f.dip2px() / 2 params.topMargin = centerY - 60f.dip2px() / 2 mLottieLike?.layoutParams = params - likeIv.visibility = View.INVISIBLE - likeView.addView(mLottieLike) + mBinding.likeIv.visibility = View.INVISIBLE + mBinding.likeView.addView(mLottieLike) mLottieLike?.playAnimation() mLottieLike?.doOnAnimationEnd { - likeView.removeView(mLottieLike) - likeIv.visibility = View.VISIBLE + mBinding.likeView.removeView(mLottieLike) + mBinding.likeIv.visibility = View.VISIBLE } } @@ -440,14 +459,14 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib } fun removeAttentionAnimation() { - attentionLottie?.cancelAnimation() - attentionLottie.visibility = View.GONE + mBinding.attentionLottie.cancelAnimation() + mBinding.attentionLottie.visibility = View.GONE } fun removeLikeAnimation() { if (mLottieLike != null) { - likeIv.visibility = View.VISIBLE - likeView.removeView(mLottieLike) + mBinding.likeIv.visibility = View.VISIBLE + mBinding.likeView.removeView(mLottieLike) mLottieLike = null } } @@ -455,21 +474,21 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib fun removeWechatAnimation() { weChatAnimate?.end() weChatAnimate = null - shareIv.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_video_detail_share)) + mBinding.shareIv.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_video_detail_share)) } private fun playWechatAnimation() { if (weChatAnimate == null) { - val shrinkAnimator = shareIv.animate().scaleX(0f).scaleY(0f) + val shrinkAnimator = mBinding.shareIv.animate().scaleX(0f).scaleY(0f) shrinkAnimator.duration = 250 shrinkAnimator.doOnEnd { - shareIv.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_video_detail_share_wechat)) - val enlargeAnimator = shareIv.animate().scaleX(1f).scaleY(1f) + mBinding.shareIv.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_video_detail_share_wechat)) + val enlargeAnimator = mBinding.shareIv.animate().scaleX(1f).scaleY(1f) enlargeAnimator.duration = 250 enlargeAnimator.doOnEnd { - val scaleXAnimation = ObjectAnimator.ofFloat(shareIv, "scaleX", 1f, 0.9f, 1f) + val scaleXAnimation = ObjectAnimator.ofFloat(mBinding.shareIv, "scaleX", 1f, 0.9f, 1f) scaleXAnimation.repeatCount = -1 - val scaleYAnimation = ObjectAnimator.ofFloat(shareIv, "scaleY", 1f, 0.9f, 1f) + val scaleYAnimation = ObjectAnimator.ofFloat(mBinding.shareIv, "scaleY", 1f, 0.9f, 1f) scaleYAnimation.repeatCount = -1 weChatAnimate = AnimatorSet() @@ -490,7 +509,7 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib Debuger.printfError("******* change network state ******* $state") mNetChanged = true } - if (errorContainer.visibility == View.VISIBLE && "NONE" != state) { + if (mBinding.errorContainer.visibility == View.VISIBLE && "NONE" != state) { recordMta("自动重试") MtaHelper.onEvent("视频详情", "自动重试", mCombinedTitleAndId) seekOnStart = currentPositionWhenPlaying.toLong() @@ -575,7 +594,7 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib setViewShowState(mStartButton, View.INVISIBLE) setViewShowState(mBottomProgressBar, View.VISIBLE) setViewShowState(mBottomContainer, View.GONE) - errorContainer.visibility = View.GONE + mBinding.errorContainer.visibility = View.GONE } override fun changeUiToPreparingShow() { @@ -585,7 +604,7 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib setViewShowState(mThumbImageViewLayout, View.VISIBLE) setViewShowState(mBottomProgressBar, View.VISIBLE) setViewShowState(mBottomContainer, View.GONE) - errorContainer.visibility = View.GONE + mBinding.errorContainer.visibility = View.GONE //不提前监听网络,会造成视频一开始加载失败无法重连 createNetWorkState() listenerNetWorkState() @@ -631,14 +650,14 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib } } } - errorContainer.visibility = View.GONE + mBinding.errorContainer.visibility = View.GONE } override fun changeUiToPauseShow() { super.changeUiToPauseShow() setViewShowState(mBottomProgressBar, View.GONE) setViewShowState(mBottomContainer, View.VISIBLE) - errorContainer.visibility = View.GONE + mBinding.errorContainer.visibility = View.GONE removeLikeAnimation() byStartedClick = true } @@ -659,14 +678,14 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib super.changeUiToCompleteShow() setViewShowState(mBottomProgressBar, View.VISIBLE) setViewShowState(mBottomContainer, View.GONE) - errorContainer.visibility = View.GONE + mBinding.errorContainer.visibility = View.GONE } override fun changeUiToError() { super.changeUiToError() setViewShowState(mStartButton, View.INVISIBLE) setViewShowState(mBottomContainer, View.GONE) - errorContainer.visibility = View.VISIBLE + mBinding.errorContainer.visibility = View.VISIBLE } override fun changeUiToPrepareingClear() { @@ -708,7 +727,7 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib override fun touchDoubleUp(event: MotionEvent?) { if (UserManager.getInstance().isLoggedIn) { mVideoEntity?.run { - likeView.runLikeAnimation(event) + mBinding.likeView.runLikeAnimation(event) if (!me.isVoted && NetworkUtils.isAvailable(mContext)) { like(true) } @@ -770,7 +789,7 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib Utils.toast(context, "网络错误,视频播放失败") setViewShowState(mStartButton, View.INVISIBLE) setViewShowState(mLoadingProgressBar, View.GONE) - errorContainer.visibility = View.VISIBLE + mBinding.errorContainer.visibility = View.VISIBLE if (mPlayRetryCount < 1) { seekOnStart = currentPositionWhenPlaying.toLong() startPlayLogic() @@ -783,7 +802,7 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib super.onError(what, extra) Utils.toast(context, "网络错误,视频播放失败") setViewShowState(mStartButton, View.INVISIBLE) - errorContainer.visibility = View.VISIBLE + mBinding.errorContainer.visibility = View.VISIBLE if (mPlayRetryCount < 1) { seekOnStart = currentPositionWhenPlaying.toLong() startPlayLogic() @@ -898,21 +917,21 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib } fun hideAllButton(isHide: Boolean) { - containerRl.goneIf(isHide) - actionLayout.goneIf(isHide) + mBinding.containerRl.goneIf(isHide) + mBinding.actionLayout.goneIf(isHide) if (isHide) { - watchedContainer.visibility = View.GONE + mBinding.watchedContainer.visibility = View.GONE } } private fun showBackBtn() { mTopContainer.background = ContextCompat.getDrawable(context, R.drawable.video_title_bg) - back.visibility = View.VISIBLE + mBinding.layoutVideoDetailBase.back.visibility = View.VISIBLE } private fun hideBackBtn() { mTopContainer?.setBackgroundResource(0) - back.visibility = View.GONE + mBinding.layoutVideoDetailBase.back.visibility = View.GONE } private fun toggleMute() { @@ -933,7 +952,7 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib private fun mute(isManual: Boolean = false) { mVideoEntity?.videoIsMuted = true - volume.setImageResource(R.drawable.ic_game_detail_volume_off) + mBinding.volume.setImageResource(R.drawable.ic_game_detail_volume_off) (gsyVideoManager as CustomManager).isNeedMute = true if (isManual) { @@ -946,7 +965,7 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib private fun unMute(isManual: Boolean = false) { mVideoEntity?.videoIsMuted = false - volume.setImageResource(R.drawable.ic_game_detail_volume_on) + mBinding.volume.setImageResource(R.drawable.ic_game_detail_volume_on) (gsyVideoManager as CustomManager).isNeedMute = false if (isManual) { recordMta(if (mIfCurrentIsFullscreen) "全屏播放-解除静音" else "解除静音") @@ -969,9 +988,11 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib } //https://exoplayer.dev/hello-world.html#a-note-on-threading runOnUiThread { - LogUtils.uploadVideoStreamingPlaying(action, msg, mViewModel!!.path, - mViewModel!!.entranceDetail, mVideoEntity!!.id, mViewModel!!.uuid, mContentLength, - videoTotalTime, progress.toInt(), videoPlayStatus()) + LogUtils.uploadVideoStreamingPlaying( + action, msg, mViewModel!!.path, + mViewModel!!.entranceDetail, mVideoEntity!!.id, mViewModel!!.uuid, mContentLength, + videoTotalTime, progress.toInt(), videoPlayStatus() + ) } } } @@ -996,7 +1017,7 @@ class DetailPlayerView @JvmOverloads constructor(context: Context, attrs: Attrib fun getGameTitleY(): Int { val location = IntArray(2) - gameName.getLocationInWindow(location) + mBinding.gameName.getLocationInWindow(location) return location[1] } diff --git a/app/src/main/java/com/gh/gamecenter/video/detail/HomeVideoFragment.kt b/app/src/main/java/com/gh/gamecenter/video/detail/HomeVideoFragment.kt index 5e2067a210..3949c56b2e 100644 --- a/app/src/main/java/com/gh/gamecenter/video/detail/HomeVideoFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/video/detail/HomeVideoFragment.kt @@ -15,11 +15,11 @@ import com.gh.common.util.* import com.gh.common.view.AdBannerView import com.gh.gamecenter.R import com.gh.gamecenter.WebActivity +import com.gh.gamecenter.databinding.FragmentHomeVideoBinding import com.gh.gamecenter.entity.LinkEntity import com.gh.gamecenter.entity.SettingsEntity import com.gh.gamecenter.eventbus.EBRecommed import io.reactivex.disposables.Disposable -import kotlinx.android.synthetic.main.fragment_home_video.* import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode import java.util.* @@ -38,8 +38,15 @@ class HomeVideoFragment : BaseLazyFragment() { private var mAdCountDownTimer: Disposable? = null private var mAdLeftCountDownTimer: Disposable? = null private var mAdRightCountDownTimer: Disposable? = null + private lateinit var mBinding: FragmentHomeVideoBinding - override fun getLayoutId(): Int = R.layout.fragment_home_video + override fun getLayoutId(): Int = 0 + + override fun getInflatedLayout(): View { + return FragmentHomeVideoBinding.inflate(LayoutInflater.from(requireContext()), null, false).apply { + mBinding = this + }.root + } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -57,8 +64,8 @@ class HomeVideoFragment : BaseLazyFragment() { super.onViewCreated(view, savedInstanceState) val mLocation = arguments?.getString(EntranceUtils.KEY_LOCATION) ?: "" if (mLocation != VideoDetailContainerViewModel.Location.USER_UPLOADED_VIDEO.value) { - moreIv.visibility = View.VISIBLE - moreIv.setOnClickListener { + mBinding.moreIv.visibility = View.VISIBLE + mBinding.moreIv.setOnClickListener { getCurrentFragment()?.showMoreMenuDialog(it) } } @@ -96,7 +103,7 @@ class HomeVideoFragment : BaseLazyFragment() { fragments.add(recommendVideoDetailFragment!!) - mViewPager.apply { + mBinding.mViewPager.apply { offscreenPageLimit = fragments.size adapter = FragmentAdapter(childFragmentManager, fragments, titles) if (mIsHomeVideo) { @@ -107,34 +114,46 @@ class HomeVideoFragment : BaseLazyFragment() { SPUtils.setBoolean(Constants.SP_HOME_NEW_VIDEO_TIPS, true) mNewHint?.visibility = View.GONE MtaHelper.onEvent("视频流_最新", "顶部Tab", "最新Tab") - LogUtils.uploadVideoStreamingPlaying("点击最新Tab", "", "视频流-最新Tab", - arguments?.getString(EntranceUtils.KEY_REFERER), "", newestVideoDetailFragment?.arguments?.getString(EntranceUtils.KEY_UUID) - ?: "", 0.0, 0, 0, "play") + LogUtils.uploadVideoStreamingPlaying( + "点击最新Tab", "", "视频流-最新Tab", + arguments?.getString(EntranceUtils.KEY_REFERER), "", newestVideoDetailFragment?.arguments?.getString(EntranceUtils.KEY_UUID) + ?: "", 0.0, 0, 0, "play" + ) } else { MtaHelper.onEvent("视频流_推荐", "顶部Tab", "推荐Tab") - LogUtils.uploadVideoStreamingPlaying("点击推荐Tab", "", "视频流-推荐Tab", - arguments?.getString(EntranceUtils.KEY_REFERER), "", recommendVideoDetailFragment?.arguments?.getString(EntranceUtils.KEY_UUID) - ?: "", 0.0, 0, 0, "play") + LogUtils.uploadVideoStreamingPlaying( + "点击推荐Tab", + "", + "视频流-推荐Tab", + arguments?.getString(EntranceUtils.KEY_REFERER), + "", + recommendVideoDetailFragment?.arguments?.getString(EntranceUtils.KEY_UUID) + ?: "", + 0.0, + 0, + 0, + "play" + ) } } } - mTabLayout.setupWithViewPager(mViewPager) + mBinding.mTabLayout.setupWithViewPager(mBinding.mViewPager) if (mIsHomeVideo) { - mTabIndicator.visibility = View.VISIBLE - mTabIndicator.setupWithTabLayout(mTabLayout) - mTabIndicator.setupWithViewPager(mViewPager) + mBinding.mTabIndicator.visibility = View.VISIBLE + mBinding.mTabIndicator.setupWithTabLayout(mBinding.mTabLayout) + mBinding.mTabIndicator.setupWithViewPager(mBinding.mViewPager) mBaseHandler.postDelayed({ - if (mViewPager != null) { - mTabIndicator.generatePath(mViewPager.currentItem, 0F) + if (mBinding.mViewPager != null) { + mBinding.mTabIndicator.generatePath(mBinding.mViewPager.currentItem, 0F) } }, 10) } if (mIsHomeVideo) { - for (i in 0 until mTabLayout.childCount) { - val tab = mTabLayout.getTabAt(i) ?: continue + for (i in 0 until mBinding.mTabLayout.childCount) { + val tab = mBinding.mTabLayout.getTabAt(i) ?: continue val tabView = provideTabView(i, if (tab.text != null) tab.text!!.toString() else "") - ?: continue + ?: continue tab.customView = tabView } val homeNewVideoTips = SPUtils.getBoolean(Constants.SP_HOME_NEW_VIDEO_TIPS, false) @@ -146,7 +165,7 @@ class HomeVideoFragment : BaseLazyFragment() { fun getCurrentFragment(): VideoDetailContainerFragment? { val mIsHomeVideo = arguments?.getBoolean(EntranceUtils.KEY_IS_HOME_VIDEO, false) ?: false return if (mIsHomeVideo) { - if (mViewPager.currentItem == 0) { + if (mBinding.mViewPager.currentItem == 0) { newestVideoDetailFragment } else { recommendVideoDetailFragment @@ -158,14 +177,14 @@ class HomeVideoFragment : BaseLazyFragment() { override fun onResume() { super.onResume() - adBannerLeft.resumePage() - adBannerRight.resumePage() + mBinding.adBannerLeft.resumePage() + mBinding.adBannerRight.resumePage() } override fun onPause() { super.onPause() - adBannerLeft.pausePage() - adBannerRight.pausePage() + mBinding.adBannerLeft.pausePage() + mBinding.adBannerRight.pausePage() } fun changePosition(position: Int) { @@ -173,9 +192,9 @@ class HomeVideoFragment : BaseLazyFragment() { } fun changeAdAlpha(alpha: Float) { - marquee_ad.alpha = alpha - adBannerLeft.alpha = alpha - adBannerRight.alpha = alpha + mBinding.marqueeAd.alpha = alpha + mBinding.adBannerLeft.alpha = alpha + mBinding.adBannerRight.alpha = alpha } private fun provideTabView(position: Int, tabTitle: String): View? { @@ -193,13 +212,13 @@ class HomeVideoFragment : BaseLazyFragment() { videoAdvertisement?.run { if (!center.isNullOrEmpty()) { if (position == (center!![0].frequency)) { - marquee_ad.visibility = View.VISIBLE - marquee_ad_title.text = center!![0].title - marquee_ad_title.isSelected = true + mBinding.marqueeAd.visibility = View.VISIBLE + mBinding.marqueeAdTitle.text = center!![0].title + mBinding.marqueeAdTitle.isSelected = true - marquee_ad.setOnClickListener { + mBinding.marqueeAd.setOnClickListener { val pos = getCurrentFragment()?.viewPagerLayoutManager?.findFirstCompletelyVisibleItemPosition() - ?: -1 + ?: -1 if (pos < 0) return@setOnClickListener MtaHelper.onEvent("视频详情", "视频广告", center!![0].title) getCurrentFragment()?.findVisibleVideoViewByPosition()?.let { @@ -207,24 +226,28 @@ class HomeVideoFragment : BaseLazyFragment() { it.uploadVideoStreamingPlaying("点击广告") } - DirectUtils.directToLinkPage(requireContext(), - LinkEntity(link = center!![0].link, - type = center!![0].linkType, - text = center!![0].text, - display = center!![0].display, - community = center!![0].linkCommunity), - "", "视频详情") + DirectUtils.directToLinkPage( + requireContext(), + LinkEntity( + link = center!![0].link, + type = center!![0].linkType, + text = center!![0].text, + display = center!![0].display, + community = center!![0].linkCommunity + ), + "", "视频详情" + ) } if (center!![0].duration > 0 && mAdCountDownTimer == null) { - mAdCountDownTimer = startTimer(center!![0].duration.toLong(), marquee_ad) + mAdCountDownTimer = startTimer(center!![0].duration.toLong(), mBinding.marqueeAd) } } } if (!left.isNullOrEmpty()) { - setAdBanner(adBannerLeft, left!!, position) + setAdBanner(mBinding.adBannerLeft, left!!, position) } if (!right.isNullOrEmpty()) { - setAdBanner(adBannerRight, right!!, position) + setAdBanner(mBinding.adBannerRight, right!!, position) } } } @@ -236,7 +259,7 @@ class HomeVideoFragment : BaseLazyFragment() { banner.start(ads) banner.onItemClick = { pos -> val videoPos = getCurrentFragment()?.viewPagerLayoutManager?.findFirstCompletelyVisibleItemPosition() - ?: -1 + ?: -1 if (videoPos >= 0) { MtaHelper.onEvent("视频详情", "视频广告", ads[pos].title) getCurrentFragment()?.findVisibleVideoViewByPosition()?.let { @@ -249,20 +272,24 @@ class HomeVideoFragment : BaseLazyFragment() { val webIntentByShare = WebActivity.getWebIntentByShare(context, ads[pos].link, true) startActivity(webIntentByShare) } else { - DirectUtils.directToLinkPage(requireContext(), - LinkEntity(link = ads[pos].link, - type = ads[pos].linkType, - text = ads[pos].text, - display = ads[pos].display, - community = ads[pos].linkCommunity), - "", "视频详情") + DirectUtils.directToLinkPage( + requireContext(), + LinkEntity( + link = ads[pos].link, + type = ads[pos].linkType, + text = ads[pos].text, + display = ads[pos].display, + community = ads[pos].linkCommunity + ), + "", "视频详情" + ) } } } - if (ads[0].duration > 0 && banner == adBannerLeft && mAdLeftCountDownTimer == null) { + if (ads[0].duration > 0 && banner == mBinding.adBannerLeft && mAdLeftCountDownTimer == null) { mAdLeftCountDownTimer = startTimer(ads[0].duration.toLong(), banner) } - if (ads[0].duration > 0 && banner == adBannerRight && mAdRightCountDownTimer == null) { + if (ads[0].duration > 0 && banner == mBinding.adBannerRight && mAdRightCountDownTimer == null) { mAdRightCountDownTimer = startTimer(ads[0].duration.toLong(), banner) } } @@ -302,7 +329,7 @@ class HomeVideoFragment : BaseLazyFragment() { @Subscribe(threadMode = ThreadMode.MAIN) fun onEventMainThread(event: EBRecommed?) { if (fragments.size > 1) { - mViewPager.currentItem = 1 + mBinding.mViewPager.currentItem = 1 } } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/video/detail/VideoAdapter.kt b/app/src/main/java/com/gh/gamecenter/video/detail/VideoAdapter.kt index 82a3117f02..155fee606a 100644 --- a/app/src/main/java/com/gh/gamecenter/video/detail/VideoAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/video/detail/VideoAdapter.kt @@ -2,12 +2,10 @@ package com.gh.gamecenter.video.detail import android.app.Activity import android.content.Context -import android.graphics.Color import android.view.View import android.view.ViewGroup import android.widget.TextView import androidx.appcompat.app.AppCompatActivity -import androidx.core.content.ContextCompat import androidx.recyclerview.widget.RecyclerView import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import com.gh.base.BaseActivity @@ -31,8 +29,6 @@ import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack import com.shuyu.gsyvideoplayer.utils.OrientationUtils import com.shuyu.gsyvideoplayer.video.base.GSYVideoView import com.squareup.picasso.Picasso -import kotlinx.android.synthetic.main.layout_video_detail_surface.view.* -import java.util.* class VideoAdapter( val mContext: Context, @@ -156,15 +152,16 @@ class VideoAdapter( private fun setDownloadButton(videoView: DetailPlayerView?, position: Int) { videoList[position].game?.let { game -> - videoView?.download_btn?.run { + videoView?.findViewById(R.id.download_btn)?.run { + val btn = this val exposureEvent = generateExposure(game) game.exposureEvent = exposureEvent DownloadItemUtils.setOnClickListener(mContext, this, game, 0, this@VideoAdapter, mViewModel.path, BaseActivity.mergeEntranceAndPath(mViewModel.path, "视频详情"), exposureEvent, object : EmptyCallback { override fun onCallback() { - when (download_btn.text) { + when (btn.text) { "下载" -> { videoView.recordMta("下载游戏") MtaHelper.onEvent("视频详情", "下载游戏", "${videoList[position].title}(${videoList[position].id})") @@ -174,7 +171,7 @@ class VideoAdapter( MtaHelper.onEvent("视频详情", "预约游戏", "${videoList[position].title}(${videoList[position].id})") } } - videoView.uploadVideoStreamingPlaying("点击下载按钮", download_btn.text.toString()) + videoView.uploadVideoStreamingPlaying("点击下载按钮", btn.text.toString()) } }) DownloadItemUtils.updateDownloadButton(mContext, this, game, false, PluginLocation.only_game) @@ -182,20 +179,6 @@ class VideoAdapter( } } - private fun setDownloadBtnStatus(context: Context, gameEntity: GameEntity, downloadBtn: TextView, pluginLocation: PluginLocation) { - val status = GameUtils.getDownloadBtnText(context, gameEntity, pluginLocation) - downloadBtn.setTextColor(Color.WHITE) - downloadBtn.text = status - if ("插件化" == status) { - downloadBtn.setBackgroundResource(R.drawable.game_item_btn_plugin_style) - } else if ("打开" == status || "启动" == status) { - downloadBtn.setBackgroundResource(R.drawable.detail_download_open_style) - downloadBtn.setTextColor(ContextCompat.getColor(context, R.color.theme_font)) - } else { - downloadBtn.setBackgroundResource(R.drawable.video_detail_btn_download_up) - } - } - private fun generateExposure(gameEntity: GameEntity): ExposureEvent { val exposureSourceList = arrayListOf() diff --git a/app/src/main/res/layout/fragment_video_data.xml b/app/src/main/res/layout/fragment_video_data.xml index c699ec47b0..19ff8b3e8b 100644 --- a/app/src/main/res/layout/fragment_video_data.xml +++ b/app/src/main/res/layout/fragment_video_data.xml @@ -22,7 +22,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" /> - + - + - + diff --git a/app/src/main/res/layout/item_ask_follow_more.xml b/app/src/main/res/layout/item_ask_follow_more.xml index c3e09b82ed..1bf72faf2c 100644 --- a/app/src/main/res/layout/item_ask_follow_more.xml +++ b/app/src/main/res/layout/item_ask_follow_more.xml @@ -1,56 +1,41 @@ - + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingLeft="20dp" + android:paddingTop="10dp" + android:paddingRight="20dp" + android:paddingBottom="10dp"> - + - - - - - - + android:layout_marginLeft="12dp" + android:textColor="@color/black" + app:layout_constraintLeft_toRightOf="@id/iv_icon" + app:layout_constraintTop_toTopOf="parent" + tools:text="光环丧堃" /> - + - - - - - - \ No newline at end of file + diff --git a/app/src/main/res/layout/item_video_data_chart.xml b/app/src/main/res/layout/item_video_data_chart.xml index 32de206338..0b4dcb11d9 100644 --- a/app/src/main/res/layout/item_video_data_chart.xml +++ b/app/src/main/res/layout/item_video_data_chart.xml @@ -1,43 +1,42 @@ - + - + android:includeFontPadding="false" + android:text="粉丝量" + android:textColor="@color/text_title" + android:textSize="16sp" + android:textStyle="bold" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> - - + - - - \ No newline at end of file + + diff --git a/app/src/main/res/layout/item_video_data_overview.xml b/app/src/main/res/layout/item_video_data_overview.xml index 1ff59cd31b..5a3c4b2996 100644 --- a/app/src/main/res/layout/item_video_data_overview.xml +++ b/app/src/main/res/layout/item_video_data_overview.xml @@ -1,315 +1,294 @@ - + - + - - - - - + android:layout_marginTop="16dp" + android:background="@drawable/bg_personal_card" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/updateTimeTv"> - + app:layout_constraintTop_toBottomOf="@+id/dataOverviewTv"> + + + + + + + + + + tools:text="0" /> - + android:layout_gravity="center_horizontal" + android:layout_marginTop="2dp" + android:drawablePadding="2dp" + android:text="0" + android:textColor="@color/text_subtitleDesc" + android:textSize="10sp" /> - - - - - - - - + android:layout_marginTop="6dp" + android:gravity="center_horizontal" + android:text="视频播放" + android:textColor="@color/text_subtitleDesc" + android:textSize="12sp" /> + - + - - - - - - + android:gravity="center_horizontal" + android:textColor="@color/text_title" + android:textSize="18sp" + android:textStyle="bold" + tools:text="0" /> - - - - - - - - + android:layout_gravity="center_horizontal" + android:layout_marginTop="2dp" + android:drawablePadding="2dp" + android:text="0" + android:textColor="@color/text_subtitleDesc" + android:textSize="10sp" /> - - - - - - - - + android:layout_marginTop="6dp" + android:gravity="center_horizontal" + android:text="点赞" + android:textColor="@color/text_subtitleDesc" + android:textSize="12sp" /> + - + - - - - - - + android:gravity="center_horizontal" + android:textColor="@color/text_title" + android:textSize="18sp" + android:textStyle="bold" + tools:text="0" /> - + - + + - - + - + + + + + + + + + + + + + + + - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout/layout_forum_video_detail_videoview_portrait.xml b/app/src/main/res/layout/layout_forum_video_detail_videoview_portrait.xml index 649699ff10..7d6bea607e 100644 --- a/app/src/main/res/layout/layout_forum_video_detail_videoview_portrait.xml +++ b/app/src/main/res/layout/layout_forum_video_detail_videoview_portrait.xml @@ -27,6 +27,7 @@ - + - + - - - + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/likeView" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> - + + + + + + + + + + + + - - - - - - - - - - - - - + android:layout_marginBottom="16dp" + android:orientation="horizontal"> - + android:layout_marginLeft="16dp" + android:layout_marginRight="10dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toStartOf="@+id/gameContainer" + app:layout_constraintStart_toStartOf="parent"> - + android:gravity="center_vertical" + android:orientation="horizontal"> - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + android:textStyle="bold" + app:layout_constrainedWidth="true" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toStartOf="@+id/sdv_user_badge" + app:layout_constraintHorizontal_bias="0" + app:layout_constraintHorizontal_chainStyle="packed" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:text="我的昵称很长很长有十二字" /> - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:includeFontPadding="false" + android:textColor="@color/white" + android:textSize="10sp" + android:visibility="gone" + app:layout_constraintBottom_toBottomOf="@+id/sdv_user_badge" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@+id/sdv_user_badge" + app:layout_constraintTop_toTopOf="@+id/sdv_user_badge" + tools:text="答题先锋答题先锋答题先锋答题先锋答题先锋" + tools:visibility="visible" /> + + android:layout_below="@+id/userNameLl" + android:layout_marginTop="12dp" + android:lineSpacingExtra="4dp" + android:shadowColor="#4D000000" + android:shadowDx="0" + android:shadowDy="0.5" + android:shadowRadius="1" + android:textColor="@color/white" + android:textSize="14sp" + tools:text="举例:比如切换之前,当前视频已播放了 ,切换App或者回到手机桌面,在切换回光环助手,要从开始播放" /> - + + + + + + + + + + + + + + + + android:layout_below="@+id/gameIconView" + android:layout_centerHorizontal="true" + android:layout_marginTop="4dp" + android:background="@drawable/video_detail_btn_download_up" + android:gravity="center" + android:text="@string/download" + android:textColor="@android:color/white" + android:textSize="12sp" /> + android:layout_gravity="end" + android:layout_marginRight="2dp" + android:layout_marginBottom="20dp" + android:gravity="center" + android:orientation="vertical" + app:layout_constraintBottom_toTopOf="@+id/gameContainer" + app:layout_constraintEnd_toEndOf="parent"> - - - - - + android:gravity="center_horizontal"> - + + + + + + + + + + + + + + android:layout_marginTop="14dp" + android:gravity="center" + android:orientation="vertical" + android:paddingTop="4dp" + android:paddingBottom="12dp"> - + + + + + + + + + + + + + + + + + + + - + - + + + + + + + + + + + + + + + + + + - - \ No newline at end of file + + + + + +