fix: some UI changes (for better or worse)

This commit is contained in:
aayush262 2024-03-08 00:45:13 +05:30
parent 7ac679f927
commit a2ca16355a
26 changed files with 493 additions and 444 deletions

View file

@ -120,7 +120,7 @@
android:parentActivityName=".MainActivity" > android:parentActivityName=".MainActivity" >
</activity> </activity>
<activity <activity
android:name=".notifications.NotificationActivity" android:name=".profile.activity.NotificationActivity"
android:label="Inbox Activity" android:label="Inbox Activity"
android:parentActivityName=".MainActivity" > android:parentActivityName=".MainActivity" >
</activity> </activity>

View file

@ -283,7 +283,6 @@ class AnimeFragment : Fragment() {
binding.root.requestApplyInsets() binding.root.requestApplyInsets()
binding.root.requestLayout() binding.root.requestLayout()
} }
super.onResume() super.onResume()
} }
} }

View file

@ -94,6 +94,8 @@ class AnimePageAdapter : RecyclerView.Adapter<AnimePageAdapter.AnimePageViewHold
SettingsDialogFragment.newInstance(SettingsDialogFragment.Companion.PageType.ANIME) SettingsDialogFragment.newInstance(SettingsDialogFragment.Companion.PageType.ANIME)
dialogFragment.show((it.context as AppCompatActivity).supportFragmentManager, "dialog") dialogFragment.show((it.context as AppCompatActivity).supportFragmentManager, "dialog")
} }
binding.animeNotificationCount.visibility = if (Anilist.unreadNotificationCount > 0) View.VISIBLE else View.GONE
binding.animeNotificationCount.text = Anilist.unreadNotificationCount.toString()
listOf( listOf(
binding.animePreviousSeason, binding.animePreviousSeason,

View file

@ -79,8 +79,8 @@ class HomeFragment : Fragment() {
if (!(PrefManager.getVal(PrefName.BannerAnimations) as Boolean)) binding.homeUserBg.pause() if (!(PrefManager.getVal(PrefName.BannerAnimations) as Boolean)) binding.homeUserBg.pause()
binding.homeUserBg.loadImage(Anilist.bg) binding.homeUserBg.loadImage(Anilist.bg)
binding.homeUserDataProgressBar.visibility = View.GONE binding.homeUserDataProgressBar.visibility = View.GONE
binding.homeNotificationCount.visibility = if (Anilist.unreadNotificationCount > 0) View.VISIBLE else View.GONE
binding.homeNotificationDot.visibility = if (Anilist.unreadNotificationCount > 0) View.VISIBLE else View.GONE binding.homeNotificationCount.text = Anilist.unreadNotificationCount.toString()
binding.homeAnimeList.setOnClickListener { binding.homeAnimeList.setOnClickListener {
ContextCompat.startActivity( ContextCompat.startActivity(
@ -360,11 +360,12 @@ class HomeFragment : Fragment() {
} }
} }
} }
override fun onResume() { override fun onResume() {
if (!model.loaded) Refresh.activity[1]!!.postValue(true) if (!model.loaded) Refresh.activity[1]!!.postValue(true)
if (_binding != null) if (_binding != null) {
binding.homeNotificationDot.visibility = if (Anilist.unreadNotificationCount > 0) View.VISIBLE else View.GONE binding.homeNotificationCount.visibility = if (Anilist.unreadNotificationCount > 0) View.VISIBLE else View.GONE
binding.homeNotificationCount.text = Anilist.unreadNotificationCount.toString()
}
super.onResume() super.onResume()
} }
} }

View file

@ -74,7 +74,8 @@ class MangaPageAdapter : RecyclerView.Adapter<MangaPageAdapter.MangaPageViewHold
} }
updateAvatar() updateAvatar()
binding.mangaNotificationCount.visibility = if (Anilist.unreadNotificationCount > 0) View.VISIBLE else View.GONE
binding.mangaNotificationCount.text = Anilist.unreadNotificationCount.toString()
binding.mangaSearchBar.hint = "MANGA" binding.mangaSearchBar.hint = "MANGA"
binding.mangaSearchBarText.setOnClickListener { binding.mangaSearchBarText.setOnClickListener {
ContextCompat.startActivity( ContextCompat.startActivity(

View file

@ -369,7 +369,7 @@ class MangaChapterAdapter(
} }
1L -> "1 day ago" 1L -> "1 day ago"
in 2..6 -> "$daysDifference days ago" in 2..6 -> "$daysDifference days ago"
else -> SimpleDateFormat("dd MMM yyyy", Locale.ENGLISH).format(targetDate) else -> SimpleDateFormat("dd MMM yyyy", Locale.getDefault()).format(targetDate)
} }
} }

View file

@ -1,48 +1,29 @@
package ani.dantotsu.profile package ani.dantotsu.profile
import android.annotation.SuppressLint
import android.os.Bundle import android.os.Bundle
import android.view.ViewGroup import android.view.ViewGroup
import android.view.Window
import android.view.WindowManager
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import androidx.core.view.updateLayoutParams import androidx.core.view.updateLayoutParams
import ani.dantotsu.R import ani.dantotsu.databinding.ActivityFollowBinding
import ani.dantotsu.databinding.ActivityActivityBinding
import ani.dantotsu.initActivity import ani.dantotsu.initActivity
import ani.dantotsu.settings.saving.PrefManager
import ani.dantotsu.settings.saving.PrefName
import ani.dantotsu.statusBarHeight import ani.dantotsu.statusBarHeight
import ani.dantotsu.themes.ThemeManager import ani.dantotsu.themes.ThemeManager
class ActivityActivity : AppCompatActivity() { class ActivityActivity : AppCompatActivity() {
private lateinit var binding: ActivityActivityBinding private lateinit var binding: ActivityFollowBinding
@SuppressLint("SetTextI18n")
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
val immersiveMode = PrefManager.getVal<Boolean>(PrefName.ImmersiveMode)
if (immersiveMode) {
requestWindowFeature(Window.FEATURE_NO_TITLE)
}
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
ThemeManager(this).applyTheme() ThemeManager(this).applyTheme()
initActivity(this) initActivity(this)
binding = ActivityActivityBinding.inflate(layoutInflater) binding = ActivityFollowBinding.inflate(layoutInflater)
if (!immersiveMode) {
this.window.statusBarColor =
ContextCompat.getColor(this, R.color.nav_bg_inv)
binding.root.fitsSystemWindows = true
} else {
binding.root.fitsSystemWindows = false
window.setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN
)
binding.listTitle.updateLayoutParams<ViewGroup.MarginLayoutParams> {
topMargin = statusBarHeight
}
}
setContentView(binding.root) setContentView(binding.root)
binding.listTitle.text = "Activity"
binding.listToolbar.updateLayoutParams<ViewGroup.MarginLayoutParams> { topMargin = statusBarHeight }
binding.followerGrid.visibility = ViewGroup.GONE
binding.followerList.visibility = ViewGroup.GONE
} }
} }

View file

