Report and share videos works

This commit is contained in:
ivan agosto 2019-02-24 20:53:40 -06:00
parent 398265c6ed
commit abcf2f0e6e
9 changed files with 236 additions and 40 deletions

View File

@ -2,6 +2,7 @@ package org.libre.agosto.p2play
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.Activity import android.app.Activity
import android.content.DialogInterface
import android.content.Intent import android.content.Intent
import android.content.pm.ActivityInfo import android.content.pm.ActivityInfo
import android.graphics.Bitmap import android.graphics.Bitmap
@ -11,12 +12,14 @@ import android.support.v7.app.AppCompatActivity
import android.os.Bundle import android.os.Bundle
import android.os.Looper import android.os.Looper
import android.support.v4.content.ContextCompat import android.support.v4.content.ContextCompat
import android.support.v7.app.AlertDialog
import android.support.v7.widget.LinearLayoutManager import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView import android.support.v7.widget.RecyclerView
import android.util.Log import android.util.Log
import android.view.View import android.view.View
import android.view.WindowManager import android.view.WindowManager
import android.webkit.WebChromeClient import android.webkit.WebChromeClient
import android.widget.EditText
import android.widget.FrameLayout import android.widget.FrameLayout
import com.squareup.picasso.Picasso import com.squareup.picasso.Picasso
import kotlinx.android.synthetic.main.activity_reproductor.* import kotlinx.android.synthetic.main.activity_reproductor.*
@ -57,7 +60,7 @@ class ReproductorActivity : AppCompatActivity() {
videoView.settings.domStorageEnabled = true videoView.settings.domStorageEnabled = true
try { try {
this.video = this.intent.extras.getSerializable("video") as VideoModel this.video = this.intent.extras.getSerializable("video") as VideoModel
tittleVideoTxt.text = this.video.name tittleVideoTxt.text = this.video.name
viewsTxt.text = "${this.video.views} ${getString(R.string.view_text)}" viewsTxt.text = "${this.video.views} ${getString(R.string.view_text)}"
userTxt.text = this.video.username userTxt.text = this.video.username
@ -69,13 +72,12 @@ class ReproductorActivity : AppCompatActivity() {
hostTxt.text = this.video.userHost hostTxt.text = this.video.userHost
// Check if user had profile image // Check if user had profile image
if(this.video.userImageUrl!="") if (this.video.userImageUrl != "")
Picasso.get().load("https://"+ManagerSingleton.url+this.video.userImageUrl).into(userImg) Picasso.get().load("https://" + ManagerSingleton.url + this.video.userImageUrl).into(userImg)
// Load the video // Load the video
videoView.loadUrl("https://"+ManagerSingleton.url+this.video.embedUrl) videoView.loadUrl("https://" + ManagerSingleton.url + this.video.embedUrl)
} } catch (err: Exception) {
catch (err:Exception){
err.printStackTrace() err.printStackTrace()
} }
@ -89,6 +91,8 @@ class ReproductorActivity : AppCompatActivity() {
dislikeLayout.setOnClickListener { rate("dislike") } dislikeLayout.setOnClickListener { rate("dislike") }
commentaryBtn.setOnClickListener { makeComment() } commentaryBtn.setOnClickListener { makeComment() }
showMoreBtn.setOnClickListener { getDescription() } showMoreBtn.setOnClickListener { getDescription() }
shareLayout.setOnClickListener { shareIntent() }
reportLayout.setOnClickListener { reportIntent() }
userImg.setOnClickListener { userImg.setOnClickListener {
val intent = Intent(this, ChannelActivity::class.java) val intent = Intent(this, ChannelActivity::class.java)
@ -97,7 +101,7 @@ class ReproductorActivity : AppCompatActivity() {
} }
} }
private fun subscribe(){ private fun subscribe() {
AsyncTask.execute { AsyncTask.execute {
if (Looper.myLooper() == null) if (Looper.myLooper() == null)
Looper.prepare() Looper.prepare()
@ -111,7 +115,7 @@ class ReproductorActivity : AppCompatActivity() {
} }
} }
private fun unSubscribe(){ private fun unSubscribe() {
AsyncTask.execute { AsyncTask.execute {
if (Looper.myLooper() == null) if (Looper.myLooper() == null)
Looper.prepare() Looper.prepare()
@ -125,7 +129,7 @@ class ReproductorActivity : AppCompatActivity() {
} }
} }
private fun rate(rate: String){ private fun rate(rate: String) {
AsyncTask.execute { AsyncTask.execute {
if (Looper.myLooper() == null) if (Looper.myLooper() == null)
Looper.prepare() Looper.prepare()
@ -133,11 +137,10 @@ class ReproductorActivity : AppCompatActivity() {
if (res == 1) { if (res == 1) {
runOnUiThread { runOnUiThread {
ManagerSingleton.Toast(getString(R.string.rateMsg), this) ManagerSingleton.Toast(getString(R.string.rateMsg), this)
if(rate=="like"){ if (rate == "like") {
textViewLike.setTextColor(ContextCompat.getColor(this, R.color.colorLike)) textViewLike.setTextColor(ContextCompat.getColor(this, R.color.colorLike))
textViewDislike.setTextColor(ContextCompat.getColor(this, R.color.primary_dark_material_light)) textViewDislike.setTextColor(ContextCompat.getColor(this, R.color.primary_dark_material_light))
} } else if (rate == "dislike") {
else if(rate=="dislike"){
textViewDislike.setTextColor(ContextCompat.getColor(this, R.color.colorDislike)) textViewDislike.setTextColor(ContextCompat.getColor(this, R.color.colorDislike))
textViewLike.setTextColor(ContextCompat.getColor(this, R.color.primary_dark_material_light)) textViewLike.setTextColor(ContextCompat.getColor(this, R.color.primary_dark_material_light))
} }
@ -146,13 +149,13 @@ class ReproductorActivity : AppCompatActivity() {
} }
} }
private fun getRate(){ private fun getRate() {
AsyncTask.execute { AsyncTask.execute {
if (Looper.myLooper() == null) if (Looper.myLooper() == null)
Looper.prepare() Looper.prepare()
val rate = this._actions.getRate(ManagerSingleton.token.token, this.video.id) val rate = this._actions.getRate(ManagerSingleton.token.token, this.video.id)
runOnUiThread { runOnUiThread {
when (rate){ when (rate) {
"like" -> { "like" -> {
textViewLike.setTextColor(ContextCompat.getColor(this, R.color.colorLike)) textViewLike.setTextColor(ContextCompat.getColor(this, R.color.colorLike))
textViewDislike.setTextColor(ContextCompat.getColor(this, R.color.primary_dark_material_light)) textViewDislike.setTextColor(ContextCompat.getColor(this, R.color.primary_dark_material_light))
@ -170,8 +173,8 @@ class ReproductorActivity : AppCompatActivity() {
} }
} }
private fun getSubscription(){ private fun getSubscription() {
val account = this.video.nameChannel+"@"+this.video.userHost val account = this.video.nameChannel + "@" + this.video.userHost
AsyncTask.execute { AsyncTask.execute {
if (Looper.myLooper() == null) if (Looper.myLooper() == null)
Looper.prepare() Looper.prepare()
@ -182,12 +185,11 @@ class ReproductorActivity : AppCompatActivity() {
} }
} }
private fun changeSubscribeBtn(subscribed: Boolean){ private fun changeSubscribeBtn(subscribed: Boolean) {
if(subscribed){ if (subscribed) {
subscribeBtn.text = getText(R.string.unSubscribeBtn) subscribeBtn.text = getText(R.string.unSubscribeBtn)
subscribeBtn.setOnClickListener { this.unSubscribe() } subscribeBtn.setOnClickListener { this.unSubscribe() }
} } else {
else{
subscribeBtn.text = getText(R.string.subscribeBtn) subscribeBtn.text = getText(R.string.subscribeBtn)
subscribeBtn.setOnClickListener { this.subscribe() } subscribeBtn.setOnClickListener { this.subscribe() }
} }
@ -220,7 +222,7 @@ class ReproductorActivity : AppCompatActivity() {
} }
private fun makeComment() { private fun makeComment() {
if(commentaryText.text.toString() == ""){ if (commentaryText.text.toString() == "") {
ManagerSingleton.Toast(getString(R.string.emptyCommentaryMsg), this) ManagerSingleton.Toast(getString(R.string.emptyCommentaryMsg), this)
return return
} }
@ -232,8 +234,7 @@ class ReproductorActivity : AppCompatActivity() {
ManagerSingleton.Toast(getString(R.string.makedCommentaryMsg), this) ManagerSingleton.Toast(getString(R.string.makedCommentaryMsg), this)
commentaryText.text.clear() commentaryText.text.clear()
this.getComments() this.getComments()
} } else {
else {
ManagerSingleton.Toast(getString(R.string.errorCommentaryMsg), this) ManagerSingleton.Toast(getString(R.string.errorCommentaryMsg), this)
} }
} }
@ -242,19 +243,19 @@ class ReproductorActivity : AppCompatActivity() {
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
if(ManagerSingleton.user.status == 1) { if (ManagerSingleton.user.status == 1) {
this.getRate() this.getRate()
this.getSubscription() this.getSubscription()
actionsLayout.visibility = View.VISIBLE actionsLayout.visibility = View.VISIBLE
subscribeBtn.visibility = View.VISIBLE subscribeBtn.visibility = View.VISIBLE
commentaryLayout.visibility = View.VISIBLE commentaryLayout.visibility = View.VISIBLE
if(ManagerSingleton.user.avatar != ""){ if (ManagerSingleton.user.avatar != "") {
Picasso.get().load("https://"+ManagerSingleton.url+ManagerSingleton.user.avatar).into(userImgCom) Picasso.get().load("https://" + ManagerSingleton.url + ManagerSingleton.user.avatar).into(userImgCom)
} }
} }
} }
fun getDescription(){ fun getDescription() {
AsyncTask.execute { AsyncTask.execute {
val fullDescription = this.videos.fullDescription(this.video.id) val fullDescription = this.videos.fullDescription(this.video.id)
runOnUiThread { runOnUiThread {
@ -264,6 +265,52 @@ class ReproductorActivity : AppCompatActivity() {
} }
} }
private fun shareIntent() {
val sendIntent: Intent = Intent().apply {
action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_TEXT, "${video.name} ${video.getVideoUrl()}")
type = "text/plain"
}
startActivity(Intent.createChooser(sendIntent, resources.getText(R.string.shareBtn)))
}
private fun reportIntent() {
val builder = AlertDialog.Builder(this)
// Get the layout inflater
val dialog = layoutInflater.inflate(R.layout.report_dialog, null)
val inputReason = dialog.findViewById<EditText>(R.id.reportText)
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog layout
builder.setView(dialog)
// Add action buttons
.setPositiveButton(R.string.reportBtn) { dialog, id ->
val reason = inputReason.text.toString()
reportVideo(reason)
}
.setNegativeButton("Cancel") { dialog, id ->
dialog.cancel()
}
val alertDialog = builder.create()
alertDialog.show()
}
private fun reportVideo(reason: String){
AsyncTask.execute {
val res = _actions.reportVideo(video.id, reason, ManagerSingleton.token.token)
runOnUiThread {
if(res) {
ManagerSingleton.Toast(getText(R.string.reportDialogMsg).toString(), this)
}
else {
ManagerSingleton.Toast(getText(R.string.errorMsg).toString(), this)
}
}
}
}
internal inner class WebClient: WebChromeClient() { internal inner class WebClient: WebChromeClient() {
private var mCustomView: View? = null private var mCustomView: View? = null
private var mCustomViewCallback: WebChromeClient.CustomViewCallback? = null private var mCustomViewCallback: WebChromeClient.CustomViewCallback? = null

View File

@ -127,4 +127,21 @@ class Actions: Client() {
return rating return rating
} }
fun reportVideo(videoId: Int, reason: String, token: String): Boolean {
val con = this._newCon("videos/$videoId/abuse", "POST", token)
val params = "reason=$reason"
con.outputStream.write(params.toByteArray())
var response = false
try {
if(con.responseCode == 200){
response = true
}
} catch (err: Exception) {
err.printStackTrace()
response = false
}
return response
}
} }

View File

@ -6,6 +6,7 @@ import java.io.Serializable
class VideoModel( class VideoModel(
var id: Int = 0, var id: Int = 0,
var uuid: String = "",
var name: String = "", var name: String = "",
var description: String = "", var description: String = "",
var thumbUrl: String = "", var thumbUrl: String = "",
@ -22,12 +23,17 @@ class VideoModel(
return "$nameChannel@$userHost" return "$nameChannel@$userHost"
} }
fun getVideoUrl(): String {
return "https://$userHost/videos/watch/$uuid"
}
fun parseVideo(data: JsonReader){ fun parseVideo(data: JsonReader){
data.beginObject() data.beginObject()
while (data.hasNext()){ while (data.hasNext()){
val key = data.nextName() val key = data.nextName()
when (key.toString()) { when (key.toString()) {
"id"-> this.id = data.nextInt() "id"-> this.id = data.nextInt()
"uuid" -> this.uuid = data.nextString()
"name"->{ "name"->{
this.name= data.nextString() this.name= data.nextString()
} }

View File

@ -0,0 +1,25 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M12.8716,3.5097L12,1.9603L11.1284,3.5097L2.1284,19.5097L1.2902,21L3,21L21,21L22.7098,21L21.8716,19.5097L12.8716,3.5097Z"
android:strokeLineJoin="round"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="#000000"
android:fillType="evenOdd"/>
<path
android:pathData="M12,17.75C12.6904,17.75 13.25,17.1904 13.25,16.5C13.25,15.8096 12.6904,15.25 12,15.25C11.3096,15.25 10.75,15.8096 10.75,16.5C10.75,17.1904 11.3096,17.75 12,17.75Z"
android:strokeWidth="1"
android:fillColor="#000000"
android:fillType="evenOdd"
android:strokeColor="#00000000"/>
<path
android:pathData="M12,9L12,9A1,1 0,0 1,13 10L13,13A1,1 0,0 1,12 14L12,14A1,1 0,0 1,11 13L11,10A1,1 0,0 1,12 9z"
android:strokeWidth="1"
android:fillColor="#000000"
android:fillType="evenOdd"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,29 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M20,15L20,18.0026C20,19.1057 19.1074,20 18.0049,20L5.9951,20C4.8932,20 4,19.1074 4,18.0049L4,5.9951C4,4.8932 4.8959,4 5.9974,4L9,4"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="#000000"
android:fillType="evenOdd"
android:strokeLineCap="round"/>
<path
android:pathData="M13,4l7.0208,0l0,7.0191"
android:strokeLineJoin="round"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="#000000"
android:fillType="evenOdd"
android:strokeLineCap="round"/>
<path
android:pathData="M19,5L12,12"
android:strokeLineJoin="round"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="#000000"
android:fillType="evenOdd"
android:strokeLineCap="round"/>
</vector>

View File

@ -124,21 +124,61 @@
android:textAlignment="center" /> android:textAlignment="center" />
</LinearLayout> </LinearLayout>
<Button <LinearLayout
android:id="@+id/button4" android:id="@+id/reportLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
android:text="@string/shareBtn" android:orientation="vertical"
android:visibility="gone" /> android:visibility="visible">
<Button <ImageView
android:id="@+id/button3" android:id="@+id/imageViewAlert"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:adjustViewBounds="false"
android:contentDescription="@string/dislikeBtn"
android:cropToPadding="false"
android:visibility="visible"
app:srcCompat="@drawable/ic_alert" />
<TextView
android:id="@+id/textViewAlert"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="@string/reportBtn"
android:textAlignment="center" />
</LinearLayout>
<LinearLayout
android:id="@+id/shareLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
android:text="@string/reportBtn" android:orientation="vertical"
android:visibility="gone" /> android:visibility="visible">
<ImageView
android:id="@+id/imageViewShare"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:adjustViewBounds="false"
android:contentDescription="@string/dislikeBtn"
android:cropToPadding="false"
android:visibility="visible"
app:srcCompat="@drawable/ic_share" />
<TextView
android:id="@+id/textViewShare"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="@string/shareBtn"
android:textAlignment="center" />
</LinearLayout>
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout_root"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="10dp" >
<TextView
android:id="@+id/reportTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/reportDialog"
android:textAppearance="?android:attr/textAppearanceLarge" />
<EditText
android:id="@+id/reportText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textMultiLine">
<requestFocus />
</EditText>
</LinearLayout>

View File

@ -94,6 +94,10 @@
<string name="showMore">Mostrar mas</string> <string name="showMore">Mostrar mas</string>
<string name="nav_trending">Tendencias</string> <string name="nav_trending">Tendencias</string>
<string name="title_trending">Tendencias</string> <string name="title_trending">Tendencias</string>
<string name="followersIndicator">Seguidores:</string>
<string name="hostIndicator">Host:</string>
<string name="reportDialog">Razon para reportar:</string>
<string name="reportDialogMsg">Has reportado el video</string>
<!-- End Settings strings --> <!-- End Settings strings -->
</resources> </resources>

View File

@ -6,7 +6,7 @@
<string name="navigation_drawer_close" translatable="false">Close navigation drawer</string> <string name="navigation_drawer_close" translatable="false">Close navigation drawer</string>
<string name="nav_header_desc" translatable="false">Navigation header</string> <string name="nav_header_desc" translatable="false">Navigation header</string>
<string name="comming">Coming soon!</string> <string name="comming">Coming soon!</string>
<string name="charging">Loading...</string> <string name="charging">Loading</string>
<!-- End Global string --> <!-- End Global string -->
@ -111,6 +111,8 @@
<string name="followersIndicator">Followers:</string> <string name="followersIndicator">Followers:</string>
<string name="hostIndicator">Host:</string> <string name="hostIndicator">Host:</string>
<!-- End Channel strings --> <!-- End Channel strings -->
<!-- Start Prompt string -->
<string name="reportDialog">Reason for report video:</string>
<string name="reportDialogMsg">You are reported the video</string>
<!-- End Prompt strings -->
</resources> </resources>