WIP:
* correccion de errores al iniciar sesion * cambio a Coil
This commit is contained in:
parent
e1235896bb
commit
401c7aadf1
4
.idea/deploymentTargetDropDown.xml
generated
4
.idea/deploymentTargetDropDown.xml
generated
@ -7,11 +7,11 @@
|
|||||||
<deviceKey>
|
<deviceKey>
|
||||||
<Key>
|
<Key>
|
||||||
<type value="VIRTUAL_DEVICE_PATH" />
|
<type value="VIRTUAL_DEVICE_PATH" />
|
||||||
<value value="C:\Users\erike\.android\avd\Pixel_5_API_33.avd" />
|
<value value="$USER_HOME$/.android/avd/Pixel_3a_API_34_extension_level_7_x86_64.avd" />
|
||||||
</Key>
|
</Key>
|
||||||
</deviceKey>
|
</deviceKey>
|
||||||
</Target>
|
</Target>
|
||||||
</targetSelectedWithDropDown>
|
</targetSelectedWithDropDown>
|
||||||
<timeTargetWasSelectedWithDropDown value="2023-08-21T02:45:21.143691700Z" />
|
<timeTargetWasSelectedWithDropDown value="2023-11-19T23:31:08.478703551Z" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
@ -11,7 +11,7 @@ plugins {
|
|||||||
|
|
||||||
android {
|
android {
|
||||||
namespace 'com.isolaatti'
|
namespace 'com.isolaatti'
|
||||||
compileSdk 33
|
compileSdk 34
|
||||||
viewBinding {
|
viewBinding {
|
||||||
enabled = true
|
enabled = true
|
||||||
}
|
}
|
||||||
@ -90,10 +90,14 @@ dependencies {
|
|||||||
// Customtabs
|
// Customtabs
|
||||||
implementation 'androidx.browser:browser:1.5.0'
|
implementation 'androidx.browser:browser:1.5.0'
|
||||||
|
|
||||||
|
implementation 'io.coil-kt:coil:2.5.0'
|
||||||
|
implementation 'io.coil-kt:coil-svg:2.5.0'
|
||||||
|
|
||||||
|
|
||||||
implementation "io.noties.markwon:core:$markwon_version"
|
implementation "io.noties.markwon:core:$markwon_version"
|
||||||
implementation "io.noties.markwon:editor:$markwon_version"
|
implementation "io.noties.markwon:editor:$markwon_version"
|
||||||
implementation "io.noties.markwon:image-picasso:$markwon_version"
|
|
||||||
implementation "io.noties.markwon:linkify:$markwon_version"
|
implementation "io.noties.markwon:linkify:$markwon_version"
|
||||||
|
implementation "io.noties.markwon:image-coil:$markwon_version"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -112,4 +116,5 @@ dependencies {
|
|||||||
implementation "androidx.preference:preference-ktx:1.2.1"
|
implementation "androidx.preference:preference-ktx:1.2.1"
|
||||||
|
|
||||||
implementation 'com.github.MikeOrtiz:TouchImageView:3.5'
|
implementation 'com.github.MikeOrtiz:TouchImageView:3.5'
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -36,7 +36,6 @@ class MainActivity : ComponentActivity() {
|
|||||||
|
|
||||||
if(currentToken == null) {
|
if(currentToken == null) {
|
||||||
val loginIntent = Intent(this@MainActivity, LogInActivity::class.java)
|
val loginIntent = Intent(this@MainActivity, LogInActivity::class.java)
|
||||||
loginIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK)
|
|
||||||
signInActivityResult.launch(loginIntent)
|
signInActivityResult.launch(loginIntent)
|
||||||
} else {
|
} else {
|
||||||
val homeActivityIntent = Intent(this@MainActivity, HomeActivity::class.java)
|
val homeActivityIntent = Intent(this@MainActivity, HomeActivity::class.java)
|
||||||
|
|||||||
@ -3,14 +3,10 @@ package com.isolaatti
|
|||||||
import com.isolaatti.auth.domain.AuthRepository
|
import com.isolaatti.auth.domain.AuthRepository
|
||||||
import com.isolaatti.connectivity.AuthenticationInterceptor
|
import com.isolaatti.connectivity.AuthenticationInterceptor
|
||||||
import com.isolaatti.connectivity.RetrofitClient
|
import com.isolaatti.connectivity.RetrofitClient
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
import com.squareup.picasso.RequestCreator
|
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import dagger.hilt.InstallIn
|
import dagger.hilt.InstallIn
|
||||||
import dagger.hilt.components.SingletonComponent
|
import dagger.hilt.components.SingletonComponent
|
||||||
import io.noties.markwon.image.AsyncDrawable
|
|
||||||
import io.noties.markwon.image.picasso.PicassoImagesPlugin
|
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
@InstallIn(SingletonComponent::class)
|
@InstallIn(SingletonComponent::class)
|
||||||
|
|||||||
@ -8,11 +8,16 @@ import dagger.hilt.android.HiltAndroidApp
|
|||||||
@HiltAndroidApp
|
@HiltAndroidApp
|
||||||
class MyApplication : Application() {
|
class MyApplication : Application() {
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
lateinit var myApp: MyApplication
|
||||||
|
}
|
||||||
|
|
||||||
private val activityLifecycleCallbacks = ActivityLifecycleCallbacks()
|
private val activityLifecycleCallbacks = ActivityLifecycleCallbacks()
|
||||||
lateinit var connectivityCallbackImpl: ConnectivityCallbackImpl
|
lateinit var connectivityCallbackImpl: ConnectivityCallbackImpl
|
||||||
|
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
super.onCreate()
|
super.onCreate()
|
||||||
|
myApp = this
|
||||||
registerActivityLifecycleCallbacks(activityLifecycleCallbacks)
|
registerActivityLifecycleCallbacks(activityLifecycleCallbacks)
|
||||||
connectivityCallbackImpl = ConnectivityCallbackImpl()
|
connectivityCallbackImpl = ConnectivityCallbackImpl()
|
||||||
getSystemService(ConnectivityManager::class.java).registerDefaultNetworkCallback(connectivityCallbackImpl)
|
getSystemService(ConnectivityManager::class.java).registerDefaultNetworkCallback(connectivityCallbackImpl)
|
||||||
|
|||||||
16
app/src/main/java/com/isolaatti/common/CoilImageLoader.kt
Normal file
16
app/src/main/java/com/isolaatti/common/CoilImageLoader.kt
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package com.isolaatti.common
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import coil.ImageLoader
|
||||||
|
import coil.decode.SvgDecoder
|
||||||
|
import com.isolaatti.MyApplication
|
||||||
|
|
||||||
|
object CoilImageLoader {
|
||||||
|
val imageLoader by lazy {
|
||||||
|
ImageLoader
|
||||||
|
.Builder(MyApplication.myApp)
|
||||||
|
.components {
|
||||||
|
add(SvgDecoder.Factory())
|
||||||
|
}.build()
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -6,11 +6,12 @@ import androidx.core.content.res.ResourcesCompat
|
|||||||
import androidx.recyclerview.widget.DiffUtil
|
import androidx.recyclerview.widget.DiffUtil
|
||||||
import androidx.recyclerview.widget.ListAdapter
|
import androidx.recyclerview.widget.ListAdapter
|
||||||
import androidx.recyclerview.widget.RecyclerView.ViewHolder
|
import androidx.recyclerview.widget.RecyclerView.ViewHolder
|
||||||
|
import coil.load
|
||||||
import com.isolaatti.R
|
import com.isolaatti.R
|
||||||
|
import com.isolaatti.common.CoilImageLoader.imageLoader
|
||||||
import com.isolaatti.databinding.ItemUserListBinding
|
import com.isolaatti.databinding.ItemUserListBinding
|
||||||
import com.isolaatti.profile.domain.entity.ProfileListItem
|
import com.isolaatti.profile.domain.entity.ProfileListItem
|
||||||
import com.isolaatti.utils.UrlGen
|
import com.isolaatti.utils.UrlGen
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
|
|
||||||
class UserListRecyclerViewAdapter(private val callback: UserItemCallback) : ListAdapter<ProfileListItem, UserListRecyclerViewAdapter.UserListViewHolder>(diffCallback) {
|
class UserListRecyclerViewAdapter(private val callback: UserItemCallback) : ListAdapter<ProfileListItem, UserListRecyclerViewAdapter.UserListViewHolder>(diffCallback) {
|
||||||
|
|
||||||
@ -28,7 +29,7 @@ class UserListRecyclerViewAdapter(private val callback: UserItemCallback) : List
|
|||||||
callback.itemClick(user.id)
|
callback.itemClick(user.id)
|
||||||
}
|
}
|
||||||
holder.item.name.text = user.name
|
holder.item.name.text = user.name
|
||||||
Picasso.get().load(UrlGen.userProfileImage(user.id)).into(holder.item.image)
|
holder.item.image.load(UrlGen.userProfileImage(user.id), imageLoader)
|
||||||
if(user.following == true) {
|
if(user.following == true) {
|
||||||
holder.item.followButton.text = context.getText(R.string.unfollow)
|
holder.item.followButton.text = context.getText(R.string.unfollow)
|
||||||
holder.item.followButton.setTextColor(ResourcesCompat.getColor(context.resources, R.color.danger, null))
|
holder.item.followButton.setTextColor(ResourcesCompat.getColor(context.resources, R.color.danger, null))
|
||||||
|
|||||||
@ -6,8 +6,8 @@ import okhttp3.Response
|
|||||||
class AuthenticationInterceptor(private val authRepository: dagger.Lazy<AuthRepository>) : Interceptor {
|
class AuthenticationInterceptor(private val authRepository: dagger.Lazy<AuthRepository>) : Interceptor {
|
||||||
|
|
||||||
override fun intercept(chain: Interceptor.Chain): Response {
|
override fun intercept(chain: Interceptor.Chain): Response {
|
||||||
val url = chain.request().url()
|
val url = chain.request().url
|
||||||
val path = url.url().path
|
val path = url.toUrl().path
|
||||||
if(RetrofitClient.excludedUrlsFromAuthentication.contains(path)){
|
if(RetrofitClient.excludedUrlsFromAuthentication.contains(path)){
|
||||||
return chain.proceed(chain.request())
|
return chain.proceed(chain.request())
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,9 +16,11 @@ import androidx.lifecycle.Observer
|
|||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.lifecycle.repeatOnLifecycle
|
import androidx.lifecycle.repeatOnLifecycle
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
|
import coil.load
|
||||||
import com.isolaatti.BuildConfig
|
import com.isolaatti.BuildConfig
|
||||||
import com.isolaatti.R
|
import com.isolaatti.R
|
||||||
import com.isolaatti.about.AboutActivity
|
import com.isolaatti.about.AboutActivity
|
||||||
|
import com.isolaatti.common.CoilImageLoader.imageLoader
|
||||||
import com.isolaatti.common.Dialogs
|
import com.isolaatti.common.Dialogs
|
||||||
import com.isolaatti.common.ErrorMessageViewModel
|
import com.isolaatti.common.ErrorMessageViewModel
|
||||||
import com.isolaatti.databinding.FragmentFeedBinding
|
import com.isolaatti.databinding.FragmentFeedBinding
|
||||||
@ -39,13 +41,12 @@ import com.isolaatti.posting.posts.presentation.EditPostContract
|
|||||||
import com.isolaatti.posting.posts.presentation.PostsRecyclerViewAdapter
|
import com.isolaatti.posting.posts.presentation.PostsRecyclerViewAdapter
|
||||||
import com.isolaatti.profile.ui.ProfileActivity
|
import com.isolaatti.profile.ui.ProfileActivity
|
||||||
import com.isolaatti.settings.ui.SettingsActivity
|
import com.isolaatti.settings.ui.SettingsActivity
|
||||||
import com.isolaatti.utils.PicassoImagesPluginDef
|
|
||||||
import com.isolaatti.utils.UrlGen
|
import com.isolaatti.utils.UrlGen
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import io.noties.markwon.AbstractMarkwonPlugin
|
import io.noties.markwon.AbstractMarkwonPlugin
|
||||||
import io.noties.markwon.Markwon
|
import io.noties.markwon.Markwon
|
||||||
import io.noties.markwon.MarkwonConfiguration
|
import io.noties.markwon.MarkwonConfiguration
|
||||||
|
import io.noties.markwon.image.coil.CoilImagesPlugin
|
||||||
import io.noties.markwon.image.destination.ImageDestinationProcessorRelativeToAbsolute
|
import io.noties.markwon.image.destination.ImageDestinationProcessorRelativeToAbsolute
|
||||||
import io.noties.markwon.linkify.LinkifyPlugin
|
import io.noties.markwon.linkify.LinkifyPlugin
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@ -162,7 +163,7 @@ class FeedFragment : Fragment(), OnUserInteractedWithPostCallback {
|
|||||||
.create(BuildConfig.backend))
|
.create(BuildConfig.backend))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.usePlugin(PicassoImagesPluginDef.picassoImagePlugin)
|
.usePlugin(CoilImagesPlugin.create(requireContext(), imageLoader))
|
||||||
.usePlugin(LinkifyPlugin.create())
|
.usePlugin(LinkifyPlugin.create())
|
||||||
.build()
|
.build()
|
||||||
adapter = PostsRecyclerViewAdapter(markwon, this)
|
adapter = PostsRecyclerViewAdapter(markwon, this)
|
||||||
@ -194,7 +195,7 @@ class FeedFragment : Fragment(), OnUserInteractedWithPostCallback {
|
|||||||
val textViewName: TextView? = header?.findViewById(R.id.textViewName)
|
val textViewName: TextView? = header?.findViewById(R.id.textViewName)
|
||||||
val textViewEmail: TextView? = header?.findViewById(R.id.textViewEmail)
|
val textViewEmail: TextView? = header?.findViewById(R.id.textViewEmail)
|
||||||
|
|
||||||
Picasso.get().load(UrlGen.userProfileImage(it.userId)).into(image)
|
image?.load(UrlGen.userProfileImage(it.userId), imageLoader)
|
||||||
image?.setOnClickListener {_ ->
|
image?.setOnClickListener {_ ->
|
||||||
PictureViewerActivity.startActivityWithUrls(requireContext(), arrayOf(UrlGen.userProfileImageFullQuality(it.userId)))
|
PictureViewerActivity.startActivityWithUrls(requireContext(), arrayOf(UrlGen.userProfileImageFullQuality(it.userId)))
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,15 +1,15 @@
|
|||||||
package com.isolaatti.images.picture_viewer.ui
|
package com.isolaatti.images.picture_viewer.ui
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
|
import coil.load
|
||||||
|
import com.isolaatti.common.CoilImageLoader.imageLoader
|
||||||
import com.isolaatti.databinding.FragmentTouchImageViewWrapperBinding
|
import com.isolaatti.databinding.FragmentTouchImageViewWrapperBinding
|
||||||
import com.ortiz.touchview.OnTouchImageViewListener
|
import com.ortiz.touchview.OnTouchImageViewListener
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
import java.lang.NullPointerException
|
|
||||||
|
|
||||||
class PictureViewerImageWrapperFragment : Fragment() {
|
class PictureViewerImageWrapperFragment : Fragment() {
|
||||||
|
|
||||||
@ -43,7 +43,7 @@ class PictureViewerImageWrapperFragment : Fragment() {
|
|||||||
|
|
||||||
|
|
||||||
url?.let {
|
url?.let {
|
||||||
Picasso.get().load(it).into(binding.touchImageView)
|
binding.touchImageView.load(it, imageLoader)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -4,11 +4,12 @@ import android.annotation.SuppressLint
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import coil.load
|
||||||
|
import com.isolaatti.common.CoilImageLoader.imageLoader
|
||||||
import com.isolaatti.databinding.CommentLayoutBinding
|
import com.isolaatti.databinding.CommentLayoutBinding
|
||||||
import com.isolaatti.posting.comments.domain.model.Comment
|
import com.isolaatti.posting.comments.domain.model.Comment
|
||||||
import com.isolaatti.common.OnUserInteractedCallback
|
import com.isolaatti.common.OnUserInteractedCallback
|
||||||
import com.isolaatti.utils.UrlGen
|
import com.isolaatti.utils.UrlGen
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
import io.noties.markwon.Markwon
|
import io.noties.markwon.Markwon
|
||||||
|
|
||||||
class CommentsRecyclerViewAdapter(private var list: List<Comment>, private val markwon: Markwon, private val callback: OnUserInteractedCallback) : RecyclerView.Adapter<CommentsRecyclerViewAdapter.CommentViewHolder>() {
|
class CommentsRecyclerViewAdapter(private var list: List<Comment>, private val markwon: Markwon, private val callback: OnUserInteractedCallback) : RecyclerView.Adapter<CommentsRecyclerViewAdapter.CommentViewHolder>() {
|
||||||
@ -45,9 +46,8 @@ class CommentsRecyclerViewAdapter(private var list: List<Comment>, private val m
|
|||||||
holder.viewBinding.moreButton.setOnClickListener {
|
holder.viewBinding.moreButton.setOnClickListener {
|
||||||
callback.onOptions(comment)
|
callback.onOptions(comment)
|
||||||
}
|
}
|
||||||
Picasso.get()
|
|
||||||
.load(UrlGen.userProfileImage(comment.userId))
|
holder.viewBinding.avatarPicture.load(UrlGen.userProfileImage(comment.userId), imageLoader)
|
||||||
.into(holder.viewBinding.avatarPicture)
|
|
||||||
|
|
||||||
val totalItems = list.size
|
val totalItems = list.size
|
||||||
if(totalItems > 0 && !requestedNewContent) {
|
if(totalItems > 0 && !requestedNewContent) {
|
||||||
|
|||||||
@ -17,6 +17,7 @@ import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_EXPANDE
|
|||||||
import com.google.android.material.bottomsheet.BottomSheetDialog
|
import com.google.android.material.bottomsheet.BottomSheetDialog
|
||||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
||||||
import com.isolaatti.R
|
import com.isolaatti.R
|
||||||
|
import com.isolaatti.common.CoilImageLoader.imageLoader
|
||||||
import com.isolaatti.common.Dialogs
|
import com.isolaatti.common.Dialogs
|
||||||
import com.isolaatti.common.ErrorMessageViewModel
|
import com.isolaatti.common.ErrorMessageViewModel
|
||||||
import com.isolaatti.databinding.BottomSheetPostCommentsBinding
|
import com.isolaatti.databinding.BottomSheetPostCommentsBinding
|
||||||
@ -31,11 +32,11 @@ import com.isolaatti.common.options_bottom_sheet.domain.Options
|
|||||||
import com.isolaatti.common.options_bottom_sheet.presentation.BottomSheetPostOptionsViewModel
|
import com.isolaatti.common.options_bottom_sheet.presentation.BottomSheetPostOptionsViewModel
|
||||||
import com.isolaatti.common.options_bottom_sheet.ui.BottomSheetPostOptionsFragment
|
import com.isolaatti.common.options_bottom_sheet.ui.BottomSheetPostOptionsFragment
|
||||||
import com.isolaatti.profile.ui.ProfileActivity
|
import com.isolaatti.profile.ui.ProfileActivity
|
||||||
import com.isolaatti.utils.PicassoImagesPluginDef
|
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import io.noties.markwon.AbstractMarkwonPlugin
|
import io.noties.markwon.AbstractMarkwonPlugin
|
||||||
import io.noties.markwon.Markwon
|
import io.noties.markwon.Markwon
|
||||||
import io.noties.markwon.MarkwonConfiguration
|
import io.noties.markwon.MarkwonConfiguration
|
||||||
|
import io.noties.markwon.image.coil.CoilImagesPlugin
|
||||||
import io.noties.markwon.image.destination.ImageDestinationProcessorRelativeToAbsolute
|
import io.noties.markwon.image.destination.ImageDestinationProcessorRelativeToAbsolute
|
||||||
import io.noties.markwon.linkify.LinkifyPlugin
|
import io.noties.markwon.linkify.LinkifyPlugin
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@ -186,7 +187,7 @@ class BottomSheetPostComments() : BottomSheetDialogFragment(), OnUserInteractedC
|
|||||||
.create("https://isolaatti.com/"))
|
.create("https://isolaatti.com/"))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.usePlugin(PicassoImagesPluginDef.picassoImagePlugin)
|
.usePlugin(CoilImagesPlugin.create(requireContext(), imageLoader))
|
||||||
.usePlugin(LinkifyPlugin.create())
|
.usePlugin(LinkifyPlugin.create())
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
|
|||||||
@ -1,24 +1,22 @@
|
|||||||
package com.isolaatti.posting.comments.ui
|
package com.isolaatti.posting.comments.ui
|
||||||
|
|
||||||
import android.app.Dialog
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.core.widget.doOnTextChanged
|
import androidx.core.widget.doOnTextChanged
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import androidx.fragment.app.activityViewModels
|
|
||||||
import androidx.fragment.app.viewModels
|
import androidx.fragment.app.viewModels
|
||||||
|
import coil.load
|
||||||
import com.isolaatti.R
|
import com.isolaatti.R
|
||||||
|
import com.isolaatti.common.CoilImageLoader.imageLoader
|
||||||
import com.isolaatti.databinding.FragmentEditCommentBinding
|
import com.isolaatti.databinding.FragmentEditCommentBinding
|
||||||
import com.isolaatti.posting.comments.presentation.CommentsViewModel
|
import com.isolaatti.posting.comments.presentation.CommentsViewModel
|
||||||
import com.isolaatti.utils.PicassoImagesPluginDef
|
|
||||||
import com.isolaatti.utils.UrlGen
|
import com.isolaatti.utils.UrlGen
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
import io.noties.markwon.AbstractMarkwonPlugin
|
import io.noties.markwon.AbstractMarkwonPlugin
|
||||||
import io.noties.markwon.Markwon
|
import io.noties.markwon.Markwon
|
||||||
import io.noties.markwon.MarkwonConfiguration
|
import io.noties.markwon.MarkwonConfiguration
|
||||||
|
import io.noties.markwon.image.coil.CoilImagesPlugin
|
||||||
import io.noties.markwon.image.destination.ImageDestinationProcessorRelativeToAbsolute
|
import io.noties.markwon.image.destination.ImageDestinationProcessorRelativeToAbsolute
|
||||||
import io.noties.markwon.linkify.LinkifyPlugin
|
import io.noties.markwon.linkify.LinkifyPlugin
|
||||||
|
|
||||||
@ -53,7 +51,7 @@ class EditCommentDialogFragment : DialogFragment() {
|
|||||||
.create("https://isolaatti.com/"))
|
.create("https://isolaatti.com/"))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.usePlugin(PicassoImagesPluginDef.picassoImagePlugin)
|
.usePlugin(CoilImagesPlugin.create(requireContext(), imageLoader))
|
||||||
.usePlugin(LinkifyPlugin.create())
|
.usePlugin(LinkifyPlugin.create())
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
@ -77,7 +75,7 @@ class EditCommentDialogFragment : DialogFragment() {
|
|||||||
binding.comment.also {
|
binding.comment.also {
|
||||||
it.textViewUsername.text = comment.username
|
it.textViewUsername.text = comment.username
|
||||||
markwon.setMarkdown(it.postContent, comment.textContent)
|
markwon.setMarkdown(it.postContent, comment.textContent)
|
||||||
Picasso.get().load(UrlGen.userProfileImage(comment.userId)).into(it.avatarPicture)
|
it.avatarPicture.load(UrlGen.userProfileImage(comment.userId), imageLoader)
|
||||||
}
|
}
|
||||||
binding.newCommentTextField.editText?.setText(comment.textContent)
|
binding.newCommentTextField.editText?.setText(comment.textContent)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,13 +9,14 @@ import android.widget.ImageView
|
|||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import androidx.recyclerview.widget.RecyclerView.ViewHolder
|
import androidx.recyclerview.widget.RecyclerView.ViewHolder
|
||||||
|
import coil.load
|
||||||
import com.google.android.material.button.MaterialButton
|
import com.google.android.material.button.MaterialButton
|
||||||
import com.google.android.material.card.MaterialCardView
|
import com.google.android.material.card.MaterialCardView
|
||||||
import com.isolaatti.R
|
import com.isolaatti.R
|
||||||
|
import com.isolaatti.common.CoilImageLoader.imageLoader
|
||||||
import com.isolaatti.common.OnUserInteractedWithPostCallback
|
import com.isolaatti.common.OnUserInteractedWithPostCallback
|
||||||
import com.isolaatti.posting.posts.domain.entity.Post
|
import com.isolaatti.posting.posts.domain.entity.Post
|
||||||
import com.isolaatti.utils.UrlGen.userProfileImage
|
import com.isolaatti.utils.UrlGen.userProfileImage
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
import io.noties.markwon.Markwon
|
import io.noties.markwon.Markwon
|
||||||
|
|
||||||
class PostsRecyclerViewAdapter (private val markwon: Markwon, private val callback: OnUserInteractedWithPostCallback) : RecyclerView.Adapter<PostsRecyclerViewAdapter.FeedViewHolder>(){
|
class PostsRecyclerViewAdapter (private val markwon: Markwon, private val callback: OnUserInteractedWithPostCallback) : RecyclerView.Adapter<PostsRecyclerViewAdapter.FeedViewHolder>(){
|
||||||
@ -64,7 +65,7 @@ class PostsRecyclerViewAdapter (private val markwon: Markwon, private val callba
|
|||||||
}
|
}
|
||||||
|
|
||||||
val profileImageView: ImageView = itemView.findViewById(R.id.avatar_picture)
|
val profileImageView: ImageView = itemView.findViewById(R.id.avatar_picture)
|
||||||
Picasso.get().load(userProfileImage(postDto.userId)).into(profileImageView)
|
profileImageView.load(userProfileImage(postDto.userId), imageLoader)
|
||||||
|
|
||||||
val dateTextView: TextView = itemView.findViewById(R.id.text_view_date)
|
val dateTextView: TextView = itemView.findViewById(R.id.text_view_date)
|
||||||
dateTextView.text = postDto.date
|
dateTextView.text = postDto.date
|
||||||
|
|||||||
@ -2,25 +2,23 @@ package com.isolaatti.posting.posts.viewer.ui
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.res.ColorStateList
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.activity.viewModels
|
import androidx.activity.viewModels
|
||||||
import androidx.core.content.ContentProviderCompat.requireContext
|
|
||||||
import androidx.core.content.res.ResourcesCompat
|
import androidx.core.content.res.ResourcesCompat
|
||||||
|
import coil.imageLoader
|
||||||
|
import coil.load
|
||||||
import com.isolaatti.BuildConfig
|
import com.isolaatti.BuildConfig
|
||||||
import com.isolaatti.R
|
import com.isolaatti.R
|
||||||
import com.isolaatti.common.ErrorMessageViewModel
|
|
||||||
import com.isolaatti.common.IsolaattiBaseActivity
|
import com.isolaatti.common.IsolaattiBaseActivity
|
||||||
import com.isolaatti.databinding.ActivityPostViewerBinding
|
import com.isolaatti.databinding.ActivityPostViewerBinding
|
||||||
import com.isolaatti.posting.comments.ui.BottomSheetPostComments
|
import com.isolaatti.posting.comments.ui.BottomSheetPostComments
|
||||||
import com.isolaatti.posting.posts.viewer.presentation.PostViewerViewModel
|
import com.isolaatti.posting.posts.viewer.presentation.PostViewerViewModel
|
||||||
import com.isolaatti.profile.ui.ProfileActivity
|
import com.isolaatti.profile.ui.ProfileActivity
|
||||||
import com.isolaatti.utils.PicassoImagesPluginDef
|
|
||||||
import com.isolaatti.utils.UrlGen
|
import com.isolaatti.utils.UrlGen
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
import io.noties.markwon.AbstractMarkwonPlugin
|
import io.noties.markwon.AbstractMarkwonPlugin
|
||||||
import io.noties.markwon.Markwon
|
import io.noties.markwon.Markwon
|
||||||
import io.noties.markwon.MarkwonConfiguration
|
import io.noties.markwon.MarkwonConfiguration
|
||||||
|
import io.noties.markwon.image.coil.CoilImagesPlugin
|
||||||
import io.noties.markwon.image.destination.ImageDestinationProcessorRelativeToAbsolute
|
import io.noties.markwon.image.destination.ImageDestinationProcessorRelativeToAbsolute
|
||||||
import io.noties.markwon.linkify.LinkifyPlugin
|
import io.noties.markwon.linkify.LinkifyPlugin
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
@ -62,7 +60,7 @@ class PostViewerActivity : IsolaattiBaseActivity() {
|
|||||||
viewModel.post.observe(this) {
|
viewModel.post.observe(this) {
|
||||||
markwon.setMarkdown(binding.markwonContainer, it.textContent)
|
markwon.setMarkdown(binding.markwonContainer, it.textContent)
|
||||||
binding.author.text = it.userName
|
binding.author.text = it.userName
|
||||||
Picasso.get().load(UrlGen.userProfileImage(it.userId)).into(binding.profileImageView)
|
binding.profileImageView.load(UrlGen.userProfileImage(it.userId), imageLoader)
|
||||||
binding.commentsInfo.text = getString(R.string.comments_info, it.numberOfComments)
|
binding.commentsInfo.text = getString(R.string.comments_info, it.numberOfComments)
|
||||||
binding.likesInfo.text = getString(R.string.likes_info, it.numberOfLikes)
|
binding.likesInfo.text = getString(R.string.likes_info, it.numberOfLikes)
|
||||||
binding.author.setOnClickListener {_ ->
|
binding.author.setOnClickListener {_ ->
|
||||||
@ -122,7 +120,7 @@ class PostViewerActivity : IsolaattiBaseActivity() {
|
|||||||
.create(BuildConfig.backend))
|
.create(BuildConfig.backend))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.usePlugin(PicassoImagesPluginDef.picassoImagePlugin)
|
.usePlugin(CoilImagesPlugin.create(this, imageLoader))
|
||||||
.usePlugin(LinkifyPlugin.create())
|
.usePlugin(LinkifyPlugin.create())
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
|
|||||||
@ -16,13 +16,14 @@ import androidx.lifecycle.lifecycleScope
|
|||||||
import androidx.lifecycle.repeatOnLifecycle
|
import androidx.lifecycle.repeatOnLifecycle
|
||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
|
import coil.load
|
||||||
import com.isolaatti.BuildConfig
|
import com.isolaatti.BuildConfig
|
||||||
import com.isolaatti.R
|
import com.isolaatti.R
|
||||||
|
import com.isolaatti.common.CoilImageLoader.imageLoader
|
||||||
import com.isolaatti.common.Dialogs
|
import com.isolaatti.common.Dialogs
|
||||||
import com.isolaatti.common.ErrorMessageViewModel
|
import com.isolaatti.common.ErrorMessageViewModel
|
||||||
import com.isolaatti.databinding.FragmentDiscussionsBinding
|
import com.isolaatti.databinding.FragmentDiscussionsBinding
|
||||||
import com.isolaatti.followers.domain.FollowingState
|
import com.isolaatti.followers.domain.FollowingState
|
||||||
import com.isolaatti.home.FeedFragment
|
|
||||||
import com.isolaatti.posting.posts.viewer.ui.PostViewerActivity
|
import com.isolaatti.posting.posts.viewer.ui.PostViewerActivity
|
||||||
import com.isolaatti.posting.comments.ui.BottomSheetPostComments
|
import com.isolaatti.posting.comments.ui.BottomSheetPostComments
|
||||||
import com.isolaatti.common.Ownable
|
import com.isolaatti.common.Ownable
|
||||||
@ -37,16 +38,14 @@ import com.isolaatti.posting.posts.presentation.EditPostContract
|
|||||||
import com.isolaatti.posting.posts.presentation.PostListingRecyclerViewAdapterWiring
|
import com.isolaatti.posting.posts.presentation.PostListingRecyclerViewAdapterWiring
|
||||||
import com.isolaatti.posting.posts.presentation.PostsRecyclerViewAdapter
|
import com.isolaatti.posting.posts.presentation.PostsRecyclerViewAdapter
|
||||||
import com.isolaatti.posting.posts.presentation.UpdateEvent
|
import com.isolaatti.posting.posts.presentation.UpdateEvent
|
||||||
import com.isolaatti.profile.data.remote.UserProfileDto
|
|
||||||
import com.isolaatti.profile.domain.entity.UserProfile
|
import com.isolaatti.profile.domain.entity.UserProfile
|
||||||
import com.isolaatti.profile.presentation.ProfileViewModel
|
import com.isolaatti.profile.presentation.ProfileViewModel
|
||||||
import com.isolaatti.utils.PicassoImagesPluginDef
|
|
||||||
import com.isolaatti.utils.UrlGen
|
import com.isolaatti.utils.UrlGen
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import io.noties.markwon.AbstractMarkwonPlugin
|
import io.noties.markwon.AbstractMarkwonPlugin
|
||||||
import io.noties.markwon.Markwon
|
import io.noties.markwon.Markwon
|
||||||
import io.noties.markwon.MarkwonConfiguration
|
import io.noties.markwon.MarkwonConfiguration
|
||||||
|
import io.noties.markwon.image.coil.CoilImagesPlugin
|
||||||
import io.noties.markwon.image.destination.ImageDestinationProcessorRelativeToAbsolute
|
import io.noties.markwon.image.destination.ImageDestinationProcessorRelativeToAbsolute
|
||||||
import io.noties.markwon.linkify.LinkifyPlugin
|
import io.noties.markwon.linkify.LinkifyPlugin
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@ -79,9 +78,7 @@ class ProfileMainFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private val profileObserver = Observer<UserProfile> { profile ->
|
private val profileObserver = Observer<UserProfile> { profile ->
|
||||||
Picasso.get()
|
viewBinding.profileImageView.load(UrlGen.userProfileImage(profile.userId), imageLoader)
|
||||||
.load(UrlGen.userProfileImage(profile.userId))
|
|
||||||
.into(viewBinding.profileImageView)
|
|
||||||
|
|
||||||
title = profile.name
|
title = profile.name
|
||||||
viewBinding.textViewUsername.text = profile.name
|
viewBinding.textViewUsername.text = profile.name
|
||||||
@ -274,7 +271,7 @@ class ProfileMainFragment : Fragment() {
|
|||||||
.create(BuildConfig.backend))
|
.create(BuildConfig.backend))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.usePlugin(PicassoImagesPluginDef.picassoImagePlugin)
|
.usePlugin(CoilImagesPlugin.create(requireContext(), imageLoader))
|
||||||
.usePlugin(LinkifyPlugin.create())
|
.usePlugin(LinkifyPlugin.create())
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
|
|||||||
@ -13,6 +13,7 @@ import androidx.fragment.app.Fragment
|
|||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import androidx.fragment.app.viewModels
|
import androidx.fragment.app.viewModels
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import com.isolaatti.BuildConfig
|
import com.isolaatti.BuildConfig
|
||||||
import com.isolaatti.R
|
import com.isolaatti.R
|
||||||
import com.isolaatti.databinding.FragmentMakeAccountBinding
|
import com.isolaatti.databinding.FragmentMakeAccountBinding
|
||||||
@ -145,10 +146,26 @@ class MakeAccountFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showNotAvailableEmailMessage() {}
|
private fun showNotAvailableEmailMessage() {
|
||||||
private fun showValidationProblemsMessage() {}
|
MaterialAlertDialogBuilder(requireContext())
|
||||||
private fun showErrorMessage() {}
|
.setMessage(R.string.email_used)
|
||||||
private fun showUnavailableMessage() {}
|
.show()
|
||||||
|
}
|
||||||
|
private fun showValidationProblemsMessage() {
|
||||||
|
MaterialAlertDialogBuilder(requireContext())
|
||||||
|
.setMessage(R.string.validation_error)
|
||||||
|
.show()
|
||||||
|
}
|
||||||
|
private fun showErrorMessage() {
|
||||||
|
MaterialAlertDialogBuilder(requireContext())
|
||||||
|
.setMessage(R.string.unknown_error)
|
||||||
|
.show()
|
||||||
|
}
|
||||||
|
private fun showUnavailableMessage() {
|
||||||
|
MaterialAlertDialogBuilder(requireContext())
|
||||||
|
.setMessage(R.string.username_invalid_feedback)
|
||||||
|
.show()
|
||||||
|
}
|
||||||
|
|
||||||
private fun goToHome() {
|
private fun goToHome() {
|
||||||
val intent = Intent(requireContext(), HomeActivity::class.java)
|
val intent = Intent(requireContext(), HomeActivity::class.java)
|
||||||
|
|||||||
@ -1,19 +0,0 @@
|
|||||||
package com.isolaatti.utils
|
|
||||||
|
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
import com.squareup.picasso.RequestCreator
|
|
||||||
import io.noties.markwon.image.AsyncDrawable
|
|
||||||
import io.noties.markwon.image.picasso.PicassoImagesPlugin
|
|
||||||
|
|
||||||
object PicassoImagesPluginDef {
|
|
||||||
val picassoImagePlugin = PicassoImagesPlugin.create(object: PicassoImagesPlugin.PicassoStore {
|
|
||||||
override fun load(drawable: AsyncDrawable): RequestCreator {
|
|
||||||
return Picasso.get().load(drawable.destination).tag(drawable)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun cancel(drawable: AsyncDrawable) {
|
|
||||||
Picasso.get().cancelTag(drawable)
|
|
||||||
}
|
|
||||||
|
|
||||||
})
|
|
||||||
}
|
|
||||||
@ -113,4 +113,6 @@
|
|||||||
<string name="username_invalid_feedback">Username is not available or is invalid</string>
|
<string name="username_invalid_feedback">Username is not available or is invalid</string>
|
||||||
<string name="password_invalid_feedback">Password must be at least 8 characters long</string>
|
<string name="password_invalid_feedback">Password must be at least 8 characters long</string>
|
||||||
<string name="display_name_invalid_feedback">Please provide a name. This does not have to be unique and can be your real name or not.</string>
|
<string name="display_name_invalid_feedback">Please provide a name. This does not have to be unique and can be your real name or not.</string>
|
||||||
|
<string name="validation_error">Validation error</string>
|
||||||
|
<string name="email_used">Email is in use already</string>
|
||||||
</resources>
|
</resources>
|
||||||
@ -12,8 +12,8 @@ buildscript {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
plugins {
|
plugins {
|
||||||
id 'com.android.application' version '8.1.1' apply false
|
id 'com.android.application' version '8.1.2' apply false
|
||||||
id 'com.android.library' version '8.1.1' apply false
|
id 'com.android.library' version '8.1.2' apply false
|
||||||
id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
|
id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
|
||||||
id 'com.google.dagger.hilt.android' version '2.47' apply false
|
id 'com.google.dagger.hilt.android' version '2.47' apply false
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user