@ -2,23 +2,17 @@ package ani.dantotsu.profile
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.ViewGroup
import android.view.ViewGroup.MarginLayoutParams import android.view.ViewGroup.MarginLayoutParams
import android.view.Window
import android.view.WindowManager
import android.widget.ImageButton import android.widget.ImageButton
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import androidx.core.view.updateLayoutParams import androidx.core.view.updateLayoutParams
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import ani.dantotsu.R
import ani.dantotsu.connections.anilist.Anilist import ani.dantotsu.connections.anilist.Anilist
import ani.dantotsu.connections.anilist.api.User import ani.dantotsu.connections.anilist.api.User
import ani.dantotsu.databinding.ActivityFollowBinding import ani.dantotsu.databinding.ActivityFollowBinding
import ani.dantotsu.initActivity import ani.dantotsu.initActivity
import ani.dantotsu.navBarHeight
import ani.dantotsu.settings.saving.PrefManager import ani.dantotsu.settings.saving.PrefManager
import ani.dantotsu.settings.saving.PrefName import ani.dantotsu.settings.saving.PrefName
import ani.dantotsu.statusBarHeight import ani.dantotsu.statusBarHeight
@ -36,31 +30,11 @@ class FollowActivity : AppCompatActivity(){
private lateinit var selected: ImageButton private lateinit var selected: ImageButton
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
val immersiveMode = PrefManager.getVal<Boolean>(PrefName.ImmersiveMode)
if (immersiveMode) {
requestWindowFeature(Window.FEATURE_NO_TITLE)
}
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
ThemeManager(this).applyTheme() ThemeManager(this).applyTheme()
initActivity(this) initActivity(this)
binding = ActivityFollowBinding.inflate(layoutInflater) binding = ActivityFollowBinding.inflate(layoutInflater)
binding.listToolbar.updateLayoutParams<MarginLayoutParams> { topMargin = statusBarHeight }
if (!immersiveMode) {
this.window.statusBarColor =
ContextCompat.getColor(this, R.color.nav_bg_inv)
binding.root.fitsSystemWindows = true
} else {
binding.root.fitsSystemWindows = false
window.setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN
)
binding.listTitle.updateLayoutParams<MarginLayoutParams> {
topMargin = statusBarHeight
}
}
setContentView(binding.root) setContentView(binding.root)
val layoutType = PrefManager.getVal<Int>(PrefName.FollowerLayout) val layoutType = PrefManager.getVal<Int>(PrefName.FollowerLayout)
selected = getSelected(layoutType) selected = getSelected(layoutType)

View file

