add the notification bell UI

This commit is contained in:
Bnyro 2022-11-06 11:26:24 +01:00
parent b3f52f9a18
commit 861e319aeb
8 changed files with 83 additions and 37 deletions

View File

@ -0,0 +1,18 @@
package com.github.libretube.extensions
import android.util.Log
import com.github.libretube.R
import com.github.libretube.util.PreferenceHelper
import com.google.android.material.button.MaterialButton
fun MaterialButton.setupNotificationBell(channelId: String) {
var isIgnorable = PreferenceHelper.isChannelNotificationIgnorable(channelId)
Log.e(channelId, isIgnorable.toString())
setIconResource(if (isIgnorable) R.drawable.ic_bell else R.drawable.ic_notification)
setOnClickListener {
isIgnorable = !isIgnorable
PreferenceHelper.toggleIgnorableNotificationChannel(channelId)
setIconResource(if (isIgnorable) R.drawable.ic_bell else R.drawable.ic_notification)
}
}

View File

@ -5,14 +5,17 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.api.SubscriptionHelper import com.github.libretube.api.SubscriptionHelper
import com.github.libretube.api.obj.Subscription
import com.github.libretube.databinding.ChannelSubscriptionRowBinding import com.github.libretube.databinding.ChannelSubscriptionRowBinding
import com.github.libretube.extensions.setupNotificationBell
import com.github.libretube.extensions.toID import com.github.libretube.extensions.toID
import com.github.libretube.ui.viewholders.SubscriptionChannelViewHolder import com.github.libretube.ui.viewholders.SubscriptionChannelViewHolder
import com.github.libretube.util.ImageHelper import com.github.libretube.util.ImageHelper
import com.github.libretube.util.NavigationHelper import com.github.libretube.util.NavigationHelper
class SubscriptionChannelAdapter(private val subscriptions: MutableList<com.github.libretube.api.obj.Subscription>) : class SubscriptionChannelAdapter(
RecyclerView.Adapter<SubscriptionChannelViewHolder>() { private val subscriptions: MutableList<Subscription>
) : RecyclerView.Adapter<SubscriptionChannelViewHolder>() {
override fun getItemCount(): Int { override fun getItemCount(): Int {
return subscriptions.size return subscriptions.size
@ -32,6 +35,9 @@ class SubscriptionChannelAdapter(private val subscriptions: MutableList<com.gith
holder.binding.apply { holder.binding.apply {
subscriptionChannelName.text = subscription.name subscriptionChannelName.text = subscription.name
ImageHelper.loadImage(subscription.avatar, subscriptionChannelImage) ImageHelper.loadImage(subscription.avatar, subscriptionChannelImage)
subscription.url?.toID()?.let { notificationBell.setupNotificationBell(it) }
root.setOnClickListener { root.setOnClickListener {
NavigationHelper.navigateChannel(root.context, subscription.url) NavigationHelper.navigateChannel(root.context, subscription.url)
} }

View File

@ -17,6 +17,7 @@ import com.github.libretube.databinding.FragmentChannelBinding
import com.github.libretube.enums.ShareObjectType import com.github.libretube.enums.ShareObjectType
import com.github.libretube.extensions.TAG import com.github.libretube.extensions.TAG
import com.github.libretube.extensions.formatShort import com.github.libretube.extensions.formatShort
import com.github.libretube.extensions.setupNotificationBell
import com.github.libretube.extensions.toID import com.github.libretube.extensions.toID
import com.github.libretube.obj.ShareData import com.github.libretube.obj.ShareData
import com.github.libretube.ui.adapters.SearchAdapter import com.github.libretube.ui.adapters.SearchAdapter
@ -128,6 +129,8 @@ class ChannelFragment : BaseFragment() {
binding.channelSubscribe.text = getString(R.string.unsubscribe) binding.channelSubscribe.text = getString(R.string.unsubscribe)
} }
channelId?.let { binding.notificationBell.setupNotificationBell(it) }
binding.channelSubscribe.setOnClickListener { binding.channelSubscribe.setOnClickListener {
if (isSubscribed == true) { if (isSubscribed == true) {
SubscriptionHelper.handleUnsubscribe(requireContext(), channelId!!, channelName) { SubscriptionHelper.handleUnsubscribe(requireContext(), channelId!!, channelName) {

View File

@ -99,7 +99,7 @@ object PreferenceHelper {
editor.putString( editor.putString(
PreferenceKeys.IGNORED_NOTIFICATION_CHANNELS, PreferenceKeys.IGNORED_NOTIFICATION_CHANNELS,
ignorableChannels.joinToString(",") ignorableChannels.joinToString(",")
) ).apply()
} }
private fun getDefaultSharedPreferences(context: Context): SharedPreferences { private fun getDefaultSharedPreferences(context: Context): SharedPreferences {

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:fillColor="#FF000000"
android:pathData="M8,38v-3h4.2L12.2,19.7q0,-4.2 2.475,-7.475Q17.15,8.95 21.2,8.1L21.2,6.65q0,-1.15 0.825,-1.9T24,4q1.15,0 1.975,0.75 0.825,0.75 0.825,1.9L26.8,8.1q4.05,0.85 6.55,4.125t2.5,7.475L35.85,35L40,35v3ZM24,23.25ZM24,44q-1.6,0 -2.8,-1.175Q20,41.65 20,40h8q0,1.65 -1.175,2.825Q25.65,44 24,44ZM15.2,35h17.65L32.85,19.7q0,-3.7 -2.55,-6.3 -2.55,-2.6 -6.25,-2.6t-6.275,2.6Q15.2,16 15.2,19.7Z" />
</vector>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -12,32 +12,38 @@
android:id="@+id/subscription_channel_image" android:id="@+id/subscription_channel_image"
android:layout_width="40dp" android:layout_width="40dp"
android:layout_height="40dp" android:layout_height="40dp"
android:layout_centerVertical="true" android:layout_gravity="center"
android:layout_marginStart="8dp" /> android:layout_marginStart="8dp" />
<TextView <TextView
android:id="@+id/subscription_channel_name" android:id="@+id/subscription_channel_name"
android:layout_width="wrap_content" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_gravity="center"
android:layout_marginStart="10dp" android:layout_marginHorizontal="10dp"
android:layout_toEndOf="@id/subscription_channel_image" android:layout_weight="1"
android:ellipsize="end" android:ellipsize="end"
android:maxLines="1" android:maxLines="1"
android:textSize="16sp" android:textSize="16sp"
tools:text="Channel Name" /> tools:text="Channel Name" />
<com.google.android.material.button.MaterialButton
android:id="@+id/notification_bell"
style="@style/ElevatedIconButton"
android:layout_gravity="center"
app:icon="@drawable/ic_notification"
tools:targetApi="m" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/subscription_subscribe" android:id="@+id/subscription_subscribe"
style="@style/Widget.Material3.Button.ElevatedButton" style="@style/Widget.Material3.Button.ElevatedButton"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentEnd="true" android:layout_gravity="center"
android:layout_centerVertical="true"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:stateListAnimator="@null" android:stateListAnimator="@null"
android:text="@string/unsubscribe" android:text="@string/unsubscribe"
android:textColor="?android:attr/textColorPrimary" android:textColor="?android:attr/textColorPrimary"
android:textSize="12sp" android:textSize="12sp"
app:cornerRadius="20dp" /> app:cornerRadius="20dp" />
</RelativeLayout> </LinearLayout>

View File

@ -45,24 +45,18 @@
android:layout_weight="1" android:layout_weight="1"
android:orientation="vertical"> android:orientation="vertical">
<LinearLayout <TextView
android:id="@+id/channel_name"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="3.5dp"> android:layout_gravity="start"
android:layout_marginTop="3.5dp"
<TextView android:drawablePadding="3dp"
android:id="@+id/channel_name" android:ellipsize="end"
android:layout_width="wrap_content" android:maxLines="1"
android:layout_height="wrap_content" android:textSize="16sp"
android:layout_gravity="start" android:textStyle="bold"
android:drawablePadding="3dip" tools:text="Channel Name" />
android:ellipsize="end"
android:maxLines="1"
android:textSize="16sp"
android:textStyle="bold"
tools:text="Channel Name" />
</LinearLayout>
<TextView <TextView
android:id="@+id/channel_subs" android:id="@+id/channel_subs"
@ -75,19 +69,17 @@
</LinearLayout> </LinearLayout>
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
style="@style/ElevatedIconButton"
android:id="@+id/channel_share" android:id="@+id/channel_share"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:drawableTint="?android:attr/textColorPrimary"
android:paddingHorizontal="15dp"
android:stateListAnimator="@null"
app:cornerRadius="20dp"
app:elevation="20dp"
app:icon="@drawable/ic_share" app:icon="@drawable/ic_share"
tools:targetApi="m" /> tools:targetApi="m" />
<com.google.android.material.button.MaterialButton
android:id="@+id/notification_bell"
style="@style/ElevatedIconButton"
app:icon="@drawable/ic_notification"
tools:targetApi="m" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/channel_subscribe" android:id="@+id/channel_subscribe"
style="@style/Widget.Material3.Button.ElevatedButton" style="@style/Widget.Material3.Button.ElevatedButton"

View File

@ -195,4 +195,15 @@
</style> </style>
<style name="ElevatedIconButton" parent="@style/Widget.Material3.Button.IconButton.Filled.Tonal">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:paddingStart">15dp</item>
<item name="android:paddingEnd">15dp</item>
<item name="android:stateListAnimator">@null</item>
<item name="cardCornerRadius">25dp</item>
<item name="android:drawableTint" tools:targetApi="m">?android:attr/textColorPrimary</item>
</style>
</resources> </resources>