From 02e74aa452bb8cb4a596a3e12241ca930fb24e56 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Tue, 7 Jun 2022 18:20:08 +0200 Subject: [PATCH] Improve avatar page --- .../common/habitica/views/AvatarView.kt | 10 ++--- .../habitica/ui/activities/AvatarActivity.kt | 37 ++++++++++++++++++- .../util/HabiticaScrollingLayoutCallback.kt | 2 - .../src/main/res/drawable/avatar_cutout.xml | 4 ++ .../src/main/res/layout/activity_avatar.xml | 17 +++++++-- 5 files changed, 58 insertions(+), 12 deletions(-) create mode 100644 wearos/src/main/res/drawable/avatar_cutout.xml diff --git a/common/src/main/java/com/habitrpg/common/habitica/views/AvatarView.kt b/common/src/main/java/com/habitrpg/common/habitica/views/AvatarView.kt index 54581769a..7d0ee5570 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/views/AvatarView.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/views/AvatarView.kt @@ -375,17 +375,17 @@ class AvatarView : FrameLayout { offset = PointF(-25.0f, 0.0f) // compact hero box } LayerType.MOUNT_BODY, LayerType.MOUNT_HEAD -> offset = - PointF(25.0f, 18.0f) // full hero box + PointF(24.0f, 18.0f) // full hero box LayerType.CHAIR, LayerType.BACK, LayerType.SKIN, LayerType.SHIRT, LayerType.ARMOR, LayerType.BODY, LayerType.HEAD_0, LayerType.HAIR_BASE, LayerType.HAIR_BANGS, LayerType.HAIR_MUSTACHE, LayerType.HAIR_BEARD, LayerType.EYEWEAR, LayerType.VISUAL_BUFF, LayerType.HEAD, LayerType.HEAD_ACCESSORY, LayerType.HAIR_FLOWER, LayerType.SHIELD, LayerType.WEAPON, LayerType.ZZZ -> if (showMount || showPet) { // full hero box offset = when { hasMount -> if (layerMap[LayerType.MOUNT_HEAD]?.contains("Kangaroo") == true) { - PointF(25.0f, 18f) + PointF(24.0f, 18f) } else { - PointF(25.0f, 0f) + PointF(24.0f, 0f) } - hasPet -> PointF(25.0f, 24.5f) - else -> PointF(25.0f, 28.0f) + hasPet -> PointF(24.0f, 24.5f) + else -> PointF(24.0f, 28.0f) } } else if (showBackground) { // compact hero box diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/AvatarActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/AvatarActivity.kt index 525698f29..273bbf910 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/AvatarActivity.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/AvatarActivity.kt @@ -1,10 +1,17 @@ package com.habitrpg.wearos.habitica.ui.activities +import android.os.Build import android.os.Bundle +import android.view.Gravity +import android.view.ViewOutlineProvider +import android.widget.FrameLayout import androidx.activity.viewModels +import com.habitrpg.common.habitica.extensions.dpToPx import com.habitrpg.wearos.habitica.databinding.ActivityAvatarBinding import com.habitrpg.wearos.habitica.ui.viewmodels.AvatarViewModel import dagger.hilt.android.AndroidEntryPoint +import java.lang.Integer.max +import kotlin.math.roundToInt @AndroidEntryPoint class AvatarActivity: BaseActivity() { @@ -15,7 +22,35 @@ class AvatarActivity: BaseActivity() { super.onCreate(savedInstanceState) viewModel.user.observe(this) { - binding.root.setAvatar(it) + binding.avatarView.setAvatar(it) } } + + override fun onStart() { + super.onStart() + val params = binding.root.layoutParams as FrameLayout.LayoutParams + val maxSize = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + max(windowManager.currentWindowMetrics.bounds.bottom, windowManager.currentWindowMetrics.bounds.right) + } else { + max(windowManager.defaultDisplay.width, windowManager.defaultDisplay.height) + } + var factor = (maxSize / 46f) / 3f + var viewSize = 138 * factor.roundToInt() + if (maxSize - viewSize > 20.dpToPx(this)) { + viewSize += 45 + factor += 1 + } + params.width = viewSize + params.height = viewSize + params.gravity = Gravity.CENTER + binding.root.layoutParams = params + + val avatarParams = binding.avatarView.layoutParams as FrameLayout.LayoutParams + avatarParams.width = 141 * factor.roundToInt() + avatarParams.height = 147 * factor.roundToInt() + binding.avatarView.layoutParams = avatarParams + + binding.root.outlineProvider = ViewOutlineProvider.BACKGROUND + binding.root.clipToOutline = true + } } \ No newline at end of file diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/util/HabiticaScrollingLayoutCallback.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/util/HabiticaScrollingLayoutCallback.kt index d8462b242..705a6014d 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/util/HabiticaScrollingLayoutCallback.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/util/HabiticaScrollingLayoutCallback.kt @@ -1,6 +1,5 @@ package com.habitrpg.wearos.habitica.util -import android.util.Log import android.view.View import androidx.recyclerview.widget.RecyclerView import androidx.wear.widget.WearableLinearLayoutManager @@ -34,7 +33,6 @@ class HabiticaScrollingLayoutCallback : WearableLinearLayoutManager.LayoutCallba scaleX = scale scaleY = scale translationY = (height - (scale * height)) / 2 * if (yRelativeToCenterOffset > 0.5) -1 else 1 - Log.d("HabiticaScrollingLayoutCallback", "onLayoutFinished: $translationY $scale") alpha = scale * 2 } } diff --git a/wearos/src/main/res/drawable/avatar_cutout.xml b/wearos/src/main/res/drawable/avatar_cutout.xml new file mode 100644 index 000000000..4ecbec9e6 --- /dev/null +++ b/wearos/src/main/res/drawable/avatar_cutout.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/wearos/src/main/res/layout/activity_avatar.xml b/wearos/src/main/res/layout/activity_avatar.xml index 0a42555c7..175220a49 100644 --- a/wearos/src/main/res/layout/activity_avatar.xml +++ b/wearos/src/main/res/layout/activity_avatar.xml @@ -1,7 +1,16 @@ - - - \ No newline at end of file + android:layout_gravity="center" + android:background="@drawable/avatar_cutout" + android:clipChildren="true" + android:clipToOutline="true" + android:outlineProvider="background" + android:clipToPadding="true"> + + \ No newline at end of file