@ -1,10 +1,17 @@
package ani.dantotsu.profile package ani.dantotsu.profile
import android.app.Activity
import android.content.Context
import android.view.View import android.view.View
import ani.dantotsu.R import ani.dantotsu.R
import ani.dantotsu.databinding.ItemFollowerBinding import ani.dantotsu.databinding.ItemFollowerBinding
import ani.dantotsu.loadImage import ani.dantotsu.loadImage
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.load.model.GlideUrl
import com.bumptech.glide.request.RequestOptions
import com.xwray.groupie.viewbinding.BindableItem import com.xwray.groupie.viewbinding.BindableItem
import jp.wasabeef.glide.transformations.BlurTransformation
class FollowerItem( class FollowerItem(
private val id: Int, private val id: Int,
@ -18,9 +25,16 @@ class FollowerItem(
override fun bind(viewBinding: ItemFollowerBinding, position: Int) { override fun bind(viewBinding: ItemFollowerBinding, position: Int) {
binding = viewBinding binding = viewBinding
binding.profileUserName.text = name binding.profileUserName.text = name
val context = binding.profileBannerImage.context
avatar?.let { binding.profileUserAvatar.loadImage(it) } avatar?.let { binding.profileUserAvatar.loadImage(it) }
if (banner != null) { if (banner != null) {
binding.profileBannerImage.loadImage(banner) binding.profileBannerImage.loadImage(banner)
if (!(context as Activity).isDestroyed)
Glide.with(context as Context)
.load(GlideUrl(banner))
.diskCacheStrategy(DiskCacheStrategy.ALL).override(400)
.apply(RequestOptions.bitmapTransform(BlurTransformation(2, 6)))
.into(binding.profileBannerImage)
} else { } else {
binding.profileBannerImage.setImageResource(R.drawable.linear_gradient_bg) binding.profileBannerImage.setImageResource(R.drawable.linear_gradient_bg)
} }

View file

@ -1,64 +1,43 @@
package ani.dantotsu.notifications package ani.dantotsu.profile.activity
import android.annotation.SuppressLint
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.ViewGroup import android.view.ViewGroup
import android.view.Window
import android.view.WindowManager
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.view.updateLayoutParams import androidx.core.view.updateLayoutParams
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import ani.dantotsu.R
import ani.dantotsu.connections.anilist.Anilist import ani.dantotsu.connections.anilist.Anilist
import ani.dantotsu.connections.anilist.api.Notification import ani.dantotsu.connections.anilist.api.Notification
import ani.dantotsu.databinding.ActivityNotificationBinding import ani.dantotsu.databinding.ActivityFollowBinding
import ani.dantotsu.initActivity import ani.dantotsu.initActivity
import ani.dantotsu.media.MediaDetailsActivity import ani.dantotsu.media.MediaDetailsActivity
import ani.dantotsu.profile.ProfileActivity import ani.dantotsu.profile.ProfileActivity
import ani.dantotsu.profile.activity.NotificationItem
import ani.dantotsu.settings.saving.PrefManager
import ani.dantotsu.settings.saving.PrefName
import ani.dantotsu.statusBarHeight import ani.dantotsu.statusBarHeight
import ani.dantotsu.themes.ThemeManager import ani.dantotsu.themes.ThemeManager
import com.xwray.groupie.GroupieAdapter import com.xwray.groupie.GroupieAdapter
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
class NotificationActivity : AppCompatActivity() { class NotificationActivity : AppCompatActivity() {
private lateinit var binding: ActivityNotificationBinding private lateinit var binding: ActivityFollowBinding
private var adapter: GroupieAdapter = GroupieAdapter() private var adapter: GroupieAdapter = GroupieAdapter()
private var notificationList: List<Notification> = emptyList() private var notificationList: List<Notification> = emptyList()
@SuppressLint("SetTextI18n")
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
val immersiveMode = PrefManager.getVal<Boolean>(PrefName.ImmersiveMode)
if (immersiveMode) {
requestWindowFeature(Window.FEATURE_NO_TITLE)
}
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
ThemeManager(this).applyTheme() ThemeManager(this).applyTheme()
initActivity(this) initActivity(this)
binding = ActivityNotificationBinding.inflate(layoutInflater) binding = ActivityFollowBinding.inflate(layoutInflater)
if (!immersiveMode) {
this.window.statusBarColor =
ContextCompat.getColor(this, R.color.nav_bg_inv)
binding.root.fitsSystemWindows = true
} else {
binding.root.fitsSystemWindows = false
window.setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN
)
binding.listTitle.updateLayoutParams<ViewGroup.MarginLayoutParams> {
topMargin = statusBarHeight
}
}
setContentView(binding.root) setContentView(binding.root)
binding.listTitle.text = "Notifications"
binding.notificationList.adapter = adapter binding.listToolbar.updateLayoutParams<ViewGroup.MarginLayoutParams> { topMargin = statusBarHeight }
binding.notificationList.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false) binding.listRecyclerView.adapter = adapter
binding.listRecyclerView.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
binding.followerGrid.visibility = ViewGroup.GONE
binding.followerList.visibility = ViewGroup.GONE
binding.listBack.setOnClickListener { binding.listBack.setOnClickListener {
onBackPressed() onBackPressed()
} }

View file

@ -1,13 +1,27 @@
package ani.dantotsu.profile.activity package ani.dantotsu.profile.activity
import android.app.Activity
import android.content.Context
import android.content.res.Resources
import android.util.TypedValue
import android.view.View import android.view.View
import android.view.ViewGroup
import androidx.core.view.updateLayoutParams
import ani.dantotsu.R import ani.dantotsu.R
import ani.dantotsu.connections.anilist.api.Notification import ani.dantotsu.connections.anilist.api.Notification
import ani.dantotsu.connections.anilist.api.NotificationType import ani.dantotsu.connections.anilist.api.NotificationType
import ani.dantotsu.databinding.ItemNotificationBinding import ani.dantotsu.databinding.ItemNotificationBinding
import ani.dantotsu.loadImage import ani.dantotsu.loadImage
import ani.dantotsu.notifications.NotificationActivity import ani.dantotsu.navBarHeight
import ani.dantotsu.settings.saving.PrefManager
import ani.dantotsu.settings.saving.PrefName
import ani.dantotsu.statusBarHeight
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.load.model.GlideUrl
import com.bumptech.glide.request.RequestOptions
import com.xwray.groupie.viewbinding.BindableItem import com.xwray.groupie.viewbinding.BindableItem
import jp.wasabeef.glide.transformations.BlurTransformation
class NotificationItem( class NotificationItem(
private val notification: Notification, private val notification: Notification,
@ -29,107 +43,133 @@ class NotificationItem(
return ItemNotificationBinding.bind(view) return ItemNotificationBinding.bind(view)
} }
private fun image(user: Boolean = false) {
val context = binding.notificationBannerImage.context
val cover = if (user) notification.user?.bannerImage else notification.media?.bannerImage
if (cover != null) {
if (!(context as Activity).isDestroyed)
Glide.with(context as Context)
.load(GlideUrl(cover))
.diskCacheStrategy(DiskCacheStrategy.ALL).override(400)
.apply(RequestOptions.bitmapTransform(BlurTransformation(2, 6)))
.into(binding.notificationBannerImage)
} else {
binding.notificationBannerImage.setImageResource(R.drawable.linear_gradient_bg)
}
if (user) {
binding.notificationCover.visibility = View.GONE
binding.notificationCoverUserContainer.visibility = View.VISIBLE
binding.notificationCoverUser.loadImage(notification.user?.avatar?.large)
val height = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 80f, context.resources.displayMetrics).toInt()
binding.notificationBannerImage.layoutParams.height = height
binding.notificationBannerGradient.layoutParams.height = height
} else{
binding.notificationCoverUser.visibility = View.VISIBLE
binding.notificationCoverUserContainer.visibility = View.GONE
binding.notificationCover.loadImage(notification.media?.coverImage?.large)
}
}
private fun setBinding() { private fun setBinding() {
val notificationType: NotificationType = val notificationType: NotificationType =
NotificationType.valueOf(notification.notificationType) NotificationType.valueOf(notification.notificationType)
binding.notificationText.text = NotificationItemBuilder.getContent(notification) binding.notificationText.text = NotificationItemBuilder.getContent(notification)
binding.notificationDate.text = NotificationItemBuilder.getDateTime(notification.createdAt) binding.notificationDate.text = NotificationItemBuilder.getDateTime(notification.createdAt)
binding.root.setOnClickListener { clickCallback(id, clickType) } binding.root.setOnClickListener { clickCallback(id, clickType) }
when (notificationType) { when (notificationType) {
NotificationType.ACTIVITY_MESSAGE -> { NotificationType.ACTIVITY_MESSAGE -> {
binding.notificationCover.loadImage(notification.user?.avatar?.large) binding.notificationCover.loadImage(notification.user?.avatar?.large)
binding.notificationBannerImage.loadImage(notification.user?.bannerImage) image(true)
clickType = NotificationActivity.Companion.NotificationClickType.USER clickType = NotificationActivity.Companion.NotificationClickType.USER
id = notification.user?.id ?: 0 id = notification.user?.id ?: 0
} }
NotificationType.ACTIVITY_REPLY -> { NotificationType.ACTIVITY_REPLY -> {
binding.notificationCover.loadImage(notification.user?.avatar?.large) binding.notificationCover.loadImage(notification.user?.avatar?.large)
binding.notificationBannerImage.loadImage(notification.user?.bannerImage) image(true)
clickType = NotificationActivity.Companion.NotificationClickType.USER clickType = NotificationActivity.Companion.NotificationClickType.USER
id = notification.user?.id ?: 0 id = notification.user?.id ?: 0
} }
NotificationType.FOLLOWING -> { NotificationType.FOLLOWING -> {
binding.notificationCover.loadImage(notification.user?.avatar?.large) binding.notificationCover.loadImage(notification.user?.avatar?.large)
binding.notificationBannerImage.loadImage(notification.user?.bannerImage) image(true)
clickType = NotificationActivity.Companion.NotificationClickType.USER clickType = NotificationActivity.Companion.NotificationClickType.USER
id = notification.user?.id ?: 0 id = notification.user?.id ?: 0
} }
NotificationType.ACTIVITY_MENTION -> { NotificationType.ACTIVITY_MENTION -> {
binding.notificationCover.loadImage(notification.user?.avatar?.large) binding.notificationCover.loadImage(notification.user?.avatar?.large)
binding.notificationBannerImage.loadImage(notification.user?.bannerImage) image(true)
clickType = NotificationActivity.Companion.NotificationClickType.USER clickType = NotificationActivity.Companion.NotificationClickType.USER
id = notification.user?.id ?: 0 id = notification.user?.id ?: 0
} }
NotificationType.THREAD_COMMENT_MENTION -> { NotificationType.THREAD_COMMENT_MENTION -> {
binding.notificationCover.loadImage(notification.user?.avatar?.large) binding.notificationCover.loadImage(notification.user?.avatar?.large)
binding.notificationBannerImage.loadImage(notification.user?.bannerImage) image(true)
clickType = NotificationActivity.Companion.NotificationClickType.USER clickType = NotificationActivity.Companion.NotificationClickType.USER
id = notification.user?.id ?: 0 id = notification.user?.id ?: 0
} }
NotificationType.THREAD_SUBSCRIBED -> { NotificationType.THREAD_SUBSCRIBED -> {
binding.notificationCover.loadImage(notification.user?.avatar?.large) binding.notificationCover.loadImage(notification.user?.avatar?.large)
binding.notificationBannerImage.loadImage(notification.user?.bannerImage) image(true)
clickType = NotificationActivity.Companion.NotificationClickType.USER clickType = NotificationActivity.Companion.NotificationClickType.USER
id = notification.user?.id ?: 0 id = notification.user?.id ?: 0
} }
NotificationType.THREAD_COMMENT_REPLY -> { NotificationType.THREAD_COMMENT_REPLY -> {
binding.notificationCover.loadImage(notification.user?.avatar?.large) binding.notificationCover.loadImage(notification.user?.avatar?.large)
binding.notificationBannerImage.loadImage(notification.user?.bannerImage) image(true)
clickType = NotificationActivity.Companion.NotificationClickType.USER clickType = NotificationActivity.Companion.NotificationClickType.USER
id = notification.user?.id ?: 0 id = notification.user?.id ?: 0
} }
NotificationType.AIRING -> { NotificationType.AIRING -> {
binding.notificationCover.loadImage(notification.media?.coverImage?.large) binding.notificationCover.loadImage(notification.media?.coverImage?.large)
binding.notificationBannerImage.loadImage(notification.media?.bannerImage) image()
clickType = NotificationActivity.Companion.NotificationClickType.MEDIA clickType = NotificationActivity.Companion.NotificationClickType.MEDIA
id = notification.media?.id ?: 0 id = notification.media?.id ?: 0
} }
NotificationType.ACTIVITY_LIKE -> { NotificationType.ACTIVITY_LIKE -> {
binding.notificationCover.loadImage(notification.user?.avatar?.large) image(true)
binding.notificationBannerImage.loadImage(notification.user?.bannerImage)
clickType = NotificationActivity.Companion.NotificationClickType.USER clickType = NotificationActivity.Companion.NotificationClickType.USER
id = notification.user?.id ?: 0 id = notification.user?.id ?: 0
} }
NotificationType.ACTIVITY_REPLY_LIKE -> { NotificationType.ACTIVITY_REPLY_LIKE -> {
binding.notificationCover.loadImage(notification.user?.avatar?.large) binding.notificationCover.loadImage(notification.user?.avatar?.large)
binding.notificationBannerImage.loadImage(notification.user?.bannerImage) image(true)
clickType = NotificationActivity.Companion.NotificationClickType.USER clickType = NotificationActivity.Companion.NotificationClickType.USER
id = notification.user?.id ?: 0 id = notification.user?.id ?: 0
} }
NotificationType.THREAD_LIKE -> { NotificationType.THREAD_LIKE -> {
binding.notificationCover.loadImage(notification.user?.avatar?.large) binding.notificationCover.loadImage(notification.user?.avatar?.large)
binding.notificationBannerImage.loadImage(notification.user?.bannerImage) image(true)
clickType = NotificationActivity.Companion.NotificationClickType.USER clickType = NotificationActivity.Companion.NotificationClickType.USER
id = notification.user?.id ?: 0 id = notification.user?.id ?: 0
} }
NotificationType.THREAD_COMMENT_LIKE -> { NotificationType.THREAD_COMMENT_LIKE -> {
binding.notificationCover.loadImage(notification.user?.avatar?.large) binding.notificationCover.loadImage(notification.user?.avatar?.large)
binding.notificationBannerImage.loadImage(notification.user?.bannerImage) image(true)
clickType = NotificationActivity.Companion.NotificationClickType.USER clickType = NotificationActivity.Companion.NotificationClickType.USER
id = notification.user?.id ?: 0 id = notification.user?.id ?: 0
} }
NotificationType.ACTIVITY_REPLY_SUBSCRIBED -> { NotificationType.ACTIVITY_REPLY_SUBSCRIBED -> {
binding.notificationCover.loadImage(notification.user?.avatar?.large) binding.notificationCover.loadImage(notification.user?.avatar?.large)
binding.notificationBannerImage.loadImage(notification.user?.bannerImage) image(true)
clickType = NotificationActivity.Companion.NotificationClickType.USER clickType = NotificationActivity.Companion.NotificationClickType.USER
id = notification.user?.id ?: 0 id = notification.user?.id ?: 0
} }
NotificationType.RELATED_MEDIA_ADDITION -> { NotificationType.RELATED_MEDIA_ADDITION -> {
binding.notificationCover.loadImage(notification.media?.coverImage?.large) binding.notificationCover.loadImage(notification.media?.coverImage?.large)
binding.notificationBannerImage.loadImage(notification.media?.bannerImage) image()
clickType = NotificationActivity.Companion.NotificationClickType.MEDIA clickType = NotificationActivity.Companion.NotificationClickType.MEDIA
id = notification.media?.id ?: 0 id = notification.media?.id ?: 0
} }
NotificationType.MEDIA_DATA_CHANGE -> { NotificationType.MEDIA_DATA_CHANGE -> {
binding.notificationCover.loadImage(notification.media?.coverImage?.large) binding.notificationCover.loadImage(notification.media?.coverImage?.large)
binding.notificationBannerImage.loadImage(notification.media?.bannerImage) image()
clickType = NotificationActivity.Companion.NotificationClickType.MEDIA clickType = NotificationActivity.Companion.NotificationClickType.MEDIA
id = notification.media?.id ?: 0 id = notification.media?.id ?: 0
} }
NotificationType.MEDIA_MERGE -> { NotificationType.MEDIA_MERGE -> {
binding.notificationCover.loadImage(notification.media?.coverImage?.large) binding.notificationCover.loadImage(notification.media?.coverImage?.large)
binding.notificationBannerImage.loadImage(notification.media?.bannerImage) image()
clickType = NotificationActivity.Companion.NotificationClickType.MEDIA clickType = NotificationActivity.Companion.NotificationClickType.MEDIA
id = notification.media?.id ?: 0 id = notification.media?.id ?: 0
} }

View file

@ -138,11 +138,33 @@ interface NotificationItemBuilder {
} }
} }
fun getDateTime(time: Int): String {
val date = Date(time * 1000L)
val sdf = SimpleDateFormat("dd/MM/yyyy hh:mm a", Locale.getDefault())
return sdf.format(date)
}
fun getDateTime(timestamp: Int): String {
val targetDate = Date(timestamp * 1000L)
if (targetDate < Date(946684800000L)) { // January 1, 2000 (who want dates before that?)
return ""
}
val currentDate = Date()
val difference = currentDate.time - targetDate.time
return when (val daysDifference = difference / (1000 * 60 * 60 * 24)) {
0L -> {
val hoursDifference = difference / (1000 * 60 * 60)
val minutesDifference = (difference / (1000 * 60)) % 60
when {
hoursDifference > 0 -> "$hoursDifference hour${if (hoursDifference > 1) "s" else ""} ago"
minutesDifference > 0 -> "$minutesDifference minute${if (minutesDifference > 1) "s" else ""} ago"
else -> "Just now"
}
}
1L -> "1 day ago"
in 2..6 -> "$daysDifference days ago"
else -> SimpleDateFormat("dd MMM yyyy", Locale.getDefault()).format(targetDate)
}
}
} }
} }

View file

@ -23,10 +23,8 @@ import ani.dantotsu.home.MangaFragment
import ani.dantotsu.home.NoInternet import ani.dantotsu.home.NoInternet
import ani.dantotsu.incognitoNotification import ani.dantotsu.incognitoNotification
import ani.dantotsu.loadImage import ani.dantotsu.loadImage
import ani.dantotsu.notifications.NotificationActivity import ani.dantotsu.profile.activity.NotificationActivity
import ani.dantotsu.offline.OfflineFragment import ani.dantotsu.offline.OfflineFragment
import ani.dantotsu.openLinkInBrowser
import ani.dantotsu.others.imagesearch.ImageSearchActivity
import ani.dantotsu.setSafeOnClickListener import ani.dantotsu.setSafeOnClickListener
import ani.dantotsu.settings.saving.PrefManager import ani.dantotsu.settings.saving.PrefManager
import ani.dantotsu.settings.saving.PrefName import ani.dantotsu.settings.saving.PrefName
@ -79,31 +77,31 @@ class SettingsDialogFragment : BottomSheetDialogFragment() {
Anilist.loginIntent(requireActivity()) Anilist.loginIntent(requireActivity())
} }
} }
binding.settingsNotificationCount.visibility = if (Anilist.unreadNotificationCount > 0) View.VISIBLE else View.GONE
binding.settingsNotificationCount.text = Anilist.unreadNotificationCount.toString()
binding.settingsUserAvatar.setOnClickListener{ binding.settingsUserAvatar.setOnClickListener{
ContextCompat.startActivity( ContextCompat.startActivity(
requireContext(), Intent(requireContext(), ProfileActivity::class.java) requireContext(), Intent(requireContext(), ProfileActivity::class.java)
.putExtra("userId", Anilist.userid), null .putExtra("userId", Anilist.userid), null
) )
} }
binding.settingsIncognito.isChecked =
PrefManager.getVal(PrefName.Incognito)
binding.settingsIncognito.isChecked = PrefManager.getVal(PrefName.Incognito)
binding.settingsIncognito.setOnCheckedChangeListener { _, isChecked -> binding.settingsIncognito.setOnCheckedChangeListener { _, isChecked ->
PrefManager.setVal(PrefName.Incognito, isChecked) PrefManager.setVal(PrefName.Incognito, isChecked)
incognitoNotification(requireContext()) incognitoNotification(requireContext())
} }
binding.settingsExtensionSettings.setSafeOnClickListener { binding.settingsExtensionSettings.setSafeOnClickListener {
startActivity(Intent(activity, ExtensionsActivity::class.java)) startActivity(Intent(activity, ExtensionsActivity::class.java))
dismiss() dismiss()
} }
binding.settingsSettings.setSafeOnClickListener { binding.settingsSettings.setSafeOnClickListener {
startActivity(Intent(activity, SettingsActivity::class.java)) startActivity(Intent(activity, SettingsActivity::class.java))
dismiss() dismiss()
} }
binding.settingsAnilistSettings.setOnClickListener {
openLinkInBrowser("https://anilist.co/settings/lists")
dismiss()
}
binding.settingsNotification.setOnClickListener { binding.settingsNotification.setOnClickListener {
startActivity(Intent(activity, NotificationActivity::class.java)) startActivity(Intent(activity, NotificationActivity::class.java))
dismiss() dismiss()

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" <shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval"> android:shape="oval">
<solid android:color="?attr/colorError"/> <solid android:color="#C6140A"/>
<size <size
android:width="100dp" android:width="100dp"
android:height="100dp"/> android:height="100dp"/>

View file

@ -15,6 +15,7 @@
android:visibility="gone" /> android:visibility="gone" />
<FrameLayout <FrameLayout
android:id="@+id/listToolbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="48dp" android:layout_height="48dp"
android:orientation="horizontal"> android:orientation="horizontal">

View file

@ -1,55 +0,0 @@
<LinearLayout 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:orientation="vertical">
<ProgressBar
android:id="@+id/listProgressBar"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:visibility="gone" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="48dp"
android:orientation="horizontal">
<ImageView
android:id="@+id/listBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start|center_vertical"
android:layout_marginStart="12dp"
android:src="@drawable/ic_round_arrow_back_ios_new_24"
app:tint="?attr/colorOnBackground"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/listTitle"
android:layout_width="wrap_content"
android:layout_height="48dp"
android:layout_gravity="center_vertical"
android:layout_marginStart="44dp"
android:ellipsize="end"
android:fontFamily="@font/poppins_bold"
android:gravity="center|start"
android:singleLine="true"
android:text="Notifications"
android:textAppearance="@style/TextAppearance.Widget.AppCompat.Toolbar.Title"
android:textColor="?attr/colorOnBackground"
android:textSize="18sp"
tools:ignore="HardcodedText" />
</FrameLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/notificationList"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
tools:listitem="@layout/item_notification" />
</LinearLayout>

View file

@ -67,6 +67,7 @@
android:layout_height="82dp" android:layout_height="82dp"
android:layout_gravity="center" android:layout_gravity="center"
android:backgroundTint="@color/transparent" android:backgroundTint="@color/transparent"
app:strokeColor="@color/transparent"
app:cardCornerRadius="64dp"> app:cardCornerRadius="64dp">
<com.google.android.material.imageview.ShapeableImageView <com.google.android.material.imageview.ShapeableImageView

View file

@ -2,13 +2,9 @@
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" <androidx.core.widget.NestedScrollView 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:background="@drawable/bottom_sheet_background"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent"
<LinearLayout android:background="@drawable/bottom_sheet_background">
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@ -17,196 +13,218 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:layout_gravity="bottom" android:orientation="vertical">
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:orientation="horizontal"
android:padding="16dp">
<LinearLayout <LinearLayout
android:layout_width="0dp" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_gravity="bottom"
android:gravity="center_vertical" android:orientation="horizontal"
android:minHeight="64dp" android:padding="16dp">
android:orientation="vertical">
<TextView <com.google.android.material.card.MaterialCardView
android:id="@+id/settingsUsername" android:id="@+id/homeUserAvatarContainer"
android:layout_width="wrap_content" android:layout_width="52dp"
android:layout_height="52dp"
android:layout_marginTop="4dp"
android:backgroundTint="@color/nav_bg_inv"
app:cardCornerRadius="26dp">
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/settingsUserAvatar"
android:layout_width="52dp"
android:layout_height="52dp"
android:scaleType="center"
app:srcCompat="@drawable/ic_round_person_24"
tools:ignore="ContentDescription,ImageContrastCheck" />
</com.google.android.material.card.MaterialCardView>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="-4dp" android:layout_marginStart="16dp"
android:fontFamily="@font/poppins_bold" android:layout_weight="1"
android:gravity="center" android:gravity="center_vertical"
android:text="@string/username" android:minHeight="64dp"
android:textSize="16sp" /> android:orientation="vertical">
<TextView <TextView
android:id="@+id/settingsLogin" android:id="@+id/settingsUsername"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="-4dp"
android:fontFamily="@font/poppins_bold"
android:gravity="center"
android:text="@string/username"
android:textSize="16sp" />
<TextView
android:id="@+id/settingsLogin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="-16dp"
android:layout_marginTop="-16dp"
android:layout_marginBottom="-16dp"
android:fontFamily="@font/poppins_bold"
android:padding="16dp"
android:text="@string/logout"
android:textColor="?attr/colorSecondary"
android:textSize="14sp" />
</LinearLayout>
<FrameLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content">
android:layout_marginStart="-16dp"
android:layout_marginTop="-16dp"
android:layout_marginBottom="-16dp"
android:fontFamily="@font/poppins_bold"
android:padding="16dp"
android:text="@string/logout"
android:textColor="?attr/colorSecondary"
android:textSize="14sp" />
<com.google.android.material.card.MaterialCardView
android:layout_width="52dp"
android:layout_height="52dp"
android:layout_marginTop="4dp"
android:layout_marginEnd="16dp"
android:backgroundTint="@color/nav_bg_inv"
app:cardCornerRadius="26dp">
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/settingsNotification"
android:layout_width="52dp"
android:layout_height="52dp"
android:scaleType="center"
app:srcCompat="@drawable/ic_round_notifications_active_24"
app:tint="@color/bg_opp"
tools:ignore="ContentDescription,ImageContrastCheck" />
</com.google.android.material.card.MaterialCardView>
<TextView
android:id="@+id/settingsNotificationCount"
android:layout_width="18dp"
android:layout_height="18dp"
android:layout_gravity="end|bottom"
android:background="@drawable/notification_circle"
android:fontFamily="@font/poppins_semi_bold"
android:gravity="center"
android:textColor="#F3F3F3"
android:textSize="12sp"
android:visibility="gone"
tools:ignore="SmallSp"
tools:text="1"
tools:visibility="visible" />
</FrameLayout>
</LinearLayout> </LinearLayout>
<com.google.android.material.card.MaterialCardView
android:layout_width="52dp"
android:layout_height="52dp"
android:layout_marginTop="4dp"
android:layout_marginEnd="14dp"
android:backgroundTint="@color/nav_bg_inv"
app:cardCornerRadius="26dp">
<com.google.android.material.imageview.ShapeableImageView <com.google.android.material.materialswitch.MaterialSwitch
android:id="@+id/settingsNotification" android:id="@+id/settingsIncognito"
android:layout_width="52dp" style="@style/Widget.Material3.Button.TextButton"
android:layout_height="52dp" android:layout_width="match_parent"
android:scaleType="center" android:layout_height="64dp"
app:srcCompat="@drawable/ic_round_notifications_active_24" android:checked="false"
app:tint="@color/bg_opp" android:drawableStart="@drawable/ic_incognito_24"
tools:ignore="ContentDescription,ImageContrastCheck" /> android:drawablePadding="16dp"
android:elegantTextHeight="true"
</com.google.android.material.card.MaterialCardView> android:fontFamily="@font/poppins_bold"
android:insetTop="0dp"
<com.google.android.material.card.MaterialCardView android:insetBottom="0dp"
android:id="@+id/homeUserAvatarContainer" android:paddingStart="32dp"
android:layout_width="52dp" android:paddingEnd="32dp"
android:layout_height="52dp" android:text="@string/incognito_mode"
android:layout_marginTop="4dp" android:textAlignment="viewStart"
android:backgroundTint="@color/nav_bg_inv" android:textColor="?attr/colorOnBackground"
app:cardCornerRadius="26dp"> app:cornerRadius="0dp"
app:drawableTint="?attr/colorPrimary"
<com.google.android.material.imageview.ShapeableImageView app:showText="false"
android:id="@+id/settingsUserAvatar" app:thumbTint="@color/button_switch_track" />
android:layout_width="52dp"
android:layout_height="52dp"
android:scaleType="center"
app:srcCompat="@drawable/ic_round_person_24"
tools:ignore="ContentDescription,ImageContrastCheck" />
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.materialswitch.MaterialSwitch
android:id="@+id/settingsDownloads"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="match_parent"
android:layout_height="64dp"
android:checked="false"
android:drawableStart="@drawable/ic_download_24"
android:drawablePadding="16dp"
android:elegantTextHeight="true"
android:fontFamily="@font/poppins_bold"
android:insetTop="0dp"
android:insetBottom="0dp"
android:paddingStart="32dp"
android:paddingEnd="32dp"
android:text="@string/offline_mode"
android:textAlignment="viewStart"
android:textColor="?attr/colorOnBackground"
app:cornerRadius="0dp"
app:drawableTint="?attr/colorPrimary"
app:showText="false"
app:thumbTint="@color/button_switch_track" />
</LinearLayout> </LinearLayout>
<com.google.android.material.materialswitch.MaterialSwitch <LinearLayout
android:id="@+id/settingsIncognito"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="64dp" android:layout_height="match_parent"
android:checked="false" android:layout_marginEnd="58dp"
android:drawableStart="@drawable/ic_incognito_24" android:orientation="vertical">
android:drawablePadding="16dp"
android:elegantTextHeight="true"
android:fontFamily="@font/poppins_bold"
android:insetTop="0dp"
android:insetBottom="0dp"
android:paddingStart="32dp"
android:paddingEnd="32dp"
android:text="@string/incognito_mode"
android:textAlignment="viewStart"
android:textColor="?attr/colorOnBackground"
app:cornerRadius="0dp"
app:drawableTint="?attr/colorPrimary"
app:showText="false"
app:thumbTint="@color/button_switch_track" />
<com.google.android.material.materialswitch.MaterialSwitch <Button
android:id="@+id/settingsDownloads" android:id="@+id/settingsActivity"
style="@style/Widget.Material3.Button.TextButton" style="@style/Widget.Material3.Button.TextButton"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="64dp" android:layout_height="64dp"
android:checked="false" android:fontFamily="@font/poppins_bold"
android:drawableStart="@drawable/ic_download_24" android:insetTop="0dp"
android:drawablePadding="16dp" android:insetBottom="0dp"
android:elegantTextHeight="true" android:paddingStart="32dp"
android:fontFamily="@font/poppins_bold" android:paddingEnd="32dp"
android:insetTop="0dp" android:text="Activity"
android:insetBottom="0dp" android:textAlignment="viewStart"
android:paddingStart="32dp" android:textAllCaps="false"
android:paddingEnd="32dp" android:textColor="?attr/colorOnBackground"
android:text="@string/offline_mode" app:cornerRadius="0dp"
android:textAlignment="viewStart" app:icon="@drawable/inbox_empty"
android:textColor="?attr/colorOnBackground" app:iconPadding="16dp"
app:cornerRadius="0dp" app:iconSize="24dp" />
app:drawableTint="?attr/colorPrimary"
app:showText="false"
app:thumbTint="@color/button_switch_track" />
</LinearLayout>
<LinearLayout <Button
android:layout_width="match_parent" android:id="@+id/settingsExtensionSettings"
android:layout_height="match_parent" style="@style/Widget.Material3.Button.TextButton"
android:layout_marginEnd="58dp" android:layout_width="match_parent"
android:orientation="vertical"> android:layout_height="64dp"
android:fontFamily="@font/poppins_bold"
android:insetTop="0dp"
android:insetBottom="0dp"
android:paddingStart="32dp"
android:paddingEnd="32dp"
android:text="@string/extension_settings"
android:textAlignment="viewStart"
android:textAllCaps="false"
android:textColor="?attr/colorOnBackground"
app:cornerRadius="0dp"
app:icon="@drawable/ic_extension"
app:iconPadding="16dp"
app:iconSize="24dp" />
<Button
<Button android:id="@+id/settingsSettings"
android:id="@+id/settingsAnilistSettings" style="@style/Widget.Material3.Button.TextButton"
style="@style/Widget.Material3.Button.TextButton" android:layout_width="match_parent"
android:layout_width="match_parent" android:layout_height="64dp"
android:layout_height="64dp" android:layout_marginBottom="16dp"
android:fontFamily="@font/poppins_bold" android:fontFamily="@font/poppins_bold"
android:insetTop="0dp" android:insetTop="0dp"
android:insetBottom="0dp" android:insetBottom="0dp"
android:paddingStart="32dp" android:paddingStart="32dp"
android:paddingEnd="32dp" android:paddingEnd="32dp"
android:text="@string/anilist_settings" android:text="@string/settings"
android:textAlignment="viewStart" android:textAlignment="viewStart"
android:textAllCaps="false" android:textAllCaps="false"
android:textColor="?attr/colorOnBackground" android:textColor="?attr/colorOnBackground"
app:cornerRadius="0dp" app:cornerRadius="0dp"
app:icon="@drawable/ic_anilist" app:icon="@drawable/ic_round_settings_24"
app:iconPadding="16dp" app:iconPadding="16dp"
app:iconSize="24dp" /> app:iconSize="24dp" />
</LinearLayout>
<Button
android:id="@+id/settingsExtensionSettings"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="match_parent"
android:layout_height="64dp"
android:fontFamily="@font/poppins_bold"
android:insetTop="0dp"
android:insetBottom="0dp"
android:paddingStart="32dp"
android:paddingEnd="32dp"
android:text="@string/extension_settings"
android:textAlignment="viewStart"
android:textAllCaps="false"
android:textColor="?attr/colorOnBackground"
app:cornerRadius="0dp"
app:icon="@drawable/ic_extension"
app:iconPadding="16dp"
app:iconSize="24dp" />
<Button
android:id="@+id/settingsSettings"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="match_parent"
android:layout_height="64dp"
android:layout_marginBottom="16dp"
android:fontFamily="@font/poppins_bold"
android:insetTop="0dp"
android:insetBottom="0dp"
android:paddingStart="32dp"
android:paddingEnd="32dp"
android:text="@string/settings"
android:textAlignment="viewStart"
android:textAllCaps="false"
android:textColor="?attr/colorOnBackground"
app:cornerRadius="0dp"
app:icon="@drawable/ic_round_settings_24"
app:iconPadding="16dp"
app:iconSize="24dp" />
</LinearLayout>
</LinearLayout> </LinearLayout>
</androidx.core.widget.NestedScrollView> </androidx.core.widget.NestedScrollView>

View file

@ -157,12 +157,20 @@
</com.google.android.material.card.MaterialCardView> </com.google.android.material.card.MaterialCardView>
<View <TextView
android:id="@+id/homeNotificationDot" android:id="@+id/homeNotificationCount"
android:layout_width="20dp" android:layout_width="18dp"
android:layout_height="20dp" android:layout_height="18dp"
android:background="@drawable/notification_circle"/> android:layout_gravity="end|bottom"
android:background="@drawable/notification_circle"
android:fontFamily="@font/poppins_semi_bold"
android:gravity="center"
android:textColor="#F3F3F3"
android:textSize="12sp"
android:visibility="gone"
tools:ignore="SmallSp"
tools:text="1"
tools:visibility="visible" />
</FrameLayout> </FrameLayout>
</LinearLayout> </LinearLayout>

View file

@ -85,17 +85,19 @@
<ImageView <ImageView
android:id="@+id/activityBannerImage" android:id="@+id/activityBannerImage"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="153dp"
android:scaleType="centerCrop" android:scaleType="centerCrop"
android:src="@drawable/linear_gradient_bg" tools:srcCompat="@tools:sample/backgrounds/scenic"
tools:ignore="ContentDescription" /> tools:ignore="ContentDescription" />
<View <ImageView
android:id="@+id/imageView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="153dp"
android:background="@color/bg_black_50" app:srcCompat="@drawable/linear_gradient_nav"
tools:ignore="ContentDescription" /> tools:ignore="ContentDescription" />
<com.google.android.material.card.MaterialCardView <com.google.android.material.card.MaterialCardView
android:id="@+id/activityCoverContainer" android:id="@+id/activityCoverContainer"
android:layout_width="wrap_content" android:layout_width="wrap_content"

View file

@ -59,26 +59,43 @@
tools:ignore="LabelFor,TextContrastCheck" /> tools:ignore="LabelFor,TextContrastCheck" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.card.MaterialCardView <FrameLayout
android:id="@+id/animeUserAvatarContainer" android:layout_width="wrap_content"
android:layout_width="52dp" android:layout_height="wrap_content">
android:layout_height="match_parent"
android:layout_marginTop="4dp"
app:cardBackgroundColor="?attr/colorPrimaryContainer"
app:cardCornerRadius="26dp"
app:strokeColor="@color/text_input_layout_stroke_color">
<com.google.android.material.imageview.ShapeableImageView <com.google.android.material.card.MaterialCardView
android:id="@+id/animeUserAvatar" android:id="@+id/animeUserAvatarContainer"
android:layout_width="52dp" android:layout_width="52dp"
android:layout_height="52dp" android:layout_height="52dp"
android:scaleType="center" android:layout_marginTop="4dp"
android:tint="@color/bg_opp" android:backgroundTint="@color/nav_bg_inv"
app:srcCompat="@drawable/ic_round_settings_24" app:cardCornerRadius="26dp">
tools:ignore="ContentDescription,ImageContrastCheck" />
</com.google.android.material.card.MaterialCardView> <com.google.android.material.imageview.ShapeableImageView
android:id="@+id/animeUserAvatar"
android:layout_width="52dp"
android:layout_height="52dp"
android:scaleType="center"
app:srcCompat="@drawable/ic_round_settings_24"
tools:ignore="ContentDescription,ImageContrastCheck" />
</com.google.android.material.card.MaterialCardView>
<TextView
android:id="@+id/animeNotificationCount"
android:layout_width="18dp"
android:layout_height="18dp"
android:layout_gravity="end|bottom"
android:background="@drawable/notification_circle"
android:fontFamily="@font/poppins_semi_bold"
android:gravity="center"
android:textColor="#F3F3F3"
android:textSize="12sp"
android:visibility="gone"
tools:ignore="SmallSp"
tools:text="1"
tools:visibility="visible" />
</FrameLayout>
</LinearLayout> </LinearLayout>
<ProgressBar <ProgressBar

View file

@ -3,44 +3,47 @@
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"
android:layout_height="120dp" android:layout_height="wrap_content"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:orientation="horizontal"> android:orientation="horizontal">
<com.google.android.material.card.MaterialCardView <com.google.android.material.card.MaterialCardView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="80dp"
android:layout_gravity="start|center_vertical" android:layout_gravity="start|center_vertical"
android:backgroundTint="@color/bg_white" android:backgroundTint="@color/bg_white"
app:cardCornerRadius="16dp"> app:cardCornerRadius="24dp">
<ImageView <ImageView
android:id="@+id/profileBannerImage" android:id="@+id/profileBannerImage"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:scaleType="centerCrop" android:scaleType="centerCrop"
android:src="@drawable/linear_gradient_bg" tools:srcCompat="@tools:sample/backgrounds/scenic"
tools:ignore="ContentDescription" /> tools:ignore="ContentDescription" />
<View <ImageView
android:id="@+id/imageView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/bg_black_50" app:srcCompat="@drawable/linear_gradient_nav"
tools:ignore="ContentDescription" /> tools:ignore="ContentDescription" />
<com.google.android.material.card.MaterialCardView <com.google.android.material.card.MaterialCardView
android:id="@+id/profileUserAvatarContainer" android:id="@+id/profileUserAvatarContainer"
android:layout_width="82dp" android:layout_width="64dp"
android:layout_height="82dp" android:layout_height="64dp"
android:layout_gravity="start|center_vertical" android:layout_gravity="start|center_vertical"
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
android:backgroundTint="@color/bg_white" android:backgroundTint="@color/transparent"
app:strokeColor="@color/transparent"
app:cardCornerRadius="64dp"> app:cardCornerRadius="64dp">
<com.google.android.material.imageview.ShapeableImageView <com.google.android.material.imageview.ShapeableImageView
android:id="@+id/profileUserAvatar" android:id="@+id/profileUserAvatar"
android:layout_width="82dp" android:layout_width="64dp"
android:layout_height="82dp" android:layout_height="64dp"
android:layout_gravity="center" android:layout_gravity="center"
app:srcCompat="@drawable/ic_round_add_circle_24" app:srcCompat="@drawable/ic_round_add_circle_24"
tools:ignore="ContentDescription,ImageContrastCheck" tools:ignore="ContentDescription,ImageContrastCheck"

View file

@ -61,25 +61,43 @@
tools:ignore="LabelFor,TextContrastCheck" /> tools:ignore="LabelFor,TextContrastCheck" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.card.MaterialCardView <FrameLayout
android:id="@+id/mangaUserAvatarContainer" android:layout_width="wrap_content"
android:layout_width="52dp" android:layout_height="wrap_content">
android:layout_height="match_parent"
android:layout_marginTop="4dp"
app:cardBackgroundColor="?attr/colorPrimaryContainer"
app:cardCornerRadius="26dp"
app:strokeColor="@color/text_input_layout_stroke_color">
<com.google.android.material.imageview.ShapeableImageView <com.google.android.material.card.MaterialCardView
android:id="@+id/mangaUserAvatar" android:id="@+id/mangaUserAvatarContainer"
android:layout_width="52dp" android:layout_width="52dp"
android:layout_height="52dp" android:layout_height="52dp"
android:scaleType="center" android:layout_marginTop="4dp"
android:tint="@color/bg_opp" android:backgroundTint="@color/nav_bg_inv"
app:srcCompat="@drawable/ic_round_settings_24" app:cardCornerRadius="26dp">
tools:ignore="ContentDescription,ImageContrastCheck" />
</com.google.android.material.card.MaterialCardView> <com.google.android.material.imageview.ShapeableImageView
android:id="@+id/mangaUserAvatar"
android:layout_width="52dp"
android:layout_height="52dp"
android:scaleType="center"
app:srcCompat="@drawable/ic_round_settings_24"
tools:ignore="ContentDescription,ImageContrastCheck" />
</com.google.android.material.card.MaterialCardView>
<TextView
android:id="@+id/mangaNotificationCount"
android:layout_width="18dp"
android:layout_height="18dp"
android:layout_gravity="end|bottom"
android:background="@drawable/notification_circle"
android:fontFamily="@font/poppins_semi_bold"
android:gravity="center"
android:textColor="#F3F3F3"
android:textSize="12sp"
android:visibility="gone"
tools:ignore="SmallSp"
tools:text="1"
tools:visibility="visible" />
</FrameLayout>
</LinearLayout> </LinearLayout>

View file

@ -94,9 +94,11 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="end" android:layout_gravity="end"
android:layout_marginBottom="4dp" android:layout_marginBottom="4dp"
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
android:gravity="center" android:gravity="center"
android:orientation="horizontal"
android:visibility="gone" android:visibility="gone"
android:orientation="horizontal"
tools:ignore="UseCompoundDrawables"> tools:ignore="UseCompoundDrawables">
<ImageView <ImageView
@ -113,7 +115,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:alpha="0.58" android:alpha="0.58"
android:ellipsize="end" android:ellipsize="end"
android:maxLines="1" android:maxLines="2"
android:paddingStart="4dp" android:paddingStart="4dp"
android:paddingEnd="4dp" android:paddingEnd="4dp"
android:singleLine="true" android:singleLine="true"
@ -123,7 +125,7 @@
android:textStyle="italic" android:textStyle="italic"
android:transitionName="mediaTitle" android:transitionName="mediaTitle"
tools:ignore="TextContrastCheck" tools:ignore="TextContrastCheck"
tools:text="Relation " /> tools:text="Relation" />
</LinearLayout> </LinearLayout>

View file

@ -9,7 +9,6 @@
app:cardBackgroundColor="@color/nav_bg" app:cardBackgroundColor="@color/nav_bg"
app:cardCornerRadius="28dp"> app:cardCornerRadius="28dp">
<ImageView <ImageView
android:id="@+id/itemCompactBanner" android:id="@+id/itemCompactBanner"
android:layout_width="match_parent" android:layout_width="match_parent"

View file

@ -1,31 +1,33 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/notificationContainer"
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"
android:layout_height="170dp" android:layout_height="wrap_content"
android:layout_marginTop="16dp" android:layout_margin="8dp"
android:orientation="horizontal"> android:orientation="horizontal">
<com.google.android.material.card.MaterialCardView <com.google.android.material.card.MaterialCardView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="start|center_vertical" android:layout_gravity="start|center_vertical"
android:backgroundTint="@color/bg_white" app:cardBackgroundColor="@color/nav_bg"
app:cardCornerRadius="24dp"> app:cardCornerRadius="24dp">
<ImageView <ImageView
android:id="@+id/notificationBannerImage" android:id="@+id/notificationBannerImage"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="170dp"
android:scaleType="centerCrop" android:scaleType="centerCrop"
android:src="@drawable/linear_gradient_bg" tools:srcCompat="@tools:sample/backgrounds/scenic"
tools:ignore="ContentDescription" /> tools:ignore="ContentDescription" />
<View <ImageView
android:id="@+id/notificationBannerGradient"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="170dp"
android:background="@color/bg_black_50" app:srcCompat="@drawable/linear_gradient_nav"
tools:ignore="ContentDescription" /> tools:ignore="ContentDescription" />
<com.google.android.material.card.MaterialCardView <com.google.android.material.card.MaterialCardView
@ -34,7 +36,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="start|center_vertical" android:layout_gravity="start|center_vertical"
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
android:backgroundTint="@color/bg_white" android:backgroundTint="@color/transparent"
app:strokeColor="@color/transparent"
app:cardCornerRadius="16dp"> app:cardCornerRadius="16dp">
<com.google.android.material.imageview.ShapeableImageView <com.google.android.material.imageview.ShapeableImageView
@ -47,33 +50,54 @@
tools:ignore="ContentDescription,ImageContrastCheck" tools:ignore="ContentDescription,ImageContrastCheck"
tools:tint="@color/transparent" /> tools:tint="@color/transparent" />
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:id="@+id/notificationCoverUserContainer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:layout_gravity="start|center_vertical"
android:layout_marginStart="23dp"
android:backgroundTint="@color/transparent"
app:strokeColor="@color/transparent"
app:cardCornerRadius="64dp">
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/notificationCoverUser"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_gravity="center"
app:srcCompat="@drawable/ic_round_add_circle_24"
tools:ignore="ContentDescription,ImageContrastCheck"
tools:tint="@color/transparent" />
</com.google.android.material.card.MaterialCardView> </com.google.android.material.card.MaterialCardView>
<TextView <TextView
android:id="@+id/notificationText" android:id="@+id/notificationText"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="start|center_vertical" android:layout_gravity="end|center"
android:layout_marginStart="128dp" android:layout_marginStart="128dp"
android:layout_marginEnd="8dp" android:padding="8dp"
android:ellipsize="end"
android:fontFamily="@font/poppins_semi_bold" android:fontFamily="@font/poppins_semi_bold"
android:text="@string/slogan" android:maxLines="2"
android:textColor="@color/bg_white" android:textSize="14dp"
android:textSize="18sp" android:transitionName="mediaTitle"
android:textStyle="bold" tools:ignore="SpUsage"
tools:ignore="HardcodedText" /> tools:text="@string/slogan" />
<TextView <TextView
android:id="@+id/notificationDate" android:id="@+id/notificationDate"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="end" android:layout_gravity="end|bottom"
android:layout_marginTop="12dp" android:layout_marginTop="2dp"
android:layout_marginEnd="16dp" android:layout_marginEnd="12dp"
android:fontFamily="@font/poppins_semi_bold" android:fontFamily="@font/poppins_semi_bold"
android:text="Wed,06 March 2024, 7:00PM" android:text="Wed,06 March 2024, 7:00PM"
android:textColor="@color/bg_white" android:textSize="10sp"
android:textSize="14sp"
tools:ignore="HardcodedText" /> tools:ignore="HardcodedText" />
</com.google.android.material.card.MaterialCardView> </com.google.android.material.card.MaterialCardView>