From 2742f58af510ee4b3d4d15790a7f5f17928125b5 Mon Sep 17 00:00:00 2001 From: ibo <41344259+sneazy-ibo@users.noreply.github.com> Date: Fri, 8 Mar 2024 09:34:32 +0100 Subject: [PATCH 1/2] =?UTF-8?q?feat():=20fixed=20the=20UI=20changes=20?= =?UTF-8?q?=F0=9F=A6=8D=20+=20notificationIcon=20logic=20and=20long=20pres?= =?UTF-8?q?s=20userAvatar=20=F0=9F=90=92=20(#226)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ani/dantotsu/home/HomeFragment.kt | 8 +++ .../settings/SettingsDialogFragment.kt | 7 +++ app/src/main/res/layout/item_notification.xml | 52 ++++++++++--------- 3 files changed, 43 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/ani/dantotsu/home/HomeFragment.kt b/app/src/main/java/ani/dantotsu/home/HomeFragment.kt index e0a2dc14..9652c43b 100644 --- a/app/src/main/java/ani/dantotsu/home/HomeFragment.kt +++ b/app/src/main/java/ani/dantotsu/home/HomeFragment.kt @@ -32,6 +32,7 @@ import ani.dantotsu.media.Media import ani.dantotsu.media.MediaAdaptor import ani.dantotsu.media.user.ListActivity import ani.dantotsu.navBarHeight +import ani.dantotsu.profile.ProfileActivity import ani.dantotsu.setSafeOnClickListener import ani.dantotsu.setSlideIn import ani.dantotsu.setSlideUp @@ -120,6 +121,13 @@ class HomeFragment : Fragment() { "dialog" ) } + binding.homeUserAvatarContainer.setOnLongClickListener { + ContextCompat.startActivity( + requireContext(), Intent(requireContext(), ProfileActivity::class.java) + .putExtra("userId", Anilist.userid), null + ) + false + } binding.homeContainer.updateLayoutParams { bottomMargin = navBarHeight diff --git a/app/src/main/java/ani/dantotsu/settings/SettingsDialogFragment.kt b/app/src/main/java/ani/dantotsu/settings/SettingsDialogFragment.kt index 8a1c9be4..31feb45d 100644 --- a/app/src/main/java/ani/dantotsu/settings/SettingsDialogFragment.kt +++ b/app/src/main/java/ani/dantotsu/settings/SettingsDialogFragment.kt @@ -59,6 +59,13 @@ class SettingsDialogFragment : BottomSheetDialogFragment() { val theme = requireContext().theme theme.resolveAttribute(com.google.android.material.R.attr.colorSurface, typedValue, true) window?.navigationBarColor = typedValue.data + val notificationIcon = if (Anilist.unreadNotificationCount > 0) { + R.drawable.ic_round_notifications_active_24 + } else { + R.drawable.ic_round_notifications_none_24 + } + binding.settingsNotification.setImageResource(notificationIcon) + binding.settingsNotification.visibility = View.VISIBLE if (Anilist.token != null) { binding.settingsLogin.setText(R.string.logout) diff --git a/app/src/main/res/layout/item_notification.xml b/app/src/main/res/layout/item_notification.xml index eedb9b5b..9befe130 100644 --- a/app/src/main/res/layout/item_notification.xml +++ b/app/src/main/res/layout/item_notification.xml @@ -73,32 +73,36 @@ - - - + android:layout_gravity="start|center" + android:orientation="vertical" + android:layout_marginStart="125dp"> + + + + + \ No newline at end of file From e0cd43c63c28d20fc6324442d1fd7d3572f721cb Mon Sep 17 00:00:00 2001 From: aayush262 Date: Fri, 8 Mar 2024 15:24:35 +0530 Subject: [PATCH 2/2] fix: some UI changes pt:2 --- app/src/main/AndroidManifest.xml | 2 +- .../ani/dantotsu/profile/FollowActivity.kt | 6 ++- .../java/ani/dantotsu/profile/FollowerItem.kt | 2 +- .../ani/dantotsu/profile/ProfileActivity.kt | 1 + .../{ => activity}/ActivityActivity.kt | 19 +++++---- .../dantotsu/profile/activity/ActivityItem.kt | 23 ++++++----- .../profile/activity/NotificationActivity.kt | 7 +++- .../profile/activity/NotificationItem.kt | 6 +-- .../settings/SettingsDialogFragment.kt | 1 - app/src/main/res/layout/activity_follow.xml | 17 +++++--- .../main/res/layout/bottom_sheet_settings.xml | 7 ++-- app/src/main/res/layout/item_activity.xml | 40 +++++++++++++------ app/src/main/res/layout/item_follower.xml | 2 +- app/src/main/res/layout/item_notification.xml | 25 ++++++------ 14 files changed, 96 insertions(+), 62 deletions(-) rename app/src/main/java/ani/dantotsu/profile/{ => activity}/ActivityActivity.kt (77%) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8408d9ff..8590ff4d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -115,7 +115,7 @@ android:windowSoftInputMode="adjustResize|stateHidden" android:parentActivityName=".MainActivity" /> diff --git a/app/src/main/java/ani/dantotsu/profile/FollowActivity.kt b/app/src/main/java/ani/dantotsu/profile/FollowActivity.kt index 9cb1b612..fa30f6a3 100644 --- a/app/src/main/java/ani/dantotsu/profile/FollowActivity.kt +++ b/app/src/main/java/ani/dantotsu/profile/FollowActivity.kt @@ -2,6 +2,7 @@ package ani.dantotsu.profile import android.content.Intent import android.os.Bundle +import android.view.View import android.view.ViewGroup.MarginLayoutParams import android.widget.ImageButton import androidx.appcompat.app.AppCompatActivity @@ -47,7 +48,7 @@ class FollowActivity : AppCompatActivity(){ false ) binding.listRecyclerView.adapter = adapter - + binding.listProgressBar.visibility = View.VISIBLE binding.listBack.setOnClickListener { finish() } val title = intent.getStringExtra("title") @@ -63,6 +64,7 @@ class FollowActivity : AppCompatActivity(){ users = respond withContext(Dispatchers.Main) { fillList() + binding.listProgressBar.visibility = View.GONE } } binding.followerList.setOnClickListener { @@ -86,7 +88,7 @@ class FollowActivity : AppCompatActivity(){ } users?.forEach { user -> if (getLayoutType(selected) == 0) { - adapter.add(FollowerItem(user.id, user.name ?: "Unknown", user.avatar?.medium, user.bannerImage) { onUserClick(it) }) + adapter.add(FollowerItem(user.id, user.name ?: "Unknown", user.avatar?.medium, user.bannerImage ?: user.avatar?.medium ) { onUserClick(it) }) } else { adapter.add(GridFollowerItem(user.id, user.name ?: "Unknown", user.avatar?.medium) { onUserClick(it) }) } diff --git a/app/src/main/java/ani/dantotsu/profile/FollowerItem.kt b/app/src/main/java/ani/dantotsu/profile/FollowerItem.kt index 378a1b82..f09c2435 100644 --- a/app/src/main/java/ani/dantotsu/profile/FollowerItem.kt +++ b/app/src/main/java/ani/dantotsu/profile/FollowerItem.kt @@ -33,7 +33,7 @@ class FollowerItem( Glide.with(context as Context) .load(GlideUrl(banner)) .diskCacheStrategy(DiskCacheStrategy.ALL).override(400) - .apply(RequestOptions.bitmapTransform(BlurTransformation(2, 6))) + .apply(RequestOptions.bitmapTransform(BlurTransformation(2, 2))) .into(binding.profileBannerImage) } else { binding.profileBannerImage.setImageResource(R.drawable.linear_gradient_bg) diff --git a/app/src/main/java/ani/dantotsu/profile/ProfileActivity.kt b/app/src/main/java/ani/dantotsu/profile/ProfileActivity.kt index a7afa0f5..b180a833 100644 --- a/app/src/main/java/ani/dantotsu/profile/ProfileActivity.kt +++ b/app/src/main/java/ani/dantotsu/profile/ProfileActivity.kt @@ -22,6 +22,7 @@ import ani.dantotsu.initActivity import ani.dantotsu.loadImage import ani.dantotsu.navBarHeight import ani.dantotsu.others.ImageViewDialog +import ani.dantotsu.profile.activity.ActivityActivity import ani.dantotsu.settings.saving.PrefManager import ani.dantotsu.settings.saving.PrefName import ani.dantotsu.snackString diff --git a/app/src/main/java/ani/dantotsu/profile/ActivityActivity.kt b/app/src/main/java/ani/dantotsu/profile/activity/ActivityActivity.kt similarity index 77% rename from app/src/main/java/ani/dantotsu/profile/ActivityActivity.kt rename to app/src/main/java/ani/dantotsu/profile/activity/ActivityActivity.kt index 341bde71..a9482820 100644 --- a/app/src/main/java/ani/dantotsu/profile/ActivityActivity.kt +++ b/app/src/main/java/ani/dantotsu/profile/activity/ActivityActivity.kt @@ -1,4 +1,4 @@ -package ani.dantotsu.profile +package ani.dantotsu.profile.activity import android.annotation.SuppressLint import android.os.Bundle @@ -11,11 +11,12 @@ import ani.dantotsu.connections.anilist.Anilist import ani.dantotsu.connections.anilist.api.Activity import ani.dantotsu.databinding.ActivityFollowBinding import ani.dantotsu.initActivity -import ani.dantotsu.profile.activity.ActivityItem import ani.dantotsu.statusBarHeight import ani.dantotsu.themes.ThemeManager import com.xwray.groupie.GroupieAdapter +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext class ActivityActivity : AppCompatActivity() { private lateinit var binding: ActivityFollowBinding @@ -39,16 +40,20 @@ class ActivityActivity : AppCompatActivity() { binding.listBack.setOnClickListener { onBackPressed() } - + binding.listProgressBar.visibility = ViewGroup.VISIBLE var userId: Int? = intent.getIntExtra("userId", -1) if (userId == -1) userId = null val global = intent.getBooleanExtra("global", false) - lifecycleScope.launch { + lifecycleScope.launch(Dispatchers.IO) { val res = Anilist.query.getFeed(userId, global) - res?.data?.page?.activities?.let { activities -> - activityList = activities - adapter.update(activityList.map { ActivityItem(it){} }) + + withContext(Dispatchers.Main){ + res?.data?.page?.activities?.let { activities -> + activityList = activities + adapter.update(activityList.map { ActivityItem(it){} }) + } + binding.listProgressBar.visibility = ViewGroup.GONE } } } diff --git a/app/src/main/java/ani/dantotsu/profile/activity/ActivityItem.kt b/app/src/main/java/ani/dantotsu/profile/activity/ActivityItem.kt index 7860d93e..f76ea5d5 100644 --- a/app/src/main/java/ani/dantotsu/profile/activity/ActivityItem.kt +++ b/app/src/main/java/ani/dantotsu/profile/activity/ActivityItem.kt @@ -1,5 +1,6 @@ package ani.dantotsu.profile.activity +import android.annotation.SuppressLint import android.content.Context import android.view.View import androidx.core.content.ContextCompat @@ -19,6 +20,7 @@ class ActivityItem( val clickCallback: (Int) -> Unit ): BindableItem() { private lateinit var binding: ItemActivityBinding + @SuppressLint("SetTextI18n") override fun bind(viewBinding: ItemActivityBinding, position: Int) { binding = viewBinding when (activity.typename) { @@ -31,19 +33,20 @@ class ActivityItem( else ContextCompat.getColor(binding.root.context, R.color.bg_opp) binding.activityFavorite.setColorFilter(color) - + binding.activityFavoriteCount.text = activity.likeCount.toString() binding.activityMediaName.text = activity.media?.title?.userPreferred - binding.activityText.text = "${activity.user!!.name} ${activity.status} ${activity.media!!.title!!.userPreferred}" - binding.activityCover.loadImage(activity.media.coverImage?.medium) + binding.activityText.text = "${activity.user!!.name} ${activity.status} ${activity.progress ?: ""}" + binding.activityCover.loadImage(activity.media?.coverImage?.large) val context = binding.root.context - val banner = activity.media.bannerImage + val banner = activity.media?.bannerImage ?: activity.media?.coverImage?.large if (banner != null) { - if (!(context as android.app.Activity).isDestroyed) - Glide.with(context as Context) - .load(GlideUrl(banner)) - .diskCacheStrategy(DiskCacheStrategy.ALL).override(400) - .apply(RequestOptions.bitmapTransform(BlurTransformation(2, 2))) - .into(binding.activityBannerImage) + if (!(context as android.app.Activity).isDestroyed) { + Glide.with(context as Context) + .load(GlideUrl(banner)) + .diskCacheStrategy(DiskCacheStrategy.ALL).override(400) + .apply(RequestOptions.bitmapTransform(BlurTransformation(2, 2))) + .into(binding.activityBannerImage) + } } else { binding.activityBannerImage.setImageResource(R.drawable.linear_gradient_bg) } diff --git a/app/src/main/java/ani/dantotsu/profile/activity/NotificationActivity.kt b/app/src/main/java/ani/dantotsu/profile/activity/NotificationActivity.kt index a7ff26dc..f699b274 100644 --- a/app/src/main/java/ani/dantotsu/profile/activity/NotificationActivity.kt +++ b/app/src/main/java/ani/dantotsu/profile/activity/NotificationActivity.kt @@ -18,7 +18,9 @@ import ani.dantotsu.profile.ProfileActivity import ani.dantotsu.statusBarHeight import ani.dantotsu.themes.ThemeManager import com.xwray.groupie.GroupieAdapter +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext class NotificationActivity : AppCompatActivity() { private lateinit var binding: ActivityFollowBinding @@ -41,13 +43,16 @@ class NotificationActivity : AppCompatActivity() { binding.listBack.setOnClickListener { onBackPressed() } - + binding.listProgressBar.visibility = ViewGroup.VISIBLE lifecycleScope.launch { val res = Anilist.query.getNotifications(Anilist.userid?:0) res?.data?.page?.notifications?.let { notifications -> notificationList = notifications adapter.update(notificationList.map { NotificationItem(it, ::onNotificationClick) }) } + withContext(Dispatchers.Main){ + binding.listProgressBar.visibility = ViewGroup.GONE + } } } diff --git a/app/src/main/java/ani/dantotsu/profile/activity/NotificationItem.kt b/app/src/main/java/ani/dantotsu/profile/activity/NotificationItem.kt index 31e84a76..b6a2163a 100644 --- a/app/src/main/java/ani/dantotsu/profile/activity/NotificationItem.kt +++ b/app/src/main/java/ani/dantotsu/profile/activity/NotificationItem.kt @@ -38,7 +38,7 @@ class NotificationItem( private fun image(user: Boolean = false) { val context = binding.notificationBannerImage.context - val cover = if (user) notification.user?.bannerImage else notification.media?.bannerImage + val cover = if (user) notification.user?.bannerImage ?: notification.user?.avatar?.medium else notification.media?.bannerImage ?: notification.media?.coverImage?.large if (cover != null) { if (!(context as Activity).isDestroyed) Glide.with(context as Context) @@ -50,7 +50,7 @@ class NotificationItem( binding.notificationBannerImage.setImageResource(R.drawable.linear_gradient_bg) } val defaultHeight = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 170f, context.resources.displayMetrics).toInt() - val userHeight = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 80f, context.resources.displayMetrics).toInt() + val userHeight = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 90f, context.resources.displayMetrics).toInt() if (user) { binding.notificationCover.visibility = View.GONE @@ -58,14 +58,12 @@ class NotificationItem( binding.notificationCoverUserContainer.visibility = View.VISIBLE binding.notificationCoverUser.loadImage(notification.user?.avatar?.large) binding.notificationBannerImage.layoutParams.height = userHeight - binding.notificationBannerGradient.layoutParams.height = userHeight } else{ binding.notificationCover.visibility = View.VISIBLE binding.notificationCoverUser.visibility = View.VISIBLE binding.notificationCoverUserContainer.visibility = View.GONE binding.notificationCover.loadImage(notification.media?.coverImage?.large) binding.notificationBannerImage.layoutParams.height = defaultHeight - binding.notificationBannerGradient.layoutParams.height = defaultHeight } } diff --git a/app/src/main/java/ani/dantotsu/settings/SettingsDialogFragment.kt b/app/src/main/java/ani/dantotsu/settings/SettingsDialogFragment.kt index 31feb45d..6638b151 100644 --- a/app/src/main/java/ani/dantotsu/settings/SettingsDialogFragment.kt +++ b/app/src/main/java/ani/dantotsu/settings/SettingsDialogFragment.kt @@ -65,7 +65,6 @@ class SettingsDialogFragment : BottomSheetDialogFragment() { R.drawable.ic_round_notifications_none_24 } binding.settingsNotification.setImageResource(notificationIcon) - binding.settingsNotification.visibility = View.VISIBLE if (Anilist.token != null) { binding.settingsLogin.setText(R.string.logout) diff --git a/app/src/main/res/layout/activity_follow.xml b/app/src/main/res/layout/activity_follow.xml index ce25a262..59358670 100644 --- a/app/src/main/res/layout/activity_follow.xml +++ b/app/src/main/res/layout/activity_follow.xml @@ -6,13 +6,18 @@ android:layout_height="match_parent" android:orientation="vertical"> - + android:layout_width="match_parent" + android:layout_height="match_parent" + android:gravity="center" + tools:visibility="gone"> + + + + android:layout_height="wrap_content" + android:layout_marginTop="4dp" + android:layout_marginEnd="16dp"> diff --git a/app/src/main/res/layout/item_activity.xml b/app/src/main/res/layout/item_activity.xml index eb63b17a..8cda1c79 100644 --- a/app/src/main/res/layout/item_activity.xml +++ b/app/src/main/res/layout/item_activity.xml @@ -18,8 +18,9 @@ android:layout_height="64dp" android:layout_gravity="start|center_vertical" android:layout_marginStart="16dp" - android:backgroundTint="@color/bg_white" - app:cardCornerRadius="64dp"> + android:backgroundTint="@color/transparent" + app:cardCornerRadius="64dp" + app:strokeColor="@color/transparent"> - + android:orientation="vertical"> + + + + + + android:layout_height="180dp"> + tools:ignore="ContentDescription" + tools:srcCompat="@tools:sample/backgrounds/scenic" /> @@ -113,6 +128,7 @@ android:layout_width="102dp" android:layout_height="154dp" android:layout_gravity="center" + android:scaleType="centerCrop" app:srcCompat="@drawable/ic_round_add_circle_24" tools:ignore="ContentDescription,ImageContrastCheck" tools:tint="@color/transparent" /> diff --git a/app/src/main/res/layout/item_follower.xml b/app/src/main/res/layout/item_follower.xml index e26ac3a5..d5605368 100644 --- a/app/src/main/res/layout/item_follower.xml +++ b/app/src/main/res/layout/item_follower.xml @@ -9,7 +9,7 @@ diff --git a/app/src/main/res/layout/item_notification.xml b/app/src/main/res/layout/item_notification.xml index 9befe130..00903f44 100644 --- a/app/src/main/res/layout/item_notification.xml +++ b/app/src/main/res/layout/item_notification.xml @@ -1,8 +1,8 @@ + tools:ignore="ContentDescription" + tools:srcCompat="@tools:sample/backgrounds/scenic" /> @@ -37,30 +36,30 @@ android:layout_gravity="start|center_vertical" android:layout_marginStart="16dp" android:backgroundTint="@color/transparent" - app:strokeColor="@color/transparent" - app:cardCornerRadius="16dp"> + app:cardCornerRadius="16dp" + app:strokeColor="@color/transparent"> + + android:visibility="gone" + app:cardCornerRadius="64dp" + app:strokeColor="@color/transparent"> + android:layout_marginStart="125dp" + android:orientation="vertical">