Merge branch 'feature-GHZS-1909' into 'dev'

feat: 论坛子版块新增发帖权限限制—客户端 https://jira.shanqu.cc/browse/GHZS-1909

See merge request halo/android/assistant-android!893
This commit is contained in:
叶子维
2023-04-11 11:04:57 +08:00
8 changed files with 56 additions and 6 deletions

View File

@ -1,5 +1,6 @@
package com.gh.base
import android.annotation.SuppressLint
import android.app.Application
import android.content.Intent
import android.graphics.Bitmap
@ -17,6 +18,7 @@ import com.gh.gamecenter.core.runOnUiThread
import com.gh.gamecenter.core.utils.MD5Utils
import com.gh.gamecenter.core.utils.ToastUtils
import com.gh.gamecenter.common.entity.ErrorEntity
import com.gh.gamecenter.common.retrofit.BiResponse
import com.gh.gamecenter.entity.ForumDetailEntity
import com.gh.gamecenter.entity.LocalVideoEntity
import com.gh.gamecenter.entity.QuoteCountEntity
@ -29,7 +31,9 @@ import com.google.gson.JsonObject
import com.lightgame.utils.Utils
import com.zhihu.matisse.Matisse
import com.zhihu.matisse.internal.utils.PathUtils
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers
import okhttp3.ResponseBody
import retrofit2.HttpException
import java.io.File
@ -58,6 +62,7 @@ abstract class BaseRichEditorViewModel(application: Application) : AndroidViewMo
var videoId = ""//更改封面视频id
val quoteCountEntity = QuoteCountEntity()//数据上报用
val sectionListLiveData = MutableLiveData<List<ForumDetailEntity.Section>>()
var isModerator = false
fun setUploadVideoListener(uploadVideoListener: UploadVideoListener) {
this.mUploadVideoListener = uploadVideoListener
@ -423,6 +428,18 @@ abstract class BaseRichEditorViewModel(application: Application) : AndroidViewMo
})
}
@SuppressLint("CheckResult")
fun getModeratorsInfo(bbsId: String) {
mApi.getModeratorsInfo(bbsId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object : BiResponse<JsonObject>() {
override fun onSuccess(data: JsonObject) {
isModerator = data["is_moderators"].asBoolean
}
})
}
private fun getVideoType(): String {
return when (type) {
BbsType.GAME_BBS.value -> {

View File

@ -51,7 +51,8 @@ class ForumDetailEntity(
class Section(
@SerializedName("_id")
var id: String = "",
var name: String = ""
var name: String = "",
var permissions: String = ""
) : Parcelable
fun convertForumDetailEntityToForumEntity(): ForumEntity {

View File

@ -368,6 +368,7 @@ class ArticleEditActivity : BaseRichEditorActivity<ArticleEditViewModel>(), Keyb
this,
mViewModel.mSelectCommunityData?.id ?: "",
mViewModel.selectSection?.id ?: "",
mViewModel.isModerator,
"editorActivity"
)
}, delayTime)
@ -658,6 +659,7 @@ class ArticleEditActivity : BaseRichEditorActivity<ArticleEditViewModel>(), Keyb
mBinding.clearIv.performClick()
mViewModel.mSelectCommunityData?.id?.let {
mViewModel.getForumSections(it)
mViewModel.getModeratorsInfo(it)
}
}

View File

@ -41,7 +41,12 @@ class ChooseSectionDialogFragment : BaseDialogFragment() {
val bbsId = requireArguments().getString(EntranceConsts.KEY_BBS_ID) ?: ""
mLastSelectSectionId = requireArguments().getString(TAG_SECTION_ID) ?: ""
mViewModel = viewModelProvider(ChooseSectionViewModel.Factory(bbsId))
mViewModel = viewModelProvider(
ChooseSectionViewModel.Factory(
bbsId,
requireArguments().getBoolean(IS_MODERATOR)
)
)
mAdapter = ChooseSectionAdapter(requireContext(), ForumDetailEntity.Section(id = mLastSelectSectionId)) {
val intent = Intent().apply {
putExtra(EntranceConsts.KEY_DATA, mAdapter?.selectedSection)
@ -92,18 +97,21 @@ class ChooseSectionDialogFragment : BaseDialogFragment() {
companion object {
const val TAG_SECTION_ID = "tagSectionId"
const val IS_MODERATOR = "is_moderator"
const val REQUEST_CODE = 1106
fun show(
activity: AppCompatActivity,
bbsId: String,
tagSectionId: String? = "",
isModerator: Boolean = false,
parentTag: String
) {
ChooseSectionDialogFragment().apply {
arguments = bundleOf(
TAG_SECTION_ID to tagSectionId,
EntranceConsts.KEY_BBS_ID to bbsId,
IS_MODERATOR to isModerator,
EntranceConsts.KEY_PARENT_TAG to parentTag
)
}.show(activity.supportFragmentManager, ChooseSectionDialogFragment::class.java.name)

View File

@ -11,7 +11,8 @@ import com.gh.gamecenter.entity.ForumDetailEntity
import com.gh.gamecenter.retrofit.RetrofitManager
import com.halo.assistant.HaloApp
class ChooseSectionViewModel(application: Application, val bbsId: String) : AndroidViewModel(application) {
class ChooseSectionViewModel(application: Application, val bbsId: String, val isModerator: Boolean) :
AndroidViewModel(application) {
private val mNewApi = RetrofitManager.getInstance().newApi
val sectionListLiveData = MutableLiveData<List<ForumDetailEntity.Section>>()
@ -25,15 +26,19 @@ class ChooseSectionViewModel(application: Application, val bbsId: String) : Andr
.subscribe(object : Response<List<ForumDetailEntity.Section>>() {
override fun onResponse(response: List<ForumDetailEntity.Section>?) {
response?.run {
sectionListLiveData.postValue(this)
val validSectionList = ArrayList(this).apply {
removeAll { it.permissions == "moderators" && !isModerator }
}
sectionListLiveData.postValue(validSectionList)
}
}
})
}
class Factory(private val bbsId: String) : ViewModelProvider.NewInstanceFactory() {
class Factory(private val bbsId: String, private val isModerator: Boolean) :
ViewModelProvider.NewInstanceFactory() {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return ChooseSectionViewModel(HaloApp.getInstance().application, bbsId) as T
return ChooseSectionViewModel(HaloApp.getInstance().application, bbsId, isModerator) as T
}
}
}

View File

@ -255,6 +255,7 @@ class QuestionEditActivity : BaseRichEditorActivity<QuestionEditViewModel>(),
this,
mViewModel.communityEntity?.id ?: "",
mViewModel.selectSection?.id ?: "",
mViewModel.isModerator,
"editorActivity"
)
}, delayTime)
@ -870,6 +871,7 @@ class QuestionEditActivity : BaseRichEditorActivity<QuestionEditViewModel>(),
mBinding.clearIv.performClick()
mViewModel.communityEntity?.id?.let {
mViewModel.getForumSections(it)
mViewModel.getModeratorsInfo(it)
}
}

View File

@ -194,6 +194,7 @@ class VideoPublishFragment : ToolbarFragment(), KeyboardHeightObserver {
requireActivity() as AppCompatActivity,
mViewModel.communityEntity?.id ?: "",
mViewModel.selectSection?.id ?: "",
mViewModel.isModerator,
tag ?: ""
)
}, delayTime)
@ -682,6 +683,7 @@ class VideoPublishFragment : ToolbarFragment(), KeyboardHeightObserver {
mBinding.clearIv.performClick()
mViewModel.communityEntity?.id?.let {
mViewModel.getForumSections(it)
mViewModel.getModeratorsInfo(it)
}
}

View File

@ -51,6 +51,7 @@ class VideoPublishViewModel(application: Application) : AndroidViewModel(applica
val processDialog = MediatorLiveData<WaitingDialogFragment.WaitingDialogData>()
val postLiveData = MediatorLiveData<Resource<ForumVideoEntity>>()
val sectionListLiveData = MutableLiveData<List<ForumDetailEntity.Section>>()
var isModerator = false
fun postVideoPosterAndContent(
isDraft: Boolean,
@ -254,4 +255,16 @@ class VideoPublishViewModel(application: Application) : AndroidViewModel(applica
}
})
}
@SuppressLint("CheckResult")
fun getModeratorsInfo(bbsId: String) {
mApi.getModeratorsInfo(bbsId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object : BiResponse<JsonObject>() {
override fun onSuccess(data: JsonObject) {
isModerator = data["is_moderators"].asBoolean
}
})
}
}