Skip to content

Commit

Permalink
Merge pull request #24 from kpchandora/feature/#19-post-image-view
Browse files Browse the repository at this point in the history
[#19] Use view and content instead of postUrl
  • Loading branch information
kpchandora committed May 1, 2021
2 parents b29f105 + 94119dd commit 3eb9be7
Show file tree
Hide file tree
Showing 9 changed files with 100 additions and 53 deletions.
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package com.speakoutall.posts.view

import android.view.View
import com.speakoutall.posts.create.PostData

interface OnPostOptionsClickListener {
fun onCopy(post: PostData)
fun onDelete(post: PostData)
fun onSave(post: PostData)
fun onSave(post: PostData, view: View?)
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.speakoutall.posts.view

import android.view.View
import android.widget.ImageView
import com.speakoutall.posts.create.PostData

Expand All @@ -8,7 +9,7 @@ interface PostClickEventListener {
fun onRemoveLike(position: Int, postData: PostData)
fun onProfileClick(postData: PostData, profileImageView: ImageView)
fun onLikedUsersClick(postData: PostData)
fun onMenuClick(postData: PostData, position: Int)
fun onMenuClick(postData: PostData, view: View)
fun onBookmarkAdd(postData: PostData)
fun onBookmarkRemove(postId: String)
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.app.Activity
import android.app.Dialog
import android.content.Context
import android.os.Bundle
import android.view.View
import android.view.Window
import com.speakoutall.R
import com.speakoutall.extensions.addViewObserver
Expand All @@ -18,6 +19,7 @@ class PostOptionsDialog(private val mContext: Context) : Dialog(mContext) {

private var mListener: OnPostOptionsClickListener? = null
private var mPost: PostData? = null
private var mPostView: View? = null

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Expand All @@ -32,7 +34,7 @@ class PostOptionsDialog(private val mContext: Context) : Dialog(mContext) {

dialog_option_save.setOnClickListener {
dismiss()
mListener?.onSave(mPost ?: PostData())
mListener?.onSave(mPost ?: PostData(), mPostView)
}

dialog_option_copy.setOnClickListener {
Expand All @@ -55,6 +57,10 @@ class PostOptionsDialog(private val mContext: Context) : Dialog(mContext) {
}
}

fun setPostView(view: View) {
mPostView = view
}

fun setListener(listener: OnPostOptionsClickListener) {
mListener = listener
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class PostRecyclerViewAdapter(private val mPostsList: ArrayList<PostData>) :

val screenSize = (parent.context as? Activity)?.getScreenSize()
screenSize?.let {
holder.view.item_post_image_iv.layoutParams.height = it.widthPixels
holder.view.post_bg.layoutParams.height = it.widthPixels
}
return holder
}
Expand Down
35 changes: 18 additions & 17 deletions app/src/main/java/com/speakoutall/posts/view/PostViewHolder.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.speakoutall.posts.view

import android.annotation.SuppressLint
import android.view.View
import androidx.recyclerview.widget.RecyclerView
import com.speakoutall.R
Expand Down Expand Up @@ -43,13 +42,13 @@ class PostViewHolder(val view: View, private val mEventListener: PostClickEventL

item_post_layout_menu_tv.setOnClickListener {
val post = tag as PostData
mEventListener?.onMenuClick(post, adapterPosition)
mEventListener?.onMenuClick(post, post_container)
}

item_post_load_fail_tv.setOnClickListener {
val post = tag as PostData
loadPost(post.postImageUrl)
}
// item_post_load_fail_tv.setOnClickListener {
// val post = tag as PostData
// loadPost(post.postImageUrl)
// }

item_post_names_layout.setOnClickListener {
val post = tag as PostData
Expand Down Expand Up @@ -82,9 +81,11 @@ class PostViewHolder(val view: View, private val mEventListener: PostClickEventL

setLikes(post)

post_content_tv.text = post.content

item_post_time_tv.text = post.timeStamp.toElapsedTime()

loadPost(post.postImageUrl)
// loadPost(post.postImageUrl)

item_post_like_cb.isChecked = post.isLikedBySelf
item_bookmark_cb.isChecked = post.isBookmarkedBySelf
Expand All @@ -100,16 +101,16 @@ class PostViewHolder(val view: View, private val mEventListener: PostClickEventL
}
}

@SuppressLint("CheckResult")
private fun loadPost(url: String) {
view.item_post_image_iv.loadImageWithCallback(url,
onSuccess = {
view.item_post_load_fail_tv.gone()
},
onFailed = {
view.item_post_load_fail_tv.visible()
})
}
// @SuppressLint("CheckResult")
// private fun loadPost(url: String) {
// view.item_post_image_iv.loadImageWithCallback(url,
// onSuccess = {
// view.item_post_load_fail_tv.gone()
// },
// onFailed = {
// view.item_post_load_fail_tv.visible()
// })
// }


}
33 changes: 19 additions & 14 deletions app/src/main/java/com/speakoutall/ui/home/HomeFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -286,10 +286,14 @@ class HomeFragment : Fragment(), MainActivity.BottomIconDoubleClick {
navigateToUsersList(postData)
}

override fun onMenuClick(postData: PostData, position: Int) {
override fun onMenuClick(
postData: PostData,
view: View
) {
dialog.setListener(mPostsOptionsClickListener)
dialog.show()
dialog.setPost(postData)
dialog.setPostView(view)
}

override fun onBookmarkAdd(postData: PostData) {
Expand All @@ -314,19 +318,20 @@ class HomeFragment : Fragment(), MainActivity.BottomIconDoubleClick {
}

@SuppressLint("CheckResult")
override fun onSave(post: PostData) {
ImageUtils.saveImageToDevice(post.postImageUrl, requireContext())
.withDefaultSchedulers()
.subscribe({
Timber.d("Home Main Thread: ${Looper.getMainLooper() == Looper.myLooper()}")
if (it)
showShortToast("Saved Successfully")
else
showShortToast("Failed to save image")
}, {
showShortToast(it.message ?: "")
})

override fun onSave(post: PostData, view: View?) {
view?.let {
ImageUtils.saveImageToDevice(view, requireContext())
.withDefaultSchedulers()
.subscribe({
Timber.d("Home Main Thread: ${Looper.getMainLooper() == Looper.myLooper()}")
if (it)
showShortToast("Saved Successfully")
else
showShortToast("Failed to save image")
}, {
showShortToast(it.message ?: "")
})
}
}
}

Expand Down
30 changes: 18 additions & 12 deletions app/src/main/java/com/speakoutall/ui/profile/PostViewFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -198,10 +198,14 @@ class PostViewFragment : Fragment() {
findNavController().navigate(action)
}

override fun onMenuClick(postData: PostData, position: Int) {
override fun onMenuClick(
postData: PostData,
view: View
) {
dialog.setListener(mPostsOptionsClickListener)
dialog.show()
dialog.setPost(postData)
dialog.setPostView(view)
}

override fun onBookmarkAdd(postData: PostData) {
Expand Down Expand Up @@ -236,17 +240,19 @@ class PostViewFragment : Fragment() {
}

@SuppressLint("CheckResult")
override fun onSave(post: PostData) {
ImageUtils.saveImageToDevice(post.postImageUrl, requireContext())
.withDefaultSchedulers()
.subscribe({
if (it)
showShortToast("Saved Successfully")
else
showShortToast("Failed to save image")
}, {
showShortToast(it.message ?: "")
})
override fun onSave(post: PostData, view: View?) {
view?.let {
ImageUtils.saveImageToDevice(post.postImageUrl, requireContext())
.withDefaultSchedulers()
.subscribe({
if (it)
showShortToast("Saved Successfully")
else
showShortToast("Failed to save image")
}, {
showShortToast(it.message ?: "")
})
}
}
}
}
6 changes: 6 additions & 0 deletions app/src/main/java/com/speakoutall/utils/ImageUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,12 @@ object ImageUtils {
}
}

fun saveImageToDevice(view: View, context: Context): Single<Boolean> {
return convertToBitmap(view).flatMap {
Single.just(saveImage(it, context))
}
}

private fun saveImage(bitmap: Bitmap, context: Context): Boolean {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
val folderPath = File(
Expand Down
33 changes: 27 additions & 6 deletions app/src/main/res/layout/item_post_layout.xml
Original file line number Diff line number Diff line change
Expand Up @@ -85,24 +85,45 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">

<View
android:id="@+id/post_bg"
android:layout_width="match_parent"
android:layout_height="400dp"
android:background="@color/black" />

<ImageView
android:id="@+id/item_post_image_iv"
android:layout_width="match_parent"
android:layout_height="400dp"
android:adjustViewBounds="true"
android:visibility="gone"
tools:src="@drawable/post_image" />


<TextView
android:id="@+id/item_post_load_fail_tv"
android:id="@+id/post_content_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:drawableStart="@drawable/ic_problem"
android:drawablePadding="12dp"
android:layout_marginStart="18dp"
android:layout_marginEnd="18dp"
android:gravity="center"
android:text="@string/error_image_load_fail"
android:visibility="gone" />
android:maxLength="300"
android:paddingStart="10dp"
android:paddingEnd="10dp"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textColor="@android:color/white"
android:textColorHint="@color/grey_600"
tools:text="@tools:sample/lorem/random" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_marginEnd="8dp"
android:fontFamily="@font/bahram"
android:text="@string/app_name"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textColor="@color/yellow_500" />

</FrameLayout>

Expand Down

0 comments on commit 3eb9be7

Please sign in to comment.