Merge branch 'main' of https://dev.lunaticbum.kr/lun_admin/lun_launcher
# Conflicts: # app/src/main/kotlin/rasel/lunar/launcher/home/adapters/WeatherAdapter.kt ..
This commit is contained in:
commit
ed1371c84e
@ -60,6 +60,7 @@ android {
|
||||
|
||||
buildFeatures {
|
||||
viewBinding = true
|
||||
dataBinding = true
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
|
||||
@ -82,6 +82,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
|
||||
@ -414,7 +415,6 @@ internal class LauncherActivity : AppCompatActivity() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
|
||||
@ -192,7 +192,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,35 +2,39 @@ package rasel.lunar.launcher.home.adapters
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.LevelListDrawable
|
||||
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()
|
||||
@ -48,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)
|
||||
@ -63,70 +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}도"
|
||||
}
|
||||
9
app/src/main/res/drawable/level_dress_img.xml
Normal file
9
app/src/main/res/drawable/level_dress_img.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:maxLevel="6" android:drawable="@drawable/dress_padded_coat"/>
|
||||
<item android:minLevel="6" android:maxLevel="12" android:drawable="@drawable/dress_heavy_outer"/>
|
||||
<item android:minLevel="12" android:maxLevel="17" android:drawable="@drawable/dress_flimsy_outer"/>
|
||||
<item android:minLevel="17" android:maxLevel="20" android:drawable="@drawable/dress_knitwear"/>
|
||||
<item android:minLevel="20" android:maxLevel="23" android:drawable="@drawable/dress_long_sleeves"/>
|
||||
<item android:minLevel="23" android:drawable="@drawable/dress_long_sleeves"/>
|
||||
</level-list>
|
||||
@ -1,48 +1,58 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="80dp"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:orientation="vertical"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:id="@+id/weather_item">
|
||||
<layout>
|
||||
<data>
|
||||
<variable name="hour" type="rasel.lunar.launcher.model.Hour" />
|
||||
</data>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="80dp"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:orientation="vertical"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:id="@+id/weather_item">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/amOrPm"
|
||||
android:gravity="center"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:textSize="14sp" />
|
||||
<TextView
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/hour"
|
||||
android:background="@drawable/date_bg"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:gravity="center"
|
||||
android:textSize="14sp"
|
||||
android:textAlignment="center"/>
|
||||
<ImageView
|
||||
android:id="@+id/imgDress"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
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:id="@+id/temperature"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:textSize="14sp"
|
||||
android:gravity="center"
|
||||
android:textAlignment="center"/>
|
||||
</LinearLayout>
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/amOrPm"
|
||||
android:gravity="center"
|
||||
android:text="@{hour.amOrPm}"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:textSize="14sp" />
|
||||
<TextView
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/hour"
|
||||
android:background="@drawable/date_bg"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:gravity="center"
|
||||
android:textSize="14sp"
|
||||
android:text="@{hour.textHour}"
|
||||
android:textAlignment="center"/>
|
||||
<ImageView
|
||||
android:id="@+id/imgDress"
|
||||
android:layout_width="40dp"
|
||||
android:src="@drawable/level_dress_img"
|
||||
android:layout_height="40dp"
|
||||
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:text="@{hour.dress}"
|
||||
android:gravity="center"
|
||||
android:textAlignment="center"/>
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/temperature"
|
||||
android:text="@{hour.temp}"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:textSize="14sp"
|
||||
android:gravity="center"
|
||||
android:textAlignment="center"/>
|
||||
</LinearLayout>
|
||||
</layout>
|
||||
@ -1,45 +1,68 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:textAlignment="center">
|
||||
<LinearLayout
|
||||
android:id="@+id/linearLayout"
|
||||
android:layout_width="409dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="left|center"
|
||||
android:orientation="horizontal"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
<ImageView
|
||||
android:id="@+id/imageView"
|
||||
android:layout_width="25dp"
|
||||
android:layout_height="25dp"
|
||||
android:contentDescription="시계 아이콘"
|
||||
app:srcCompat="@drawable/ico_time"
|
||||
tools:ignore="ImageContrastCheck"
|
||||
android:layout_marginLeft="20dp"
|
||||
app:tint="@android:color/white" />
|
||||
<TextView
|
||||
android:id="@+id/textView2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:text="시간별 예보"
|
||||
android:textAlignment="center"
|
||||
android:textSize="14sp"
|
||||
android:layout_marginLeft="10dp"/>
|
||||
</LinearLayout>
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
app:layout_constraintTop_toBottomOf="@id/linearLayout"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
android:id="@+id/weather_recycller"
|
||||
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
|
||||
<layout xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<data>
|
||||
<variable name="loc" type="rasel.lunar.launcher.model.Location"/>
|
||||
</data>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
</androidx.recyclerview.widget.RecyclerView>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
android:layout_height="match_parent"
|
||||
android:textAlignment="center">
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
android:id="@+id/header">
|
||||
<ImageView
|
||||
android:id="@+id/imageView"
|
||||
android:layout_width="25dp"
|
||||
android:layout_height="25dp"
|
||||
android:contentDescription="시계 아이콘"
|
||||
app:srcCompat="@drawable/ico_time"
|
||||
tools:ignore="ImageContrastCheck"
|
||||
android:layout_marginLeft="20dp"
|
||||
app:tint="@android:color/white"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@+id/textView2"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"/>
|
||||
<TextView
|
||||
android:id="@+id/textView2"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:text="시간별 예보"
|
||||
android:gravity="left"
|
||||
android:textSize="14sp"
|
||||
android:layout_marginLeft="10dp"
|
||||
app:layout_constraintStart_toEndOf="@id/imageView"
|
||||
app:layout_constraintEnd_toStartOf="@id/textViewLocation"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintWidth_default="spread"/>
|
||||
<TextView
|
||||
android:id="@+id/textViewLocation"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:text="@{loc.textLocation}"
|
||||
android:textAlignment="center"
|
||||
android:textSize="11sp"
|
||||
android:layout_marginRight="20dp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"/>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
app:layout_constraintTop_toBottomOf="@id/header"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
android:id="@+id/weather_recycller"
|
||||
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
</androidx.recyclerview.widget.RecyclerView>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</layout>
|
||||
@ -166,4 +166,5 @@
|
||||
</string>
|
||||
<string name="wiki" translatable="false">Wiki</string>
|
||||
|
||||
|
||||
</resources>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user