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:
@ -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 -> {
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user