Compare commits
	
		
			4 Commits
		
	
	
		
			v124041081
			...
			62f58fbc00
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 62f58fbc00 | |||
| 3a33cb4510 | |||
| 0bf9ca9a49 | |||
| 
						 | 
					61e0087894 | 
@@ -1,3 +1,11 @@
 | 
			
		||||
**v124041081**
 | 
			
		||||
 | 
			
		||||
- chore: comment.
 | 
			
		||||
- fix: Last time fixing the parsing date hack before moving it to os version.
 | 
			
		||||
- Changelog for v124030731 [CI SKIP]
 | 
			
		||||
 | 
			
		||||
--------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
**v124030731**
 | 
			
		||||
 | 
			
		||||
- fix: Basic auth and password can have non whitspace characters. Fixes 142.
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,11 @@ import androidx.appcompat.app.AppCompatActivity
 | 
			
		||||
import androidx.appcompat.widget.SearchView
 | 
			
		||||
import androidx.core.view.doOnNextLayout
 | 
			
		||||
import androidx.lifecycle.lifecycleScope
 | 
			
		||||
import androidx.recyclerview.widget.*
 | 
			
		||||
import androidx.recyclerview.widget.DividerItemDecoration
 | 
			
		||||
import androidx.recyclerview.widget.GridLayoutManager
 | 
			
		||||
import androidx.recyclerview.widget.ItemTouchHelper
 | 
			
		||||
import androidx.recyclerview.widget.RecyclerView
 | 
			
		||||
import androidx.recyclerview.widget.StaggeredGridLayoutManager
 | 
			
		||||
import androidx.work.Constraints
 | 
			
		||||
import androidx.work.ExistingPeriodicWorkPolicy
 | 
			
		||||
import androidx.work.PeriodicWorkRequestBuilder
 | 
			
		||||
@@ -58,7 +62,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar
 | 
			
		||||
    private lateinit var recyclerViewScrollListener: RecyclerView.OnScrollListener
 | 
			
		||||
    private lateinit var binding: ActivityHomeBinding
 | 
			
		||||
 | 
			
		||||
    private var recyclerAdapter: RecyclerView.Adapter<*>? = null
 | 
			
		||||
    private var recyclerAdapter: ItemsAdapter<out RecyclerView.ViewHolder>? = null
 | 
			
		||||
 | 
			
		||||
    private var fromTabShortcut: Boolean = false
 | 
			
		||||
 | 
			
		||||
