design tweaks

This commit is contained in:
Phillip Thelen 2024-05-29 10:57:57 +02:00
parent 071fb953f0
commit 3351238dce
16 changed files with 57 additions and 232 deletions

View file

@ -277,6 +277,9 @@
<meta-data
android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/brand_300" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_channel_id"
android:value="default" />
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="@string/content_provider"

Binary file not shown.

After

Width:  |  Height:  |  Size: 422 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 546 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 803 B

View file

@ -3,4 +3,4 @@
<solid android:color="@color/background_brand"/>
<corners android:radius="20dip"/>
<padding android:left="0dip" android:top="0dip" android:right="0dip" android:bottom="0dip" />
</shape>
</shape>

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="@color/brand_300"/>
<corners android:radius="20dip"/>
<padding android:left="0dip" android:top="0dip" android:right="0dip" android:bottom="0dip" />
</shape>
</item>
<item android:width="14dp" android:height="14dp" android:gravity="center">
<bitmap android:src="@drawable/limited" android:tintMode="src_atop" android:tint="@color/white">
</bitmap>
</item>
</layer-list>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:width="24dp" android:height="24dp">
<item>
<shape>
<solid android:color="@color/offset_background"/>
<corners android:radius="20dip"/>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:width="24dp" android:height="24dp">
<item>
<shape>
<solid android:color="@color/brand_300"/>
<corners android:radius="20dip"/>

View file

@ -1526,6 +1526,7 @@
<string name="rogues">Rogues</string>
<string name="warriors">Warriors</string>
<string name="mages">Mages</string>
<string name="customization_shop">Customization Shop</string>
<plurals name="you_x_others">
<item quantity="zero">You</item>

View file

@ -176,6 +176,8 @@ class ComposeAvatarCustomizationFragment :
userRepository.useCustomization(type ?: "", category, activeCustomization ?: "")
} else if (customization.identifier == activeCustomization && customization.type == "hair" && customization.category != "color") {
userRepository.useCustomization(type ?: "", category, "0")
} else if (customization.identifier == activeCustomization && customization.type == "chair") {
userRepository.useCustomization(type ?: "", category, "none")
} else if (customization.type == "background" && ownedCustomizations.value.firstOrNull { it.key == customization.identifier } == null) {
userRepository.unlockPath(customization)
userRepository.retrieveUser(false, true, true)
@ -357,7 +359,7 @@ class ComposeAvatarCustomizationFragment :
"skin" -> prefs?.skin
"shirt" -> prefs?.shirt
"background" -> prefs?.background
"chair" -> prefs?.chair
"chair" -> prefs?.chair?.replace("chair_", "")
"hair" ->
when (this.category) {
"bangs" -> prefs?.hair?.bangs.toString()
@ -519,7 +521,7 @@ private fun AvatarCustomizationView(
}
.background(colorResource(id = R.color.window_background)),
) {
if (item.identifier.isNullOrBlank() || item.identifier == "0") {
if (item.identifier.isNullOrBlank() || item.identifier == "0" || item.identifier == "none") {
Image(painterResource(R.drawable.empty_slot), contentDescription = null, contentScale = ContentScale.None, modifier = Modifier.size(68.dp))
} else {
PixelArtView(
@ -541,7 +543,7 @@ private fun AvatarCustomizationView(
}
}
item(span = { GridItemSpan(3) }) {
EmptyFooter(type, items.size <= 1)
EmptyFooter(type, items.size > 1)
}
}
}

View file

@ -21,6 +21,7 @@ import androidx.compose.foundation.lazy.grid.GridItemSpan
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
import androidx.compose.foundation.lazy.grid.items
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
@ -38,8 +39,11 @@ import androidx.compose.ui.platform.rememberNestedScrollInteropConnection
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.withStyle
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.fragment.app.viewModels
@ -273,7 +277,7 @@ private fun AvatarEquipmentView(
Image(painterResource(R.drawable.empty_slot), contentDescription = null, contentScale = ContentScale.None, modifier = Modifier.size(68.dp))
} else {
PixelArtView(
imageName = "icon_" + item.key,
imageName = "shop_" + item.key,
Modifier.size(68.dp),
)
}
@ -291,7 +295,7 @@ private fun AvatarEquipmentView(
}
}
item(span = { GridItemSpan(3) }) {
EmptyFooter(type, items.size <= 1)
EmptyFooter(type, items.size > 1)
}
}
}
@ -318,13 +322,33 @@ internal fun EmptyFooter(type: String?, hasItems: Boolean) {
stringResource(R.string.customizations_no_owned), fontSize = 16.sp, fontWeight = FontWeight.Bold, color = colorResource(R.color.text_secondary),
modifier = Modifier.padding(bottom = 2.dp)
)
Text(stringResource(R.string.customization_shop_check_out), fontSize = 14.sp, color = colorResource(R.color.text_ternary), textAlign = TextAlign.Center)
Text(buildAnnotatedString {
val original = stringResource(id = R.string.customization_shop_check_out)
val customizationShopName = stringResource(id = R.string.customization_shop)
val first = original.substring(0, original.indexOf(customizationShopName))
val second = original.substring(original.indexOf(customizationShopName) + customizationShopName.length, original.length)
append(first)
withStyle(SpanStyle(color = HabiticaTheme.colors.tintedUiMain)) {
append(customizationShopName)
}
append(second)
}, fontSize = 14.sp, fontWeight = FontWeight.Normal, color = colorResource(R.color.text_ternary), textAlign = TextAlign.Center)
} else {
Text(
stringResource(R.string.looking_for_more), fontSize = 16.sp, fontWeight = FontWeight.Bold, color = colorResource(R.color.text_secondary),
modifier = Modifier.padding(bottom = 2.dp)
)
Text(stringResource(R.string.customization_shop_more), fontSize = 14.sp, color = colorResource(R.color.text_ternary), textAlign = TextAlign.Center)
Text(buildAnnotatedString {
val original = stringResource(id = R.string.customization_shop_more)
val customizationShopName = stringResource(id = R.string.customization_shop)
val first = original.substring(0, original.indexOf(customizationShopName))
val second = original.substring(original.indexOf(customizationShopName) + customizationShopName.length, original.length)
append(first)
withStyle(SpanStyle(color = HabiticaTheme.colors.tintedUiMain)) {
append(customizationShopName)
}
append(second)
}, fontSize = 14.sp, fontWeight = FontWeight.Normal, color = colorResource(R.color.text_ternary), textAlign = TextAlign.Center)
}
}
}

