diff --git a/Habitica/res/layout/dialog_insufficient_currency.xml b/Habitica/res/layout/dialog_insufficient_currency.xml
new file mode 100644
index 000000000..212eef724
--- /dev/null
+++ b/Habitica/res/layout/dialog_insufficient_currency.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index e93224f24..6904992d0 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -655,4 +655,9 @@
Nevermind
Resetting Account
Deleting Account
+ You need to complete more tasks before you can afford this item!
+ You\'ll need more Gems to buy this item!
+ Purchase gems
+ You\'ll need more Mystic Hourglasses to buy this item!
+ Get hourglasses
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaIcons.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaIcons.java
index 8d3eaf3d6..f673b6854 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaIcons.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaIcons.java
@@ -16,7 +16,7 @@ import java.util.Stack;
/**
- * Created by Phillip Thelen on 20.09.17.
+ * Created by Phillip Thelen on 27.09.17.
* Copyright © 2017 HabitRPG Inc.. All rights reserved.
*
* Generated by PaintCode
@@ -77,12 +77,12 @@ public class HabiticaIcons {
Paint paint = CacheForHeart.paint;
// Local Colors
- int fillColor3 = Color.argb(128, 255, 255, 255);
int fillColor5 = Color.argb(64, 255, 255, 255);
- int heartDarkBackground = Color.argb(178, 255, 255, 255);
int fillColor2 = Color.argb(255, 255, 97, 101);
+ int fillColor3 = Color.argb(128, 255, 255, 255);
int fillColor4 = Color.argb(89, 181, 36, 40);
int heartLightBackground = Color.argb(255, 247, 78, 82);
+ int heartDarkBackground = Color.argb(178, 255, 255, 255);
int fillColor6 = Color.argb(128, 181, 36, 40);
// Local Variables
@@ -588,11 +588,11 @@ public class HabiticaIcons {
Paint paint = CacheForMagic.paint;
// Local Colors
- int fillColor5 = Color.argb(64, 255, 255, 255);
int fillColor3 = Color.argb(128, 255, 255, 255);
int fillColor9 = Color.argb(64, 31, 112, 154);
- int fillColor8 = Color.argb(255, 80, 181, 233);
+ int fillColor5 = Color.argb(64, 255, 255, 255);
int fillColor7 = Color.argb(255, 41, 149, 205);
+ int fillColor8 = Color.argb(255, 80, 181, 233);
// Resize to Target Frame
canvas.save();
@@ -739,8 +739,8 @@ public class HabiticaIcons {
Paint paint = CacheForGold.paint;
// Local Colors
- int fillColor13 = Color.argb(191, 191, 125, 26);
int fillColor12 = Color.argb(128, 191, 125, 26);
+ int fillColor13 = Color.argb(191, 191, 125, 26);
int fillColor5 = Color.argb(64, 255, 255, 255);
int fillColor3 = Color.argb(128, 255, 255, 255);
int fillColor10 = Color.argb(255, 255, 166, 35);
@@ -893,9 +893,9 @@ public class HabiticaIcons {
Paint paint = CacheForGem.paint;
// Local Colors
- int fillColor5 = Color.argb(64, 255, 255, 255);
int fillColor3 = Color.argb(128, 255, 255, 255);
int fillColor15 = Color.argb(89, 27, 153, 107);
+ int fillColor5 = Color.argb(64, 255, 255, 255);
int fillColor14 = Color.argb(255, 36, 204, 143);
// Resize to Target Frame
@@ -1102,8 +1102,8 @@ public class HabiticaIcons {
Paint paint = CacheForHourglass.paint;
// Local Colors
- int fillColor19 = Color.argb(255, 79, 42, 147);
int fillColor18 = Color.argb(255, 154, 98, 255);
+ int fillColor19 = Color.argb(255, 79, 42, 147);
int fillColor17 = Color.argb(230, 255, 255, 255);
int fillColor16 = Color.argb(204, 169, 220, 246);
@@ -1520,14 +1520,14 @@ public class HabiticaIcons {
Paint paint = CacheForWarrior.paint;
// Local Colors
- int fillColor23 = Color.argb(255, 229, 65, 77);
- int fillColor = Color.argb(255, 240, 97, 102);
+ int fillColor42 = Color.argb(255, 255, 149, 152);
int fillColor43 = Color.argb(255, 200, 43, 43);
- int fillColor41 = Color.argb(255, 255, 149, 152);
int fillColor21 = Color.argb(255, 255, 182, 184);
int fillColor20 = Color.argb(255, 255, 181, 183);
- int fillColor42 = Color.argb(255, 255, 149, 152);
int fillColor22 = Color.argb(255, 242, 123, 134);
+ int fillColor41 = Color.argb(255, 255, 149, 152);
+ int fillColor23 = Color.argb(255, 229, 65, 77);
+ int fillColor = Color.argb(255, 240, 97, 102);
// Local Variables
boolean lightBackground = !darkBackground;
@@ -2694,9 +2694,9 @@ public class HabiticaIcons {
public static void drawDifficultyStars(Canvas canvas, RectF targetFrame, ResizingBehavior resizing, float difficulty) {
// Local Variables
+ float _1StarDifficulty = difficulty >= 1f ? 1f : (difficulty >= 0.5f ? 0.5f : 0f);
float _4StarDifficulty = difficulty >= 4f ? 1f : (difficulty >= 3.5f ? 0.5f : 0f);
float _2StarDifficulty = difficulty >= 2f ? 1f : (difficulty >= 1.5f ? 0.5f : 0f);
- float _1StarDifficulty = difficulty >= 1f ? 1f : (difficulty >= 0.5f ? 0.5f : 0f);
float _3StarDifficulty = difficulty >= 3f ? 1f : (difficulty >= 2.5f ? 0.5f : 0f);
// Resize to Target Frame
@@ -2778,8 +2778,8 @@ public class HabiticaIcons {
int fillColor25 = Color.argb(255, 225, 224, 227);
// Local Variables
- boolean isFull = singleDifficulty == 1f;
boolean isHalf = singleDifficulty == 0.5f;
+ boolean isFull = singleDifficulty == 1f;
// Resize to Target Frame
canvas.save();
@@ -3962,12 +3962,12 @@ public class HabiticaIcons {
// Local Colors
int indicatorLocked = Color.argb(255, 237, 236, 238);
- int fillColor39 = Color.argb(255, 189, 168, 255);
- int fillColor40 = Color.argb(255, 165, 161, 172);
int strokeColor = Color.argb(255, 97, 51, 180);
- int fillColor38 = Color.argb(255, 165, 161, 172);
- int strokeColor2 = Color.argb(255, 189, 168, 255);
int shadowTint = Color.argb(255, 26, 24, 29);
+ int fillColor38 = Color.argb(255, 165, 161, 172);
+ int fillColor40 = Color.argb(255, 165, 161, 172);
+ int fillColor39 = Color.argb(255, 189, 168, 255);
+ int strokeColor2 = Color.argb(255, 189, 168, 255);
// Local Shadows
PaintCodeShadow shadow = CacheForItemIndicator.shadow.get(PaintCodeColor.colorByChangingAlpha(shadowTint, (int) (Color.alpha(shadowTint) * 0.12f * 255f)), 0f, 1f, 1f);
@@ -4386,13 +4386,13 @@ public class HabiticaIcons {
Paint paint = CacheForRogue.paint;
// Local Colors
+ int fillColor36 = Color.argb(255, 97, 51, 180);
+ int fillColor19 = Color.argb(255, 79, 42, 147);
+ int fillColor47 = Color.argb(255, 198, 182, 228);
+ int fillColor45 = Color.argb(255, 155, 129, 226);
+ int fillColor44 = Color.argb(255, 204, 190, 237);
int fillColor46 = Color.argb(255, 122, 84, 192);
int fillColor48 = Color.argb(255, 137, 102, 199);
- int fillColor36 = Color.argb(255, 97, 51, 180);
- int fillColor45 = Color.argb(255, 155, 129, 226);
- int fillColor47 = Color.argb(255, 198, 182, 228);
- int fillColor44 = Color.argb(255, 204, 190, 237);
- int fillColor19 = Color.argb(255, 79, 42, 147);
// Local Variables
boolean lightBackground = !darkBackground;
@@ -5183,18 +5183,18 @@ public class HabiticaIcons {
Paint paint = CacheForHealer.paint;
// Local Colors
- int fillColor10 = Color.argb(255, 255, 166, 35);
+ int fillColor56 = Color.argb(255, 255, 166, 35);
+ int fillColor50 = Color.argb(255, 226, 158, 69);
+ int fillColor55 = Color.argb(255, 253, 198, 126);
+ int fillColor53 = Color.argb(255, 206, 129, 41);
+ int fillColor54 = Color.argb(255, 207, 130, 41);
int fillColor52 = Color.argb(255, 253, 198, 126);
int fillColor59 = Color.argb(255, 255, 228, 201);
- int fillColor51 = Color.argb(255, 229, 144, 37);
int fillColor58 = Color.argb(255, 229, 144, 37);
- int fillColor50 = Color.argb(255, 226, 158, 69);
+ int fillColor10 = Color.argb(255, 255, 166, 35);
+ int fillColor51 = Color.argb(255, 229, 144, 37);
int fillColor57 = Color.argb(255, 255, 221, 181);
int fillColor49 = Color.argb(255, 255, 215, 168);
- int fillColor56 = Color.argb(255, 255, 166, 35);
- int fillColor55 = Color.argb(255, 253, 198, 126);
- int fillColor54 = Color.argb(255, 207, 130, 41);
- int fillColor53 = Color.argb(255, 206, 129, 41);
// Local Variables
boolean lightBackground = !darkBackground;
@@ -6020,17 +6020,17 @@ public class HabiticaIcons {
Paint paint = CacheForMage.paint;
// Local Colors
- int fillColor68 = Color.argb(255, 31, 110, 162);
- int fillColor60 = Color.argb(255, 182, 225, 247);
- int fillColor67 = Color.argb(255, 83, 180, 229);
- int fillColor66 = Color.argb(255, 107, 196, 233);
+ int fillColor61 = Color.argb(255, 39, 138, 191);
int fillColor65 = Color.argb(255, 107, 196, 233);
+ int fillColor60 = Color.argb(255, 182, 225, 247);
+ int fillColor68 = Color.argb(255, 31, 110, 162);
int fillColor64 = Color.argb(255, 77, 178, 214);
+ int fillColor69 = Color.argb(255, 169, 219, 245);
+ int fillColor66 = Color.argb(255, 107, 196, 233);
+ int fillColor62 = Color.argb(255, 83, 180, 229);
int fillColor63 = Color.argb(255, 42, 160, 207);
int fillColor70 = Color.argb(255, 132, 207, 242);
- int fillColor62 = Color.argb(255, 83, 180, 229);
- int fillColor69 = Color.argb(255, 169, 219, 245);
- int fillColor61 = Color.argb(255, 39, 138, 191);
+ int fillColor67 = Color.argb(255, 83, 180, 229);
// Local Variables
boolean lightBackground = !darkBackground;
@@ -6557,6 +6557,296 @@ public class HabiticaIcons {
canvas.restore();
}
+ private static class CacheForHourglassShop {
+ private static Paint paint = new Paint();
+ private static RectF originalFrame = new RectF(0f, 0f, 42f, 53f);
+ private static RectF resizedFrame = new RectF();
+ private static RectF rectangleRect = new RectF();
+ private static Path rectanglePath = new Path();
+ private static RectF group = new RectF();
+ private static Path clipPath = new Path();
+ private static RectF rectangle2Rect = new RectF();
+ private static Path rectangle2Path = new Path();
+ private static RectF group2 = new RectF();
+ private static Path clip2Path = new Path();
+ private static RectF rectangle4Rect = new RectF();
+ private static Path rectangle4Path = new Path();
+ private static RectF bezierRect = new RectF();
+ private static Path bezierPath = new Path();
+ private static RectF bezier2Rect = new RectF();
+ private static Path bezier2Path = new Path();
+ private static RectF bezier3Rect = new RectF();
+ private static Path bezier3Path = new Path();
+ private static RectF bezier4Rect = new RectF();
+ private static Path bezier4Path = new Path();
+ private static RectF bezier5Rect = new RectF();
+ private static Path bezier5Path = new Path();
+ private static RectF bezier6Rect = new RectF();
+ private static Path bezier6Path = new Path();
+ }
+
+ public static void drawHourglassShop(Canvas canvas) {
+ HabiticaIcons.drawHourglassShop(canvas, new RectF(0f, 0f, 42f, 53f), ResizingBehavior.AspectFit);
+ }
+
+ public static void drawHourglassShop(Canvas canvas, RectF targetFrame, ResizingBehavior resizing) {
+ // General Declarations
+ Stack currentTransformation = new Stack();
+ currentTransformation.push(new Matrix());
+ Paint paint = CacheForHourglassShop.paint;
+
+ // Local Colors
+ int fillColor19 = Color.argb(255, 79, 42, 147);
+ int fillColor18 = Color.argb(255, 154, 98, 255);
+ int fillColor17 = Color.argb(230, 255, 255, 255);
+ int fillColor16 = Color.argb(204, 169, 220, 246);
+
+ // Resize to Target Frame
+ canvas.save();
+ RectF resizedFrame = CacheForHourglassShop.resizedFrame;
+ HabiticaIcons.resizingBehaviorApply(resizing, CacheForHourglassShop.originalFrame, targetFrame, resizedFrame);
+ canvas.translate(resizedFrame.left, resizedFrame.top);
+ canvas.scale(resizedFrame.width() / 42f, resizedFrame.height() / 53f);
+
+ // Rectangle
+ RectF rectangleRect = CacheForHourglassShop.rectangleRect;
+ rectangleRect.set(19.5f, 0f, 22.5f, 10f);
+ Path rectanglePath = CacheForHourglassShop.rectanglePath;
+ rectanglePath.reset();
+ rectanglePath.addRoundRect(rectangleRect, 1.4f, 1.4f, Path.Direction.CW);
+
+ paint.reset();
+ paint.setFlags(Paint.ANTI_ALIAS_FLAG);
+ paint.setStyle(Paint.Style.FILL);
+ paint.setColor(fillColor18);
+ canvas.drawPath(rectanglePath, paint);
+
+ // Group
+ {
+ RectF group = CacheForHourglassShop.group;
+ group.set(-0.6f, 5.4f, 8.6f, 14.6f);
+ canvas.save();
+
+ // Clip
+ Path clipPath = CacheForHourglassShop.clipPath;
+ clipPath.reset();
+ clipPath.addRoundRect(group, 1.4f, 1.4f, Path.Direction.CW);
+ canvas.clipPath(clipPath);
+
+ // Rectangle 2
+ canvas.save();
+ canvas.translate(4f, 10f);
+ currentTransformation.peek().postTranslate(4f, 10f);
+ canvas.rotate(45f);
+ currentTransformation.peek().postRotate(45f);
+ RectF rectangle2Rect = CacheForHourglassShop.rectangle2Rect;
+ rectangle2Rect.set(-10f, -6.5f, 10f, 6.5f);
+ Path rectangle2Path = CacheForHourglassShop.rectangle2Path;
+ rectangle2Path.reset();
+ rectangle2Path.moveTo(rectangle2Rect.left, rectangle2Rect.top);
+ rectangle2Path.lineTo(rectangle2Rect.right, rectangle2Rect.top);
+ rectangle2Path.lineTo(rectangle2Rect.right, rectangle2Rect.bottom);
+ rectangle2Path.lineTo(rectangle2Rect.left, rectangle2Rect.bottom);
+ rectangle2Path.close();
+
+ paint.reset();
+ paint.setFlags(Paint.ANTI_ALIAS_FLAG);
+ paint.setStyle(Paint.Style.FILL);
+ paint.setColor(fillColor18);
+ canvas.drawPath(rectangle2Path, paint);
+ canvas.restore();
+
+ canvas.restore();
+ }
+
+ // Group 2
+ {
+ RectF group2 = CacheForHourglassShop.group2;
+ group2.set(32.5f, 5.4f, 41.7f, 14.6f);
+ canvas.save();
+
+ // Clip 2
+ Path clip2Path = CacheForHourglassShop.clip2Path;
+ clip2Path.reset();
+ clip2Path.addRoundRect(group2, 1.4f, 1.4f, Path.Direction.CW);
+ canvas.clipPath(clip2Path);
+
+ // Rectangle 4
+ canvas.save();
+ canvas.translate(37.1f, 10f);
+ currentTransformation.peek().postTranslate(37.1f, 10f);
+ canvas.rotate(-45f);
+ currentTransformation.peek().postRotate(-45f);
+ RectF rectangle4Rect = CacheForHourglassShop.rectangle4Rect;
+ rectangle4Rect.set(-10f, -6.5f, 10f, 6.5f);
+ Path rectangle4Path = CacheForHourglassShop.rectangle4Path;
+ rectangle4Path.reset();
+ rectangle4Path.moveTo(rectangle4Rect.left, rectangle4Rect.top);
+ rectangle4Path.lineTo(rectangle4Rect.right, rectangle4Rect.top);
+ rectangle4Path.lineTo(rectangle4Rect.right, rectangle4Rect.bottom);
+ rectangle4Path.lineTo(rectangle4Rect.left, rectangle4Rect.bottom);
+ rectangle4Path.close();
+
+ paint.reset();
+ paint.setFlags(Paint.ANTI_ALIAS_FLAG);
+ paint.setStyle(Paint.Style.FILL);
+ paint.setColor(fillColor18);
+ canvas.drawPath(rectangle4Path, paint);
+ canvas.restore();
+
+ canvas.restore();
+ }
+
+ // Bezier
+ RectF bezierRect = CacheForHourglassShop.bezierRect;
+ bezierRect.set(10f, 16f, 31.14f, 52.24f);
+ Path bezierPath = CacheForHourglassShop.bezierPath;
+ bezierPath.reset();
+ bezierPath.moveTo(10f, 44.69f);
+ bezierPath.lineTo(10f, 48.74f);
+ bezierPath.cubicTo(10f, 49.21f, 10.21f, 49.67f, 10.6f, 49.95f);
+ bezierPath.cubicTo(14.79f, 53.01f, 26.35f, 53.01f, 30.55f, 49.95f);
+ bezierPath.cubicTo(30.93f, 49.67f, 31.14f, 49.21f, 31.14f, 48.74f);
+ bezierPath.lineTo(31.14f, 44.69f);
+ bezierPath.cubicTo(31.14f, 41f, 29.25f, 37.46f, 26.38f, 35.35f);
+ bezierPath.cubicTo(25.54f, 34.73f, 25.54f, 33.51f, 26.38f, 32.89f);
+ bezierPath.cubicTo(29.25f, 30.78f, 31.14f, 27.24f, 31.14f, 23.55f);
+ bezierPath.lineTo(31.14f, 19.5f);
+ bezierPath.cubicTo(31.14f, 19.03f, 30.93f, 18.58f, 30.55f, 18.3f);
+ bezierPath.cubicTo(26.35f, 15.23f, 14.79f, 15.23f, 10.6f, 18.3f);
+ bezierPath.cubicTo(10.21f, 18.58f, 10f, 19.03f, 10f, 19.5f);
+ bezierPath.lineTo(10f, 23.55f);
+ bezierPath.cubicTo(10f, 27.24f, 11.89f, 30.78f, 14.76f, 32.89f);
+ bezierPath.cubicTo(15.6f, 33.51f, 15.6f, 34.73f, 14.76f, 35.35f);
+ bezierPath.cubicTo(11.89f, 37.46f, 10f, 41f, 10f, 44.69f);
+ bezierPath.close();
+
+ paint.reset();
+ paint.setFlags(Paint.ANTI_ALIAS_FLAG);
+ bezierPath.setFillType(Path.FillType.EVEN_ODD);
+ paint.setStyle(Paint.Style.FILL);
+ paint.setColor(fillColor16);
+ canvas.drawPath(bezierPath, paint);
+
+ // Bezier 2
+ RectF bezier2Rect = CacheForHourglassShop.bezier2Rect;
+ bezier2Rect.set(13.02f, 19.02f, 28.12f, 49.22f);
+ Path bezier2Path = CacheForHourglassShop.bezier2Path;
+ bezier2Path.reset();
+ bezier2Path.moveTo(20.57f, 19.02f);
+ bezier2Path.cubicTo(24.01f, 19.02f, 26.68f, 19.64f, 28.12f, 20.36f);
+ bezier2Path.lineTo(28.12f, 23.55f);
+ bezier2Path.cubicTo(28.12f, 26.21f, 26.77f, 28.86f, 24.59f, 30.46f);
+ bezier2Path.cubicTo(23.43f, 31.32f, 22.73f, 32.69f, 22.73f, 34.12f);
+ bezier2Path.cubicTo(22.73f, 35.56f, 23.43f, 36.93f, 24.59f, 37.78f);
+ bezier2Path.cubicTo(26.77f, 39.39f, 28.12f, 42.03f, 28.12f, 44.69f);
+ bezier2Path.lineTo(28.12f, 47.89f);
+ bezier2Path.cubicTo(26.68f, 48.6f, 24.01f, 49.22f, 20.57f, 49.22f);
+ bezier2Path.cubicTo(17.14f, 49.22f, 14.46f, 48.6f, 13.02f, 47.89f);
+ bezier2Path.lineTo(13.02f, 44.69f);
+ bezier2Path.cubicTo(13.02f, 42.03f, 14.37f, 39.39f, 16.55f, 37.78f);
+ bezier2Path.cubicTo(17.72f, 36.93f, 18.41f, 35.56f, 18.41f, 34.12f);
+ bezier2Path.cubicTo(18.41f, 32.69f, 17.72f, 31.32f, 16.55f, 30.46f);
+ bezier2Path.cubicTo(14.37f, 28.86f, 13.02f, 26.21f, 13.02f, 23.55f);
+ bezier2Path.lineTo(13.02f, 20.36f);
+ bezier2Path.cubicTo(14.46f, 19.64f, 17.14f, 19.02f, 20.57f, 19.02f);
+ bezier2Path.close();
+
+ paint.reset();
+ paint.setFlags(Paint.ANTI_ALIAS_FLAG);
+ bezier2Path.setFillType(Path.FillType.EVEN_ODD);
+ paint.setStyle(Paint.Style.FILL);
+ paint.setColor(fillColor17);
+ canvas.drawPath(bezier2Path, paint);
+
+ // Bezier 3
+ RectF bezier3Rect = CacheForHourglassShop.bezier3Rect;
+ bezier3Rect.set(15.58f, 21.29f, 25.96f, 27.66f);
+ Path bezier3Path = CacheForHourglassShop.bezier3Path;
+ bezier3Path.reset();
+ bezier3Path.moveTo(20.92f, 21.29f);
+ bezier3Path.cubicTo(18.34f, 21.29f, 15.61f, 21.53f, 15.59f, 22.17f);
+ bezier3Path.cubicTo(15.56f, 22.68f, 15.57f, 23.68f, 17.67f, 24.74f);
+ bezier3Path.cubicTo(19.7f, 25.77f, 20.08f, 27.66f, 21.18f, 27.66f);
+ bezier3Path.cubicTo(22.47f, 27.66f, 22.54f, 26.57f, 24.11f, 25.49f);
+ bezier3Path.cubicTo(25.72f, 24.38f, 25.98f, 22.88f, 25.96f, 22.29f);
+ bezier3Path.cubicTo(25.94f, 21.46f, 23.49f, 21.29f, 20.92f, 21.29f);
+ bezier3Path.close();
+
+ paint.reset();
+ paint.setFlags(Paint.ANTI_ALIAS_FLAG);
+ bezier3Path.setFillType(Path.FillType.EVEN_ODD);
+ paint.setStyle(Paint.Style.FILL);
+ paint.setColor(fillColor18);
+ canvas.drawPath(bezier3Path, paint);
+
+ // Bezier 4
+ RectF bezier4Rect = CacheForHourglassShop.bezier4Rect;
+ bezier4Rect.set(21.76f, 21.32f, 25.96f, 27.39f);
+ Path bezier4Path = CacheForHourglassShop.bezier4Path;
+ bezier4Path.reset();
+ bezier4Path.moveTo(24.11f, 25.49f);
+ bezier4Path.cubicTo(25.72f, 24.38f, 25.98f, 22.88f, 25.96f, 22.29f);
+ bezier4Path.cubicTo(25.94f, 21.63f, 24.41f, 21.39f, 22.49f, 21.32f);
+ bezier4Path.cubicTo(23.03f, 21.59f, 23.72f, 22.17f, 23.55f, 23.32f);
+ bezier4Path.cubicTo(23.37f, 24.51f, 21.49f, 25.83f, 21.8f, 26.89f);
+ bezier4Path.cubicTo(21.86f, 27.09f, 21.96f, 27.26f, 22.08f, 27.39f);
+ bezier4Path.cubicTo(22.64f, 27.01f, 23.01f, 26.25f, 24.11f, 25.49f);
+ bezier4Path.close();
+
+ paint.reset();
+ paint.setFlags(Paint.ANTI_ALIAS_FLAG);
+ bezier4Path.setFillType(Path.FillType.EVEN_ODD);
+ paint.setStyle(Paint.Style.FILL);
+ paint.setColor(fillColor19);
+ canvas.drawPath(bezier4Path, paint);
+
+ // Bezier 5
+ RectF bezier5Rect = CacheForHourglassShop.bezier5Rect;
+ bezier5Rect.set(15.23f, 36.87f, 25.61f, 45.73f);
+ Path bezier5Path = CacheForHourglassShop.bezier5Path;
+ bezier5Path.reset();
+ bezier5Path.moveTo(20.57f, 36.87f);
+ bezier5Path.cubicTo(19.79f, 36.87f, 19.59f, 38.3f, 18.45f, 39.19f);
+ bezier5Path.cubicTo(17.05f, 40.28f, 15.73f, 41.62f, 15.36f, 43.54f);
+ bezier5Path.cubicTo(15.06f, 45.13f, 15.33f, 45.33f, 15.7f, 45.44f);
+ bezier5Path.cubicTo(16.06f, 45.55f, 18.85f, 46.03f, 21.59f, 45.44f);
+ bezier5Path.cubicTo(24.33f, 44.86f, 25.85f, 43.77f, 25.58f, 42.65f);
+ bezier5Path.cubicTo(25.33f, 41.59f, 24.56f, 40.68f, 23.15f, 39.63f);
+ bezier5Path.cubicTo(21.8f, 38.63f, 21.36f, 36.87f, 20.57f, 36.87f);
+ bezier5Path.close();
+
+ paint.reset();
+ paint.setFlags(Paint.ANTI_ALIAS_FLAG);
+ bezier5Path.setFillType(Path.FillType.EVEN_ODD);
+ paint.setStyle(Paint.Style.FILL);
+ paint.setColor(fillColor18);
+ canvas.drawPath(bezier5Path, paint);
+
+ // Bezier 6
+ RectF bezier6Rect = CacheForHourglassShop.bezier6Rect;
+ bezier6Rect.set(15.32f, 42.59f, 25.52f, 45.73f);
+ Path bezier6Path = CacheForHourglassShop.bezier6Path;
+ bezier6Path.reset();
+ bezier6Path.moveTo(15.7f, 45.44f);
+ bezier6Path.cubicTo(16.06f, 45.55f, 18.85f, 46.03f, 21.59f, 45.44f);
+ bezier6Path.cubicTo(23.76f, 44.98f, 25.17f, 44.19f, 25.52f, 43.33f);
+ bezier6Path.cubicTo(25.52f, 43.31f, 25.52f, 43.29f, 25.51f, 43.28f);
+ bezier6Path.cubicTo(25.36f, 42.69f, 23.07f, 42.34f, 20.22f, 42.8f);
+ bezier6Path.cubicTo(17.51f, 43.24f, 15.31f, 44.14f, 15.32f, 45.15f);
+ bezier6Path.cubicTo(15.4f, 45.33f, 15.54f, 45.39f, 15.7f, 45.44f);
+ bezier6Path.close();
+
+ paint.reset();
+ paint.setFlags(Paint.ANTI_ALIAS_FLAG);
+ bezier6Path.setFillType(Path.FillType.EVEN_ODD);
+ paint.setStyle(Paint.Style.FILL);
+ paint.setColor(fillColor19);
+ canvas.drawPath(bezier6Path, paint);
+
+ canvas.restore();
+ }
+
// Canvas Images
// Tab
@@ -6913,6 +7203,18 @@ public class HabiticaIcons {
return imageOfCheckmark;
}
+ private static Bitmap imageOfHourglassShop = null;
+ public static Bitmap imageOfHourglassShop() {
+ if (imageOfHourglassShop != null)
+ return imageOfHourglassShop;
+
+ imageOfHourglassShop = Bitmap.createBitmap(42, 53, Bitmap.Config.ARGB_8888);
+ Canvas canvas = new Canvas(imageOfHourglassShop);
+ HabiticaIcons.drawHourglassShop(canvas);
+
+ return imageOfHourglassShop;
+ }
+
// Resizing Behavior
public static void resizingBehaviorApply(ResizingBehavior behavior, RectF rect, RectF target, RectF result) {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaIconsHelper.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaIconsHelper.java
index 85d9e1739..a2bc5a561 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaIconsHelper.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaIconsHelper.java
@@ -420,4 +420,17 @@ public class HabiticaIconsHelper {
return imageOfMageLightBg;
}
+
+ private static Bitmap imageOfHourglassShop = null;
+ public static Bitmap imageOfHourglassShop() {
+ if (imageOfHourglassShop != null)
+ return imageOfHourglassShop;
+
+ imageOfHourglassShop = Bitmap.createBitmap(scaleSize(42), scaleSize(53), Bitmap.Config.ARGB_8888);
+ Canvas canvas = new Canvas(imageOfHourglassShop);
+ canvas.scale(displayDensity, displayDensity);
+ HabiticaIcons.drawHourglassShop(canvas);
+
+ return imageOfHourglassShop;
+ }
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientCurrencyDialog.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientCurrencyDialog.java
new file mode 100644
index 000000000..3fea404be
--- /dev/null
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientCurrencyDialog.java
@@ -0,0 +1,39 @@
+package com.habitrpg.android.habitica.ui.views.insufficientCurrency;
+
+import android.content.Context;
+import android.support.v7.app.AlertDialog;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.habitrpg.android.habitica.R;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+/**
+ * Created by phillip on 27.09.17.
+ */
+
+abstract public class InsufficientCurrencyDialog extends AlertDialog {
+
+ @BindView(R.id.imageView)
+ ImageView imageView;
+ @BindView(R.id.textView)
+ TextView textView;
+
+ public InsufficientCurrencyDialog(Context context) {
+ super(context);
+
+ LayoutInflater inflater = LayoutInflater.from(context);
+ View view = inflater.inflate(R.layout.dialog_insufficient_currency, null);
+ ButterKnife.bind(this, view);
+ setView(view);
+
+ this.setButton(AlertDialog.BUTTON_NEUTRAL, context.getString(R.string.close), (dialogInterface, i) -> {
+ this.dismiss();
+ });
+ }
+
+}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.java
new file mode 100644
index 000000000..cc114df14
--- /dev/null
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.java
@@ -0,0 +1,27 @@
+package com.habitrpg.android.habitica.ui.views.insufficientCurrency;
+
+import android.app.AlertDialog;
+import android.content.Context;
+
+import com.habitrpg.android.habitica.R;
+import com.habitrpg.android.habitica.events.commands.OpenGemPurchaseFragmentCommand;
+
+import org.greenrobot.eventbus.EventBus;
+
+/**
+ * Created by phillip on 27.09.17.
+ */
+
+public class InsufficientGemsDialog extends InsufficientCurrencyDialog {
+
+ public InsufficientGemsDialog(Context context) {
+ super(context);
+
+ imageView.setImageResource(R.drawable.gems_84);
+ textView.setText(R.string.insufficientGems);
+
+ setButton(AlertDialog.BUTTON_POSITIVE, context.getString(R.string.purchase_gems), (dialogInterface, i) -> {
+ EventBus.getDefault().post(new OpenGemPurchaseFragmentCommand());
+ });
+ }
+}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGoldDialog.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGoldDialog.java
new file mode 100644
index 000000000..6f4f5c8fd
--- /dev/null
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGoldDialog.java
@@ -0,0 +1,15 @@
+package com.habitrpg.android.habitica.ui.views.insufficientCurrency;
+
+import android.content.Context;
+
+import com.habitrpg.android.habitica.R;
+import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper;
+
+public class InsufficientGoldDialog extends InsufficientCurrencyDialog {
+ public InsufficientGoldDialog(Context context) {
+ super(context);
+
+ imageView.setImageBitmap(HabiticaIconsHelper.imageOfGoldReward());
+ textView.setText(context.getString(R.string.insufficientGold));
+ }
+}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientHourglassesDialog.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientHourglassesDialog.java
new file mode 100644
index 000000000..88fc07d07
--- /dev/null
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientHourglassesDialog.java
@@ -0,0 +1,24 @@
+package com.habitrpg.android.habitica.ui.views.insufficientCurrency;
+
+import android.content.Context;
+import android.support.v7.app.AlertDialog;
+
+import com.habitrpg.android.habitica.R;
+import com.habitrpg.android.habitica.events.commands.OpenGemPurchaseFragmentCommand;
+import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper;
+
+import org.greenrobot.eventbus.EventBus;
+
+public class InsufficientHourglassesDialog extends InsufficientCurrencyDialog {
+ public InsufficientHourglassesDialog(Context context) {
+ super(context);
+
+ imageView.setImageBitmap(HabiticaIconsHelper.imageOfHourglassShop());
+ textView.setText(R.string.insufficientHourglasses);
+
+
+ setButton(AlertDialog.BUTTON_POSITIVE, context.getString(R.string.get_hourglasses), (dialogInterface, i) -> {
+ EventBus.getDefault().post(new OpenGemPurchaseFragmentCommand());
+ });
+ }
+}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.java
index 61d012c6c..fdb68baf5 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.java
@@ -26,6 +26,10 @@ import com.habitrpg.android.habitica.ui.views.CurrencyView;
import com.habitrpg.android.habitica.ui.views.CurrencyViews;
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper;
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar;
+import com.habitrpg.android.habitica.ui.views.insufficientCurrency.InsufficientCurrencyDialog;
+import com.habitrpg.android.habitica.ui.views.insufficientCurrency.InsufficientGemsDialog;
+import com.habitrpg.android.habitica.ui.views.insufficientCurrency.InsufficientGoldDialog;
+import com.habitrpg.android.habitica.ui.views.insufficientCurrency.InsufficientHourglassesDialog;
import org.greenrobot.eventbus.EventBus;
@@ -110,7 +114,6 @@ public class PurchaseDialog extends AlertDialog {
}
if (shopItem != null && !shopItem.canBuy(user)) {
- buyButton.setEnabled(false);
priceLabel.setCantAfford(true);
}
}
@@ -202,7 +205,7 @@ public class PurchaseDialog extends AlertDialog {
@OnClick(R.id.buyButton)
void onBuyButtonClicked() {
- if (shopItem.canBuy(user) || !shopItem.getCurrency().equals("gems")) {
+ if (shopItem.canBuy(user)) {
Observable observable;
if ((shopIdentifier!= null && shopIdentifier.equals(Shop.TIME_TRAVELERS_SHOP)) || "mystery_set".equals(shopItem.purchaseType)) {
if (shopItem.purchaseType.equals("gear")) {
@@ -236,7 +239,17 @@ public class PurchaseDialog extends AlertDialog {
}
});
} else {
- EventBus.getDefault().post(new OpenGemPurchaseFragmentCommand());
+ InsufficientCurrencyDialog dialog = null;
+ if ("gold".equals(shopItem.currency)) {
+ dialog = new InsufficientGoldDialog(getContext());
+ } else if ("gems".equals(shopItem.currency)) {
+ dialog = new InsufficientGemsDialog(getContext());
+ } else if ("hourglasses".equals(shopItem.currency)) {
+ dialog = new InsufficientHourglassesDialog(getContext());
+ }
+ if (dialog != null) {
+ dialog.show();
+ }
}
dismiss();
}