diff --git a/app/src/main/kotlin/rasel/lunar/launcher/home/LauncherHome.kt b/app/src/main/kotlin/rasel/lunar/launcher/home/LauncherHome.kt index e8e6a96..105505a 100644 --- a/app/src/main/kotlin/rasel/lunar/launcher/home/LauncherHome.kt +++ b/app/src/main/kotlin/rasel/lunar/launcher/home/LauncherHome.kt @@ -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("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().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 { diff --git a/app/src/main/kotlin/rasel/lunar/launcher/home/adapters/WeatherAdapter.kt b/app/src/main/kotlin/rasel/lunar/launcher/home/adapters/WeatherAdapter.kt index 1d496f8..fffd2f2 100644 --- a/app/src/main/kotlin/rasel/lunar/launcher/home/adapters/WeatherAdapter.kt +++ b/app/src/main/kotlin/rasel/lunar/launcher/home/adapters/WeatherAdapter.kt @@ -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): RecyclerView.Adapter(){ 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): 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(R.id.amOrPm) .apply { @@ -75,14 +78,13 @@ class WeatherAdapter(private val dataSet: ArrayList): RecyclerView.Adapter } holder.viewItem.findViewById(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): RecyclerView.Adapter this@apply.text = "${this.hour}시" } } - holder.viewItem.findViewById(R.id.imgDress) - .run { this.setImageResource(R.drawable.ico_time) } - holder.viewItem.findViewById(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(R.id.imgDress) + .setImageResource(img ?: R.drawable.dress_padded_coat) + holder.viewItem.findViewById(R.id.textDress) + .text = textDress + holder.viewItem.findViewById(R.id.temperature) + .text = "${it.temp_c}도" } } diff --git a/app/src/main/kotlin/rasel/lunar/launcher/model/WeatherForcast.kt b/app/src/main/kotlin/rasel/lunar/launcher/model/WeatherForcast.kt index a427619..dcbbb1c 100644 --- a/app/src/main/kotlin/rasel/lunar/launcher/model/WeatherForcast.kt +++ b/app/src/main/kotlin/rasel/lunar/launcher/model/WeatherForcast.kt @@ -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 diff --git a/app/src/main/kotlin/rasel/lunar/launcher/workers/OpenWeatherGetter.kt b/app/src/main/kotlin/rasel/lunar/launcher/workers/OpenWeatherGetter.kt index e564d8f..3baca42 100644 --- a/app/src/main/kotlin/rasel/lunar/launcher/workers/OpenWeatherGetter.kt +++ b/app/src/main/kotlin/rasel/lunar/launcher/workers/OpenWeatherGetter.kt @@ -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().first().find()}") + BLog.LOGE("saved weatherForcast >>> ${WorkersDb.getRealm().query().first().find()?.forecast?.forecastdayRealm?.size}") } } } diff --git a/app/src/main/res/drawable-nodpi/dress_flimsy_outer.png b/app/src/main/res/drawable-nodpi/dress_flimsy_outer.png new file mode 100644 index 0000000..b0cd9df Binary files /dev/null and b/app/src/main/res/drawable-nodpi/dress_flimsy_outer.png differ diff --git a/app/src/main/res/drawable-nodpi/dress_heavy_outer.png b/app/src/main/res/drawable-nodpi/dress_heavy_outer.png new file mode 100644 index 0000000..ca3d8a6 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/dress_heavy_outer.png differ diff --git a/app/src/main/res/drawable-nodpi/dress_knitwear.png b/app/src/main/res/drawable-nodpi/dress_knitwear.png new file mode 100644 index 0000000..670e8c6 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/dress_knitwear.png differ diff --git a/app/src/main/res/drawable-nodpi/dress_long_sleeves.png b/app/src/main/res/drawable-nodpi/dress_long_sleeves.png new file mode 100644 index 0000000..0ebbc00 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/dress_long_sleeves.png differ diff --git a/app/src/main/res/drawable-nodpi/dress_padded_coat.png b/app/src/main/res/drawable-nodpi/dress_padded_coat.png new file mode 100644 index 0000000..7c6a346 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/dress_padded_coat.png differ diff --git a/app/src/main/res/drawable-nodpi/dress_short_sleeves.png b/app/src/main/res/drawable-nodpi/dress_short_sleeves.png new file mode 100644 index 0000000..9d6f1e9 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/dress_short_sleeves.png differ diff --git a/app/src/main/res/layout/item_rec_hourly_dress.xml b/app/src/main/res/layout/item_rec_hourly_dress.xml index 8a50a12..3303be5 100644 --- a/app/src/main/res/layout/item_rec_hourly_dress.xml +++ b/app/src/main/res/layout/item_rec_hourly_dress.xml @@ -10,7 +10,6 @@ + android:contentDescription="온도별 옷차림" + app:tint="@android:color/white"/> + - \ No newline at end of file diff --git a/app/src/main/res/layout/recommended_hourly_dress.xml b/app/src/main/res/layout/recommended_hourly_dress.xml index af531b3..50db6d7 100644 --- a/app/src/main/res/layout/recommended_hourly_dress.xml +++ b/app/src/main/res/layout/recommended_hourly_dress.xml @@ -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" />