ref: ed2f67b1ce632a0815b71d2dead82c8b274d8c25
app/src/main/java/xyz/apiote/bimba/czwek/settings/feeds/FeedInfos.kt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
package xyz.apiote.bimba.czwek.settings.feeds import android.annotation.SuppressLint import android.content.Context import android.content.Context.MODE_PRIVATE import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView import androidx.core.content.edit import androidx.recyclerview.widget.RecyclerView import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.google.android.material.materialswitch.MaterialSwitch import xyz.apiote.bimba.czwek.R import xyz.apiote.bimba.czwek.api.FeedInfoV1 class BimbaFeedInfoViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { val root: View = itemView.findViewById(R.id.feed) val switch: MaterialSwitch = itemView.findViewById(R.id.feed_switch) val name: TextView = itemView.findViewById(R.id.feed_name) companion object { fun bind( feed: FeedInfoV1, context: Context, holder: BimbaFeedInfoViewHolder?, onClickListener: (FeedInfoV1) -> Unit ) { val shp = context.getSharedPreferences("shp", MODE_PRIVATE) val host = shp.getString("host", "bimba.apiote.xyz")!! val enabledFeeds = shp.getString("${host}_feeds", "")!!.split(",").associateWith { }.toMutableMap() holder?.root?.setOnClickListener { onClickListener(feed) } holder?.name?.text = feed.name holder?.switch?.apply { isChecked = feed.id in enabledFeeds setOnCheckedChangeListener { _, isChecked -> if (isChecked) { enabledFeeds[feed.id] = Unit } else { enabledFeeds.remove(feed.id) } shp.edit(true) { putString( "${host}_feeds", enabledFeeds.map { it.key }.filter { it != "" }.joinToString(separator = ",") ) } } } } } } class BimbaFeedInfoAdapter( private val inflater: LayoutInflater, private var feeds: List<FeedInfoV1>, private val context: Context, private val onClickListener: ((FeedInfoV1) -> Unit) ) : RecyclerView.Adapter<BimbaFeedInfoViewHolder>() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BimbaFeedInfoViewHolder { val rowView = inflater.inflate(R.layout.feedinfo, parent, false) return BimbaFeedInfoViewHolder(rowView) } override fun onBindViewHolder(holder: BimbaFeedInfoViewHolder, position: Int) { BimbaFeedInfoViewHolder.bind(feeds[position], context, holder, onClickListener) } override fun getItemCount(): Int = feeds.size @SuppressLint("NotifyDataSetChanged") // todo [3.1] DiffUtil fun update(items: List<FeedInfoV1>) { feeds = items notifyDataSetChanged() } } class FeedBottomSheet(private var feed: FeedInfoV1) : BottomSheetDialogFragment() { companion object { const val TAG = "DepartureBottomSheet" } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { val content = inflater.inflate(R.layout.feed_bottom_sheet, container, false) content.findViewById<TextView>(R.id.title).text = feed.name content.findViewById<TextView>(R.id.description).text = feed.description content.findViewById<TextView>(R.id.attribution).text = feed.attribution content.findViewById<TextView>(R.id.update_time).text = feed.formatDate() return content } } |