View file

@ -89,14 +89,9 @@ class ShopItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), Vi
binding.itemDetailIndicator.visibility = View.VISIBLE
} else if (isLimited) {
if (numberOwned == 0) {
binding.itemDetailIndicator.background =
BitmapDrawable(
context.resources,
HabiticaIconsHelper.imageOfItemIndicatorLimited(),
)
binding.itemDetailIndicator.background = AppCompatResources.getDrawable(context, R.drawable.shop_limited)
} else {
binding.itemDetailIndicator.background =
AppCompatResources.getDrawable(context, R.drawable.pill_bg_purple_300)
binding.itemDetailIndicator.background = AppCompatResources.getDrawable(context, R.drawable.pill_bg_purple_300)
}
binding.itemDetailIndicator.visibility = View.VISIBLE
}

View file

@ -3522,143 +3522,6 @@ public class HabiticaIcons {
canvas.restore();
}
private static class CacheForItemIndicator {
private static final Paint paint = new Paint();
private static final Paint shadowPaint = new Paint();
private static final PaintCodeShadow shadow = new PaintCodeShadow();
private static final RectF originalFrame = new RectF(0f, 0f, 28f, 28f);
private static final RectF resizedFrame = new RectF();
private static final RectF oval2Rect = new RectF();
private static final Path oval2Path = new Path();
private static final RectF bezierRect = new RectF();
private static final Path bezierPath = new Path();
private static final RectF bezier2Rect = new RectF();
private static final Path bezier2Path = new Path();
private static final RectF symbolRect = new RectF();
private static final RectF symbolTargetRect = new RectF();
}
public static void drawItemIndicator(Canvas canvas, int indicatorLocked, int lockColor, int indicatorLockedDark, int itemIndicatorColorBackground, boolean isLocked, boolean isLimited, boolean isDark) {
HabiticaIcons.drawItemIndicator(canvas, new RectF(0f, 0f, 28f, 28f), ResizingBehavior.AspectFit, indicatorLocked, lockColor, indicatorLockedDark, itemIndicatorColorBackground, isLocked, isLimited, isDark);
}
public static void drawItemIndicator(Canvas canvas, RectF targetFrame, ResizingBehavior resizing, int indicatorLocked, int lockColor, int indicatorLockedDark, int itemIndicatorColorBackground, boolean isLocked, boolean isLimited, boolean isDark) {
// General Declarations
Paint paint = CacheForItemIndicator.paint;
// Local Colors
int shadowTint = Color.argb(255, 26, 24, 29);
int fillColor39 = Color.argb(255, 189, 168, 255);
int strokeColor2 = Color.argb(255, 189, 168, 255);
int strokeColor = Color.argb(255, 97, 51, 180);
// Local Shadows
PaintCodeShadow shadow = CacheForItemIndicator.shadow.get(PaintCodeColor.colorByChangingAlpha(shadowTint, (int) (Color.alpha(shadowTint) * 0.12f * 255f)));
// Local Variables
int itemIndicatorColor = isLocked ? (isDark ? indicatorLockedDark : indicatorLocked) : (isLimited ? strokeColor : (isDark ? indicatorLockedDark : itemIndicatorColorBackground));
// Resize to Target Frame
canvas.save();
RectF resizedFrame = CacheForItemIndicator.resizedFrame;
HabiticaIcons.resizingBehaviorApply(resizing, CacheForItemIndicator.originalFrame, targetFrame, resizedFrame);
canvas.translate(resizedFrame.left, resizedFrame.top);
canvas.scale(resizedFrame.width() / 28f, resizedFrame.height() / 28f);
// Oval 2
RectF oval2Rect = CacheForItemIndicator.oval2Rect;
oval2Rect.set(2f, 2f, 26f, 26f);
Path oval2Path = CacheForItemIndicator.oval2Path;
oval2Path.reset();
oval2Path.addOval(oval2Rect, Path.Direction.CW);
paint.reset();
paint.setFlags(Paint.ANTI_ALIAS_FLAG);
canvas.saveLayerAlpha(null, 255, Canvas.ALL_SAVE_FLAG);
{
canvas.translate(shadow.dx, shadow.dy);
Paint shadowPaint = CacheForItemIndicator.shadowPaint;
shadowPaint.set(paint);
shadow.setBlurOfPaint(shadowPaint);
canvas.drawPath(oval2Path, shadowPaint);
shadowPaint.setXfermode(GlobalCache.blendModeSourceIn);
canvas.saveLayer(null, shadowPaint, Canvas.ALL_SAVE_FLAG);
{
canvas.drawColor(shadow.color);
}
canvas.restore();
}
canvas.restore();
paint.setStyle(Paint.Style.FILL);
paint.setColor(itemIndicatorColor);
canvas.drawPath(oval2Path, paint);
// Group 2
if (isLimited) {
// Bezier
RectF bezierRect = CacheForItemIndicator.bezierRect;
bezierRect.set(6f, 6f, 22f, 22f);
Path bezierPath = CacheForItemIndicator.bezierPath;
bezierPath.reset();
bezierPath.moveTo(14f, 6f);
bezierPath.cubicTo(9.58f, 6f, 6f, 9.58f, 6f, 14f);
bezierPath.cubicTo(6f, 18.42f, 9.58f, 22f, 14f, 22f);
bezierPath.cubicTo(18.42f, 22f, 22f, 18.42f, 22f, 14f);
bezierPath.cubicTo(22f, 9.58f, 18.42f, 6f, 14f, 6f);
bezierPath.close();
bezierPath.moveTo(14f, 8f);
bezierPath.cubicTo(17.31f, 8f, 20f, 10.69f, 20f, 14f);
bezierPath.cubicTo(20f, 17.31f, 17.31f, 20f, 14f, 20f);
bezierPath.cubicTo(10.69f, 20f, 8f, 17.31f, 8f, 14f);
bezierPath.cubicTo(8f, 10.69f, 10.69f, 8f, 14f, 8f);
bezierPath.close();
paint.reset();
paint.setFlags(Paint.ANTI_ALIAS_FLAG);
bezierPath.setFillType(Path.FillType.EVEN_ODD);
paint.setStyle(Paint.Style.FILL);
paint.setColor(fillColor39);
canvas.drawPath(bezierPath, paint);
// Bezier 2
RectF bezier2Rect = CacheForItemIndicator.bezier2Rect;
bezier2Rect.set(14f, 11f, 16f, 16f);
Path bezier2Path = CacheForItemIndicator.bezier2Path;
bezier2Path.reset();
bezier2Path.moveTo(14f, 11f);
bezier2Path.lineTo(14f, 14.03f);
bezier2Path.lineTo(16f, 16f);
paint.reset();
paint.setFlags(Paint.ANTI_ALIAS_FLAG);
paint.setStrokeWidth(2f);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStrokeMiter(10f);
canvas.save();
paint.setStyle(Paint.Style.STROKE);
paint.setColor(strokeColor2);
canvas.drawPath(bezier2Path, paint);
canvas.restore();
}
// Symbol
if (isLocked) {
RectF symbolRect = CacheForItemIndicator.symbolRect;
symbolRect.set(9f, 7f, 19f, 19f);
canvas.save();
canvas.clipRect(symbolRect);
canvas.translate(symbolRect.left, symbolRect.top);
RectF symbolTargetRect = CacheForItemIndicator.symbolTargetRect;
symbolTargetRect.set(0f, 0f, symbolRect.width(), symbolRect.height());
HabiticaIcons.drawLocked(canvas, symbolTargetRect, ResizingBehavior.Stretch, lockColor);
canvas.restore();
}
canvas.restore();
}
private static class CacheForWarriorLightBg {
private static final RectF originalFrame = new RectF(0f, 0f, 32f, 32f);
private static final RectF resizedFrame = new RectF();

View file

@ -289,83 +289,6 @@ public class HabiticaIconsHelper {
return imageOfUnpinItem;
}
public static Bitmap imageOfItemIndicatorNumber(boolean isLimited) {
int size = scaleSize(28);
Bitmap imageOfItemIndicatorNumber = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(imageOfItemIndicatorNumber);
canvas.scale(displayDensity, displayDensity);
int lightColor = Color.parseColor("#A5A1AD");
int darkColor = Color.parseColor("#525252");
if (isLimited) {
lightColor = Color.parseColor("#6133B4");
darkColor = Color.parseColor("#6133B4");
}
HabiticaIcons.drawItemIndicator(canvas, lightColor, Color.parseColor("#C3C0C7"), darkColor, lightColor, false, false, false);
return imageOfItemIndicatorNumber;
}
public static Bitmap imageOfItemIndicatorNumberDark(boolean isLimited) {
int size = scaleSize(28);
Bitmap imageOfItemIndicatorNumberDark = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(imageOfItemIndicatorNumberDark);
canvas.scale(displayDensity, displayDensity);
int lightColor = Color.parseColor("#A5A1AD");
int darkColor = Color.parseColor("#525252");
if (isLimited) {
lightColor = Color.parseColor("#6133B4");
darkColor = Color.parseColor("#6133B4");
}
HabiticaIcons.drawItemIndicator(canvas, lightColor, Color.parseColor("#C3C0C7"), lightColor, darkColor, false, false, true);
return imageOfItemIndicatorNumberDark;
}
public static Bitmap imageOfItemIndicatorLocked(boolean isLimited) {
int size = scaleSize(28);
Bitmap imageOfItemIndicatorLocked = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(imageOfItemIndicatorLocked);
canvas.scale(displayDensity, displayDensity);
int lightColor = Color.parseColor("#EDECEE");
int darkColor = Color.parseColor("#525252");
if (isLimited) {
lightColor = Color.parseColor("#6133B4");
darkColor = Color.parseColor("#6133B4");
}
HabiticaIcons.drawItemIndicator(canvas, lightColor, Color.parseColor("#C3C0C7"), lightColor, darkColor, true, false, false);
return imageOfItemIndicatorLocked;
}
public static Bitmap imageOfItemIndicatorLockedDark(boolean isLimited) {
int size = scaleSize(28);
Bitmap imageOfItemIndicatorLockedDark = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(imageOfItemIndicatorLockedDark);
canvas.scale(displayDensity, displayDensity);
int lightColor = Color.parseColor("#EDECEE");
int darkColor = Color.parseColor("#525252");
if (isLimited) {
lightColor = Color.parseColor("#6133B4");
darkColor = Color.parseColor("#6133B4");
}
HabiticaIcons.drawItemIndicator(canvas, lightColor, Color.parseColor("#C3C0C7"), lightColor, darkColor, true, false, true);
return imageOfItemIndicatorLockedDark;
}
private static Bitmap imageOfItemIndicatorLimited = null;
public static Bitmap imageOfItemIndicatorLimited() {
if (imageOfItemIndicatorLimited != null)
return imageOfItemIndicatorLimited;
int size = scaleSize(28);
imageOfItemIndicatorLimited = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(imageOfItemIndicatorLimited);
canvas.scale(displayDensity, displayDensity);
HabiticaIcons.drawItemIndicator(canvas, Color.parseColor("#A5A1AD"), Color.parseColor("#C3C0C7"), Color.parseColor("#A5A1AD"), Color.parseColor("#525252"), false, true, false);
return imageOfItemIndicatorLimited;
}
private static Bitmap imageOfGem_36 = null;
public static Bitmap imageOfGem_36() {

View file

@ -1,2 +1,2 @@
NAME=4.3.7
CODE=7741
CODE=7781