@@ -498,7 +502,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar
 | 
			
		||||
            }
 | 
			
		||||
            binding.recyclerView.adapter = recyclerAdapter
 | 
			
		||||
        } else {
 | 
			
		||||
            (recyclerAdapter as ItemsAdapter<*>).updateAllItems(items)
 | 
			
		||||
            recyclerAdapter!!.updateAllItems(items)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        reloadBadges()
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,6 @@
 | 
			
		||||
package bou.amine.apps.readerforselfossv2.android.adapters
 | 
			
		||||
 | 
			
		||||
import android.app.Activity
 | 
			
		||||
import android.content.Context
 | 
			
		||||
import android.view.LayoutInflater
 | 
			
		||||
import android.view.View
 | 
			
		||||
import android.view.ViewGroup
 | 
			
		||||
@@ -14,7 +13,6 @@ import bou.amine.apps.readerforselfossv2.android.utils.LinkOnTouchListener
 | 
			
		||||
import bou.amine.apps.readerforselfossv2.android.utils.glide.bitmapCenterCrop
 | 
			
		||||
import bou.amine.apps.readerforselfossv2.android.utils.glide.circularDrawable
 | 
			
		||||
import bou.amine.apps.readerforselfossv2.android.utils.openInBrowserAsNewTask
 | 
			
		||||
import bou.amine.apps.readerforselfossv2.android.utils.openItemUrl
 | 
			
		||||
import bou.amine.apps.readerforselfossv2.android.utils.shareLink
 | 
			
		||||
import bou.amine.apps.readerforselfossv2.model.SelfossModel
 | 
			
		||||
import bou.amine.apps.readerforselfossv2.repository.Repository
 | 
			
		||||
@@ -32,11 +30,10 @@ import org.kodein.di.instance
 | 
			
		||||
 | 
			
		||||
class ItemCardAdapter(
 | 
			
		||||
    override val app: Activity,
 | 
			
		||||
    override var items: ArrayList<SelfossModel.Item>,
 | 
			
		||||
    override val updateItems: (ArrayList<SelfossModel.Item>) -> Unit,
 | 
			
		||||
    override val items: ArrayList<SelfossModel.Item>,
 | 
			
		||||
    override val updateHomeItems: (ArrayList<SelfossModel.Item>) -> Unit,
 | 
			
		||||
) : ItemsAdapter<ItemCardAdapter.ViewHolder>() {
 | 
			
		||||
    private lateinit var binding: CardItemBinding
 | 
			
		||||
    private val c: Context = app.baseContext
 | 
			
		||||
    override lateinit var binding: CardItemBinding
 | 
			
		||||
    private val imageMaxHeight: Int =
 | 
			
		||||
        c.resources.getDimension(R.dimen.card_image_max_height).toInt()
 | 
			
		||||
 | 
			
		||||
@@ -52,8 +49,8 @@ class ItemCardAdapter(
 | 
			
		||||
        return ViewHolder(binding)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun handleClickListeners(position: Int) {
 | 
			
		||||
        binding.favButton.setOnClickListener {
 | 
			
		||||
    private fun handleClickListeners(holderBinding: CardItemBinding, position: Int) {
 | 
			
		||||
        holderBinding.favButton.setOnClickListener {
 | 
			
		||||
            val item = items[position]
 | 
			
		||||
            if (item.starred) {
 | 
			
		||||
                CoroutineScope(Dispatchers.IO).launch {
 | 
			
		||||
@@ -78,27 +75,15 @@ class ItemCardAdapter(
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun handleLinkOpening(position: Int) {
 | 
			
		||||
        binding.root.setOnClickListener {
 | 
			
		||||
            repository.setReaderItems(items)
 | 
			
		||||
            c.openItemUrl(
 | 
			
		||||
                position,
 | 
			
		||||
                items[position].getLinkDecoded(),
 | 
			
		||||
                appSettingsService.isArticleViewerEnabled(),
 | 
			
		||||
                app,
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onBindViewHolder(
 | 
			
		||||
        holder: ViewHolder,
 | 
			
		||||
        position: Int,
 | 
			
		||||
    ) {
 | 
			
		||||
        with(holder) {
 | 
			
		||||
            val itm = items[holder.bindingAdapterPosition]
 | 
			
		||||
            val itm = items[position]
 | 
			
		||||
 | 
			
		||||
            handleClickListeners(holder.bindingAdapterPosition)
 | 
			
		||||
            handleLinkOpening(holder.bindingAdapterPosition)
 | 
			
		||||
            handleClickListeners(binding, position)
 | 
			
		||||
            handleLinkOpening(binding, position)
 | 
			
		||||
 | 
			
		||||
            binding.favButton.isSelected = itm.starred
 | 
			
		||||
            if (appSettingsService.getPublicAccess()) {
 | 
			
		||||
@@ -140,9 +125,5 @@ class ItemCardAdapter(
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun getItemCount(): Int {
 | 
			
		||||
        return items.size
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    inner class ViewHolder(val binding: CardItemBinding) : RecyclerView.ViewHolder(binding.root)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,6 @@
 | 
			
		||||
package bou.amine.apps.readerforselfossv2.android.adapters
 | 
			
		||||
 | 
			
		||||
import android.app.Activity
 | 
			
		||||
import android.content.Context
 | 
			
		||||
import android.view.LayoutInflater
 | 
			
		||||
import android.view.ViewGroup
 | 
			
		||||
import androidx.recyclerview.widget.RecyclerView
 | 
			
		||||
@@ -10,7 +9,6 @@ import bou.amine.apps.readerforselfossv2.android.databinding.ListItemBinding
 | 
			
		||||
import bou.amine.apps.readerforselfossv2.android.sendSilentlyWithAcraWithName
 | 
			
		||||
import bou.amine.apps.readerforselfossv2.android.utils.LinkOnTouchListener
 | 
			
		||||
import bou.amine.apps.readerforselfossv2.android.utils.glide.circularDrawable
 | 
			
		||||
import bou.amine.apps.readerforselfossv2.android.utils.openItemUrl
 | 
			
		||||
import bou.amine.apps.readerforselfossv2.model.SelfossModel
 | 
			
		||||
import bou.amine.apps.readerforselfossv2.repository.Repository
 | 
			
		||||
import bou.amine.apps.readerforselfossv2.service.AppSettingsService
 | 
			
		||||
@@ -23,11 +21,10 @@ import org.kodein.di.instance
 | 
			
		||||
 | 
			
		||||
class ItemListAdapter(
 | 
			
		||||
    override val app: Activity,
 | 
			
		||||
    override var items: ArrayList<SelfossModel.Item>,
 | 
			
		||||
    override val updateItems: (ArrayList<SelfossModel.Item>) -> Unit,
 | 
			
		||||
    override val items: ArrayList<SelfossModel.Item>,
 | 
			
		||||
    override val updateHomeItems: (ArrayList<SelfossModel.Item>) -> Unit,
 | 
			
		||||
) : ItemsAdapter<ItemListAdapter.ViewHolder>() {
 | 
			
		||||
    private lateinit var binding: ListItemBinding
 | 
			
		||||
    private val c: Context = app.baseContext
 | 
			
		||||
    override lateinit var binding: ListItemBinding
 | 
			
		||||
 | 
			
		||||
    override val di: DI by closestDI(app)
 | 
			
		||||
    override val repository: Repository by instance()
 | 
			
		||||
@@ -46,17 +43,9 @@ class ItemListAdapter(
 | 
			
		||||
        position: Int,
 | 
			
		||||
    ) {
 | 
			
		||||
        with(holder) {
 | 
			
		||||
            val itm = items[holder.bindingAdapterPosition]
 | 
			
		||||
            val itm = items[position]
 | 
			
		||||
 | 
			
		||||
            binding.root.setOnClickListener {
 | 
			
		||||
                repository.setReaderItems(items)
 | 
			
		||||
                c.openItemUrl(
 | 
			
		||||
                    holder.bindingAdapterPosition,
 | 
			
		||||
                    items[holder.bindingAdapterPosition].getLinkDecoded(),
 | 
			
		||||
                    appSettingsService.isArticleViewerEnabled(),
 | 
			
		||||
                    app,
 | 
			
		||||
                )
 | 
			
		||||
            }
 | 
			
		||||
            handleLinkOpening(binding, position)
 | 
			
		||||
 | 
			
		||||
            binding.title.text = itm.title.getHtmlDecoded()
 | 
			
		||||
 | 
			
		||||
@@ -83,7 +72,5 @@ class ItemListAdapter(
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun getItemCount(): Int = items.size
 | 
			
		||||
 | 
			
		||||
    inner class ViewHolder(val binding: ListItemBinding) : RecyclerView.ViewHolder(binding.root)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,13 @@
 | 
			
		||||
package bou.amine.apps.readerforselfossv2.android.adapters
 | 
			
		||||
 | 
			
		||||
import android.app.Activity
 | 
			
		||||
import android.content.Context
 | 
			
		||||
import android.graphics.Color
 | 
			
		||||
import android.widget.TextView
 | 
			
		||||
import androidx.recyclerview.widget.RecyclerView
 | 
			
		||||
import androidx.viewbinding.ViewBinding
 | 
			
		||||
import bou.amine.apps.readerforselfossv2.android.R
 | 
			
		||||
import bou.amine.apps.readerforselfossv2.android.utils.openItemUrl
 | 
			
		||||
import bou.amine.apps.readerforselfossv2.model.SelfossModel
 | 
			
		||||
import bou.amine.apps.readerforselfossv2.repository.Repository
 | 
			
		||||
import bou.amine.apps.readerforselfossv2.service.AppSettingsService
 | 
			
		||||
@@ -16,16 +19,20 @@ import kotlinx.coroutines.launch
 | 
			
		||||
import org.kodein.di.DIAware
 | 
			
		||||
 | 
			
		||||
abstract class ItemsAdapter<VH : RecyclerView.ViewHolder?> : RecyclerView.Adapter<VH>(), DIAware {
 | 
			
		||||
    abstract var items: ArrayList<SelfossModel.Item>
 | 
			
		||||
    abstract val items: ArrayList<SelfossModel.Item>
 | 
			
		||||
    abstract val repository: Repository
 | 
			
		||||
    abstract val binding: ViewBinding
 | 
			
		||||
    abstract val appSettingsService: AppSettingsService
 | 
			
		||||
    abstract val app: Activity
 | 
			
		||||
    abstract val updateItems: (ArrayList<SelfossModel.Item>) -> Unit
 | 
			
		||||
    abstract val updateHomeItems: (ArrayList<SelfossModel.Item>) -> Unit
 | 
			
		||||
 | 
			
		||||
    protected val c: Context get() = app.baseContext
 | 
			
		||||
 | 
			
		||||
    fun updateAllItems(items: ArrayList<SelfossModel.Item>) {
 | 
			
		||||
        this.items = items
 | 
			
		||||
        this.items.clear()
 | 
			
		||||
        this.items.addAll(items)
 | 
			
		||||
        updateHomeItems(items)
 | 
			
		||||
        notifyDataSetChanged()
 | 
			
		||||
        updateItems(this.items)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun unmarkSnackbar(
 | 
			
		||||
@@ -70,6 +77,18 @@ abstract class ItemsAdapter<VH : RecyclerView.ViewHolder?> : RecyclerView.Adapte
 | 
			
		||||
        s.show()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected fun handleLinkOpening(holderBinding: ViewBinding, position: Int) {
 | 
			
		||||
        holderBinding.root.setOnClickListener {
 | 
			
		||||
            repository.setReaderItems(items)
 | 
			
		||||
            c.openItemUrl(
 | 
			
		||||
                position,
 | 
			
		||||
                items[position].getLinkDecoded(),
 | 
			
		||||
                appSettingsService.isArticleViewerEnabled(),
 | 
			
		||||
                app,
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun handleItemAtIndex(position: Int) {
 | 
			
		||||
        if (items[position].unread) {
 | 
			
		||||
            readItemAtIndex(items[position], position)
 | 
			
		||||
@@ -90,7 +109,7 @@ abstract class ItemsAdapter<VH : RecyclerView.ViewHolder?> : RecyclerView.Adapte
 | 
			
		||||
            items.remove(item)
 | 
			
		||||
            notifyItemRemoved(position)
 | 
			
		||||
            notifyItemRangeChanged(position, itemCount)
 | 
			
		||||
            updateItems(items)
 | 
			
		||||
            updateHomeItems(items)
 | 
			
		||||
        } else {
 | 
			
		||||
            notifyItemChanged(position)
 | 
			
		||||
        }
 | 
			
		||||
@@ -119,13 +138,15 @@ abstract class ItemsAdapter<VH : RecyclerView.ViewHolder?> : RecyclerView.Adapte
 | 
			
		||||
    ) {
 | 
			
		||||
        items.add(position, item)
 | 
			
		||||
        notifyItemInserted(position)
 | 
			
		||||
        updateItems(items)
 | 
			
		||||
        updateHomeItems(items)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun addItemsAtEnd(newItems: List<SelfossModel.Item>) {
 | 
			
		||||
        val oldSize = items.size
 | 
			
		||||
        items.addAll(newItems)
 | 
			
		||||
        notifyItemRangeInserted(oldSize, newItems.size)
 | 
			
		||||
        updateItems(items)
 | 
			
		||||
        updateHomeItems(items)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun getItemCount(): Int = items.size
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user