285 lines
11 KiB
Kotlin
285 lines
11 KiB
Kotlin
package org.libre.agosto.p2play
|
|
|
|
import android.app.Activity
|
|
import android.graphics.Bitmap
|
|
import android.graphics.BitmapFactory
|
|
import android.os.AsyncTask
|
|
import android.support.v7.app.AppCompatActivity
|
|
import android.os.Bundle
|
|
import android.os.Looper
|
|
import android.support.v4.content.ContextCompat
|
|
import android.support.v7.widget.LinearLayoutManager
|
|
import android.support.v7.widget.RecyclerView
|
|
import android.util.Log
|
|
import android.view.View
|
|
import android.webkit.WebChromeClient
|
|
import android.widget.FrameLayout
|
|
import com.squareup.picasso.Picasso
|
|
import kotlinx.android.synthetic.main.activity_reproductor.*
|
|
import org.libre.agosto.p2play.adapters.CommentariesAdapter
|
|
import org.libre.agosto.p2play.ajax.Actions
|
|
import org.libre.agosto.p2play.ajax.Comments
|
|
import org.libre.agosto.p2play.models.CommentaryModel
|
|
import org.libre.agosto.p2play.models.VideoModel
|
|
|
|
class ReproductorActivity : AppCompatActivity() {
|
|
lateinit var video:VideoModel
|
|
private val _actions: Actions = Actions()
|
|
private val client: Comments = Comments()
|
|
|
|
// Commentaries adapter values
|
|
private lateinit var recyclerView: RecyclerView
|
|
private lateinit var viewAdapter: RecyclerView.Adapter<*>
|
|
private lateinit var viewManager: RecyclerView.LayoutManager
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
setContentView(R.layout.activity_reproductor)
|
|
|
|
videoView.webChromeClient = WebClient()
|
|
videoView.settings.javaScriptEnabled = true
|
|
videoView.settings.allowContentAccess = true
|
|
videoView.settings.javaScriptCanOpenWindowsAutomatically = true
|
|
videoView.settings.allowFileAccess = true
|
|
videoView.settings.allowFileAccessFromFileURLs = true
|
|
videoView.settings.allowUniversalAccessFromFileURLs = true
|
|
videoView.settings.domStorageEnabled = true
|
|
|
|
try {
|
|
this.video = this.intent.extras.getSerializable("video") as VideoModel
|
|
tittleVideoTxt.text = this.video.name
|
|
viewsTxt.text = this.video.views.toString() + ' ' + getString(R.string.view_text)
|
|
userTxt.text = this.video.username
|
|
descriptionVideoTxt.text = this.video.description.toString()
|
|
hostTxt.text = this.video.userHost.toString()
|
|
|
|
// Check if user had profile image
|
|
if(this.video.userImageUrl!="")
|
|
Picasso.get().load("https://"+ManagerSingleton.url+this.video.userImageUrl).into(userImg)
|
|
// Load the video
|
|
videoView.loadUrl("https://"+ManagerSingleton.url+this.video.embedUrl)
|
|
|
|
|
|
}
|
|
catch (err:Exception){
|
|
err.printStackTrace()
|
|
Log.d("Error", err?.message)
|
|
}
|
|
|
|
viewManager = LinearLayoutManager(this)
|
|
this.setDataComments(arrayListOf())
|
|
|
|
this.getComments()
|
|
|
|
subscribeBtn.setOnClickListener { subscribe() }
|
|
likeLayout.setOnClickListener { rate("like") }
|
|
dislikeLayout.setOnClickListener { rate("dislike") }
|
|
commentaryBtn.setOnClickListener { makeComment() }
|
|
}
|
|
|
|
private fun subscribe(){
|
|
val account = this.video.nameChannel+"@"+this.video.userHost
|
|
AsyncTask.execute {
|
|
if (Looper.myLooper() == null)
|
|
Looper.prepare()
|
|
val res = this._actions.subscribe(ManagerSingleton.token.token, account)
|
|
if (res == 1) {
|
|
runOnUiThread {
|
|
ManagerSingleton.Toast(getString(R.string.subscribeMsg), this)
|
|
this.changeSubscribeBtn(true)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private fun unSubscribe(){
|
|
val account = this.video.nameChannel+"@"+this.video.userHost
|
|
AsyncTask.execute {
|
|
if (Looper.myLooper() == null)
|
|
Looper.prepare()
|
|
val res = this._actions.unSubscribe(ManagerSingleton.token.token, account)
|
|
if (res == 1) {
|
|
runOnUiThread {
|
|
ManagerSingleton.Toast(getString(R.string.unSubscribeMsg), this)
|
|
this.changeSubscribeBtn(false)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private fun rate(rate: String){
|
|
AsyncTask.execute {
|
|
if (Looper.myLooper() == null)
|
|
Looper.prepare()
|
|
val res = this._actions.rate(ManagerSingleton.token.token, this.video.id, rate)
|
|
if (res == 1) {
|
|
runOnUiThread {
|
|
ManagerSingleton.Toast(getString(R.string.rateMsg), this)
|
|
if(rate=="like"){
|
|
textViewLike.setTextColor(ContextCompat.getColor(this, R.color.colorLike))
|
|
textViewDislike.setTextColor(ContextCompat.getColor(this, R.color.primary_dark_material_light))
|
|
}
|
|
else if(rate=="dislike"){
|
|
textViewDislike.setTextColor(ContextCompat.getColor(this, R.color.colorDislike))
|
|
textViewLike.setTextColor(ContextCompat.getColor(this, R.color.primary_dark_material_light))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private fun getRate(){
|
|
AsyncTask.execute {
|
|
if (Looper.myLooper() == null)
|
|
Looper.prepare()
|
|
val rate = this._actions.getRate(ManagerSingleton.token.token, this.video.id)
|
|
runOnUiThread {
|
|
when (rate){
|
|
"like" -> {
|
|
textViewLike.setTextColor(ContextCompat.getColor(this, R.color.colorLike))
|
|
textViewDislike.setTextColor(ContextCompat.getColor(this, R.color.primary_dark_material_light))
|
|
}
|
|
"dislike" -> {
|
|
textViewDislike.setTextColor(ContextCompat.getColor(this, R.color.colorDislike))
|
|
textViewLike.setTextColor(ContextCompat.getColor(this, R.color.primary_dark_material_light))
|
|
}
|
|
else -> {
|
|
textViewLike.setTextColor(ContextCompat.getColor(this, R.color.primary_dark_material_light))
|
|
textViewDislike.setTextColor(ContextCompat.getColor(this, R.color.primary_dark_material_light))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private fun getSubscription(){
|
|
val account = this.video.nameChannel+"@"+this.video.userHost
|
|
AsyncTask.execute {
|
|
if (Looper.myLooper() == null)
|
|
Looper.prepare()
|
|
val isSubscribed = this._actions.getSubscription(ManagerSingleton.token.token, account)
|
|
runOnUiThread {
|
|
this.changeSubscribeBtn(isSubscribed)
|
|
}
|
|
}
|
|
}
|
|
|
|
private fun changeSubscribeBtn(subscribed: Boolean){
|
|
if(subscribed){
|
|
subscribeBtn.text = getText(R.string.unSubscribeBtn)
|
|
subscribeBtn.setOnClickListener { this.unSubscribe() }
|
|
}
|
|
else{
|
|
subscribeBtn.text = getText(R.string.subscribeBtn)
|
|
subscribeBtn.setOnClickListener { this.subscribe() }
|
|
}
|
|
}
|
|
|
|
private fun setDataComments(data: ArrayList<CommentaryModel>) {
|
|
// Set data for RecyclerView
|
|
viewAdapter = CommentariesAdapter(data)
|
|
|
|
recyclerView = findViewById<RecyclerView>(R.id.listCommentaries).apply {
|
|
// use this setting to improve performance if you know that changes
|
|
// in content do not change the layout size of the RecyclerView
|
|
setHasFixedSize(true)
|
|
|
|
// use a linear layout manager
|
|
layoutManager = viewManager
|
|
|
|
// specify an viewAdapter (see also next example)
|
|
adapter = viewAdapter
|
|
}
|
|
}
|
|
|
|
private fun getComments() {
|
|
AsyncTask.execute {
|
|
val data = this.client.getCommentaries(this.video.id)
|
|
runOnUiThread {
|
|
this.setDataComments(data)
|
|
}
|
|
}
|
|
}
|
|
|
|
private fun makeComment() {
|
|
if(commentaryText.text.toString() == ""){
|
|
ManagerSingleton.Toast(getString(R.string.emptyCommentaryMsg), this)
|
|
return
|
|
}
|
|
val text = commentaryText.text.toString()
|
|
AsyncTask.execute {
|
|
val res = this.client.makeCommentary(ManagerSingleton.token.token, this.video.id, text)
|
|
runOnUiThread {
|
|
if (res) {
|
|
ManagerSingleton.Toast(getString(R.string.makedCommentaryMsg), this)
|
|
commentaryText.text.clear()
|
|
this.getComments()
|
|
}
|
|
else {
|
|
ManagerSingleton.Toast(getString(R.string.errorCommentaryMsg), this)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
override fun onResume() {
|
|
super.onResume()
|
|
if(ManagerSingleton.user.status == 1) {
|
|
this.getRate()
|
|
this.getSubscription()
|
|
actionsLayout.visibility = View.VISIBLE
|
|
subscribeBtn.visibility = View.VISIBLE
|
|
commentaryLayout.visibility = View.VISIBLE
|
|
if(ManagerSingleton.user.avatar != ""){
|
|
Picasso.get().load("https://"+ManagerSingleton.url+ManagerSingleton.user.avatar).into(userImgCom)
|
|
}
|
|
}
|
|
}
|
|
|
|
internal inner class WebClient: WebChromeClient() {
|
|
private var mCustomView: View? = null
|
|
private var mCustomViewCallback: WebChromeClient.CustomViewCallback? = null
|
|
private var mOriginalOrientation: Int = 0
|
|
private var mOriginalSystemUiVisibility: Int = 0
|
|
|
|
override fun getDefaultVideoPoster(): Bitmap? {
|
|
return if (mCustomView == null) {
|
|
null
|
|
} else BitmapFactory.decodeResource(this@ReproductorActivity.resources, 2130837573)
|
|
}
|
|
|
|
override fun onHideCustomView() {
|
|
try {
|
|
(this@ReproductorActivity.window.decorView as FrameLayout).removeView(this.mCustomView)
|
|
this.mCustomView = null
|
|
this@ReproductorActivity.window.decorView.systemUiVisibility = this.mOriginalSystemUiVisibility
|
|
this@ReproductorActivity.requestedOrientation = this.mOriginalOrientation
|
|
this.mCustomViewCallback?.onCustomViewHidden()
|
|
this.mCustomViewCallback = null
|
|
}
|
|
catch (err: Exception){
|
|
err.printStackTrace()
|
|
}
|
|
}
|
|
|
|
override fun onShowCustomView(paramView: View, paramCustomViewCallback: WebChromeClient.CustomViewCallback) {
|
|
if (this.mCustomView != null) {
|
|
this.onHideCustomView()
|
|
return
|
|
}
|
|
try {
|
|
this.mCustomView = paramView
|
|
this.mOriginalSystemUiVisibility = this@ReproductorActivity.window.decorView.systemUiVisibility
|
|
this.mOriginalOrientation = this@ReproductorActivity.requestedOrientation
|
|
this.mCustomViewCallback = paramCustomViewCallback
|
|
(this@ReproductorActivity.window.decorView as FrameLayout).addView(this.mCustomView, FrameLayout.LayoutParams(-1, -1))
|
|
this@ReproductorActivity.window.decorView.systemUiVisibility = 3846
|
|
}
|
|
catch (err: Exception){
|
|
err.printStackTrace()
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|