Location 수정중....
This commit is contained in:
parent
007be81744
commit
fe210b1f7d
@ -53,6 +53,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import androidx.work.OneTimeWorkRequest
|
||||
import androidx.work.WorkManager
|
||||
import io.realm.kotlin.Realm
|
||||
import io.realm.kotlin.ext.asFlow
|
||||
import io.realm.kotlin.ext.query
|
||||
import io.realm.kotlin.notifications.InitialObject
|
||||
@ -61,6 +62,7 @@ import io.realm.kotlin.notifications.ObjectChange
|
||||
import io.realm.kotlin.notifications.ResultsChange
|
||||
import io.realm.kotlin.notifications.UpdatedObject
|
||||
import io.realm.kotlin.notifications.UpdatedResults
|
||||
import io.realm.kotlin.query.RealmQuery
|
||||
import io.realm.kotlin.query.RealmResults
|
||||
import io.realm.kotlin.query.Sort
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
@ -93,6 +95,7 @@ import rasel.lunar.launcher.home.adapters.SmsLogsAdapter
|
||||
import rasel.lunar.launcher.home.adapters.WeatherAdapter
|
||||
import rasel.lunar.launcher.model.CurrentPlayItem
|
||||
import rasel.lunar.launcher.model.Hour
|
||||
import rasel.lunar.launcher.model.Location
|
||||
import rasel.lunar.launcher.model.NotificationItem
|
||||
import rasel.lunar.launcher.model.RssData
|
||||
import rasel.lunar.launcher.model.RssDataInterface
|
||||
@ -106,6 +109,8 @@ import rasel.lunar.launcher.utils.JamoUtils
|
||||
import rasel.lunar.launcher.utils.SimpleFingerGestures
|
||||
import rasel.lunar.launcher.utils.beforeDay
|
||||
import rasel.lunar.launcher.view.TableRadioGroup
|
||||
import rasel.lunar.launcher.workers.LocationGetter
|
||||
import rasel.lunar.launcher.workers.OpenWeatherGetter
|
||||
import rasel.lunar.launcher.workers.RecentCall
|
||||
import rasel.lunar.launcher.workers.RecentSms
|
||||
import rasel.lunar.launcher.workers.TelegramBotGetter
|
||||
@ -295,6 +300,18 @@ internal class LauncherHome : Fragment() {
|
||||
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
private fun queryWeather() {
|
||||
val re = WorkersDb.getRealm().query<Hour>("lat == $0 AND lon == $1", OpenWeatherGetter.lat, OpenWeatherGetter.lon).find()
|
||||
BLog.LOGE("testtestetset ${LocationGetter.latitude}")
|
||||
val weatherJob2 = CoroutineScope(Dispatchers.Default).launch {
|
||||
re.asFlow().collect { changes ->
|
||||
BLog.LOGE("testtestetset ${changes.list}")
|
||||
Handler(Looper.getMainLooper()).post {
|
||||
// BLog.LOGE("testtestetset ${changes.list.first().lat}")
|
||||
}
|
||||
}
|
||||
}
|
||||
weatherJob2.start()
|
||||
|
||||
mWeatherResult = WorkersDb.getRealm().query<WeatherForcast>().find()
|
||||
val weatherJob = CoroutineScope(Dispatchers.Default).launch {
|
||||
mWeatherResult?.asFlow()?.collect { changes ->
|
||||
@ -312,9 +329,13 @@ internal class LauncherHome : Fragment() {
|
||||
.filter(
|
||||
i.hourRealm.also { hli ->
|
||||
BLog.LOGE("LauncherHome Saved hli size >>> ${hli.size}")
|
||||
BLog.LOGE("LauncherHome Saved hli size >>> ${hli.first().lat}")
|
||||
BLog.LOGE("LauncherHome Saved hli size >>> ${hli.first().lon}")
|
||||
}
|
||||
).also { fli ->
|
||||
BLog.LOGE("LauncherHome Saved fli size >>> ${fli.size}")
|
||||
BLog.LOGE("LauncherHome Saved hli size >>> ${fli.first().lat}")
|
||||
BLog.LOGE("LauncherHome Saved hli size >>> ${fli.first().lon}")
|
||||
}
|
||||
)
|
||||
} else {
|
||||
|
||||
@ -2,26 +2,24 @@ package rasel.lunar.launcher.home.adapters
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.graphics.Color
|
||||
import android.support.annotation.ColorInt
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import io.realm.kotlin.ext.toRealmList
|
||||
import rasel.lunar.launcher.R
|
||||
import rasel.lunar.launcher.home.adapters.WeatherAdapter.ViewHolder
|
||||
import rasel.lunar.launcher.model.Forecastday
|
||||
import rasel.lunar.launcher.model.Day
|
||||
import rasel.lunar.launcher.model.Hour
|
||||
import rasel.lunar.launcher.model.WeatherForcast
|
||||
import rasel.lunar.launcher.utils.BLog
|
||||
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>(){
|
||||
var isChangedAmOrPm: Boolean = true
|
||||
var day: Int = 0
|
||||
|
||||
class ViewHolder(view: View): RecyclerView.ViewHolder(view) {
|
||||
val viewItem: View
|
||||
@ -54,10 +52,15 @@ class WeatherAdapter(private val dataSet: ArrayList<Hour>): RecyclerView.Adapter
|
||||
return ViewHolder(view)
|
||||
}
|
||||
|
||||
fun getToday() = Calendar.getInstance().get(Calendar.DAY_OF_YEAR)
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||
val data = dataSet[position] as? Hour
|
||||
BLog.LOGE("saved weatherForcast >>> asFlow ${dataSet.size}")
|
||||
// val today = Calendar.getInstance()
|
||||
// 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 {
|
||||
@ -75,14 +78,13 @@ class WeatherAdapter(private val dataSet: ArrayList<Hour>): RecyclerView.Adapter
|
||||
}
|
||||
holder.viewItem.findViewById<TextView>(R.id.hour)
|
||||
.apply {
|
||||
this.isSelected = (System.currentTimeMillis() % 3 == 0L)
|
||||
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 (day++) {
|
||||
this@apply.text = when (this.dayOfYear - getToday()) {
|
||||
1 -> "내일"
|
||||
2 -> "모레"
|
||||
3 -> "글피"
|
||||
@ -94,13 +96,34 @@ class WeatherAdapter(private val dataSet: ArrayList<Hour>): RecyclerView.Adapter
|
||||
this@apply.text = "${this.hour}시"
|
||||
}
|
||||
}
|
||||
holder.viewItem.findViewById<ImageView>(R.id.imgDress)
|
||||
.run { this.setImageResource(R.drawable.ico_time) }
|
||||
holder.viewItem.findViewById<TextView>(R.id.temperature)
|
||||
.run {
|
||||
this.text = "${it.temp_c}도"
|
||||
}
|
||||
}
|
||||
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}도"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -8,6 +8,9 @@ import io.realm.kotlin.types.annotations.PrimaryKey
|
||||
|
||||
|
||||
class WeatherForcast: RealmObject {
|
||||
@PrimaryKey
|
||||
var isOnlyKey = "isOnlyKey"
|
||||
|
||||
var location: Location? = null
|
||||
var current: Current? = null
|
||||
var forecast: Forecast? = null
|
||||
@ -133,6 +136,9 @@ class Astro: RealmObject {
|
||||
}
|
||||
|
||||
class Hour: RealmObject {
|
||||
var lat = 0.0
|
||||
var lon = 0.0
|
||||
|
||||
@PrimaryKey
|
||||
var time_epoch = 0
|
||||
var time: String? = null
|
||||
|
||||
@ -8,6 +8,7 @@ import com.google.android.gms.location.LocationServices
|
||||
import com.google.android.gms.location.Priority
|
||||
import com.google.android.gms.tasks.CancellationTokenSource
|
||||
import io.realm.kotlin.UpdatePolicy
|
||||
import io.realm.kotlin.ext.asFlow
|
||||
import io.realm.kotlin.ext.query
|
||||
import rasel.lunar.launcher.model.WeatherForcast
|
||||
import rasel.lunar.launcher.utils.BLog
|
||||
@ -22,16 +23,17 @@ import retrofit2.http.Query
|
||||
class OpenWeatherGetter(context: Context, workerParams: WorkerParameters) : BaseGetter(context, workerParams) {
|
||||
companion object {
|
||||
val TAG = "OpenWeatherGetter"
|
||||
var lon: Double? = null // 경도
|
||||
var lat: Double? = null // 위도
|
||||
}
|
||||
//////////////////////////////////////////
|
||||
// weatherapi
|
||||
val VER_WEATHERAPI = "v1"
|
||||
val URI_WEATHERAPI = "https://api.weatherapi.com"
|
||||
val KEY_WEATHERAPI = "8133d83d23ab4175a4160624241909"
|
||||
val DAYS = 2
|
||||
val DAYS = 3
|
||||
//////////////////////////////////////////
|
||||
var lon: Double? = null // 경도
|
||||
var lat: Double? = null // 위도
|
||||
|
||||
//////////////////////////////////////////
|
||||
|
||||
override fun realWork(): Result {
|
||||
@ -48,6 +50,7 @@ class OpenWeatherGetter(context: Context, workerParams: WorkerParameters) : Base
|
||||
}
|
||||
|
||||
fun getWeather(latitude: Double, longitude: Double) {
|
||||
BLog.LOGE("into getWeather")
|
||||
Retrofit.Builder()
|
||||
.baseUrl(URI_WEATHERAPI)
|
||||
.addConverterFactory(GsonConverterFactory.create())
|
||||
@ -59,14 +62,22 @@ class OpenWeatherGetter(context: Context, workerParams: WorkerParameters) : Base
|
||||
q = "$latitude,$longitude",
|
||||
days = DAYS.toString()
|
||||
)?.execute()?.let { response ->
|
||||
BLog.LOGE("into getWeather afterc excute")
|
||||
BLog.LOGE("weatherApi forecast response >>> $response")
|
||||
response.body()?.let { weatherInfo ->
|
||||
BLog.LOGE("into getWeather on body ")
|
||||
weatherInfo.readyForSaving()
|
||||
weatherInfo.forecast?.forecastdayRealm?.forEach {
|
||||
it.hourRealm.forEach {h ->
|
||||
h.lat = lat ?: 0.0
|
||||
h.lon = lon ?: 0.0
|
||||
}
|
||||
}
|
||||
// Realm에 저장
|
||||
WorkersDb.getRealm().writeBlocking {
|
||||
weatherInfo.readyForSaving()
|
||||
copyToRealm(weatherInfo, UpdatePolicy.ALL)
|
||||
}
|
||||
BLog.LOGE("saved weatherForcast >>> ${WorkersDb.getRealm().query<WeatherForcast>().first().find()}")
|
||||
BLog.LOGE("saved weatherForcast >>> ${WorkersDb.getRealm().query<WeatherForcast>().first().find()?.forecast?.forecastdayRealm?.size}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BIN
app/src/main/res/drawable-nodpi/dress_flimsy_outer.png
Normal file
BIN
app/src/main/res/drawable-nodpi/dress_flimsy_outer.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 19 KiB |
BIN
app/src/main/res/drawable-nodpi/dress_heavy_outer.png
Normal file
BIN
app/src/main/res/drawable-nodpi/dress_heavy_outer.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
BIN
app/src/main/res/drawable-nodpi/dress_knitwear.png
Normal file
BIN
app/src/main/res/drawable-nodpi/dress_knitwear.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
BIN
app/src/main/res/drawable-nodpi/dress_long_sleeves.png
Normal file
BIN
app/src/main/res/drawable-nodpi/dress_long_sleeves.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
BIN
app/src/main/res/drawable-nodpi/dress_padded_coat.png
Normal file
BIN
app/src/main/res/drawable-nodpi/dress_padded_coat.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 29 KiB |
BIN
app/src/main/res/drawable-nodpi/dress_short_sleeves.png
Normal file
BIN
app/src/main/res/drawable-nodpi/dress_short_sleeves.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 864 B |
@ -10,7 +10,6 @@
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="오후"
|
||||
android:id="@+id/amOrPm"
|
||||
android:gravity="center"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
@ -18,7 +17,6 @@
|
||||
<TextView
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="16시"
|
||||
android:id="@+id/hour"
|
||||
android:background="@drawable/date_bg"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
@ -29,16 +27,22 @@
|
||||
android:id="@+id/imgDress"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:contentDescription="시계 아이콘"
|
||||
app:srcCompat="@drawable/ico_time" />
|
||||
android:contentDescription="온도별 옷차림"
|
||||
app:tint="@android:color/white"/>
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/textDress"
|
||||
android:fontFamily="sans-serif-light"
|
||||
android:textSize="11sp"
|
||||
android:gravity="center"
|
||||
android:textAlignment="center"/>
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="27도"
|
||||
android:id="@+id/temperature"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:textSize="14sp"
|
||||
android:gravity="center"
|
||||
android:textAlignment="center"/>
|
||||
|
||||
</LinearLayout>
|
||||
@ -21,7 +21,8 @@
|
||||
android:contentDescription="시계 아이콘"
|
||||
app:srcCompat="@drawable/ico_time"
|
||||
tools:ignore="ImageContrastCheck"
|
||||
android:layout_marginLeft="20dp"/>
|
||||
android:layout_marginLeft="20dp"
|
||||
app:tint="@android:color/white" />
|
||||
<TextView
|
||||
android:id="@+id/textView2"
|
||||
android:layout_width="wrap_content"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user