Comment and like buttons added + a few UI tweaks * WIP posts * WIP posts * trying to add images * trying to add images * Got posts working and linked them to the profile * added tests for Post * layout changes * moved a test file * refactoring * refactoring * removed wrong annotation in unit test * removed an import that was breaking the build * removed tests that broke from merge, will override with master * added UI test for the post activity * WIP posts * WIP posts * trying to add images * trying to add images * Got posts working and linked them to the profile * layout changes * refactoring * refactoring * WIP posts * WIP posts * trying to add images * trying to add images * Got posts working and linked them to the profile * added tests for Post * layout changes * moved a test file * refactoring * refactoring * removed wrong annotation in unit test * removed an import that was breaking the build * removed tests that broke from merge, will override with master * fixed merging errors * trying my best to merge * removed drawable definition in activity_post.xml * Started converting Post to a fragment * got a working feed * WI * removed non-valid test * rebase on other branch * moved the feed to the home page * Add tests * delete test for now * Adapt test to changes (no more profile from drawer) * Add unit test for api * Add test for profile, refactor to allow testing, add exception to security policy to allow tests * Adapt test to new situation * Fix typo due to change * refactor somewhat * added a feed test * WIP posts * trying to add images * WIP posts * trying to add images * Got posts working and linked them to the profile * added tests for Post * layout changes * moved a test file * refactoring * refactoring * WIP posts * WIP posts * trying to add images * trying to add images * Got posts working and linked them to the profile * added tests for Post * layout changes * moved a test file * refactoring * refactoring * removed wrong annotation in unit test * removed an import that was breaking the build * removed tests that broke from merge, will override with master * added UI test for the post activity * WIP posts * trying to add images * WIP posts * trying to add images * Got posts working and linked them to the profile * added tests for Post * layout changes * moved a test file * refactoring * refactoring * WIP posts * WIP posts * trying to add images * trying to add images * Got posts working and linked them to the profile * added tests for Post * layout changes * moved a test file * refactoring * refactoring * removed wrong annotation in unit test * removed an import that was breaking the build * removed tests that broke from merge, will override with master * added UI test for the post activity * fixed merging errors * trying my best to merge * removed drawable definition in activity_post.xml * Started converting Post to a fragment * got a working feed * WI * removed non-valid test * WIP posts * WIP posts * trying to add images * trying to add images * Got posts working and linked them to the profile * added tests for Post * layout changes * moved a test file * WIP posts * WIP posts * trying to add images * trying to add images * Got posts working and linked them to the profile * added tests for Post * layout changes * moved a test file * refactoring * refactoring * refactoring * refactoring * removed wrong annotation in unit test * WIP posts * WIP posts * WIP posts * WIP posts * trying to add images * trying to add images * trying to add images * trying to add images * Got posts working and linked them to the profile * Got posts working and linked them to the profile * added tests for Post * layout changes * layout changes * moved a test file * refactoring * refactoring * refactoring * refactoring * removed wrong annotation in unit test * removed an import that was breaking the build * removed an import that was breaking the build * removed tests that broke from merge, will override with master * removed tests that broke from merge, will override with master * added UI test for the post activity * fixed merging errors * trying my best to merge * removed drawable definition in activity_post.xml * Started converting Post to a fragment * got a working feed * WI * removed non-valid test * rebase on other branch * moved the feed to the home page * added a feed test * added a working feed test * fixed broken test * merged with master * added a max height for images and made profile pictures round * Added a default image for the post * created a PostActivity to look a single posts * fixed buggy postActivity * Complete overhall of the feed UI * removed test that didn't please Travis * removed legacy test * changed feedAdapter init location (outside of network callback) * changed the feed from public timeline to home timeline * Refactored myProfile page * Converted profile picture to round image * restored feed test * I can like a post, but unlike is still a WIP * Liking kind of works now and added tests * fixed an error, now we can unlike as well * fixed travis constraint error * Display user's posts on profile page * moved test to Mock server tests * fixed test * last resort debugging * Changed fixed size of profile posts * last resort debugging * last resort debugging * last resort debugging * made post_activity profilepic round * Total refactor of profile posts * still have a weird bug with the comments: input is always null (WIP) * still trying to fix coments * removed annoying side margins in the home feed * trying to fix comments * fixed null comment * converted all posts back to statuses and got rid of post * Refactored recycler view * Merged with my-profile * Posts displayed on profile page * Added links to profile activity where needed * fixed comment posting * finished implementing comments, but api is buggy so none are visible * removed useless space in profile page * fixed ci config bug * trying to trigger ci hook (github was down last time) * updated tests with master tests * added tests for the comments * added tests for the comments * added first() matcher to fix comment test * still trying to fix comment tests' null progress bar * getting rid of that null progress bar * added comment test * fixed merge error * added like button test * added more post tests * took pr coments into account * added back an old test * added mockServer response for comment test and fixed comment null pointer bug * changed notification UI to better separate notifications * added mockserver response for likes and corrected like toggling error * added a test for posting comments * fixed typo in test * a gift for code climate * refactored stuff * fixed broken imports * comment refactored as xml Co-authored-by: Matthieu <61561059+Wv5twkFEKh54vo4tta9yu7dHa3@users.noreply.github.com> Co-authored-by: mjaillot <marie.jaillot@epfl.ch>
163 lines
5.9 KiB
Kotlin
163 lines
5.9 KiB
Kotlin
package com.h.pixeldroid.utils
|
|
|
|
import android.graphics.Typeface
|
|
import android.util.Log
|
|
import android.view.LayoutInflater
|
|
import android.view.View
|
|
import android.view.ViewGroup
|
|
import android.widget.LinearLayout
|
|
import android.widget.TextView
|
|
import android.widget.Toast
|
|
import androidx.cardview.widget.CardView
|
|
import com.h.pixeldroid.R
|
|
import com.h.pixeldroid.api.PixelfedAPI
|
|
import com.h.pixeldroid.fragments.feeds.ViewHolder
|
|
import com.h.pixeldroid.objects.Account
|
|
import com.h.pixeldroid.objects.Context
|
|
import com.h.pixeldroid.objects.Status
|
|
import kotlinx.android.synthetic.main.comment.view.*
|
|
import retrofit2.Call
|
|
import retrofit2.Callback
|
|
import retrofit2.Response
|
|
|
|
class PostUtils {
|
|
companion object {
|
|
fun toggleCommentInput(
|
|
holder : ViewHolder
|
|
) {
|
|
//Toggle comment button
|
|
holder.commenter.setOnClickListener {
|
|
when(holder.commentIn.visibility) {
|
|
View.VISIBLE -> holder.commentIn.visibility = View.GONE
|
|
View.INVISIBLE -> holder.commentIn.visibility = View.VISIBLE
|
|
View.GONE -> holder.commentIn.visibility = View.VISIBLE
|
|
}
|
|
}
|
|
}
|
|
|
|
fun likePostCall(
|
|
holder : ViewHolder,
|
|
api: PixelfedAPI,
|
|
credential: String,
|
|
post : Status
|
|
) {
|
|
api.likePost(credential, post.id).enqueue(object : Callback<Status> {
|
|
override fun onFailure(call: Call<Status>, t: Throwable) {
|
|
Log.e("LIKE ERROR", t.toString())
|
|
}
|
|
|
|
override fun onResponse(call: Call<Status>, response: Response<Status>) {
|
|
if(response.code() == 200) {
|
|
val resp = response.body()!!
|
|
|
|
//Update shown like count and internal like toggle
|
|
holder.nlikes.text = resp.getNLikes()
|
|
holder.isLiked = resp.favourited
|
|
} else {
|
|
Log.e("RESPOSE_CODE", response.code().toString())
|
|
}
|
|
}
|
|
|
|
})
|
|
}
|
|
|
|
fun unLikePostCall(
|
|
holder : ViewHolder,
|
|
api: PixelfedAPI,
|
|
credential: String,
|
|
post : Status
|
|
) {
|
|
api.unlikePost(credential, post.id).enqueue(object : Callback<Status> {
|
|
override fun onFailure(call: Call<Status>, t: Throwable) {
|
|
Log.e("UNLIKE ERROR", t.toString())
|
|
}
|
|
|
|
override fun onResponse(call: Call<Status>, response: Response<Status>) {
|
|
if(response.code() == 200) {
|
|
val resp = response.body()!!
|
|
|
|
//Update shown like count and internal like toggle
|
|
holder.nlikes.text = resp.getNLikes()
|
|
holder.isLiked = resp.favourited
|
|
} else {
|
|
Log.e("RESPOSE_CODE", response.code().toString())
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
}
|
|
|
|
fun postComment(
|
|
holder : ViewHolder,
|
|
api: PixelfedAPI,
|
|
credential: String,
|
|
post : Status
|
|
) {
|
|
val textIn = holder.comment.text
|
|
val nonNullText = textIn.toString()
|
|
api.postStatus(credential, nonNullText, post.id).enqueue(object :
|
|
Callback<Status> {
|
|
override fun onFailure(call: Call<Status>, t: Throwable) {
|
|
Log.e("COMMENT ERROR", t.toString())
|
|
Toast.makeText(holder.context,"Comment error!", Toast.LENGTH_SHORT).show()
|
|
}
|
|
|
|
override fun onResponse(call: Call<Status>, response: Response<Status>) {
|
|
//Check that the received response code is valid
|
|
if(response.code() == 200) {
|
|
val resp = response.body()!!
|
|
holder.commentIn.visibility = View.GONE
|
|
|
|
//Add the comment to the comment section
|
|
addComment(holder.context, holder.commentCont, resp.account.username, resp.content)
|
|
|
|
Toast.makeText(holder.context,"Comment: \"$textIn\" posted!", Toast.LENGTH_SHORT).show()
|
|
Log.e("COMMENT SUCCESS", "posted: $textIn")
|
|
} else {
|
|
Log.e("ERROR_CODE", response.code().toString())
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
fun addComment(context: android.content.Context, commentContainer: LinearLayout, commentUsername: String, commentContent: String) {
|
|
|
|
val view = LayoutInflater.from(context)
|
|
.inflate(R.layout.comment, commentContainer, true)
|
|
|
|
view.user.text = commentUsername
|
|
view.commentText.text = commentContent
|
|
}
|
|
|
|
fun retrieveComments(
|
|
holder : ViewHolder,
|
|
api: PixelfedAPI,
|
|
credential: String,
|
|
post : Status
|
|
) {
|
|
api.statusComments(post.id, credential).enqueue(object :
|
|
Callback<Context> {
|
|
override fun onFailure(call: Call<Context>, t: Throwable) {
|
|
Log.e("COMMENT FETCH ERROR", t.toString())
|
|
}
|
|
|
|
override fun onResponse(
|
|
call: Call<Context>,
|
|
response: Response<Context>
|
|
) {
|
|
if(response.code() == 200) {
|
|
val statuses = response.body()!!.descendants
|
|
|
|
//Create the new views for each comment
|
|
for (status in statuses) {
|
|
addComment(holder.context, holder.commentCont, status.account.username, status.content)
|
|
}
|
|
} else {
|
|
Log.e("COMMENT ERROR", "${response.code()} with body ${response.errorBody()}")
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
} |