package com.sinata.xqmuse.ui.discovery
|
|
import android.Manifest
|
import android.content.Intent
|
import android.provider.MediaStore
|
import android.util.Log
|
import androidx.core.os.bundleOf
|
import androidx.recyclerview.widget.GridLayoutManager
|
import cn.sinata.xldutils.activity.ImagePagerActivity
|
import cn.sinata.xldutils.gone
|
import cn.sinata.xldutils.utils.SPUtils
|
import cn.sinata.xldutils.utils.myToast
|
import com.sinata.xqmuse.utils.picture.PictureSelectorHelper
|
import com.sinata.xqmuse.R
|
import com.sinata.xqmuse.dialog.TipDialog
|
import com.sinata.xqmuse.network.HttpManager
|
import com.sinata.xqmuse.network.request
|
import com.sinata.xqmuse.ui.TransparentStatusBarActivity
|
import com.sinata.xqmuse.ui.course.adapter.PhotoAdapter
|
import com.sinata.xqmuse.utils.Const
|
import com.sinata.xqmuse.utils.OSSUtil
|
import com.sinata.xqmuse.utils.event.EmptyEvent
|
import com.sinata.xqmuse.utils.extention.uploadWithCompress
|
import com.sinata.xqmuse.utils.interfaces.StringCallback
|
import com.sinata.xqmuse.utils.picture.FileUtils
|
import com.tbruyelle.rxpermissions2.RxPermissions
|
import kotlinx.android.synthetic.main.activity_publish.*
|
import org.greenrobot.eventbus.EventBus
|
import org.jetbrains.anko.startActivity
|
|
class PublishActivity : TransparentStatusBarActivity() {
|
override fun setContentView() = R.layout.activity_publish
|
|
private val isVideo by lazy {
|
intent.getBooleanExtra("isVideo",false)
|
}
|
|
private val imgList = arrayListOf<String>()
|
private val imgAdapter = PhotoAdapter(imgList,true)
|
|
override fun initClick() {
|
imgAdapter.setOnItemClickListener { view, position ->
|
if (imgList[position].isEmpty()){
|
takeMedia()
|
}else{
|
if (imgAdapter.video.isNotEmpty()){
|
startActivity<VideoPlayerActivity>("videoUrl" to imgAdapter.video)
|
}else{
|
//图片预览
|
startActivity<ImagePagerActivity>("url" to imgList.filter { it.isNotEmpty() },"position" to position)
|
}
|
}
|
}
|
|
tv_action.setOnClickListener {
|
val title = et_title.text.toString()
|
if (title.isEmpty()){
|
myToast("请填写标题")
|
return@setOnClickListener
|
}
|
val content = et_content.text.toString()
|
if (content.isEmpty()){
|
myToast("请填写内容")
|
return@setOnClickListener
|
}
|
tv_action.isEnabled = false
|
val imgs = imgList.filter { it.isNotEmpty() }.joinToString(",") { it }
|
HttpManager.addFind(title,content,if (isVideo) null else imgs,if (isVideo) imgs else null,if (isVideo) imgAdapter.video else null).request(this,success = {_,_->
|
myToast("发布成功")
|
EventBus.getDefault().post(EmptyEvent(Const.EventCode.REFRESH_DISCOVERY))
|
finish()
|
}){_,_->
|
tv_action.isEnabled = true
|
}
|
}
|
}
|
|
private fun takeMedia(){
|
val rxPermissions = RxPermissions(this)
|
if (rxPermissions.isGranted(Manifest.permission.WRITE_EXTERNAL_STORAGE)){
|
PictureSelectorHelper.pickMultipleMedia(
|
this,
|
if (isVideo) 1 else 10 - imgList.size, isVideo )
|
}else{
|
val fileGranted = rxPermissions.isGranted(Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
if (SPUtils.instance().getBoolean("FILE_REFUSE") && !fileGranted) {
|
myToast("缺少文件权限")
|
return
|
}
|
val tipDialog = TipDialog()
|
tipDialog.arguments = bundleOf("msg" to "为了访问手机相册选择图片上传,我们需要获取文件读写权限", "ok" to "去授权", "cancel" to "不需要")
|
tipDialog.setCallback(object : TipDialog.OnClickCallback {
|
override fun onOk() {
|
rxPermissions.request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
.subscribe {
|
if (it) {
|
PictureSelectorHelper.pickMultipleMedia(
|
this@PublishActivity,
|
if (isVideo) 1 else 10 - imgList.size, isVideo )
|
} else {
|
myToast("缺少文件权限")
|
SPUtils.instance().put("FILE_REFUSE", true).apply()
|
}
|
}
|
}
|
|
override fun onCancel() {
|
SPUtils.instance().put("FILE_REFUSE", true).apply()
|
}
|
})
|
tipDialog.show(supportFragmentManager,"permission")
|
}
|
}
|
|
override fun initView() {
|
if (isVideo){
|
tv_hint.gone()
|
tv_1.text = "视频:"
|
}
|
rv_photo.layoutManager = GridLayoutManager(this,3)
|
rv_photo.adapter = imgAdapter
|
imgList.add("")
|
imgAdapter.notifyDataSetChanged()
|
}
|
|
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
super.onActivityResult(requestCode, resultCode, data)
|
|
PictureSelectorHelper.onPickResult(
|
requestCode,
|
resultCode,
|
data,
|
object : StringCallback {
|
override fun onResult(rst: String) {
|
if (rst.contains("/")) {
|
showDialog(canCancel = false)
|
Thread {
|
val url = OSSUtil(this@PublishActivity).uploadSingle(rst)
|
if (url == "-1"){
|
runOnUiThread {
|
myToast("上传失败")
|
}
|
}else{
|
//视频上传成功之后再上传封面图
|
dismissDialog()
|
Thread {
|
val firstFrame = FileUtils.getFirstFrame(rst)
|
val cover = OSSUtil(this@PublishActivity).uploadSingle(firstFrame, FileUtils.getFileName(rst) + ".jpg")
|
runOnUiThread {
|
imgAdapter.video = url
|
Log.e(Const.Tag, "视频地址:${imgAdapter.video}")
|
imgList.clear()
|
if (cover!="-1"){
|
Log.e(Const.Tag, "封面地址:${cover}")
|
imgList.add(cover)
|
imgAdapter.notifyDataSetChanged()
|
}else
|
myToast("上传失败")
|
}
|
}.start()
|
}
|
}.start()
|
} else //报错
|
myToast(rst)
|
}
|
}) {
|
showDialog()
|
val list = arrayListOf<String>()
|
it.forEachIndexed { index, s ->
|
s.uploadWithCompress(this, object : StringCallback {
|
override fun onResult(rst: String) {
|
list.add(rst)
|
if (list.size == it.size) {
|
dismissDialog()
|
imgList.addAll(imgList.size - 1, list)
|
if (imgList.size == 10)
|
imgList.removeAt(9)
|
imgAdapter.notifyDataSetChanged()
|
}
|
}
|
})
|
}
|
}
|
}
|
}
|