Merge branch 'development' into 'master'

P2play 0.2

See merge request agosto182/p2play!3
This commit is contained in:
Ivan Agosto 2019-02-01 14:47:17 +00:00
commit a626bc85bb
27 changed files with 752 additions and 338 deletions

6
.gitignore vendored
View File

@ -32,3 +32,9 @@ proguard/
captures/
\.idea/
# iml Files
*.iml
app/app.iml
app/release/

View File

@ -20,14 +20,15 @@ Comming soon!
- Subscribe to accounts
- Show your subscripcion videos
- Rate videos
- Show and make commentaries
- Splash screen
## What to do? (in next version)
- Search videos
- Show and make commentaries
- Share videos
- View Peertube profiles
- Splash screen
- Peertube profiles
- Infinite scroll
## Demostrations
Demostration P2Play Beta 0.1: [https://peertube.video/videos/watch/2eb7b953-0b1b-4019-9300-817539f5f4e8](https://peertube.video/videos/watch/2eb7b953-0b1b-4019-9300-817539f5f4e8)

View File

@ -1,199 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id=":app" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="android-gradle" name="Android-Gradle">
<configuration>
<option name="GRADLE_PROJECT_PATH" value=":app" />
</configuration>
</facet>
<facet type="android" name="Android">
<configuration>
<option name="SELECTED_BUILD_VARIANT" value="debug" />
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
<afterSyncTasks>
<task>generateDebugSources</task>
</afterSyncTasks>
<option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" />
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
</configuration>
</facet>
<facet type="kotlin-language" name="Kotlin">
<configuration version="3" platform="JVM 1.8" useProjectSettings="false">
<compilerSettings />
<compilerArguments>
<option name="destination" value="$MODULE_DIR$/build/tmp/kotlin-classes/debug" />
<option name="noStdlib" value="true" />
<option name="noReflect" value="true" />
<option name="moduleName" value="app_debug" />
<option name="jvmTarget" value="1.8" />
<option name="addCompilerBuiltIns" value="true" />
<option name="loadBuiltInsFromDependencies" value="true" />
<option name="languageVersion" value="1.2" />
<option name="apiVersion" value="1.2" />
<option name="pluginOptions">
<array>
<option value="plugin:org.jetbrains.kotlin.android:experimental=false" />
<option value="plugin:org.jetbrains.kotlin.android:enabled=true" />
<option value="plugin:org.jetbrains.kotlin.android:defaultCacheImplementation=hashMap" />
</array>
</option>
<option name="pluginClasspaths">
<array>
<option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-android-extensions/1.2.51/1755c607e5fabf4ba949ef626c73fc7421d35123/kotlin-android-extensions-1.2.51.jar" />
</array>
</option>
</compilerArguments>
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_6">
<output url="file://$MODULE_DIR$/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes" />
<output-test url="file://$MODULE_DIR$/build/intermediates/javac/debugUnitTest/compileDebugUnitTestJavaWithJavac/classes" />
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/not_namespaced_r_class_sources/debug/processDebugResources/r" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/not_namespaced_r_class_sources/debugAndroidTest/processDebugAndroidTestResources/r" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/test/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotation_processor_list" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/apk_list" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/build-info" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/check-libraries" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/check-manifest" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/checkDebugClasspath" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/compatible_screen_manifest" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-runtime-classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-verifier" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-apk" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-resources" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant_run_merged_manifests" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant_run_split_apk_resources" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javac" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint_jar" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifest-checker" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_manifests" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/prebuild" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/processed_res" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/reload-dex" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/resources" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shader_assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/split-apk" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/split_list" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
<excludeFolder url="file://$MODULE_DIR$/build/kotlin" />
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
</content>
<orderEntry type="jdk" jdkName="Android API 27 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Gradle: com.android.support:transition-27.1.0" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:runner-1.0.2" level="project" />
<orderEntry type="library" name="Gradle: android.arch.lifecycle:common:1.1.0@jar" level="project" />
<orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.51@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support:support-annotations:27.1.1@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:animated-vector-drawable-27.1.0" level="project" />
<orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.2.51@jar" level="project" />
<orderEntry type="library" name="Gradle: android.arch.lifecycle:viewmodel-1.1.0" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-v4-27.1.0" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-compat-27.1.0" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:recyclerview-v7-27.1.0" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.squareup:javawriter:2.1.1@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-media-compat-27.1.0" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-vector-drawable-27.1.0" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-annotations:27.1.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support.constraint:constraint-layout-1.1.2" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-core-utils-27.1.0" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-core-ui-27.1.0" level="project" />
<orderEntry type="library" name="Gradle: org.jetbrains:annotations:13.0@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.google.code.findbugs:jsr305:2.0.1@jar" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.okio:okio:1.14.0@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-core-3.0.2" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: javax.inject:javax.inject:1@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-fragment-27.1.0" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: junit:junit:4.12@jar" level="project" />
<orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.2.51@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:design-27.1.0" level="project" />
<orderEntry type="library" name="Gradle: android.arch.core:runtime-1.1.0" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-core:1.3@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:monitor-1.0.2" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:appcompat-v7-27.1.0" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-idling-resource-3.0.2" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.okhttp3:okhttp:3.10.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support.constraint:constraint-layout-solver:1.1.2@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:exifinterface-27.1.0" level="project" />
<orderEntry type="library" name="Gradle: android.arch.lifecycle:livedata-core-1.1.0" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-library:1.3@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-integration:1.3@jar" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.picasso:picasso-2.71828" level="project" />
<orderEntry type="library" name="Gradle: android.arch.core:common:1.1.0@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: net.sf.kxml:kxml2:2.3.0@jar" level="project" />
<orderEntry type="library" name="Gradle: android.arch.lifecycle:runtime-1.1.0" level="project" />
</component>
</module>

View File

@ -7,11 +7,11 @@ apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 27
defaultConfig {
applicationId "org.libre.agosto.p2play"
applicationId "mx.agosto182.p2play"
minSdkVersion 21
targetSdkVersion 27
versionCode 2
versionName "0.1.5"
versionCode 3
versionName "0.2"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
@ -25,6 +25,10 @@ android {
sourceCompatibility JavaVersion.VERSION_1_6
targetCompatibility JavaVersion.VERSION_1_6
}
lintOptions {
checkReleaseBuilds false
abortOnError false
}
}
dependencies {

View File

@ -7,29 +7,34 @@
<application
android:allowBackup="true"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_p2play"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_p2play"
android:supportsRtl="true"
android:theme="@style/P2playTheme"
android:hardwareAccelerated="true">
<activity android:name=".HostActivity">
android:theme="@style/P2playTheme">
<activity
android:name=".SplashActivity"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".HostActivity" />
<activity
android:name=".MainActivity"
android:theme="@style/P2playTheme.NoActionBar" />
<activity android:name=".ReproductorActivity" />
<activity
android:name=".ReproductorActivity"
android:configChanges="orientation|screenSize"/>
<activity android:name=".LoginActivity" />
<activity android:name=".RegisterActivity" />
<activity android:name=".AboutActivity" />
<activity
android:name=".SettingsActivity"
android:label="@string/title_activity_settings"></activity>
android:label="@string/title_activity_settings" />
</application>
</manifest>

View File

@ -12,5 +12,7 @@ class AboutActivity : AppCompatActivity() {
setContentView(R.layout.activity_about)
aboutUrl.text = "https://"+ManagerSingleton.url+"/about/instance"
aboutLabel.text = aboutLabel.text.toString() + " " + this.packageManager.getPackageInfo(this.packageName, 0).versionName
}
}

View File

@ -61,12 +61,14 @@ class Database(context:Context): SQLiteOpenHelper(context,"p2play",null,1) {
try {
var cursor= db.rawQuery("SELECT * FROM tokens WHERE status=1 ORDER BY id DESC LIMIT 1",null)
cursor.moveToFirst()
token.token = cursor.getString(cursor.getColumnIndex("token")).toString()
token.refresh_token = cursor.getString(cursor.getColumnIndex("refresh_token")).toString()
token.status = cursor.getString(cursor.getColumnIndex("status")).toInt()
if(cursor.count != 0){
cursor.moveToFirst()
token.token = cursor.getString(cursor.getColumnIndex("token")).toString()
token.refresh_token = cursor.getString(cursor.getColumnIndex("refresh_token")).toString()
token.status = cursor.getString(cursor.getColumnIndex("status")).toInt()
}
cursor.close()
return token
@ -85,15 +87,18 @@ class Database(context:Context): SQLiteOpenHelper(context,"p2play",null,1) {
try {
var cursor= db.rawQuery("SELECT * FROM users WHERE status=1 ORDER BY id DESC LIMIT 1",null)
cursor.moveToFirst()
user.uuid = cursor.getString(cursor.getColumnIndex("uuid")).toInt()
user.username = cursor.getString(cursor.getColumnIndex("username")).toString()
user.email = cursor.getString(cursor.getColumnIndex("email")).toString()
user.nsfw = cursor.getString(cursor.getColumnIndex("nsfw")).toBoolean()
user.followers = cursor.getString(cursor.getColumnIndex("followers")).toInt()
user.avatar = cursor.getString(cursor.getColumnIndex("avatar")).toString()
user.status = cursor.getString(cursor.getColumnIndex("status")).toInt()
if(cursor.count != 0){
cursor.moveToFirst()
user.uuid = cursor.getString(cursor.getColumnIndex("uuid")).toInt()
user.username = cursor.getString(cursor.getColumnIndex("username")).toString()
user.email = cursor.getString(cursor.getColumnIndex("email")).toString()
user.nsfw = cursor.getString(cursor.getColumnIndex("nsfw")).toBoolean()
user.followers = cursor.getString(cursor.getColumnIndex("followers")).toInt()
user.avatar = cursor.getString(cursor.getColumnIndex("avatar")).toString()
user.status = cursor.getString(cursor.getColumnIndex("status")).toInt()
}
cursor.close()

View File

@ -29,48 +29,21 @@ class HostActivity : AppCompatActivity() {
getKeys(hostText.text.toString())
}
val host = settings.getString("hostP2play","")
val lastHost = settings.getString("last_host","")
val host = settings.getString("hostP2play", "")
val lastHost = settings.getString("last_host", "")
if(host!=""){
if(lastHost!=host){
_db.logout()
ManagerSingleton.logout()
getKeys(host)
}else{
ManagerSingleton.url=host
checkUser()
startApp()
}
}
}
fun checkUser(){
val token = _db.getToken()
val user = _db.getUser()
AsyncTask.execute {
if (Looper.myLooper() == null)
Looper.prepare()
startApp()
if (token.status == 1 && user.status == 1) {
val client_id = settings.getString("client_id", "")
val client_secret = settings.getString("client_secret", "")
val newToken = client.refreshToken(token, client_id, client_secret)
when (token.status.toString()) {
"1" -> {
_db.newToken(newToken)
ManagerSingleton.token = newToken
ManagerSingleton.user = user
}
else -> _db.logout()
}
} else {
_db.logout()
}
this.finish()
}
}
fun saveHost(host: String){
editor.putString("last_host",host)
@ -78,7 +51,7 @@ class HostActivity : AppCompatActivity() {
editor.apply()
ManagerSingleton.Toast(getString(R.string.finallyMsg))
ManagerSingleton.url=host
checkUser()
startApp()
}
private fun getKeys(hostText: String){
@ -112,6 +85,7 @@ class HostActivity : AppCompatActivity() {
runOnUiThread {
val intent = Intent(ManagerSingleton.context,MainActivity::class.java)
startActivity(intent)
this.finish()
}
}
}

View File

@ -3,6 +3,7 @@ package org.libre.agosto.p2play
import android.content.Intent
import android.os.AsyncTask
import android.os.Bundle
import android.os.Handler
import android.support.design.widget.Snackbar
import android.support.design.widget.NavigationView
import android.support.v4.view.GravityCompat
@ -27,11 +28,11 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
private lateinit var recyclerView: RecyclerView
private lateinit var viewAdapter: RecyclerView.Adapter<*>
private lateinit var viewManager: RecyclerView.LayoutManager
val client: Videos = Videos()
private val client: Videos = Videos()
private lateinit var lastItem: MenuItem
private lateinit var subItem: MenuItem
lateinit var myMenu: Menu
val _db = Database(this)
private val _db = Database(this)
var section: String = ""
@ -54,6 +55,7 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
ManagerSingleton.context = this
nav_view.setNavigationItemSelectedListener(this)
viewManager = LinearLayoutManager(this)
// Set data for RecyclerView
@ -64,10 +66,15 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
swipeContainer.setOnRefreshListener {
this.refresh()
}
Handler().postDelayed({
// Title for nav_bar
side_emailTxt?.text = getString(R.string.nav_header_subtitle) + " " + this.packageManager.getPackageInfo(this.packageName, 0).versionName
}, 2000)
}
// Generic function for set data to RecyclerView
fun setData(data:ArrayList<VideoModel>){
private fun setData(data:ArrayList<VideoModel>){
viewAdapter = VideosAdapter(data)
recyclerView = findViewById<RecyclerView>(R.id.list).apply {
@ -84,7 +91,7 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
swipeContainer.isRefreshing = false
}
fun refresh(){
private fun refresh(){
swipeContainer.isRefreshing = true
when(section){
"local" -> this.getLocalVideos()
@ -100,7 +107,7 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
}
}
fun getSubscriptionVideos(){
private fun getSubscriptionVideos(){
if(ManagerSingleton.user.status != 1){
ManagerSingleton.Toast("Inicia session primero")
startActivity(Intent(this, LoginActivity::class.java))
@ -118,7 +125,7 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
}
// Last videos
fun getLastVideos(){
private fun getLastVideos(){
swipeContainer.isRefreshing = true
section = "last"
setTitle(R.string.title_recent)
@ -130,8 +137,8 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
}
}
//
fun getPopularVideos(){
// Popular videos
private fun getPopularVideos(){
swipeContainer.isRefreshing = true
section = "popular"
setTitle(R.string.title_popular)
@ -143,7 +150,8 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
}
}
fun getLocalVideos(){
// Local videos
private fun getLocalVideos(){
swipeContainer.isRefreshing = true
section = "local"
setTitle(R.string.title_local)
@ -155,7 +163,8 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
}
}
fun getMyVideos(){
// Videos of user
private fun getMyVideos(){
swipeContainer.isRefreshing = true
section = "my_videos"
setTitle(R.string.title_myVideos)
@ -266,14 +275,14 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
}
}
fun logout(){
private fun logout(){
if(::myMenu.isInitialized){
myMenu.findItem(R.id.action_login).isVisible = true
myMenu.findItem(R.id.action_logout).isVisible = false
}
side_usernameTxt?.text = getString(R.string.nav_header_title)
side_emailTxt?.text = getString(R.string.nav_header_subtitle)
side_emailTxt?.text = getString(R.string.nav_header_subtitle) + " " + this.packageManager.getPackageInfo(this.packageName, 0).versionName
side_imageView?.setImageResource(R.mipmap.ic_launcher_round)
side_imageView?.setOnClickListener { }
_db.logout()

View File

@ -1,27 +1,43 @@
package org.libre.agosto.p2play
import android.opengl.Visibility
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)
ManagerSingleton.context = this
videoView.webChromeClient = WebClient()
videoView.settings.javaScriptEnabled = true
videoView.settings.allowContentAccess = true
videoView.settings.javaScriptCanOpenWindowsAutomatically = true
@ -35,26 +51,34 @@ class ReproductorActivity : AppCompatActivity() {
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
descriptionVideoTxt.text = this.video.description.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)
Log.d("url", videoView.url)
}
catch (err:Exception){
err.printStackTrace()
Log.d("Error", err?.message)
}
// subscribeBtn.setOnClickListener { ManagerSingleton.Toast(getString(R.string.comming)) }
viewManager = LinearLayoutManager(this)
this.setDataComments(arrayListOf())
this.getComments()
subscribeBtn.setOnClickListener { subscribe() }
likeLayout.setOnClickListener { rate("like") }
dislikeLayout.setOnClickListener { rate("dislike") }
commentaryBtn.setOnClickListener { makeComment() }
}
fun subscribe(){
val account = this.video.userUuid+"@"+this.video.userHost
private fun subscribe(){
val account = this.video.nameChannel+"@"+this.video.userHost
AsyncTask.execute {
if (Looper.myLooper() == null)
Looper.prepare()
@ -68,8 +92,8 @@ class ReproductorActivity : AppCompatActivity() {
}
}
fun unSubscribe(){
val account = this.video.userUuid+"@"+this.video.userHost
private fun unSubscribe(){
val account = this.video.nameChannel+"@"+this.video.userHost
AsyncTask.execute {
if (Looper.myLooper() == null)
Looper.prepare()
@ -83,7 +107,7 @@ class ReproductorActivity : AppCompatActivity() {
}
}
fun rate(rate: String){
private fun rate(rate: String){
AsyncTask.execute {
if (Looper.myLooper() == null)
Looper.prepare()
@ -104,7 +128,7 @@ class ReproductorActivity : AppCompatActivity() {
}
}
fun getRate(){
private fun getRate(){
AsyncTask.execute {
if (Looper.myLooper() == null)
Looper.prepare()
@ -128,8 +152,8 @@ class ReproductorActivity : AppCompatActivity() {
}
}
fun getSubscription(){
val account = this.video.userUuid+"@"+this.video.userHost
private fun getSubscription(){
val account = this.video.nameChannel+"@"+this.video.userHost
AsyncTask.execute {
if (Looper.myLooper() == null)
Looper.prepare()
@ -140,7 +164,7 @@ class ReproductorActivity : AppCompatActivity() {
}
}
fun changeSubscribeBtn(subscribed: Boolean){
private fun changeSubscribeBtn(subscribed: Boolean){
if(subscribed){
subscribeBtn.text = getText(R.string.unSubscribeBtn)
subscribeBtn.setOnClickListener { this.unSubscribe() }
@ -151,6 +175,53 @@ class ReproductorActivity : AppCompatActivity() {
}
}
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))
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))
commentaryText.text.clear()
this.getComments()
}
else {
ManagerSingleton.Toast(getString(R.string.errorCommentaryMsg))
}
}
}
}
override fun onResume() {
super.onResume()
if(ManagerSingleton.user.status == 1) {
@ -158,6 +229,60 @@ class ReproductorActivity : AppCompatActivity() {
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 mFullscreenContainer: FrameLayout? = null
private var mOriginalOrientation: Int = 0
private var mOriginalSystemUiVisibility: Int = 0
fun WebClient() {}
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()
}
}
}
}

View File

@ -0,0 +1,108 @@
package org.libre.agosto.p2play
import android.content.Intent
import android.content.SharedPreferences
import android.os.AsyncTask
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.preference.PreferenceManager
import android.util.Log
import org.libre.agosto.p2play.ajax.Auth
import java.lang.Exception
class SplashActivity : AppCompatActivity() {
lateinit var settings: SharedPreferences
lateinit var editor: SharedPreferences.Editor
val client: Auth = Auth()
val _db = Database(this)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_splash)
settings = PreferenceManager.getDefaultSharedPreferences(this)
editor = settings.edit()
ManagerSingleton.context = this
val host = settings.getString("hostP2play","")
val lastHost = settings.getString("last_host","")
if(host != ""){
if(lastHost != host){
_db.logout()
Handler().postDelayed({
startHostActivity()
}, 2000)
}else{
ManagerSingleton.url = host
checkUser()
}
}
else{
Handler().postDelayed({
startHostActivity()
}, 2000)
}
}
private fun checkUser(){
Log.d("was", "Chequed")
try {
val token = _db.getToken()
val user = _db.getUser()
AsyncTask.execute {
if (Looper.myLooper() == null)
Looper.prepare()
if (token.status == 1 && user.status == 1) {
val client_id = settings.getString("client_id", "")
val client_secret = settings.getString("client_secret", "")
val newToken = client.refreshToken(token, client_id, client_secret)
when (token.status.toString()) {
"1" -> {
_db.newToken(newToken)
ManagerSingleton.token = newToken
ManagerSingleton.user = user
}
else -> _db.logout()
}
} else {
_db.logout()
}
startApp()
Log.d("Aqui", "81")
}
}
catch (err: Exception){
err.printStackTrace()
Log.d("Aqui", "89")
Handler().postDelayed({
startApp()
}, 2000)
}
}
private fun startApp() {
runOnUiThread {
val intent = Intent(ManagerSingleton.context, MainActivity::class.java)
startActivity(intent)
this.finish()
}
}
private fun startHostActivity() {
runOnUiThread {
val intent = Intent(ManagerSingleton.context, HostActivity::class.java)
startActivity(intent)
this.finish()
}
}
}

View File

@ -0,0 +1,71 @@
package org.libre.agosto.p2play.adapters
import android.app.Activity
import android.content.Intent
import android.graphics.drawable.Drawable
import android.os.AsyncTask
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import com.squareup.picasso.Picasso
import org.libre.agosto.p2play.MainActivity
import org.libre.agosto.p2play.ManagerSingleton
import org.libre.agosto.p2play.R
import org.libre.agosto.p2play.ReproductorActivity
import org.libre.agosto.p2play.models.CommentaryModel
import org.libre.agosto.p2play.models.VideoModel
import java.io.InputStream
import java.io.Serializable
import java.net.URL
class CommentariesAdapter(private val myDataset: ArrayList<CommentaryModel>) :
RecyclerView.Adapter<CommentariesAdapter.ViewHolder>() {
// Provide a reference to the views for each data item
// Complex data items may need more than one view per item, and
// you provide access to all the views for a data item in a view holder.
// Each data item is just a string in this case that is shown in a TextView.
class ViewHolder(val view: View) : RecyclerView.ViewHolder(view){
val userImg: ImageView
val username: TextView
val commentary: TextView
init {
// Define click listener for the ViewHolder's View
username = view.findViewById(R.id.userTxt)
commentary = view.findViewById(R.id.userCommentary)
userImg = view.findViewById(R.id.userCommentImg)
}
}
// Create new views (invoked by the layout manager)
override fun onCreateViewHolder(parent: ViewGroup,
viewType: Int): CommentariesAdapter.ViewHolder {
// create a new view
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.view_commentary, parent, false) as View
// set the view's size, margins, paddings and layout parameters
return ViewHolder(view)
}
// Replace the contents of a view (invoked by the layout manager)
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
// - get element from your dataset at this position
// - replace the contents of the view with that element
holder.username.text = myDataset[position].username
if(myDataset[position].userImageUrl!="")
Picasso.get().load("https://"+ManagerSingleton.url+myDataset[position].userImageUrl).into(holder.userImg);
holder.commentary.text = myDataset[position].commentary
}
// Return the size of your dataset (invoked by the layout manager)
override fun getItemCount() = myDataset.size
}

View File

@ -0,0 +1,112 @@
package org.libre.agosto.p2play.ajax
import android.util.JsonReader
import android.util.JsonToken
import android.util.Log
import org.libre.agosto.p2play.models.CommentaryModel
import java.io.InputStreamReader
class Comments: Client() {
fun parseCommentaries(data: JsonReader): ArrayList<CommentaryModel> {
var commentaries = arrayListOf<CommentaryModel>()
data.beginObject()
while (data.hasNext()){
when(data.nextName()) {
"data" -> {
data.beginArray()
while (data.hasNext()) {
val comment = CommentaryModel()
data.beginObject()
while (data.hasNext()) {
val key = data.nextName()
when (key.toString()) {
"id" -> comment.id = data.nextInt()
"threadId" -> comment.threadId = data.nextInt()
"text" -> comment.commentary = data.nextString()
"totalReplies" -> comment.replies = data.nextInt()
"account" -> {
data.beginObject()
while (data.hasNext()){
val acKey = data.nextName()
when(acKey.toString()){
"displayName"-> comment.username=data.nextString()
"avatar"-> {
if(data.peek() == JsonToken.BEGIN_OBJECT){
data.beginObject()
while (data.hasNext()){
val avKey = data.nextName()
when(avKey){
"path"-> comment.userImageUrl = data.nextString()
else-> data.skipValue()
}
}
data.endObject()
}
else
data.skipValue()
}
"uuid" -> comment.userUuid = data.nextString()
"host" -> comment.userHost = data.nextString()
else -> data.skipValue()
}
}
data.endObject()
}
else -> data.skipValue()
}
}
data.endObject()
commentaries.add(comment)
}
data.endArray()
}
else -> data.skipValue()
}
}
data.endObject()
return commentaries
}
fun getCommentaries(videoId: Int): ArrayList<CommentaryModel> {
var commentaries = arrayListOf<CommentaryModel>()
val con = this._newCon("videos/$videoId/comment-threads", "GET")
try {
if (con.responseCode == 200) {
var response = InputStreamReader(con.inputStream)
var data = JsonReader(response)
commentaries = parseCommentaries(data)
}
} catch(err:Exception){
err?.printStackTrace()
Log.d("TypeErr",err?.message ,err.cause)
Log.d("Error","fallo la coneccion")
}
return commentaries
}
fun makeCommentary(token: String, videoId: Int, text: String): Boolean {
val con = this._newCon("videos/$videoId/comment-threads", "POST", token)
val params:String= "text=$text"
con.outputStream.write(params.toByteArray())
try {
if (con.responseCode == 200) {
return true
}
else{
Log.d("Status", con.responseMessage)
}
}
catch (err: Exception){
err.printStackTrace()
}
return false
}
}

View File

@ -67,6 +67,7 @@ class Videos: Client() {
}
"uuid" -> video.userUuid = data.nextString()
"host" -> video.userHost = data.nextString()
"name" -> video.nameChannel = data.nextString()
else-> data.skipValue()
}
}

View File

@ -0,0 +1,12 @@
package org.libre.agosto.p2play.models
class CommentaryModel (
var id: Int = 0,
var threadId: Int = 0,
var userUuid: String = "",
var username: String = "",
var userImageUrl: String = "",
var commentary: String = "",
var userHost: String = "",
var replies: Int = 0
)

View File

@ -13,5 +13,6 @@ class VideoModel(
var username: String = "",
var views: Number = 0,
var userUuid: String = "",
var userHost: String = ""
var userHost: String = "",
var nameChannel: String = ""
):Serializable

View File

@ -56,6 +56,7 @@
<Button
android:id="@+id/button"
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/okButton" />

View File

@ -76,6 +76,7 @@
<Button
android:id="@+id/loginBtn"
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/loginBtn"
@ -87,6 +88,7 @@
<Button
android:id="@+id/registerActionBtn"
style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/registerActionBtn"

View File

@ -90,6 +90,7 @@
<Button
android:id="@+id/registerBtn"
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/registerBtn"

View File

@ -7,8 +7,9 @@
tools:context=".ReproductorActivity">
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
@ -25,7 +26,8 @@
<WebView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="220dp">
android:layout_height="270dp"
android:layout_weight="1">
</WebView>
@ -33,7 +35,7 @@
android:id="@+id/tittleVideoTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:paddingStart="5dp"
android:textAppearance="@android:style/TextAppearance.Material.Large"
android:textStyle="bold" />
@ -42,12 +44,13 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:textSize="12sp" />
<LinearLayout
android:id="@+id/actionsLayout"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_height="50dp"
android:gravity="top"
android:orientation="horizontal"
android:visibility="gone">
@ -57,21 +60,25 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical">
android:orientation="vertical"
android:visibility="visible">
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:adjustViewBounds="false"
android:contentDescription="@string/likeBtn"
android:cropToPadding="false"
android:scaleType="center"
android:visibility="visible"
app:srcCompat="@drawable/ic_like" />
<TextView
android:id="@+id/textView"
android:id="@+id/textViewLike"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="@string/likeBtn"
android:textAlignment="center" />
@ -82,21 +89,24 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical">
android:orientation="vertical"
android:visibility="visible">
<ImageView
android:id="@+id/imageView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
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_dislike" />
<TextView
android:id="@+id/textView"
android:id="@+id/textViewDislike"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="@string/dislikeBtn"
android:textAlignment="center" />
@ -104,7 +114,7 @@
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/shareBtn"
@ -112,7 +122,7 @@
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/reportBtn"
@ -121,14 +131,14 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="60dp"
android:layout_weight="1"
android:orientation="horizontal">
<ImageView
android:id="@+id/userImg"
android:layout_width="40dp"
android:layout_height="50dp"
android:layout_height="match_parent"
android:layout_margin="0dp"
android:layout_weight="1"
android:adjustViewBounds="false"
@ -159,23 +169,21 @@
android:id="@+id/descriptionTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLength="1000"
android:maxLines="100"
android:paddingLeft="5dp"
android:text="@string/descriptionTxt" />
<ScrollView
<TextView
android:id="@+id/descriptionVideoTxt"
android:layout_width="match_parent"
android:layout_height="80dp">
<TextView
android:id="@+id/descriptionVideoTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLength="1000"
android:maxLines="1000"
android:paddingLeft="5dp"
android:text="TextView"
android:textStyle="italic" />
</ScrollView>
android:layout_height="wrap_content"
android:autoLink="web"
android:linksClickable="true"
android:maxLength="10000"
android:maxLines="100"
android:paddingLeft="10dp"
android:paddingRight="10dp" />
<View
android:id="@+id/divider"
@ -183,6 +191,70 @@
android:layout_height="1dp"
android:background="?android:attr/listDivider" />
<Space
android:layout_width="match_parent"
android:layout_height="30dp" />
<TextView
android:id="@+id/commentariesTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:text="@string/commentariesTxt" />
<Space
android:layout_width="match_parent"
android:layout_height="20dp" />
<LinearLayout
android:id="@+id/commentaryLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/userImgCom"
android:layout_width="10dp"
android:layout_height="60dp"
android:layout_weight="1"
app:srcCompat="@drawable/default_avatar" />
<EditText
android:id="@+id/commentaryText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="2"
android:ems="10"
android:hint="@string/commentHolder"
android:inputType="textMultiLine" />
</LinearLayout>
<Button
android:id="@+id/commentaryBtn"
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="@string/commentaryText" />
</LinearLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/listCommentaries"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="none"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</LinearLayout>
</ScrollView>

View File

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SplashActivity">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="32dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/imageView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:contentDescription="@string/app_name"
app:srcCompat="@drawable/icon" />
<Space
android:layout_width="match_parent"
android:layout_height="30dp" />
<TextView
android:id="@+id/hostInfoText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/charging"
android:textAlignment="center"
android:textAppearance="@android:style/TextAppearance.Material.Medium.Inverse"
android:textColor="@android:color/black" />
<Space
android:layout_width="match_parent"
android:layout_height="30dp" />
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:backgroundTint="?attr/colorAccent"
android:indeterminate="true" />
</LinearLayout>
</FrameLayout>
</android.support.constraint.ConstraintLayout>

View File

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingLeft="10dp"
android:paddingRight="10dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/userCommentImg"
android:layout_width="100dp"
android:layout_height="60dp"
android:layout_weight="1"
android:contentDescription="@string/app_name"
app:srcCompat="@drawable/default_avatar" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:paddingLeft="10dp"
android:paddingRight="10dp">
<TextView
android:id="@+id/userTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@android:color/darker_gray"
android:textStyle="italic" />
<TextView
android:id="@+id/userCommentary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autoLink="web"
android:linksClickable="true"
android:maxLength="1000"
android:maxLines="10" />
</LinearLayout>
</LinearLayout>
</android.support.constraint.ConstraintLayout>

View File

@ -2,6 +2,7 @@
<resources>
<!-- Start Global strings -->
<string name="comming">Proximamente</string>
<string name="charging">Cargando...</string>
<!-- End Global strings -->
<!-- Start About strings -->
@ -44,7 +45,6 @@
<string name="view_text">vistas</string>
<string name="time_text">segundos</string>
<string name="nav_header_title">Inicia session</string>
<string name="nav_header_subtitle">P2Play (alfa)</string>
<!-- Toast msg -->
<string name="logout_msg">Te has desconectado</string>
<!-- End Main strings -->
@ -62,6 +62,8 @@
<!-- End MiniMenu strings -->
<!-- Start Reproductor strings -->
<string name="descriptionTxt">Descripcion:</string>
<string name="commentariesTxt">Comentarios:</string>
<string name="commentHolder">Has un comentario</string>
<!-- Actions -->
<string name="likeBtn">Like</string>
<string name="dislikeBtn">Dislike</string>
@ -69,10 +71,14 @@
<string name="reportBtn">Reportar</string>
<string name="subscribeBtn">Subscribir</string>
<string name="unSubscribeBtn">Desubscribir</string>
<string name="commentaryText">Comentar</string>
<!-- Messages -->
<string name="subscribeMsg">Te has subscribido a este canal</string>
<string name="rateMsg">Has valorado este video</string>
<string name="unSubscribeMsg">Te has desubscribido de este canal</string>
<string name="makedCommentaryMsg">Has comentado este video</string>
<string name="errorCommentaryMsg">A ocurrido un error, intenta de nuevo</string>
<string name="emptyCommentaryMsg">Porfavor has un comentario primero</string>
<!-- End Reproductor strings -->
<!-- Start Settings strings -->
<string name="title_activity_settings">Configuracion</string>

View File

@ -5,7 +5,8 @@
<string name="navigation_drawer_open" translatable="false">Open 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="comming">Comming soon!</string>
<string name="comming">Coming soon!</string>
<string name="charging">Loading...</string>
<!-- End Global string -->
@ -35,10 +36,10 @@
<string name="registerActionBtn">Create new account</string>
<!-- Toast msg -->
<string name="loginSuccess_msg">You are logged</string>
<string name="loginError_msg">An error has ocurred</string>
<string name="loginError_msg">An error has occurred</string>
<string name="loginFailed_msg">Invalid credentials</string>
<string name="registerSuccess_msg">You are registered</string>
<string name="registerError_msg">An error has ocurred</string>
<string name="registerError_msg">An error has occurred</string>
<string name="registerFailed_msg">Invalid data</string>
<!-- Register msg -->
<string name="registerBtn">Register now</string>
@ -54,7 +55,7 @@
<string name="view_text">views</string>
<string name="time_text">seconds</string>
<string name="nav_header_title">Log In</string>
<string name="nav_header_subtitle">P2Play</string>
<string name="nav_header_subtitle" translatable="false">P2Play</string>
<!-- Toast msg -->
<string name="logout_msg">You are disconnected</string>
<!-- End Main strings -->
@ -72,6 +73,8 @@
<!-- End MiniMenu strings -->
<!-- Start Reproductor strings -->
<string name="descriptionTxt">Description:</string>
<string name="commentariesTxt">Commentaries:</string>
<string name="commentHolder">Make a commentary</string>
<!-- Actions -->
<string name="subscribeBtn">Subscribe</string>
<string name="likeBtn">Like</string>
@ -79,10 +82,14 @@
<string name="shareBtn">Share</string>
<string name="reportBtn">Report</string>
<string name="unSubscribeBtn">Unsubscribe</string>
<string name="commentaryText">Comment</string>
<!-- Messages -->
<string name="subscribeMsg">You are subscribed to this channel</string>
<string name="rateMsg">You are rated the video</string>
<string name="unSubscribeMsg">You are unsubscribed to this channel</string>
<string name="makedCommentaryMsg">You are commented this video</string>
<string name="errorCommentaryMsg">An error has occurred, try again</string>
<string name="emptyCommentaryMsg">Please make a comment first</string>
<!-- End Reproductor strings -->
<!-- Start Settings strings -->
<string name="title_activity_settings">Settings</string>

View File

@ -1,13 +1,13 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.2.51'
ext.kotlin_version = '1.3.0'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
classpath 'com.android.tools.build:gradle:3.3.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong

View File

@ -1,6 +1,6 @@
#Sun Sep 30 14:50:40 CDT 2018
#Wed Jan 23 14:44:01 CST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip

View File

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id="p2play" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="java-gradle" name="Java-Gradle">
<configuration>
<option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" />
<option name="BUILDABLE" value="false" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_6" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
</content>
<orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>