data binding

This commit is contained in:
KJG
2024-10-11 09:34:04 +09:00
parent 46e9865005
commit a190454e00
9 changed files with 231 additions and 163 deletions
@@ -83,6 +83,7 @@ import rasel.lunar.launcher.apps.AppDrawer
import rasel.lunar.launcher.apps.DismissCalback
import rasel.lunar.launcher.apps.SearchMenu
import rasel.lunar.launcher.databinding.LauncherActivityBinding
import rasel.lunar.launcher.databinding.RecommendedHourlyDressBinding
import rasel.lunar.launcher.feeds.Feeds
import rasel.lunar.launcher.feeds.WidgetHost
import rasel.lunar.launcher.helpers.Constants.Companion.KEY_APPLICATION_THEME
@@ -411,7 +412,6 @@ internal class LauncherActivity : AppCompatActivity() {
}
}
}
}
override fun onDestroy() {
@@ -191,7 +191,7 @@ internal class LauncherHome : Fragment() {
mSmsLogsAdapter = SmsLogsAdapter(arrayListOf(), requireContext())
mNotiAdapter = NotificationItemAdapter(requireContext())
mRssAdapter = RssItemAdapter(requireContext())
mWeatherAdapter = WeatherAdapter(arrayListOf())
mWeatherAdapter = WeatherAdapter(arrayListOf(),binding.noticeSummary)
// WorkersDb.getRealm().query<WeatherForcast>().first().find()?.forecast?.let {
// mWeatherAdapter?.update(it.forecastday)
// BLog.LOGE("saved weatherForcast >>> ${it.forecastday}")
@@ -2,34 +2,39 @@ package rasel.lunar.launcher.home.adapters
import android.annotation.SuppressLint
import android.graphics.Color
import android.os.Handler
import android.os.Looper
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.RecyclerView
import io.realm.kotlin.ext.query
import rasel.lunar.launcher.R
import rasel.lunar.launcher.databinding.ItemRecHourlyDressBinding
import rasel.lunar.launcher.databinding.ListItemWithBinding
import rasel.lunar.launcher.databinding.RecommendedHourlyDressBinding
import rasel.lunar.launcher.home.adapters.WeatherAdapter.ViewHolder
import rasel.lunar.launcher.model.Day
import rasel.lunar.launcher.model.Hour
import rasel.lunar.launcher.model.Location
import rasel.lunar.launcher.model.WeatherForcast
import rasel.lunar.launcher.utils.BLog
import rasel.lunar.launcher.workers.WorkersDb
import java.time.Instant
import java.time.ZoneId
import java.util.Calendar
import java.util.Date
class WeatherAdapter(private val dataSet: ArrayList<Hour>): RecyclerView.Adapter<ViewHolder>(){
class WeatherAdapter(
private val dataSet: ArrayList<Hour>, private val total : RecommendedHourlyDressBinding): RecyclerView.Adapter<ViewHolder>(){
var isChangedAmOrPm: Boolean = true
class ViewHolder(view: View): RecyclerView.ViewHolder(view) {
val viewItem: View
class ViewHolder(val viewItem: ItemRecHourlyDressBinding): RecyclerView.ViewHolder(viewItem.root)
init {
viewItem = view.findViewById(R.id.weather_item)
}
}
// @SuppressLint("NotifyDataSetChanged")
// @SuppressLint("NotifyDataSetChanged")
fun update(li: Collection<Hour>) {
li.toList()
this.dataSet.clear()
@@ -47,9 +52,11 @@ class WeatherAdapter(private val dataSet: ArrayList<Hour>): RecyclerView.Adapter
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.item_rec_hourly_dress, parent, false)
return ViewHolder(view)
// val view = LayoutInflater.from(parent.context)
// .inflate(R.layout.item_rec_hourly_dress, parent, false)
// val itemBinding: ItemRecHourlyDressBinding = DataBindingUtil.
val binding = ItemRecHourlyDressBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return ViewHolder(binding)
}
fun getToday() = Calendar.getInstance().get(Calendar.DAY_OF_YEAR)
@@ -62,68 +69,26 @@ class WeatherAdapter(private val dataSet: ArrayList<Hour>): RecyclerView.Adapter
// today.time = Date(data?.time_epoch?.toLong()?.times(1000L) ?: 0L)
// val dayOfItem = today.get(Calendar.DAY_OF_YEAR)
data?.let {
holder.viewItem.findViewById<TextView>(R.id.amOrPm)
.apply {
Instant.ofEpochSecond(it.time_epoch.toLong())
.atZone(ZoneId.systemDefault())
.hour
.run {
this@apply.text = if (this < 12) "오전" else "오후"
isChangedAmOrPm = when (this) {
12, 0 -> true
else -> false
}
}
this.visibility = if (isChangedAmOrPm || position == 0) View.VISIBLE else View.INVISIBLE
total.loc = WorkersDb.getRealm().query<Location>().also {
BLog.LOGE("re >>> ${it.description()}") // 쿼리 로그
}.find().first()
holder.viewItem.setHour(it)
BLog.LOGE("reeeeeeeeeee >>> ${holder.viewItem.hour.text}")
holder.viewItem.amOrPm.visibility =
if (arrayListOf(12, 0).contains(data.toZonedDateTime(it.time_epoch).hour) || position == 0) {
View.VISIBLE
} else View.INVISIBLE
holder.viewItem.hour.apply {
if (data.toZonedDateTime(it.time_epoch).hour == 0) {
this@apply.setTextColor(Color.BLACK)
this@apply.isSelected = true
} else {
this@apply.setTextColor(Color.WHITE)
this@apply.isSelected = false
}
holder.viewItem.findViewById<TextView>(R.id.hour)
.apply {
Instant.ofEpochSecond(it.time_epoch.toLong())
.atZone(ZoneId.systemDefault())
.run {
if (this.hour == 0) {
this@apply.setTextColor(Color.BLACK)
this@apply.isSelected = true
this@apply.text = when (this.dayOfYear - getToday()) {
1 -> "내일"
2 -> "모레"
3 -> "글피"
else -> "${this.dayOfMonth}"
}
} else {
this@apply.setTextColor(Color.WHITE)
this@apply.isSelected = false
this@apply.text = "${this.hour}"
}
}
}
var img: Int? = null
var textDress: String? = null
if (it.temp_c >= 23) {
img = R.drawable.dress_short_sleeves
textDress = "반팔"
} else if ((23 > it.temp_c) && (it.temp_c >= 20)) {
img = R.drawable.dress_long_sleeves
textDress = "긴팔"
} else if ((20 > it.temp_c) && (it.temp_c >= 17)) {
img = R.drawable.dress_knitwear
textDress = "니트"
} else if ((17 > it.temp_c) && (it.temp_c >= 12)) {
img = R.drawable.dress_flimsy_outer
textDress = "얇은겉옷"
} else if ((12 > it.temp_c) && (it.temp_c >= 6)) {
img = R.drawable.dress_heavy_outer
textDress = "두꺼운겉옷"
} else {
img = R.drawable.dress_padded_coat
textDress = "패딩"
}
holder.viewItem.findViewById<ImageView>(R.id.imgDress)
.setImageResource(img ?: R.drawable.dress_padded_coat)
holder.viewItem.findViewById<TextView>(R.id.textDress)
.text = textDress
holder.viewItem.findViewById<TextView>(R.id.temperature)
.text = "${it.temp_c}"
holder.viewItem.imgDress.setImageLevel(it.temp_c.toInt())
}
}
@@ -5,6 +5,10 @@ import io.realm.kotlin.types.RealmList
import io.realm.kotlin.types.RealmObject
import io.realm.kotlin.types.annotations.Ignore
import io.realm.kotlin.types.annotations.PrimaryKey
import rasel.lunar.launcher.R
import java.time.Instant
import java.time.ZoneId
import java.util.Calendar
class WeatherForcast: RealmObject {
@@ -32,6 +36,8 @@ class Location: RealmObject {
var tz_id: String? = null
var localtime_epoch = 0
var localtime: String? = null
fun getTextLocation(): String = "$name / $country"
}
class Current: RealmObject {
@@ -176,4 +182,57 @@ class Hour: RealmObject {
var gust_mph = 0.0
var gust_kph = 0.0
var uv = 0.0
fun toZonedDateTime(timeEpoch: Int) = Instant.ofEpochSecond(timeEpoch.toLong())
.atZone(ZoneId.systemDefault())
fun getAmOrPm(): String = toZonedDateTime(time_epoch).hour.run {
if (this < 12) "오전" else "오후"
}
fun getTextHour(): String = toZonedDateTime(time_epoch)
.run {
if (this.hour == 0) {
when (this.dayOfYear - Calendar.getInstance().get(Calendar.DAY_OF_YEAR)) {
1 -> "내일"
2 -> "모레"
3 -> "글피"
else -> "${this.dayOfMonth}"
}
} else {
"${this.hour}"
}
}
fun getDress(): String =
if (temp_c >= 23) {
"반팔"
} else if ((23 > temp_c) && (temp_c >= 20)) {
"긴팔"
} else if ((20 > temp_c) && (temp_c >= 17)) {
"니트"
} else if ((17 > temp_c) && (temp_c >= 12)) {
"얇은겉옷"
} else if ((12 > temp_c) && (temp_c >= 6)) {
"두꺼운겉옷"
} else {
"패딩"
}
fun getImgDress() =
if (temp_c >= 23) {
R.drawable.dress_short_sleeves
} else if ((23 > temp_c) && (temp_c >= 20)) {
"긴팔"
} else if ((20 > temp_c) && (temp_c >= 17)) {
"니트"
} else if ((17 > temp_c) && (temp_c >= 12)) {
"얇은겉옷"
} else if ((12 > temp_c) && (temp_c >= 6)) {
"두꺼운겉옷"
} else {
"패딩"
}
fun getTemp(): String = "${temp_c}"
}