...
This commit is contained in:
parent
0a77bd69d7
commit
ecb6122e7f
@ -0,0 +1,83 @@
|
|||||||
|
package bums.lunatic.launcher.behavior.behaviorimpl
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.util.AttributeSet
|
||||||
|
import android.util.DisplayMetrics
|
||||||
|
import android.util.TypedValue
|
||||||
|
import android.view.View
|
||||||
|
import android.widget.TextView
|
||||||
|
import androidx.annotation.NonNull
|
||||||
|
import androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import bums.lunatic.launcher.R
|
||||||
|
import com.google.android.material.appbar.AppBarLayout
|
||||||
|
import kotlin.math.abs
|
||||||
|
|
||||||
|
|
||||||
|
class BehaviorRecT(context: Context, attrs: AttributeSet?) :
|
||||||
|
CoordinatorLayout.Behavior<RecyclerView>(context, attrs) {
|
||||||
|
private val mContext: Context = context
|
||||||
|
|
||||||
|
private val marginTop: Float
|
||||||
|
private val marginTopAfter: Float
|
||||||
|
|
||||||
|
private val getYMax: Float =
|
||||||
|
context.getResources().getDimension(R.dimen.appbar_height) - context.getResources()
|
||||||
|
.getDimension(R.dimen.toolbar_height)
|
||||||
|
|
||||||
|
init {
|
||||||
|
marginTop = dpToPx(getYMax / 4)
|
||||||
|
marginTopAfter = dpToPx(getYMax / 8)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun layoutDependsOn(
|
||||||
|
@NonNull parent: CoordinatorLayout,
|
||||||
|
@NonNull child: RecyclerView,
|
||||||
|
@NonNull dependency: View
|
||||||
|
): Boolean {
|
||||||
|
return dependency is AppBarLayout
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dependency 의 View 의 변화가 있을때 이벤트가 들어옵니다.
|
||||||
|
*/
|
||||||
|
override fun onDependentViewChanged(
|
||||||
|
@NonNull parent: CoordinatorLayout,
|
||||||
|
@NonNull child: RecyclerView,
|
||||||
|
@NonNull dependency: View
|
||||||
|
): Boolean {
|
||||||
|
child.alpha = getRatioValue(
|
||||||
|
1f, 0f,
|
||||||
|
abs(dependency.y.toDouble()).toFloat(), getYMax
|
||||||
|
)
|
||||||
|
child.alpha = getRatioValue(
|
||||||
|
1f, 0f,
|
||||||
|
abs(dependency.y.toDouble()).toFloat(), getYMax
|
||||||
|
)
|
||||||
|
|
||||||
|
child.x = (dependency.width / 2 - (child.width / 2)).toFloat()
|
||||||
|
|
||||||
|
child.y = getRatioValue(
|
||||||
|
marginTop, marginTopAfter,
|
||||||
|
abs(dependency.y.toDouble()).toFloat(), getYMax
|
||||||
|
)
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun dpToPx(dp: Float): Float {
|
||||||
|
val dm: DisplayMetrics = mContext.getResources().getDisplayMetrics()
|
||||||
|
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, dm).toInt()
|
||||||
|
.toFloat()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getRatioValue(
|
||||||
|
firstValue: Float,
|
||||||
|
lastValue: Float,
|
||||||
|
getY: Float,
|
||||||
|
getYMax: Float
|
||||||
|
): Float {
|
||||||
|
val temp = -(firstValue - lastValue) * getY / getYMax
|
||||||
|
return firstValue + temp
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -521,12 +521,15 @@ internal class LauncherHome : Fragment() {
|
|||||||
mRssDataResult?.asFlow()?.collect { changes: ResultsChange<RssData> ->
|
mRssDataResult?.asFlow()?.collect { changes: ResultsChange<RssData> ->
|
||||||
commandHandler.removeCallbacks(hideListView)
|
commandHandler.removeCallbacks(hideListView)
|
||||||
commandHandler.removeCallbacks(infoUpdate)
|
commandHandler.removeCallbacks(infoUpdate)
|
||||||
|
BLog.LOGE("enableSwipeToDeleteAndUndo in changes")
|
||||||
when (changes) {
|
when (changes) {
|
||||||
is InitialResults,is UpdatedResults -> {
|
is InitialResults,is UpdatedResults -> {
|
||||||
WorkersDb.getRealm().apply {
|
WorkersDb.getRealm().apply {
|
||||||
lasted = copyFromRealm(changes.list)
|
lasted = copyFromRealm(changes.list)
|
||||||
|
BLog.LOGE("enableSwipeToDeleteAndUndo in new querys")
|
||||||
}
|
}
|
||||||
commandHandler.postDelayed(infoUpdate, UPDATE_DELAY)
|
commandHandler.postDelayed(infoUpdate, UPDATE_DELAY)
|
||||||
|
BLog.LOGE("enableSwipeToDeleteAndUndo postDelayed")
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
}
|
}
|
||||||
@ -557,7 +560,7 @@ internal class LauncherHome : Fragment() {
|
|||||||
|
|
||||||
fun queryInfos(keyword : String, category : ArrayList<String> = arrayListOf(), noLimit : Boolean = false) {
|
fun queryInfos(keyword : String, category : ArrayList<String> = arrayListOf(), noLimit : Boolean = false) {
|
||||||
beforeQuery()
|
beforeQuery()
|
||||||
var rQ = WorkersDb.getRealm().query<RssData>().query("read < $0", nomoreShowCount)
|
var rQ = WorkersDb.getRealm().query<RssData>()
|
||||||
if (!noLimit)rQ.query("pubDate > $0", beforeDay(Date(),3))
|
if (!noLimit)rQ.query("pubDate > $0", beforeDay(Date(),3))
|
||||||
if(keyword.length > 0) {
|
if(keyword.length > 0) {
|
||||||
// BLog.LOGE("queryInfos it >>> ${keyword}")
|
// BLog.LOGE("queryInfos it >>> ${keyword}")
|
||||||
@ -593,6 +596,9 @@ internal class LauncherHome : Fragment() {
|
|||||||
|
|
||||||
rQ = rQ.query(queryString)
|
rQ = rQ.query(queryString)
|
||||||
}
|
}
|
||||||
|
if(keyword.length == 0 && category.size == 0){
|
||||||
|
rQ = rQ.query("read < $0", 3).query("vote != $0", true)
|
||||||
|
}
|
||||||
updateQuery(rQ)
|
updateQuery(rQ)
|
||||||
rssStateVote = false
|
rssStateVote = false
|
||||||
}
|
}
|
||||||
@ -851,13 +857,16 @@ internal class LauncherHome : Fragment() {
|
|||||||
(viewHolder.itemView.getTag() as? RssData)?.let { rss ->
|
(viewHolder.itemView.getTag() as? RssData)?.let { rss ->
|
||||||
WorkersDb.getRealm().apply {
|
WorkersDb.getRealm().apply {
|
||||||
writeBlocking {
|
writeBlocking {
|
||||||
|
BLog.LOGE("enableSwipeToDeleteAndUndo in ")
|
||||||
if (rssStateVote && rss.vote) {
|
if (rssStateVote && rss.vote) {
|
||||||
rss.vote = false
|
rss.vote = false
|
||||||
rss.read = 0
|
rss.read = 0
|
||||||
} else {
|
} else {
|
||||||
rss.read += nomoreShowCount
|
rss.read += nomoreShowCount
|
||||||
}
|
}
|
||||||
|
BLog.LOGE("enableSwipeToDeleteAndUndo in before updated ${rss.read}")
|
||||||
copyToRealm(rss, UpdatePolicy.ALL)
|
copyToRealm(rss, UpdatePolicy.ALL)
|
||||||
|
BLog.LOGE("enableSwipeToDeleteAndUndo in updated")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -38,7 +38,6 @@ import bums.lunatic.launcher.openNews
|
|||||||
import bums.lunatic.launcher.openOpera
|
import bums.lunatic.launcher.openOpera
|
||||||
import bums.lunatic.launcher.openReddit
|
import bums.lunatic.launcher.openReddit
|
||||||
import bums.lunatic.launcher.openYouTube
|
import bums.lunatic.launcher.openYouTube
|
||||||
import bums.lunatic.launcher.utils.BLog
|
|
||||||
import bums.lunatic.launcher.workers.WorkersDb
|
import bums.lunatic.launcher.workers.WorkersDb
|
||||||
import com.google.android.material.imageview.ShapeableImageView
|
import com.google.android.material.imageview.ShapeableImageView
|
||||||
import com.squareup.picasso.Picasso
|
import com.squareup.picasso.Picasso
|
||||||
@ -48,7 +47,7 @@ import java.util.Date
|
|||||||
|
|
||||||
internal class RssItemAdapter (
|
internal class RssItemAdapter (
|
||||||
|
|
||||||
private val context: Context) : RecyclerView.Adapter<RssTag>() {
|
private val context: Context) : RecyclerView.Adapter<RssHolder>() {
|
||||||
companion object {
|
companion object {
|
||||||
@SuppressLint("SimpleDateFormat")
|
@SuppressLint("SimpleDateFormat")
|
||||||
val dateFormat = SimpleDateFormat("a HH:mm / yy - MM - dd")
|
val dateFormat = SimpleDateFormat("a HH:mm / yy - MM - dd")
|
||||||
@ -86,7 +85,7 @@ internal class RssItemAdapter (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private var rssDataItemLis: ArrayList<RssDataInterface> = arrayListOf()
|
private var rssDataItemLis: ArrayList<RssData> = arrayListOf()
|
||||||
val mLongClickListener = View.OnLongClickListener { v ->
|
val mLongClickListener = View.OnLongClickListener { v ->
|
||||||
(v?.tag as? RssData)?.let { rss ->
|
(v?.tag as? RssData)?.let { rss ->
|
||||||
WorkersDb.getRealm().apply {
|
WorkersDb.getRealm().apply {
|
||||||
@ -103,9 +102,9 @@ internal class RssItemAdapter (
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
override fun onCreateViewHolder(viewGroup: ViewGroup, i: Int): RssTag {
|
override fun onCreateViewHolder(viewGroup: ViewGroup, i: Int): RssHolder {
|
||||||
val binding = ListItemWithBinding.inflate(LayoutInflater.from(viewGroup.context), viewGroup, false)
|
val binding = ListItemWithBinding.inflate(LayoutInflater.from(viewGroup.context), viewGroup, false)
|
||||||
return RssTag(binding)
|
return RssHolder(binding)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getItemCount(): Int {
|
override fun getItemCount(): Int {
|
||||||
@ -115,7 +114,7 @@ internal class RssItemAdapter (
|
|||||||
|
|
||||||
|
|
||||||
@SuppressLint("SetTextI18n")
|
@SuppressLint("SetTextI18n")
|
||||||
override fun onBindViewHolder(holder: RssTag, position: Int) {
|
override fun onBindViewHolder(holder: RssHolder, position: Int) {
|
||||||
val rssData = rssDataItemLis[position]
|
val rssData = rssDataItemLis[position]
|
||||||
if (rssData.pubDate() > 1000L) {
|
if (rssData.pubDate() > 1000L) {
|
||||||
holder.view.date.text = dateFormat.format(Date(rssData.pubDate()))
|
holder.view.date.text = dateFormat.format(Date(rssData.pubDate()))
|
||||||
@ -123,7 +122,7 @@ internal class RssItemAdapter (
|
|||||||
holder.view.date.text = emptyDate
|
holder.view.date.text = emptyDate
|
||||||
}
|
}
|
||||||
|
|
||||||
holder.view.title.text = rssData.title()
|
holder.view.title.text = "".plus(if(rssData.vote) " * " else "").plus(rssData.title().plus("[R:${rssData.read}]"))
|
||||||
holder.view.desc.text = rssData.description()
|
holder.view.desc.text = rssData.description()
|
||||||
|
|
||||||
var param = holder.view.circlePreview.layoutParams
|
var param = holder.view.circlePreview.layoutParams
|
||||||
@ -156,7 +155,7 @@ internal class RssItemAdapter (
|
|||||||
this.recyclerView = recyclerView
|
this.recyclerView = recyclerView
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateData(newList: List<RssDataInterface>) {
|
fun updateData(newList: List<RssData>) {
|
||||||
try {
|
try {
|
||||||
DiffUtil.calculateDiff(RssItemDiffUtil(rssDataItemLis, newList)).apply {
|
DiffUtil.calculateDiff(RssItemDiffUtil(rssDataItemLis, newList)).apply {
|
||||||
|
|
||||||
@ -177,7 +176,7 @@ internal class RssItemAdapter (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class RssTag(var view: ListItemWithBinding) : RecyclerView.ViewHolder(view.root) {}
|
internal class RssHolder(var view: ListItemWithBinding) : RecyclerView.ViewHolder(view.root) {}
|
||||||
internal class RssItemDiffUtil(
|
internal class RssItemDiffUtil(
|
||||||
var oldList: List<RssDataInterface>, var newList: List<RssDataInterface>
|
var oldList: List<RssDataInterface>, var newList: List<RssDataInterface>
|
||||||
) : DiffUtil.Callback() {
|
) : DiffUtil.Callback() {
|
||||||
|
|||||||
@ -59,5 +59,4 @@ interface RssDataInterface {
|
|||||||
fun pubDate() : Long
|
fun pubDate() : Long
|
||||||
fun category() : RssDataType
|
fun category() : RssDataType
|
||||||
fun getCho() : String?
|
fun getCho() : String?
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -62,18 +62,21 @@
|
|||||||
|
|
||||||
</androidx.appcompat.widget.Toolbar>
|
</androidx.appcompat.widget.Toolbar>
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
|
||||||
android:layout_gravity="bottom|center_horizontal"
|
|
||||||
android:id="@+id/calendarDateView"
|
|
||||||
android:background="#ddd000"
|
|
||||||
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
|
|
||||||
android:orientation="vertical"
|
|
||||||
app:spanCount="7"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"/>
|
|
||||||
</com.google.android.material.appbar.CollapsingToolbarLayout>
|
</com.google.android.material.appbar.CollapsingToolbarLayout>
|
||||||
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:layout_gravity="bottom|center_horizontal"
|
||||||
|
android:id="@+id/calendarDateView"
|
||||||
|
android:background="#ddd000"
|
||||||
|
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
|
||||||
|
android:orientation="vertical"
|
||||||
|
app:spanCount="7"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
app:layout_behavior="bums.lunatic.launcher.behavior.behaviorimpl.BehaviorRecT"
|
||||||
|
/>
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
android:id="@+id/rv_main"
|
android:id="@+id/rv_main"
|
||||||
@ -114,4 +117,5 @@
|
|||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
app:layout_behavior="bums.lunatic.launcher.behavior.behaviorimpl.BehaviorTistory" />
|
app:layout_behavior="bums.lunatic.launcher.behavior.behaviorimpl.BehaviorTistory" />
|
||||||
|
|
||||||
|
|
||||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||||
Loading…
x
Reference in New Issue
Block a user