From a06123341f175239f9a44c14f47e16f2e13b9e8f Mon Sep 17 00:00:00 2001
From: minar
Date: Fri, 20 Jan 2023 17:38:21 +0100
Subject: [PATCH 01/44] New translations strings.xml (Dutch)
---
app/src/main/res/values-nl/strings.xml | 147 +++++++++++++++++++++++++
1 file changed, 147 insertions(+)
create mode 100644 app/src/main/res/values-nl/strings.xml
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
new file mode 100644
index 0000000..f120335
--- /dev/null
+++ b/app/src/main/res/values-nl/strings.xml
@@ -0,0 +1,147 @@
+
+
+
+ An open source app to choose randomly between numbers, answers, options and so on. Let the randomness talk!
+ Roulette
+ Coin
+ Dice
+ Magic Ball
+ Settings
+ The result is:
+
+ Roulette mode
+ Do you have to choose something? Are you tired of polls and bossy friends? A roulette will decide for you! Long press the roulette to Add generic options or clear them.
+ Spin the roulette!
+ Enter an option…
+ Delete the last option entered
+ Please list below the possible choices to add in the roulette.
+ Please, enter 2 or more options to spin the roulette!
+ You can\'t enter more than 30 options!
+ Option
+ Recent options, tap to restore
+ No recent option, spin the roulette to save the current options!
+ A-Z Letters
+ Range
+ The range is wrong or empty, please enter both the values correctly!
+ Are you sure you want to delete all the entered options?
+
+ Coin mode
+ Flipping a coin is easy, but can help you decide between doing something or not. Just heads or tails. Let the coin talk!
+ Flip the coin!
+ Press the button below!
+ Heads!
+ Tails!
+
+ Magic Ball
+ The magic ball will tell you the answers! Just ask something, and it will help you with a generic and affordable answer. You can activate its rudeness from settings!
+ Shake it!
+ Press the button below!
+ No.
+ Yes!
+ I don\'t think so.
+ Maybe!
+ This makes no sense.
+ Probably…
+ Are you sure?
+ Probably yes.
+ Probably no.
+ Of course.
+ Ask it yourself.
+ No, absurd.
+ Hell yeah!
+ Think about it.
+ Who knows.
+ Are you kidding?
+ As I see it, yes.
+ It is certain.
+ It is decidedly so.
+ Outlook good.
+ Signs point to yes.
+ Without a doubt.
+ Reply hazy, try again.
+ Better not tell you now.
+ Cannot predict now!
+ Concentrate and ask again.
+ Don\'t count on it.
+ My sources say no.
+ Very doubtful.
+ Ask your best friend.
+ No, idiot.
+ Of course, dammit.
+ Are you stupid?
+ Lol! How stupid.
+ You\'re crazy.
+ Go to hell.
+
+ Dice mode
+ Dice can be useful, in a table game for example! The app will throw one to ten dice for you. Select the number from settings. Good luck!
+ Throw the dice!
+ Press the button below!
+
+ Settings
+ I\'m a polite guy, and I like beautiful things like animations, icons, sports cars and 3D printing. I work as a designer and computer engineer.
+ Nice logo, huh? ;D
+ Customization
+ Vibration
+ Vibrate when a button is pressed
+ No vibrations when a button is pressed
+ Sounds
+ Play a sound when a button is pressed
+ No sound when a button is pressed
+ Dice number
+ Change the number of dice thrown. Currently %s
+ One
+ Two
+ Three
+ Four
+ Five
+ Six
+ Seven
+ Eight
+ Nine
+ Ten
+ Change the default accent color. Currently %s
+ Accent color
+ Use a dark, light or automatic app theme. Currently %s
+ App theme
+ Blue
+ Aqua
+ Green
+ Orange
+ Yellow
+ Teal
+ Violet
+ Pink
+ Light blue
+ Red
+ Lime
+ Crimson
+ System default
+ Dark
+ Light
+ App behavior
+ Rude answers
+ Rude answers activated, idiot
+ Just kind and polite answers
+ Hide descriptions
+ Descriptions hidden
+ Descriptions visible
+ Allow equal options
+ Equal options in roulette allowed
+ Equal options in roulette not allowed
+ Remove last chosen
+ Remove the last chosen option in the roulette automatically
+ Don\'t remove the last chosen option in the roulette automatically
+ Shake to launch
+ Shaking the device will act like the center button
+ Shaking the device won\'t have any effect
+
+ Review!
+ I\'m lazy
+ Nah
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n
+ \nOK, now that I have your attention, may I ask you to leave a good review to help Randomix grow a bit? I\'d really appreciate it! Have a great day! :D
+ I\'ve something to tell you
+ Never ask again
+ Translate the app
+
From 7faf66501e701b8ed4c60fa38b23b751ac437959 Mon Sep 17 00:00:00 2001
From: minar
Date: Fri, 20 Jan 2023 17:38:22 +0100
Subject: [PATCH 02/44] New translations strings.xml (Serbian (Cyrillic))
---
app/src/main/res/values-sr/strings.xml | 147 +++++++++++++++++++++++++
1 file changed, 147 insertions(+)
create mode 100644 app/src/main/res/values-sr/strings.xml
diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml
new file mode 100644
index 0000000..f120335
--- /dev/null
+++ b/app/src/main/res/values-sr/strings.xml
@@ -0,0 +1,147 @@
+
+
+
+ An open source app to choose randomly between numbers, answers, options and so on. Let the randomness talk!
+ Roulette
+ Coin
+ Dice
+ Magic Ball
+ Settings
+ The result is:
+
+ Roulette mode
+ Do you have to choose something? Are you tired of polls and bossy friends? A roulette will decide for you! Long press the roulette to Add generic options or clear them.
+ Spin the roulette!
+ Enter an option…
+ Delete the last option entered
+ Please list below the possible choices to add in the roulette.
+ Please, enter 2 or more options to spin the roulette!
+ You can\'t enter more than 30 options!
+ Option
+ Recent options, tap to restore
+ No recent option, spin the roulette to save the current options!
+ A-Z Letters
+ Range
+ The range is wrong or empty, please enter both the values correctly!
+ Are you sure you want to delete all the entered options?
+
+ Coin mode
+ Flipping a coin is easy, but can help you decide between doing something or not. Just heads or tails. Let the coin talk!
+ Flip the coin!
+ Press the button below!
+ Heads!
+ Tails!
+
+ Magic Ball
+ The magic ball will tell you the answers! Just ask something, and it will help you with a generic and affordable answer. You can activate its rudeness from settings!
+ Shake it!
+ Press the button below!
+ No.
+ Yes!
+ I don\'t think so.
+ Maybe!
+ This makes no sense.
+ Probably…
+ Are you sure?
+ Probably yes.
+ Probably no.
+ Of course.
+ Ask it yourself.
+ No, absurd.
+ Hell yeah!
+ Think about it.
+ Who knows.
+ Are you kidding?
+ As I see it, yes.
+ It is certain.
+ It is decidedly so.
+ Outlook good.
+ Signs point to yes.
+ Without a doubt.
+ Reply hazy, try again.
+ Better not tell you now.
+ Cannot predict now!
+ Concentrate and ask again.
+ Don\'t count on it.
+ My sources say no.
+ Very doubtful.
+ Ask your best friend.
+ No, idiot.
+ Of course, dammit.
+ Are you stupid?
+ Lol! How stupid.
+ You\'re crazy.
+ Go to hell.
+
+ Dice mode
+ Dice can be useful, in a table game for example! The app will throw one to ten dice for you. Select the number from settings. Good luck!
+ Throw the dice!
+ Press the button below!
+
+ Settings
+ I\'m a polite guy, and I like beautiful things like animations, icons, sports cars and 3D printing. I work as a designer and computer engineer.
+ Nice logo, huh? ;D
+ Customization
+ Vibration
+ Vibrate when a button is pressed
+ No vibrations when a button is pressed
+ Sounds
+ Play a sound when a button is pressed
+ No sound when a button is pressed
+ Dice number
+ Change the number of dice thrown. Currently %s
+ One
+ Two
+ Three
+ Four
+ Five
+ Six
+ Seven
+ Eight
+ Nine
+ Ten
+ Change the default accent color. Currently %s
+ Accent color
+ Use a dark, light or automatic app theme. Currently %s
+ App theme
+ Blue
+ Aqua
+ Green
+ Orange
+ Yellow
+ Teal
+ Violet
+ Pink
+ Light blue
+ Red
+ Lime
+ Crimson
+ System default
+ Dark
+ Light
+ App behavior
+ Rude answers
+ Rude answers activated, idiot
+ Just kind and polite answers
+ Hide descriptions
+ Descriptions hidden
+ Descriptions visible
+ Allow equal options
+ Equal options in roulette allowed
+ Equal options in roulette not allowed
+ Remove last chosen
+ Remove the last chosen option in the roulette automatically
+ Don\'t remove the last chosen option in the roulette automatically
+ Shake to launch
+ Shaking the device will act like the center button
+ Shaking the device won\'t have any effect
+
+ Review!
+ I\'m lazy
+ Nah
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n
+ \nOK, now that I have your attention, may I ask you to leave a good review to help Randomix grow a bit? I\'d really appreciate it! Have a great day! :D
+ I\'ve something to tell you
+ Never ask again
+ Translate the app
+
From 140ea74b1bdb4fa6c1f02c5ea7e6892c83898fb1 Mon Sep 17 00:00:00 2001
From: minar
Date: Fri, 20 Jan 2023 17:38:23 +0100
Subject: [PATCH 03/44] New translations strings.xml (Croatian)
---
app/src/main/res/values-hr/strings.xml | 147 +++++++++++++++++++++++++
1 file changed, 147 insertions(+)
create mode 100644 app/src/main/res/values-hr/strings.xml
diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml
new file mode 100644
index 0000000..f120335
--- /dev/null
+++ b/app/src/main/res/values-hr/strings.xml
@@ -0,0 +1,147 @@
+
+
+
+ An open source app to choose randomly between numbers, answers, options and so on. Let the randomness talk!
+ Roulette
+ Coin
+ Dice
+ Magic Ball
+ Settings
+ The result is:
+
+ Roulette mode
+ Do you have to choose something? Are you tired of polls and bossy friends? A roulette will decide for you! Long press the roulette to Add generic options or clear them.
+ Spin the roulette!
+ Enter an option…
+ Delete the last option entered
+ Please list below the possible choices to add in the roulette.
+ Please, enter 2 or more options to spin the roulette!
+ You can\'t enter more than 30 options!
+ Option
+ Recent options, tap to restore
+ No recent option, spin the roulette to save the current options!
+ A-Z Letters
+ Range
+ The range is wrong or empty, please enter both the values correctly!
+ Are you sure you want to delete all the entered options?
+
+ Coin mode
+ Flipping a coin is easy, but can help you decide between doing something or not. Just heads or tails. Let the coin talk!
+ Flip the coin!
+ Press the button below!
+ Heads!
+ Tails!
+
+ Magic Ball
+ The magic ball will tell you the answers! Just ask something, and it will help you with a generic and affordable answer. You can activate its rudeness from settings!
+ Shake it!
+ Press the button below!
+ No.
+ Yes!
+ I don\'t think so.
+ Maybe!
+ This makes no sense.
+ Probably…
+ Are you sure?
+ Probably yes.
+ Probably no.
+ Of course.
+ Ask it yourself.
+ No, absurd.
+ Hell yeah!
+ Think about it.
+ Who knows.
+ Are you kidding?
+ As I see it, yes.
+ It is certain.
+ It is decidedly so.
+ Outlook good.
+ Signs point to yes.
+ Without a doubt.
+ Reply hazy, try again.
+ Better not tell you now.
+ Cannot predict now!
+ Concentrate and ask again.
+ Don\'t count on it.
+ My sources say no.
+ Very doubtful.
+ Ask your best friend.
+ No, idiot.
+ Of course, dammit.
+ Are you stupid?
+ Lol! How stupid.
+ You\'re crazy.
+ Go to hell.
+
+ Dice mode
+ Dice can be useful, in a table game for example! The app will throw one to ten dice for you. Select the number from settings. Good luck!
+ Throw the dice!
+ Press the button below!
+
+ Settings
+ I\'m a polite guy, and I like beautiful things like animations, icons, sports cars and 3D printing. I work as a designer and computer engineer.
+ Nice logo, huh? ;D
+ Customization
+ Vibration
+ Vibrate when a button is pressed
+ No vibrations when a button is pressed
+ Sounds
+ Play a sound when a button is pressed
+ No sound when a button is pressed
+ Dice number
+ Change the number of dice thrown. Currently %s
+ One
+ Two
+ Three
+ Four
+ Five
+ Six
+ Seven
+ Eight
+ Nine
+ Ten
+ Change the default accent color. Currently %s
+ Accent color
+ Use a dark, light or automatic app theme. Currently %s
+ App theme
+ Blue
+ Aqua
+ Green
+ Orange
+ Yellow
+ Teal
+ Violet
+ Pink
+ Light blue
+ Red
+ Lime
+ Crimson
+ System default
+ Dark
+ Light
+ App behavior
+ Rude answers
+ Rude answers activated, idiot
+ Just kind and polite answers
+ Hide descriptions
+ Descriptions hidden
+ Descriptions visible
+ Allow equal options
+ Equal options in roulette allowed
+ Equal options in roulette not allowed
+ Remove last chosen
+ Remove the last chosen option in the roulette automatically
+ Don\'t remove the last chosen option in the roulette automatically
+ Shake to launch
+ Shaking the device will act like the center button
+ Shaking the device won\'t have any effect
+
+ Review!
+ I\'m lazy
+ Nah
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n
+ \nOK, now that I have your attention, may I ask you to leave a good review to help Randomix grow a bit? I\'d really appreciate it! Have a great day! :D
+ I\'ve something to tell you
+ Never ask again
+ Translate the app
+
From cdc3b18d1e54644a03aadde756f054f56a1e0815 Mon Sep 17 00:00:00 2001
From: minar
Date: Fri, 20 Jan 2023 17:38:24 +0100
Subject: [PATCH 04/44] New translations strings.xml (English, United Kingdom)
---
app/src/main/res/values-en-rGB/strings.xml | 147 +++++++++++++++++++++
1 file changed, 147 insertions(+)
create mode 100644 app/src/main/res/values-en-rGB/strings.xml
diff --git a/app/src/main/res/values-en-rGB/strings.xml b/app/src/main/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000..f120335
--- /dev/null
+++ b/app/src/main/res/values-en-rGB/strings.xml
@@ -0,0 +1,147 @@
+
+
+
+ An open source app to choose randomly between numbers, answers, options and so on. Let the randomness talk!
+ Roulette
+ Coin
+ Dice
+ Magic Ball
+ Settings
+ The result is:
+
+ Roulette mode
+ Do you have to choose something? Are you tired of polls and bossy friends? A roulette will decide for you! Long press the roulette to Add generic options or clear them.
+ Spin the roulette!
+ Enter an option…
+ Delete the last option entered
+ Please list below the possible choices to add in the roulette.
+ Please, enter 2 or more options to spin the roulette!
+ You can\'t enter more than 30 options!
+ Option
+ Recent options, tap to restore
+ No recent option, spin the roulette to save the current options!
+ A-Z Letters
+ Range
+ The range is wrong or empty, please enter both the values correctly!
+ Are you sure you want to delete all the entered options?
+
+ Coin mode
+ Flipping a coin is easy, but can help you decide between doing something or not. Just heads or tails. Let the coin talk!
+ Flip the coin!
+ Press the button below!
+ Heads!
+ Tails!
+
+ Magic Ball
+ The magic ball will tell you the answers! Just ask something, and it will help you with a generic and affordable answer. You can activate its rudeness from settings!
+ Shake it!
+ Press the button below!
+ No.
+ Yes!
+ I don\'t think so.
+ Maybe!
+ This makes no sense.
+ Probably…
+ Are you sure?
+ Probably yes.
+ Probably no.
+ Of course.
+ Ask it yourself.
+ No, absurd.
+ Hell yeah!
+ Think about it.
+ Who knows.
+ Are you kidding?
+ As I see it, yes.
+ It is certain.
+ It is decidedly so.
+ Outlook good.
+ Signs point to yes.
+ Without a doubt.
+ Reply hazy, try again.
+ Better not tell you now.
+ Cannot predict now!
+ Concentrate and ask again.
+ Don\'t count on it.
+ My sources say no.
+ Very doubtful.
+ Ask your best friend.
+ No, idiot.
+ Of course, dammit.
+ Are you stupid?
+ Lol! How stupid.
+ You\'re crazy.
+ Go to hell.
+
+ Dice mode
+ Dice can be useful, in a table game for example! The app will throw one to ten dice for you. Select the number from settings. Good luck!
+ Throw the dice!
+ Press the button below!
+
+ Settings
+ I\'m a polite guy, and I like beautiful things like animations, icons, sports cars and 3D printing. I work as a designer and computer engineer.
+ Nice logo, huh? ;D
+ Customization
+ Vibration
+ Vibrate when a button is pressed
+ No vibrations when a button is pressed
+ Sounds
+ Play a sound when a button is pressed
+ No sound when a button is pressed
+ Dice number
+ Change the number of dice thrown. Currently %s
+ One
+ Two
+ Three
+ Four
+ Five
+ Six
+ Seven
+ Eight
+ Nine
+ Ten
+ Change the default accent color. Currently %s
+ Accent color
+ Use a dark, light or automatic app theme. Currently %s
+ App theme
+ Blue
+ Aqua
+ Green
+ Orange
+ Yellow
+ Teal
+ Violet
+ Pink
+ Light blue
+ Red
+ Lime
+ Crimson
+ System default
+ Dark
+ Light
+ App behavior
+ Rude answers
+ Rude answers activated, idiot
+ Just kind and polite answers
+ Hide descriptions
+ Descriptions hidden
+ Descriptions visible
+ Allow equal options
+ Equal options in roulette allowed
+ Equal options in roulette not allowed
+ Remove last chosen
+ Remove the last chosen option in the roulette automatically
+ Don\'t remove the last chosen option in the roulette automatically
+ Shake to launch
+ Shaking the device will act like the center button
+ Shaking the device won\'t have any effect
+
+ Review!
+ I\'m lazy
+ Nah
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n
+ \nOK, now that I have your attention, may I ask you to leave a good review to help Randomix grow a bit? I\'d really appreciate it! Have a great day! :D
+ I\'ve something to tell you
+ Never ask again
+ Translate the app
+
From 9f53aa6b483961a315ffaba998da2804989d22cc Mon Sep 17 00:00:00 2001
From: minar
Date: Fri, 20 Jan 2023 17:38:25 +0100
Subject: [PATCH 05/44] New translations strings.xml (Bosnian)
---
app/src/main/res/values-bs/strings.xml | 147 +++++++++++++++++++++++++
1 file changed, 147 insertions(+)
create mode 100644 app/src/main/res/values-bs/strings.xml
diff --git a/app/src/main/res/values-bs/strings.xml b/app/src/main/res/values-bs/strings.xml
new file mode 100644
index 0000000..f120335
--- /dev/null
+++ b/app/src/main/res/values-bs/strings.xml
@@ -0,0 +1,147 @@
+
+
+
+ An open source app to choose randomly between numbers, answers, options and so on. Let the randomness talk!
+ Roulette
+ Coin
+ Dice
+ Magic Ball
+ Settings
+ The result is:
+
+ Roulette mode
+ Do you have to choose something? Are you tired of polls and bossy friends? A roulette will decide for you! Long press the roulette to Add generic options or clear them.
+ Spin the roulette!
+ Enter an option…
+ Delete the last option entered
+ Please list below the possible choices to add in the roulette.
+ Please, enter 2 or more options to spin the roulette!
+ You can\'t enter more than 30 options!
+ Option
+ Recent options, tap to restore
+ No recent option, spin the roulette to save the current options!
+ A-Z Letters
+ Range
+ The range is wrong or empty, please enter both the values correctly!
+ Are you sure you want to delete all the entered options?
+
+ Coin mode
+ Flipping a coin is easy, but can help you decide between doing something or not. Just heads or tails. Let the coin talk!
+ Flip the coin!
+ Press the button below!
+ Heads!
+ Tails!
+
+ Magic Ball
+ The magic ball will tell you the answers! Just ask something, and it will help you with a generic and affordable answer. You can activate its rudeness from settings!
+ Shake it!
+ Press the button below!
+ No.
+ Yes!
+ I don\'t think so.
+ Maybe!
+ This makes no sense.
+ Probably…
+ Are you sure?
+ Probably yes.
+ Probably no.
+ Of course.
+ Ask it yourself.
+ No, absurd.
+ Hell yeah!
+ Think about it.
+ Who knows.
+ Are you kidding?
+ As I see it, yes.
+ It is certain.
+ It is decidedly so.
+ Outlook good.
+ Signs point to yes.
+ Without a doubt.
+ Reply hazy, try again.
+ Better not tell you now.
+ Cannot predict now!
+ Concentrate and ask again.
+ Don\'t count on it.
+ My sources say no.
+ Very doubtful.
+ Ask your best friend.
+ No, idiot.
+ Of course, dammit.
+ Are you stupid?
+ Lol! How stupid.
+ You\'re crazy.
+ Go to hell.
+
+ Dice mode
+ Dice can be useful, in a table game for example! The app will throw one to ten dice for you. Select the number from settings. Good luck!
+ Throw the dice!
+ Press the button below!
+
+ Settings
+ I\'m a polite guy, and I like beautiful things like animations, icons, sports cars and 3D printing. I work as a designer and computer engineer.
+ Nice logo, huh? ;D
+ Customization
+ Vibration
+ Vibrate when a button is pressed
+ No vibrations when a button is pressed
+ Sounds
+ Play a sound when a button is pressed
+ No sound when a button is pressed
+ Dice number
+ Change the number of dice thrown. Currently %s
+ One
+ Two
+ Three
+ Four
+ Five
+ Six
+ Seven
+ Eight
+ Nine
+ Ten
+ Change the default accent color. Currently %s
+ Accent color
+ Use a dark, light or automatic app theme. Currently %s
+ App theme
+ Blue
+ Aqua
+ Green
+ Orange
+ Yellow
+ Teal
+ Violet
+ Pink
+ Light blue
+ Red
+ Lime
+ Crimson
+ System default
+ Dark
+ Light
+ App behavior
+ Rude answers
+ Rude answers activated, idiot
+ Just kind and polite answers
+ Hide descriptions
+ Descriptions hidden
+ Descriptions visible
+ Allow equal options
+ Equal options in roulette allowed
+ Equal options in roulette not allowed
+ Remove last chosen
+ Remove the last chosen option in the roulette automatically
+ Don\'t remove the last chosen option in the roulette automatically
+ Shake to launch
+ Shaking the device will act like the center button
+ Shaking the device won\'t have any effect
+
+ Review!
+ I\'m lazy
+ Nah
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n
+ \nOK, now that I have your attention, may I ask you to leave a good review to help Randomix grow a bit? I\'d really appreciate it! Have a great day! :D
+ I\'ve something to tell you
+ Never ask again
+ Translate the app
+
From 14e17dcd264624409feaaae3c35ef5db76ab5e95 Mon Sep 17 00:00:00 2001
From: minar
Date: Fri, 20 Jan 2023 17:38:25 +0100
Subject: [PATCH 06/44] New translations strings.xml (Serbian (Latin))
---
app/src/main/res/values-sr-rCS/strings.xml | 147 +++++++++++++++++++++
1 file changed, 147 insertions(+)
create mode 100644 app/src/main/res/values-sr-rCS/strings.xml
diff --git a/app/src/main/res/values-sr-rCS/strings.xml b/app/src/main/res/values-sr-rCS/strings.xml
new file mode 100644
index 0000000..f120335
--- /dev/null
+++ b/app/src/main/res/values-sr-rCS/strings.xml
@@ -0,0 +1,147 @@
+
+
+
+ An open source app to choose randomly between numbers, answers, options and so on. Let the randomness talk!
+ Roulette
+ Coin
+ Dice
+ Magic Ball
+ Settings
+ The result is:
+
+ Roulette mode
+ Do you have to choose something? Are you tired of polls and bossy friends? A roulette will decide for you! Long press the roulette to Add generic options or clear them.
+ Spin the roulette!
+ Enter an option…
+ Delete the last option entered
+ Please list below the possible choices to add in the roulette.
+ Please, enter 2 or more options to spin the roulette!
+ You can\'t enter more than 30 options!
+ Option
+ Recent options, tap to restore
+ No recent option, spin the roulette to save the current options!
+ A-Z Letters
+ Range
+ The range is wrong or empty, please enter both the values correctly!
+ Are you sure you want to delete all the entered options?
+
+ Coin mode
+ Flipping a coin is easy, but can help you decide between doing something or not. Just heads or tails. Let the coin talk!
+ Flip the coin!
+ Press the button below!
+ Heads!
+ Tails!
+
+ Magic Ball
+ The magic ball will tell you the answers! Just ask something, and it will help you with a generic and affordable answer. You can activate its rudeness from settings!
+ Shake it!
+ Press the button below!
+ No.
+ Yes!
+ I don\'t think so.
+ Maybe!
+ This makes no sense.
+ Probably…
+ Are you sure?
+ Probably yes.
+ Probably no.
+ Of course.
+ Ask it yourself.
+ No, absurd.
+ Hell yeah!
+ Think about it.
+ Who knows.
+ Are you kidding?
+ As I see it, yes.
+ It is certain.
+ It is decidedly so.
+ Outlook good.
+ Signs point to yes.
+ Without a doubt.
+ Reply hazy, try again.
+ Better not tell you now.
+ Cannot predict now!
+ Concentrate and ask again.
+ Don\'t count on it.
+ My sources say no.
+ Very doubtful.
+ Ask your best friend.
+ No, idiot.
+ Of course, dammit.
+ Are you stupid?
+ Lol! How stupid.
+ You\'re crazy.
+ Go to hell.
+
+ Dice mode
+ Dice can be useful, in a table game for example! The app will throw one to ten dice for you. Select the number from settings. Good luck!
+ Throw the dice!
+ Press the button below!
+
+ Settings
+ I\'m a polite guy, and I like beautiful things like animations, icons, sports cars and 3D printing. I work as a designer and computer engineer.
+ Nice logo, huh? ;D
+ Customization
+ Vibration
+ Vibrate when a button is pressed
+ No vibrations when a button is pressed
+ Sounds
+ Play a sound when a button is pressed
+ No sound when a button is pressed
+ Dice number
+ Change the number of dice thrown. Currently %s
+ One
+ Two
+ Three
+ Four
+ Five
+ Six
+ Seven
+ Eight
+ Nine
+ Ten
+ Change the default accent color. Currently %s
+ Accent color
+ Use a dark, light or automatic app theme. Currently %s
+ App theme
+ Blue
+ Aqua
+ Green
+ Orange
+ Yellow
+ Teal
+ Violet
+ Pink
+ Light blue
+ Red
+ Lime
+ Crimson
+ System default
+ Dark
+ Light
+ App behavior
+ Rude answers
+ Rude answers activated, idiot
+ Just kind and polite answers
+ Hide descriptions
+ Descriptions hidden
+ Descriptions visible
+ Allow equal options
+ Equal options in roulette allowed
+ Equal options in roulette not allowed
+ Remove last chosen
+ Remove the last chosen option in the roulette automatically
+ Don\'t remove the last chosen option in the roulette automatically
+ Shake to launch
+ Shaking the device will act like the center button
+ Shaking the device won\'t have any effect
+
+ Review!
+ I\'m lazy
+ Nah
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n
+ \nOK, now that I have your attention, may I ask you to leave a good review to help Randomix grow a bit? I\'d really appreciate it! Have a great day! :D
+ I\'ve something to tell you
+ Never ask again
+ Translate the app
+
From 47d2f4dfedb66b16b8613e38e1885b9d1ac8816b Mon Sep 17 00:00:00 2001
From: minar
Date: Sun, 22 Jan 2023 18:59:16 +0100
Subject: [PATCH 07/44] New translations strings.xml (English, United Kingdom)
---
app/src/main/res/values-en-rGB/strings.xml | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/app/src/main/res/values-en-rGB/strings.xml b/app/src/main/res/values-en-rGB/strings.xml
index f120335..0f326a2 100644
--- a/app/src/main/res/values-en-rGB/strings.xml
+++ b/app/src/main/res/values-en-rGB/strings.xml
@@ -81,7 +81,7 @@
Settings
I\'m a polite guy, and I like beautiful things like animations, icons, sports cars and 3D printing. I work as a designer and computer engineer.
Nice logo, huh? ;D
- Customization
+ Customisation
Vibration
Vibrate when a button is pressed
No vibrations when a button is pressed
@@ -100,8 +100,8 @@
Eight
Nine
Ten
- Change the default accent color. Currently %s
- Accent color
+ Change the default accent colour. Currently %s
+ Accent colour
Use a dark, light or automatic app theme. Currently %s
App theme
Blue
@@ -119,7 +119,7 @@
System default
Dark
Light
- App behavior
+ App behaviour
Rude answers
Rude answers activated, idiot
Just kind and polite answers
@@ -133,7 +133,7 @@
Remove the last chosen option in the roulette automatically
Don\'t remove the last chosen option in the roulette automatically
Shake to launch
- Shaking the device will act like the center button
+ Shaking the device will act like the centre button
Shaking the device won\'t have any effect
Review!
From fe9a9c38b6e0589e332584cbabfc78ba13c79a57 Mon Sep 17 00:00:00 2001
From: minar
Date: Sun, 22 Jan 2023 19:37:44 +0100
Subject: [PATCH 08/44] Gradle and langs updated
---
app/build.gradle | 2 +-
app/release/output-metadata.json | 4 ++--
app/src/main/res/xml/locales_config.xml | 6 ++++++
build.gradle | 2 +-
gradle/wrapper/gradle-wrapper.properties | 2 +-
5 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index aeaf7b2..0cb437d 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,7 @@ android {
targetSdkVersion 33
versionCode 39
versionName "2.4"
- resConfigs 'en', 'ast', 'cs', 'de', 'es', 'fr', 'id', 'it', 'ru', 'pt', 'pt-rBR', 'zh-rCN', 'zh-rTW'
+ resConfigs 'en', 'en-rGB', 'ast', 'bs', 'cs', 'de', 'es', 'fr', 'hr', 'id', 'it', 'nl', 'ru', 'pt', 'pt-rBR', 'sr', 'sr-rCS', 'zh-rCN', 'zh-rTW'
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
compileOptions {
diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json
index 28fc0e0..0990a6b 100644
--- a/app/release/output-metadata.json
+++ b/app/release/output-metadata.json
@@ -11,8 +11,8 @@
"type": "SINGLE",
"filters": [],
"attributes": [],
- "versionCode": 38,
- "versionName": "2.3",
+ "versionCode": 39,
+ "versionName": "2.4",
"outputFile": "app-release.apk"
}
],
diff --git a/app/src/main/res/xml/locales_config.xml b/app/src/main/res/xml/locales_config.xml
index e2370ec..fd3e5aa 100644
--- a/app/src/main/res/xml/locales_config.xml
+++ b/app/src/main/res/xml/locales_config.xml
@@ -1,15 +1,21 @@
+
+
+
+
+
+
diff --git a/build.gradle b/build.gradle
index 5c5c26f..2c58b02 100644
--- a/build.gradle
+++ b/build.gradle
@@ -7,7 +7,7 @@ buildscript {
mavenCentral()
}
dependencies {
- classpath 'com.android.tools.build:gradle:7.3.1'
+ classpath 'com.android.tools.build:gradle:7.4.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index d500ece..604e131 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
From 0e41dc7af78864fd3f58eb7f7508f97686f71195 Mon Sep 17 00:00:00 2001
From: minar
Date: Sun, 22 Jan 2023 20:02:14 +0100
Subject: [PATCH 09/44] New translations strings.xml (Dutch)
---
app/src/main/res/values-nl/strings.xml | 264 ++++++++++++-------------
1 file changed, 132 insertions(+), 132 deletions(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index f120335..9aaddbf 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -1,147 +1,147 @@
- An open source app to choose randomly between numbers, answers, options and so on. Let the randomness talk!
+ Een opensource-app om willekeurig te kiezen tussen getallen, antwoorden, opties, enzovoort. Laat de willekeurigheid spreken!
Roulette
- Coin
- Dice
- Magic Ball
- Settings
- The result is:
+ Munt
+ Dobbelsteen
+ Toverbal
+ Instellingen
+ Het resultaat is:
- Roulette mode
- Do you have to choose something? Are you tired of polls and bossy friends? A roulette will decide for you! Long press the roulette to Add generic options or clear them.
- Spin the roulette!
- Enter an option…
- Delete the last option entered
- Please list below the possible choices to add in the roulette.
- Please, enter 2 or more options to spin the roulette!
- You can\'t enter more than 30 options!
- Option
- Recent options, tap to restore
- No recent option, spin the roulette to save the current options!
+ Roulette modus
+ Moet je iets kiezen? Ben je moe van peilingen en bazige vrienden? Een roulette zal beslissen voor jou. Druk lang op de roulette om generieke opties toe te voegen of deze te wissen.
+ Draai aan de roulette!
+ Voer een optie in…
+ Verwijder de laatst ingevoerde optie
+ Geef hieronder de mogelijke keuzes om in de roulette toe te voegen.
+ Voer a.u.b. 2 of meer opties in om de roulette te draaien!
+ Je kan niet meer dan 30 opties invoeren!
+ Optie
+ Recente opties, tik om te herstellen
+ Geen recente optie, draai de roulette om de huidige opties op te slaan!
A-Z Letters
- Range
- The range is wrong or empty, please enter both the values correctly!
- Are you sure you want to delete all the entered options?
+ Bereik
+ De bereik is verkeerd of leeg, voer beide waarden correct in!
+ Weet u zeker dat u alle ingevoerde opties wilt verwijderen?
- Coin mode
- Flipping a coin is easy, but can help you decide between doing something or not. Just heads or tails. Let the coin talk!
- Flip the coin!
- Press the button below!
- Heads!
- Tails!
+ Munt modus
+ Een munt gooien is makkelijk, maar kan je helpen om te kiezen tussen iets doen of niet. Laat het munt praten!
+ Draai de munt op!
+ Druk op de knop hieronder!
+ Kop!
+ Staart!
- Magic Ball
- The magic ball will tell you the answers! Just ask something, and it will help you with a generic and affordable answer. You can activate its rudeness from settings!
- Shake it!
- Press the button below!
- No.
- Yes!
- I don\'t think so.
- Maybe!
- This makes no sense.
- Probably…
- Are you sure?
- Probably yes.
- Probably no.
- Of course.
- Ask it yourself.
- No, absurd.
- Hell yeah!
- Think about it.
- Who knows.
- Are you kidding?
- As I see it, yes.
- It is certain.
- It is decidedly so.
- Outlook good.
- Signs point to yes.
- Without a doubt.
- Reply hazy, try again.
- Better not tell you now.
- Cannot predict now!
- Concentrate and ask again.
- Don\'t count on it.
- My sources say no.
- Very doubtful.
- Ask your best friend.
- No, idiot.
- Of course, dammit.
- Are you stupid?
- Lol! How stupid.
- You\'re crazy.
- Go to hell.
+ Toverbal
+ De toverbal zal je de antwoorden vertellen! Vraag gewoon iets en het helpt je met een generiek en betaalbaar antwoord. Je kunt de onbeschoftheid via de instellingen activeren!
+ Schud het!
+ Druk op de knop hieronder!
+ Nee.
+ Ja!
+ Ik denk het niet.
+ Misschien!
+ Dat slaat nergens op.
+ Waarschijnlijk…
+ Weet je het zeker?
+ Waarschijnlijk wel.
+ Waarschijnlijk niet.
+ Natuurlijk.
+ Vraag het jezelf af.
+ Nee, absurd.
+ Hel ja!
+ Denk erover na.
+ Wie weet.
+ Ben je grap?
+ Volgens mij wel.
+ Het is zeker.
+ Het is beslist zo.
+ Goed vooruitzicht.
+ Tekenen wijzen op ja.
+ Zonder twijfel.
+ Wazig antwoord, probeer het nog eens.
+ Dat kan ik je nu beter niet vertellen.
+ Ik kan het nu niet voorspellen!
+ Concentreer en vraag opnieuw.
+ Reken er maar niet op.
+ Mijn bronnen zeggen van niet.
+ Zeer twijfelachtig.
+ Vraag je beste vriend.
+ Nee, idioot.
+ Natuurlijk, verdomme.
+ Ben je stom?
+ Lol! Wat dom.
+ Je bent gek.
+ Ga naar de hel.
- Dice mode
- Dice can be useful, in a table game for example! The app will throw one to ten dice for you. Select the number from settings. Good luck!
- Throw the dice!
- Press the button below!
+ Dobbelsteen modus
+ Dobbelstenen kunnen handig zijn, in een tafelspel bijvoorbeeld! De app gooit één tot tien dobbelstenen voor je. Selecteer het aantal bij instellingen. Veel succes!
+ Gooi de dobbelstenen!
+ Druk op de knop hieronder!
- Settings
- I\'m a polite guy, and I like beautiful things like animations, icons, sports cars and 3D printing. I work as a designer and computer engineer.
- Nice logo, huh? ;D
- Customization
- Vibration
- Vibrate when a button is pressed
- No vibrations when a button is pressed
- Sounds
- Play a sound when a button is pressed
- No sound when a button is pressed
- Dice number
- Change the number of dice thrown. Currently %s
- One
- Two
- Three
- Four
- Five
- Six
- Seven
- Eight
- Nine
- Ten
- Change the default accent color. Currently %s
- Accent color
- Use a dark, light or automatic app theme. Currently %s
- App theme
- Blue
+ Instellingen
+ Ik ben een beleefde jongen, en ik hou van mooie dingen zoals animaties, iconen, sportwagens en 3D-printen. Ik werk als een ontwerper en computer ingenieur.
+ Mooi logo, hé? ;D
+ Aanpassingen
+ Trilling
+ Trillen wanneer een knop wordt ingedrukt
+ Geen trillingen wanneer een knop wordt ingedrukt
+ Geluiden
+ Speel een geluid af wanneer een knop wordt ingedrukt
+ Geen geluid wanneer een knop wordt ingedrukt
+ Dobbel aantal
+ Wijzig het aantal dobbelstenen. Momenteel %s
+ Een
+ Twee
+ Drie
+ Vier
+ Vijf
+ Zes
+ Zeven
+ Acht
+ Negen
+ Tien
+ Wijzig de standaard accentkleur. Momenteel %s
+ Accentkleur
+ Gebruik een donker, licht of automatisch app thema. Momenteel %s
+ App thema
+ Blauw
Aqua
- Green
- Orange
- Yellow
- Teal
+ Groen
+ Oranje
+ Geel
+ Groenblauw
Violet
- Pink
- Light blue
- Red
- Lime
- Crimson
- System default
- Dark
- Light
- App behavior
- Rude answers
- Rude answers activated, idiot
- Just kind and polite answers
- Hide descriptions
- Descriptions hidden
- Descriptions visible
- Allow equal options
- Equal options in roulette allowed
- Equal options in roulette not allowed
- Remove last chosen
- Remove the last chosen option in the roulette automatically
- Don\'t remove the last chosen option in the roulette automatically
- Shake to launch
- Shaking the device will act like the center button
- Shaking the device won\'t have any effect
+ Roze
+ Lichtblauw
+ Rood
+ Limoen
+ Karmozijn
+ Systeem standaard
+ Donker
+ Licht
+ App gedrag
+ Ruwe antwoorden
+ Ruwe antwoorden geactiveerd, idioot
+ Gewoon aardige en beleefde antwoorden
+ Verberg beschrijvingen
+ Beschrijvingen zijn verborgen
+ Beschrijvingen zijn zichtbaar
+ Sta gelijke opties toe
+ Gelijke opties in roulette toegestaan
+ Gelijke opties in roulette niet toegestaan
+ Laatst gekozen verwijderen
+ Verwijder automatisch de laatst gekozen optie in de roulette
+ Verwijder niet automatisch de laatst gekozen optie in de roulette
+ Schud om te starten
+ Schudden van het apparaat zal werken als de middenknop
+ Schudden van het apparaat zal geen effect hebben
- Review!
- I\'m lazy
+ Recensie!
+ Ik ben lui
Nah
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n
- \nOK, now that I have your attention, may I ask you to leave a good review to help Randomix grow a bit? I\'d really appreciate it! Have a great day! :D
- I\'ve something to tell you
- Never ask again
- Translate the app
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n
+ \nOké, nu ik uw aandacht heb, mag ik u vragen een goede recensie achter te laten om Randomix een beetje te helpen groeien? Ik zou het echt waarderen! Nog een fijne dag! :D
+ Ik heb je iets te vertellen
+ Nooit meer vragen
+ Vertaal de app
From 9837cd1edca6d2eccb808d1194494d2fb264bd30 Mon Sep 17 00:00:00 2001
From: minar
Date: Sun, 22 Jan 2023 20:02:15 +0100
Subject: [PATCH 10/44] New translations strings.xml (Serbian (Cyrillic))
---
app/src/main/res/values-sr/strings.xml | 273 ++++++++++++-------------
1 file changed, 136 insertions(+), 137 deletions(-)
diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml
index f120335..f3ffab1 100644
--- a/app/src/main/res/values-sr/strings.xml
+++ b/app/src/main/res/values-sr/strings.xml
@@ -1,147 +1,146 @@
- An open source app to choose randomly between numbers, answers, options and so on. Let the randomness talk!
- Roulette
- Coin
- Dice
- Magic Ball
- Settings
- The result is:
+ Апликација отвореног извора којом насумично можете одабрати између бројева, одговора, избора итд. Дозволите насумичности да прича!
+ Рулет
+ Новчић
+ Коцке
+ Магична Кугла
+ Подешавања
+ Резултат је:
- Roulette mode
- Do you have to choose something? Are you tired of polls and bossy friends? A roulette will decide for you! Long press the roulette to Add generic options or clear them.
- Spin the roulette!
- Enter an option…
- Delete the last option entered
- Please list below the possible choices to add in the roulette.
- Please, enter 2 or more options to spin the roulette!
- You can\'t enter more than 30 options!
- Option
- Recent options, tap to restore
- No recent option, spin the roulette to save the current options!
- A-Z Letters
- Range
- The range is wrong or empty, please enter both the values correctly!
- Are you sure you want to delete all the entered options?
+ Рулет мод
+ Морате ли изабрати нешто? Јесу ли вам досадиле анкете и запоједничави пријатељи? Рулета ће за вас одлучити! Држите дуго прст на рулети да додате опште поставке или да их расчистите.
+ Окрените рилету!
+ Унесите поставку…
+ Избришите задње-унешену поставку
+ Молим вас да наведете испод могуће изборе да додате у рулету.
+ Молим вас, унесите двоје или више поставких да окренете рулету!
+ Не можете унети више од 30 поставких!
+ Поставка
+ Скорашње поставке, тапните да обновите
+ Нема скорашњих поставких, окрените рулету да спасите тренутачне поставке!
+ A-Z Слова
+ Опсег
+ Опсег је погрешан или празан, молимо вас да унесете обоје вредности исправно!
+ Јесте ли сигурни да желите избрисати све унесене поставке?
- Coin mode
- Flipping a coin is easy, but can help you decide between doing something or not. Just heads or tails. Let the coin talk!
- Flip the coin!
- Press the button below!
- Heads!
- Tails!
+ Новчићни мод
+ Бацање новчића је једноставно, али вам може помоћи да одлучите хоћете ли или нећете нешто учинити. Само глава или писмо. Нека новчић прича!
+ Баците новчић!
+ Притисните дугме испод!
+ Глава!
+ Писмо!
- Magic Ball
- The magic ball will tell you the answers! Just ask something, and it will help you with a generic and affordable answer. You can activate its rudeness from settings!
- Shake it!
- Press the button below!
- No.
- Yes!
- I don\'t think so.
- Maybe!
- This makes no sense.
- Probably…
- Are you sure?
- Probably yes.
- Probably no.
- Of course.
- Ask it yourself.
- No, absurd.
- Hell yeah!
- Think about it.
- Who knows.
- Are you kidding?
- As I see it, yes.
- It is certain.
- It is decidedly so.
- Outlook good.
- Signs point to yes.
- Without a doubt.
- Reply hazy, try again.
- Better not tell you now.
- Cannot predict now!
- Concentrate and ask again.
- Don\'t count on it.
- My sources say no.
- Very doubtful.
- Ask your best friend.
- No, idiot.
- Of course, dammit.
- Are you stupid?
- Lol! How stupid.
- You\'re crazy.
- Go to hell.
+ Магична Кугла
+ Магична кугла ће вам на све одговорити! Само питајте нешто, и помоћи ће вам са општим и приступачним одговором. Можете и укључити њену грубост у подешавањима!
+ Протресите ју!
+ Притисните дугме испод!
+ Не.
+ Да!
+ Мислим да није.
+ Можда!
+ Ово нема никако смисла.
+ Вероватно…
+ Да ли сте сигурни?
+ Вероватно да.
+ Вероватно не.
+ Наравно.
+ Запитајте се сами.
+ Не, апсурдно.
+ Дођавола да!
+ Размисли о томе.
+ Ко зна.
+ Јел се шалиш?
+ Заколико видим, да.
+ Сигурно и јест.
+ Одлучно и јест.
+ Изгледа добро.
+ Знакови упућују на према да.
+ Без сумње.
+ Одговор је мутан, пробајте поново.
+ Боље да ти сад не кажем.
+ Не може се сад предвидити!
+ Усредсреди се и питај поново.
+ Не рачунај на то.
+ Моји извори кажу не.
+ Врло неизвесно.
+ Питај најбољег пријатеља.
+ Не, будало.
+ Наравно, доврага.
+ Јеси глуп?
+ Лол! Како тупаво.
+ Полудио си.
+ Иди у пакао.
- Dice mode
- Dice can be useful, in a table game for example! The app will throw one to ten dice for you. Select the number from settings. Good luck!
- Throw the dice!
- Press the button below!
+ Мод за коцке
+ Коцке могу бити корисне, на столној игри например! Апликација ће једну до десет коцких за вас бацити. Одаберите количину у подешавањима. Сретно!
+ Баците коцке!
+ Притисните дугме испод!
- Settings
- I\'m a polite guy, and I like beautiful things like animations, icons, sports cars and 3D printing. I work as a designer and computer engineer.
- Nice logo, huh? ;D
- Customization
- Vibration
- Vibrate when a button is pressed
- No vibrations when a button is pressed
- Sounds
- Play a sound when a button is pressed
- No sound when a button is pressed
- Dice number
- Change the number of dice thrown. Currently %s
- One
- Two
- Three
- Four
- Five
- Six
- Seven
- Eight
- Nine
- Ten
- Change the default accent color. Currently %s
- Accent color
- Use a dark, light or automatic app theme. Currently %s
- App theme
- Blue
- Aqua
- Green
- Orange
- Yellow
- Teal
- Violet
- Pink
- Light blue
- Red
- Lime
- Crimson
- System default
- Dark
- Light
- App behavior
- Rude answers
- Rude answers activated, idiot
- Just kind and polite answers
- Hide descriptions
- Descriptions hidden
- Descriptions visible
- Allow equal options
- Equal options in roulette allowed
- Equal options in roulette not allowed
- Remove last chosen
- Remove the last chosen option in the roulette automatically
- Don\'t remove the last chosen option in the roulette automatically
- Shake to launch
- Shaking the device will act like the center button
- Shaking the device won\'t have any effect
+ Подешавања
+ Ја сам пристојан човек, и волим лепе ствари ко цртиће, иконе, спортска аута и 3Д принтање. Радим ко дизајнер и рачунарски инжењер.
+ Лепа ознака, зар није? ;D
+ Прилагођавање
+ Вибрација
+ Нек мобител зуји при притиску дугмади
+ Нек мобител не зуји при притиску дугмади
+ Звукови
+ Нек мобител покрене звук при притиску дугмади
+ Нек мобител не покрене звук при притиску дугмади
+ Количина коцких
+ Промените количину коцких бачених, Тренутно их је %s
+ Једна
+ Две
+ Три
+ Четири
+ Пет
+ Шест
+ Седам
+ Осам
+ Девет
+ Десет
+ Промените задану боју акцента. Тренутно је %s
+ Боја акцента
+ Користите мрачну, светлу или аутоматску тему апликације. Тренутно је %s
+ Тема апликације
+ Плава
+ Аква
+ Зелена
+ Наранџаста
+ Жута
+ Плавозелена
+ Љубичаста
+ Ружичаста
+ Светлоплава
+ Црвена
+ Лимета
+ Тамноцрвена
+ Системски подразумевана
+ Мрачна
+ Светла
+ Понашање апликације
+ Груби одговори
+ Груби одговори су укључени, будало
+ Само љубазни и учитиви одговори
+ Сакриј описе
+ Описи су сакривени
+ Описи се могу видети
+ Дозволите једнаке поставке
+ Једнаке поставке су дозвољене у рулети
+ Једнаке поставке нису дозвољене у рулети
+ Уклоните задње одабрано
+ Аутоматски уклоните задње одабрану поставку у рулети
+ Немојте аутоматски уклонити задње одабрану поставку у рулети
+ Потресите да покренете
+ Тресање уређаја ће деловати као средње дугме
+ Тресање уређаја неће имати икакав ефекат
- Review!
- I\'m lazy
- Nah
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n
- \nOK, now that I have your attention, may I ask you to leave a good review to help Randomix grow a bit? I\'d really appreciate it! Have a great day! :D
- I\'ve something to tell you
- Never ask again
- Translate the app
+ Рецензија!
+ Лен сам
+ Не
+ ААААААААААААААААААААААААААААА\n \nДобро, сад кад сам ухватио вашу пажњу, могу ли вас замолити да ми даднете добру рецензију да помогнете Рандомиx-у да мало израсте? Био бих веома захвалан! Нек вам је угодан дан! :D
+ Морам ти нешто рећи
+ Никад ме више то не питај
+ Преведите апликацију
From 4d829f36db2a088fb9854ee3ad4b965722473ca7 Mon Sep 17 00:00:00 2001
From: minar
Date: Sun, 22 Jan 2023 20:02:16 +0100
Subject: [PATCH 11/44] New translations strings.xml (Croatian)
---
app/src/main/res/values-hr/strings.xml | 272 ++++++++++++-------------
1 file changed, 136 insertions(+), 136 deletions(-)
diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml
index f120335..3223a03 100644
--- a/app/src/main/res/values-hr/strings.xml
+++ b/app/src/main/res/values-hr/strings.xml
@@ -1,147 +1,147 @@
- An open source app to choose randomly between numbers, answers, options and so on. Let the randomness talk!
- Roulette
- Coin
- Dice
- Magic Ball
- Settings
- The result is:
+ Aplikacija otvorenog izvora kojom nasumično možete odabrati između brojeva, odgovora, izbora itd. Pustite nasumičnosti da priča!
+ Rulet
+ Kovanica
+ Kocke
+ Magična Kugla
+ Postavke
+ Rezultat je:
- Roulette mode
- Do you have to choose something? Are you tired of polls and bossy friends? A roulette will decide for you! Long press the roulette to Add generic options or clear them.
- Spin the roulette!
- Enter an option…
- Delete the last option entered
- Please list below the possible choices to add in the roulette.
- Please, enter 2 or more options to spin the roulette!
- You can\'t enter more than 30 options!
- Option
- Recent options, tap to restore
- No recent option, spin the roulette to save the current options!
- A-Z Letters
- Range
- The range is wrong or empty, please enter both the values correctly!
- Are you sure you want to delete all the entered options?
+ Rulet mod
+ Morate li odabrati nešto? Jesu li vam dojadile ankete i zapojedničavi prijatelji? Ruleta će za vas odlučiti! Držite dugo prst na ruleti da dodate opće postavke ili da ih rasčistite.
+ Okrenite ruletu!
+ Unesite postavku…
+ Izbrišite zadnje-unešenu postavku
+ Molim vas navedite ispod moguće izbore da dodate u ruletu.
+ Molim vas, unesite dvije ili više postavkih da okrenete ruletu!
+ Ne možete unijeti više od 30 postavkih!
+ Postavka
+ Nedavne postavke, tapnite za obnovu
+ Nema nedavnih postavkih, okrenite ruletu da spasite trenutne postavke!
+ A-Z Slova
+ Domet
+ Domet je pogrešan ili prazan, molimo da unesete obje vrijednosti ispravno!
+ Jeste li sigurni da želite izbrisati sve unesene postavke?
- Coin mode
- Flipping a coin is easy, but can help you decide between doing something or not. Just heads or tails. Let the coin talk!
- Flip the coin!
- Press the button below!
- Heads!
- Tails!
+ Kovanićni mod
+ Bacanje kovanice je jednostavno, ali vam može pomoći da odlučite želite li il ne želite nešto uraditi. Samo glava il pismo. Neka kovanica priča!
+ Bacite kovanicu!
+ Pritisnite gumb ispod!
+ Glava!
+ Pismo!
- Magic Ball
- The magic ball will tell you the answers! Just ask something, and it will help you with a generic and affordable answer. You can activate its rudeness from settings!
- Shake it!
- Press the button below!
- No.
- Yes!
- I don\'t think so.
- Maybe!
- This makes no sense.
- Probably…
- Are you sure?
- Probably yes.
- Probably no.
- Of course.
- Ask it yourself.
- No, absurd.
- Hell yeah!
- Think about it.
- Who knows.
- Are you kidding?
- As I see it, yes.
- It is certain.
- It is decidedly so.
- Outlook good.
- Signs point to yes.
- Without a doubt.
- Reply hazy, try again.
- Better not tell you now.
- Cannot predict now!
- Concentrate and ask again.
- Don\'t count on it.
- My sources say no.
- Very doubtful.
- Ask your best friend.
- No, idiot.
- Of course, dammit.
- Are you stupid?
- Lol! How stupid.
- You\'re crazy.
- Go to hell.
+ Magična Kugla
+ Magična kugla će vam na sve odgovoriti! Samo pitajte nešto, i pomoće vam sa općim i pristupačnim odgovorom. Možete uključiti njenu grubost u podešavanjima!
+ Protresite ju!
+ Pritisnite gumb ispod!
+ Ne.
+ Da!
+ Mislim da nije.
+ Možda!
+ Ovo nema nimalo smisla.
+ Vjerovatno…
+ Jeste li sigurni?
+ Vjerovatno da.
+ Vjerovatno ne.
+ Naravno.
+ Zapitajte se sami.
+ Ne, apsurdno.
+ Dođavola da!
+ Razmisli o tome.
+ Ko zna.
+ Zar se zezaš?
+ Zakoliko vidim, da.
+ Sigurno i jest.
+ Sasvim i jest.
+ Izgleda dobro.
+ Znakovi upućuju na prema da.
+ Bez sumnje.
+ Odgovor je mutan, probajte ponovno.
+ Bolje da ti sad ne kažem.
+ Ne može se sad predviditi!
+ Usredsredi se i pitaj ponovno.
+ Ne računaj na to.
+ Moji izvori kažu ne.
+ Vrlo neizvjesno.
+ Pitaj najboljeg prijatelja.
+ Ne, budalo.
+ Naravno, dovraga.
+ Jesi glup?
+ Lol! Kako glupo.
+ Poludio si.
+ Idi u pakao.
- Dice mode
- Dice can be useful, in a table game for example! The app will throw one to ten dice for you. Select the number from settings. Good luck!
- Throw the dice!
- Press the button below!
+ Mod za kocke
+ Kocke mogu biti korisne, na stolnoj igri naprimjer! Aplikacija će jednu do deset kockih za vas baciti. Odaberite količinu u postavkama. Sretno!
+ Bacite kocke!
+ Pritisnite gumb ispod!
- Settings
- I\'m a polite guy, and I like beautiful things like animations, icons, sports cars and 3D printing. I work as a designer and computer engineer.
- Nice logo, huh? ;D
- Customization
- Vibration
- Vibrate when a button is pressed
- No vibrations when a button is pressed
- Sounds
- Play a sound when a button is pressed
- No sound when a button is pressed
- Dice number
- Change the number of dice thrown. Currently %s
- One
- Two
- Three
- Four
- Five
- Six
- Seven
- Eight
- Nine
- Ten
- Change the default accent color. Currently %s
- Accent color
- Use a dark, light or automatic app theme. Currently %s
- App theme
- Blue
- Aqua
- Green
- Orange
- Yellow
- Teal
- Violet
- Pink
- Light blue
- Red
- Lime
- Crimson
- System default
- Dark
- Light
- App behavior
- Rude answers
- Rude answers activated, idiot
- Just kind and polite answers
- Hide descriptions
- Descriptions hidden
- Descriptions visible
- Allow equal options
- Equal options in roulette allowed
- Equal options in roulette not allowed
- Remove last chosen
- Remove the last chosen option in the roulette automatically
- Don\'t remove the last chosen option in the roulette automatically
- Shake to launch
- Shaking the device will act like the center button
- Shaking the device won\'t have any effect
+ Postavke
+ Ja sam pristojan čovjek, i volim lijepe stvari poput crtića, ikona, sportskih auta i 3D printanja. Radim kao dizajner i računalni inženjer.
+ Lijepa oznaka, zar nije? ;D
+ Prilagođavanje
+ Vibracija
+ Nek mobitel zuji pri pritisku gumba
+ Nek mobitel ne zuji pri pritisku gumba
+ Zvukovi
+ Nek mobitel pokrene zvuk pri pritisku gumba
+ Nek mobitel ne pokrene zvuk pri pritisku gumba
+ Količina kockih
+ Promijenite količinu kockih bačenih, Trenutno ih je %s
+ Jedna
+ Dvije
+ Tri
+ Četiri
+ Pet
+ Šest
+ Sedam
+ Osam
+ Devet
+ Deset
+ Promijenite zadanu boju akcenta. Trenutno je %s
+ Boja akcenta
+ Koristite tamnu, svijetlu ili automatsku temu aplikacije. Trenutno je %s
+ Tema aplikacije
+ Plava
+ Akva
+ Zelena
+ Narančasta
+ Žuta
+ Plavozelena
+ Ljubičasta
+ Ružičasta
+ Svijetloplava
+ Crvena
+ Limeta
+ Tamnocrvena
+ Sistemski zadana
+ Tamna
+ Svijetla
+ Ponašanje aplikacije
+ Grubi odgovori
+ Grubi odgovori su uključeni, budalo
+ Samo fini i primjerni odgovori
+ Sakrij opise
+ Opisi su sakriveni
+ Opisi su vidljivi
+ Dozvolite jednake postavke
+ Jednake postavke su dozvoljene u ruleti
+ Jednake postavke nisu dozvoljene u ruleti
+ Uklonite zadnje odabrano
+ Automatski uklonite zadnje odabranu postavku u ruleti
+ Nemojte automatski ukloniti zadnje odabranu postavku u ruleti
+ Potresite da pokrenete
+ Tresanje uređaja će djelovati kao srednji gumb
+ Tresanje uređaja neće imati ikoji utjecaj
- Review!
- I\'m lazy
- Nah
+ Recenzija!
+ Lijen sam
+ Ne
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n
- \nOK, now that I have your attention, may I ask you to leave a good review to help Randomix grow a bit? I\'d really appreciate it! Have a great day! :D
- I\'ve something to tell you
- Never ask again
- Translate the app
+ \nU redu, sad kad imam vašu pažnju, mogu li vas zamoliti da mi dadnete dobru recenziju da pomognete Randomix-u da malo poraste? Bio bih vrlo zahvalan! Nek vam je ugodan dan! :D
+ Moram ti nešto reći
+ Nikad me to više ne pitaj
+ Prevedite aplikaciju
From a922a79e2e40431c135249809967028666f642c7 Mon Sep 17 00:00:00 2001
From: minar
Date: Sun, 22 Jan 2023 20:02:17 +0100
Subject: [PATCH 12/44] New translations strings.xml (Bosnian)
---
app/src/main/res/values-bs/strings.xml | 272 ++++++++++++-------------
1 file changed, 136 insertions(+), 136 deletions(-)
diff --git a/app/src/main/res/values-bs/strings.xml b/app/src/main/res/values-bs/strings.xml
index f120335..e9763fa 100644
--- a/app/src/main/res/values-bs/strings.xml
+++ b/app/src/main/res/values-bs/strings.xml
@@ -1,147 +1,147 @@
- An open source app to choose randomly between numbers, answers, options and so on. Let the randomness talk!
- Roulette
- Coin
- Dice
- Magic Ball
- Settings
- The result is:
+ Aplikacija otvorenog izvora kojom nasumično možete odabrati između brojeva, odgovora, izbora itd. Dopustite nasumičnosti da priča!
+ Rulet
+ Novčić
+ Kocke
+ Magična Kugla
+ Podešavanja
+ Rezultat je:
- Roulette mode
- Do you have to choose something? Are you tired of polls and bossy friends? A roulette will decide for you! Long press the roulette to Add generic options or clear them.
- Spin the roulette!
- Enter an option…
- Delete the last option entered
- Please list below the possible choices to add in the roulette.
- Please, enter 2 or more options to spin the roulette!
- You can\'t enter more than 30 options!
- Option
- Recent options, tap to restore
- No recent option, spin the roulette to save the current options!
- A-Z Letters
- Range
- The range is wrong or empty, please enter both the values correctly!
- Are you sure you want to delete all the entered options?
+ Rulet mod
+ Morate li odabrati nešto? Jesu li vam dojadile ankete i zapojedničavi prijatelji? Ruleta će za vas odlučiti! Držite dugo prst na ruleti da dodate opšte postavke ili da ih rasčistite.
+ Okrenite ruletu!
+ Unesite postavku…
+ Izbrišite zadnje-unešenu postavku
+ Molim vas navedite ispod moguće izbore da dodate u ruletu.
+ Molim vas, unesite dvije ili više postavkih da okrenete ruletu!
+ Ne možete unijeti više od 30 postavkih!
+ Postavka
+ Nedavne postavke, tapnite za obnovu
+ Nema nedavnih postavkih, okrenite ruletu da spasite trenutačne postavke!
+ A-Z Slova
+ Opseg
+ Opseg je pogrešan ili prazan, molimo da unesete obje vrijednosti ispravno!
+ Jeste li sigurni da želite izbrisati sve unesene postavke?
- Coin mode
- Flipping a coin is easy, but can help you decide between doing something or not. Just heads or tails. Let the coin talk!
- Flip the coin!
- Press the button below!
- Heads!
- Tails!
+ Novčićni mod
+ Bacanje novčića je jednostavno, ali vam može pomoći da odlučite hoćete li il nećete nešto učiniti. Samo glava il pismo. Neka novčić priča!
+ Bacite novčić!
+ Pritisnite dugme ispod!
+ Glava!
+ Pismo!
- Magic Ball
- The magic ball will tell you the answers! Just ask something, and it will help you with a generic and affordable answer. You can activate its rudeness from settings!
- Shake it!
- Press the button below!
- No.
- Yes!
- I don\'t think so.
- Maybe!
- This makes no sense.
- Probably…
- Are you sure?
- Probably yes.
- Probably no.
- Of course.
- Ask it yourself.
- No, absurd.
- Hell yeah!
- Think about it.
- Who knows.
- Are you kidding?
- As I see it, yes.
- It is certain.
- It is decidedly so.
- Outlook good.
- Signs point to yes.
- Without a doubt.
- Reply hazy, try again.
- Better not tell you now.
- Cannot predict now!
- Concentrate and ask again.
- Don\'t count on it.
- My sources say no.
- Very doubtful.
- Ask your best friend.
- No, idiot.
- Of course, dammit.
- Are you stupid?
- Lol! How stupid.
- You\'re crazy.
- Go to hell.
+ Magična Kugla
+ Magična kugla će vam na sve odgovoriti! Samo pitajte nešto, i pomoće vam sa opštim i pristupačnim odgovorom. Možete uključiti njenu grubost u podešavanjima!
+ Protresite ju!
+ Pritisnite dugme ispod!
+ Ne.
+ Da!
+ Mislim da nije.
+ Možda!
+ Ovo nema nikako smisla.
+ Vjerovatno…
+ Jeste li sigurni?
+ Vjerovatno da.
+ Vjerovatno ne.
+ Naravno.
+ Zapitajte se sami.
+ Ne, apsurdno.
+ Dođavola da!
+ Razmisli o tome.
+ Ko zna.
+ Jel se zezaš?
+ Zakoliko vidim, da.
+ Sigurno i jest.
+ Odlučno i jest.
+ Izgleda dobro.
+ Znakovi upućuju na prema da.
+ Bez sumnje.
+ Odgovor je mutan, probajte ponovo.
+ Bolje da ti sad ne kažem.
+ Ne može se sad predviditi!
+ Usredsredi se i pitaj ponovo.
+ Ne računaj na to.
+ Moji izvori kažu ne.
+ Vrlo neizvjesno.
+ Pitaj najboljeg prijatelja.
+ Ne, budalo.
+ Naravno, dovraga.
+ Jesi glup?
+ Lol! Kako tupavo.
+ Poludio si.
+ Idi u pakao.
- Dice mode
- Dice can be useful, in a table game for example! The app will throw one to ten dice for you. Select the number from settings. Good luck!
- Throw the dice!
- Press the button below!
+ Mod za kocke
+ Kocke mogu biti korisne, na stolnoj igri naprimjer! Aplikacija će jednu do deset kockih za vas baciti. Odaberite količinu u podešavanjima. Sretno!
+ Bacite kocke!
+ Pritisnite dugme ispod!
- Settings
- I\'m a polite guy, and I like beautiful things like animations, icons, sports cars and 3D printing. I work as a designer and computer engineer.
- Nice logo, huh? ;D
- Customization
- Vibration
- Vibrate when a button is pressed
- No vibrations when a button is pressed
- Sounds
- Play a sound when a button is pressed
- No sound when a button is pressed
- Dice number
- Change the number of dice thrown. Currently %s
- One
- Two
- Three
- Four
- Five
- Six
- Seven
- Eight
- Nine
- Ten
- Change the default accent color. Currently %s
- Accent color
- Use a dark, light or automatic app theme. Currently %s
- App theme
- Blue
- Aqua
- Green
- Orange
- Yellow
- Teal
- Violet
- Pink
- Light blue
- Red
- Lime
- Crimson
- System default
- Dark
- Light
- App behavior
- Rude answers
- Rude answers activated, idiot
- Just kind and polite answers
- Hide descriptions
- Descriptions hidden
- Descriptions visible
- Allow equal options
- Equal options in roulette allowed
- Equal options in roulette not allowed
- Remove last chosen
- Remove the last chosen option in the roulette automatically
- Don\'t remove the last chosen option in the roulette automatically
- Shake to launch
- Shaking the device will act like the center button
- Shaking the device won\'t have any effect
+ Podešavanja
+ Ja sam pristojan čovjek, i volim lijepe stvari ko crtiće, ikone, sportska auta i 3D printanje. Radim ko dizajner i računarski inženjer.
+ Lijepa oznaka, zar nije? ;D
+ Prilagođavanje
+ Vibracija
+ Nek mobitel zuji pri pritisku dugmadi
+ Nek mobitel ne zuji pri pritisku dugmadi
+ Zvukovi
+ Nek mobitel pokrene zvuk pri pritisku dugmadi
+ Nek mobitel ne pokrene zvuk pri pritisku dugmadi
+ Količina kockih
+ Promijenite količinu kockih bačenih, Trenutno ih je %s
+ Jedna
+ Dvije
+ Tri
+ Četiri
+ Pet
+ Šest
+ Sedam
+ Osam
+ Devet
+ Deset
+ Promijenite zadanu boju akcenta. Trenutno je %s
+ Boja akcenta
+ Koristite mračnu, svijetlu ili automatsku temu aplikacije. Trenutno je %s
+ Tema aplikacije
+ Plava
+ Akva
+ Zelena
+ Narandžasta
+ Žuta
+ Plavozelena
+ Ljubičasta
+ Ružičasta
+ Svijetloplava
+ Crvena
+ Limeta
+ Tamnocrvena
+ Sistemski zadana
+ Mračna
+ Svijetla
+ Ponašanje aplikacije
+ Grubi odgovori
+ Grubi odgovori su uključeni, budalo
+ Samo fini i pristojni odgovori
+ Sakrij opise
+ Opisi su sakriveni
+ Opisi se mogu vidjeti
+ Dozvolite jednake postavke
+ Jednake postavke su dozvoljene u ruleti
+ Jednake postavke nisu dozvoljene u ruleti
+ Uklonite zadnje odabrano
+ Automatski uklonite zadnje odabranu postavku u ruleti
+ Nemojte automatski ukloniti zadnje odabranu postavku u ruleti
+ Potresite da pokrenete
+ Tresanje uređaja će djelovati ko srednje dugme
+ Tresanje uređaja neće imati ikoji efekat
- Review!
- I\'m lazy
- Nah
+ Recenzija!
+ Lijen sam
+ Ne
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n
- \nOK, now that I have your attention, may I ask you to leave a good review to help Randomix grow a bit? I\'d really appreciate it! Have a great day! :D
- I\'ve something to tell you
- Never ask again
- Translate the app
+ \nDobro, sad kad imam vašu pažnju, mogu li vas zamoliti da mi dadnete dobru recenziju da pomognete Randomix-u da malo izraste? Bio bih veoma zahvalan! Nek vam je ugodan dan! :D
+ Moram ti nešto reći
+ Nikad me to više ne pitaj
+ Prevedite aplikaciju
From e257023e85787e41f7d2c18557f77c801a33e0bd Mon Sep 17 00:00:00 2001
From: minar
Date: Sun, 22 Jan 2023 20:02:18 +0100
Subject: [PATCH 13/44] New translations strings.xml (Serbian (Latin))
---
app/src/main/res/values-sr-rCS/strings.xml | 272 ++++++++++-----------
1 file changed, 136 insertions(+), 136 deletions(-)
diff --git a/app/src/main/res/values-sr-rCS/strings.xml b/app/src/main/res/values-sr-rCS/strings.xml
index f120335..3afe3ed 100644
--- a/app/src/main/res/values-sr-rCS/strings.xml
+++ b/app/src/main/res/values-sr-rCS/strings.xml
@@ -1,147 +1,147 @@
- An open source app to choose randomly between numbers, answers, options and so on. Let the randomness talk!
- Roulette
- Coin
- Dice
- Magic Ball
- Settings
- The result is:
+ Aplikacija otvorenog izvora kojom nasumično možete odabrati između brojeva, odgovora, izbora itd. Dozvolite nasumičnosti da priča!
+ Rulet
+ Novčić
+ Kocke
+ Magična Kugla
+ Podešavanja
+ Rezultat je:
- Roulette mode
- Do you have to choose something? Are you tired of polls and bossy friends? A roulette will decide for you! Long press the roulette to Add generic options or clear them.
- Spin the roulette!
- Enter an option…
- Delete the last option entered
- Please list below the possible choices to add in the roulette.
- Please, enter 2 or more options to spin the roulette!
- You can\'t enter more than 30 options!
- Option
- Recent options, tap to restore
- No recent option, spin the roulette to save the current options!
- A-Z Letters
- Range
- The range is wrong or empty, please enter both the values correctly!
- Are you sure you want to delete all the entered options?
+ Rulet mod
+ Morate li izabrati nešto? Jesu li vam dosadile ankete i zapojedničavi prijatelji? Ruleta će za vas odlučiti! Držite dugo prst na ruleti da dodate opšte postavke ili da ih rasčistite.
+ Okrenite ruletu!
+ Unesite postavku…
+ Izbrišite zadnje-unešenu postavku
+ Molim vas da navedete ispod moguće izbore da dodate u ruletu.
+ Molim vas, unesite dvoje ili više postavkih da okrenete ruletu!
+ Ne možete uneti više od 30 postavkih!
+ Postavka
+ Skorašnje postavke, tapnite da obnovite
+ Nema skorašnjih postavkih, okrenite ruletu da spasite trenutačne postavke!
+ A-Z Slova
+ Opseg
+ Opseg je pogrešan ili prazan, molimo vas da unesete oboje vrednosti ispravno!
+ Jeste li sigurni da želite izbrisati sve unesene postavke?
- Coin mode
- Flipping a coin is easy, but can help you decide between doing something or not. Just heads or tails. Let the coin talk!
- Flip the coin!
- Press the button below!
- Heads!
- Tails!
+ Novčićni mod
+ Bacanje novčića je jednostavno, ali vam može pomoći da odlučite hoćete li ili nećete nešto učiniti. Samo glava ili pismo. Neka novčić priča!
+ Bacite novčić!
+ Pritisnite dugme ispod!
+ Glava!
+ Pismo!
- Magic Ball
- The magic ball will tell you the answers! Just ask something, and it will help you with a generic and affordable answer. You can activate its rudeness from settings!
- Shake it!
- Press the button below!
- No.
- Yes!
- I don\'t think so.
- Maybe!
- This makes no sense.
- Probably…
- Are you sure?
- Probably yes.
- Probably no.
- Of course.
- Ask it yourself.
- No, absurd.
- Hell yeah!
- Think about it.
- Who knows.
- Are you kidding?
- As I see it, yes.
- It is certain.
- It is decidedly so.
- Outlook good.
- Signs point to yes.
- Without a doubt.
- Reply hazy, try again.
- Better not tell you now.
- Cannot predict now!
- Concentrate and ask again.
- Don\'t count on it.
- My sources say no.
- Very doubtful.
- Ask your best friend.
- No, idiot.
- Of course, dammit.
- Are you stupid?
- Lol! How stupid.
- You\'re crazy.
- Go to hell.
+ Magična Kugla
+ Magična kugla će vam na sve odgovoriti! Samo pitajte nešto, i pomoći će vam sa opštim i pristupačnim odgovorom. Možete i uključiti njenu grubost u podešavanjima!
+ Protresite ju!
+ Pritisnite dugme ispod!
+ Ne.
+ Da!
+ Mislim da nije.
+ Možda!
+ Ovo nema nikako smisla.
+ Verovatno…
+ Da li ste sigurni?
+ Verovatno da.
+ Verovatno ne.
+ Naravno.
+ Zapitajte se sami.
+ Ne, apsurdno.
+ Dođavola da!
+ Razmisli o tome.
+ Ko zna.
+ Jel se šališ?
+ Zakoliko vidim, da.
+ Sigurno i jest.
+ Odlučno i jest.
+ Izgleda dobro.
+ Znakovi upućuju na prema da.
+ Bez sumnje.
+ Odgovor je mutan, probajte ponovo.
+ Bolje da ti sad ne kažem.
+ Ne može se sad predviditi!
+ Usredsredi se i pitaj ponovo.
+ Ne računaj na to.
+ Moji izvori kažu ne.
+ Vrlo neizvesno.
+ Pitaj najboljeg prijatelja.
+ Ne, budalo.
+ Naravno, dovraga.
+ Jesi glup?
+ Lol! Kako tupavo.
+ Poludio si.
+ Idi u pakao.
- Dice mode
- Dice can be useful, in a table game for example! The app will throw one to ten dice for you. Select the number from settings. Good luck!
- Throw the dice!
- Press the button below!
+ Mod za kocke
+ Kocke mogu biti korisne, na stolnoj igri naprimer! Aplikacija će jednu do deset kockih za vas baciti. Odaberite količinu u podešavanjima. Sretno!
+ Bacite kocke!
+ Pritisnite dugme ispod!
- Settings
- I\'m a polite guy, and I like beautiful things like animations, icons, sports cars and 3D printing. I work as a designer and computer engineer.
- Nice logo, huh? ;D
- Customization
- Vibration
- Vibrate when a button is pressed
- No vibrations when a button is pressed
- Sounds
- Play a sound when a button is pressed
- No sound when a button is pressed
- Dice number
- Change the number of dice thrown. Currently %s
- One
- Two
- Three
- Four
- Five
- Six
- Seven
- Eight
- Nine
- Ten
- Change the default accent color. Currently %s
- Accent color
- Use a dark, light or automatic app theme. Currently %s
- App theme
- Blue
- Aqua
- Green
- Orange
- Yellow
- Teal
- Violet
- Pink
- Light blue
- Red
- Lime
- Crimson
- System default
- Dark
- Light
- App behavior
- Rude answers
- Rude answers activated, idiot
- Just kind and polite answers
- Hide descriptions
- Descriptions hidden
- Descriptions visible
- Allow equal options
- Equal options in roulette allowed
- Equal options in roulette not allowed
- Remove last chosen
- Remove the last chosen option in the roulette automatically
- Don\'t remove the last chosen option in the roulette automatically
- Shake to launch
- Shaking the device will act like the center button
- Shaking the device won\'t have any effect
+ Podešavanja
+ Ja sam pristojan čovek, i volim lepe stvari ko crtiće, ikone, sportska auta i 3D printanje. Radim ko dizajner i računarski inženjer.
+ Lepa oznaka, zar nije? ;D
+ Prilagođavanje
+ Vibracija
+ Nek mobitel zuji pri pritisku dugmadi
+ Nek mobitel ne zuji pri pritisku dugmadi
+ Zvukovi
+ Nek mobitel pokrene zvuk pri pritisku dugmadi
+ Nek mobitel ne pokrene zvuk pri pritisku dugmadi
+ Količina kockih
+ Promenite količinu kockih bačenih, Trenutno ih je %s
+ Jedna
+ Dve
+ Tri
+ Četiri
+ Pet
+ Šest
+ Sedam
+ Osam
+ Devet
+ Deset
+ Promenite zadanu boju akcenta. Trenutno je %s
+ Boja akcenta
+ Koristite mračnu, svetlu ili automatsku temu aplikacije. Trenutno je %s
+ Tema aplikacije
+ Plava
+ Akva
+ Zelena
+ Narandžasta
+ Žuta
+ Plavozelena
+ Ljubičasta
+ Ružičasta
+ Svetloplava
+ Crvena
+ Limeta
+ Tamnocrvena
+ Sistemski podrazumevana
+ Mračna
+ Svetla
+ Ponašanje aplikacije
+ Grubi odgovori
+ Grubi odgovori su uključeni, budalo
+ Samo ljubazni i učitivi odgovori
+ Sakrij opise
+ Opisi su sakriveni
+ Opisi se mogu videti
+ Dozvolite jednake postavke
+ Jednake postavke su dozvoljene u ruleti
+ Jednake postavke nisu dozvoljene u ruleti
+ Uklonite zadnje odabrano
+ Automatski uklonite zadnje odabranu postavku u ruleti
+ Nemojte automatski ukloniti zadnje odabranu postavku u ruleti
+ Potresite da pokrenete
+ Tresanje uređaja će delovati kao srednje dugme
+ Tresanje uređaja neće imati ikakav efekat
- Review!
- I\'m lazy
- Nah
+ Recenzija!
+ Len sam
+ Ne
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n
- \nOK, now that I have your attention, may I ask you to leave a good review to help Randomix grow a bit? I\'d really appreciate it! Have a great day! :D
- I\'ve something to tell you
- Never ask again
- Translate the app
+ \nDobro, sad kad sam uhvatio vašu pažnju, mogu li vas zamoliti da mi dadnete dobru recenziju da pomognete Randomix-u da malo izraste? Bio bih veoma zahvalan! Nek vam je ugodan dan! :D
+ Moram ti nešto reći
+ Nikad me to više ne pitaj
+ Prevedite aplikaciju
From 88d08ec8eee3ddbf634ca959a3f550ebbbba4493 Mon Sep 17 00:00:00 2001
From: minar
Date: Sat, 28 Jan 2023 18:28:50 +0100
Subject: [PATCH 14/44] Magic ball bottom sheet (WIP)
---
app/build.gradle | 2 +-
.../fragments/MagicBallBottomSheet.java | 180 ++++++++++++++++++
.../randomix/fragments/MagicBallFragment.java | 111 +++++++----
.../randomix/fragments/RouletteFragment.java | 2 +-
.../main/res/layout/fragment_magic_ball.xml | 13 ++
app/src/main/res/layout/fragment_roulette.xml | 10 +-
.../res/layout/magic_ball_bottom_sheet.xml | 152 +++++++++++++++
.../main/res/layout/roulette_bottom_sheet.xml | 2 +-
app/src/main/res/values/strings.xml | 4 +
9 files changed, 428 insertions(+), 48 deletions(-)
create mode 100644 app/src/main/java/com/minar/randomix/fragments/MagicBallBottomSheet.java
create mode 100644 app/src/main/res/layout/magic_ball_bottom_sheet.xml
diff --git a/app/build.gradle b/app/build.gradle
index 0cb437d..4b480c8 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -29,7 +29,7 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation 'com.google.android.material:material:1.8.0-rc01'
+ implementation 'com.google.android.material:material:1.9.0-alpha01'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation "androidx.navigation:navigation-fragment:2.5.3"
implementation "androidx.navigation:navigation-ui:2.5.3"
diff --git a/app/src/main/java/com/minar/randomix/fragments/MagicBallBottomSheet.java b/app/src/main/java/com/minar/randomix/fragments/MagicBallBottomSheet.java
new file mode 100644
index 0000000..a0e9936
--- /dev/null
+++ b/app/src/main/java/com/minar/randomix/fragments/MagicBallBottomSheet.java
@@ -0,0 +1,180 @@
+package com.minar.randomix.fragments;
+
+import android.content.DialogInterface;
+import android.content.SharedPreferences;
+import android.graphics.drawable.Animatable2;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.animation.Animation;
+import android.view.animation.AnimationUtils;
+import android.view.inputmethod.EditorInfo;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.widget.SwitchCompat;
+
+import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
+import com.google.android.material.chip.Chip;
+import com.google.android.material.chip.ChipGroup;
+import com.google.android.material.textfield.TextInputLayout;
+import com.minar.randomix.R;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+public class MagicBallBottomSheet extends BottomSheetDialogFragment {
+ private final MagicBallFragment magicBall;
+ private SharedPreferences sp;
+ private EditText answerText;
+ private final List loadedAnswers = new ArrayList<>();
+ private ChipGroup answerChips;
+ private TextView placeholder;
+ private SwitchCompat customAnswersSwitch;
+
+ MagicBallBottomSheet(MagicBallFragment magicBall) {
+ this.magicBall = magicBall;
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ // Inflate the bottom sheet, initialize the shared preferences and the recent options list
+ View v = inflater.inflate(R.layout.magic_ball_bottom_sheet, container, false);
+ sp = PreferenceManager.getDefaultSharedPreferences(getContext());
+ boolean customActive = sp.getBoolean("custom_answers_active", false);
+ String customAnswers = sp.getString("custom_answers", "");
+ Collections.addAll(loadedAnswers, customAnswers.split(";"));
+ loadedAnswers.remove("");
+ placeholder = v.findViewById(R.id.customAnswersEmptyPlaceholder);
+
+ // Animate the drawable in loop
+ ImageView noRecentImage = v.findViewById(R.id.recentImage);
+ Drawable animatedNoRecent = noRecentImage.getDrawable();
+ if (animatedNoRecent instanceof Animatable2) {
+ ((Animatable2) animatedNoRecent).registerAnimationCallback(new Animatable2.AnimationCallback() {
+ @Override
+ public void onAnimationEnd(Drawable drawable) {
+ ((Animatable2) animatedNoRecent).start();
+ }
+ });
+ ((Animatable2) animatedNoRecent).start();
+ }
+
+ // Manage the text field
+ answerChips = v.findViewById(R.id.customAnswerChipGroup);
+ answerText = v.findViewById(R.id.customAnswerText);
+ TextInputLayout answerTextLayout = v.findViewById(R.id.customAnswerTextLayout);
+ answerText.setOnEditorActionListener(((v1, actionId, event) -> {
+ if (actionId == EditorInfo.IME_ACTION_DONE || actionId == EditorInfo.IME_ACTION_GO || actionId == EditorInfo.IME_ACTION_SEND) {
+ // Insert in both the list and the layout
+ insertAnswerChip("");
+ return true;
+ }
+ return false;
+ }));
+
+ // Manage placeholder and chips
+ managePlaceholder();
+ if (!loadedAnswers.isEmpty())
+ for (String s : loadedAnswers.toArray(new String[0])) {
+ System.out.println("Inserting: " + s);
+ insertAnswerChip(s);
+ }
+
+ // Manage the switch
+ customAnswersSwitch = v.findViewById(R.id.customAnswerSwitch);
+ if (!customActive || loadedAnswers.size() < 3)
+ customAnswersSwitch.setActivated(false);
+ else
+ customAnswersSwitch.setActivated(false);
+ customAnswersSwitch.setOnCheckedChangeListener((buttonView, checked) -> {
+ if (checked) {
+ magicBall.setCustomAnswers(loadedAnswers.toArray(new String[0]));
+ } else {
+ magicBall.setCustomAnswers(null);
+ }
+ });
+
+ return v;
+ }
+
+ // Insert the chip for a custom answer
+ private void insertAnswerChip(String answer) {
+ String currentAnswer;
+ if (!answer.equals("")) currentAnswer = answer;
+ else {
+ currentAnswer = answerText.getText().toString().trim();
+ currentAnswer = currentAnswer.replaceAll("\\s+", " ");
+ answerText.setText("");
+ }
+
+ // Check if the limit is reached
+ if (loadedAnswers.size() > 150) {
+ return;
+ }
+
+ // Add to the list
+ loadedAnswers.add(currentAnswer);
+ managePlaceholder();
+
+ // Inflate the layout and its onclick action
+ LayoutInflater inflater = LayoutInflater.from(getActivity());
+ final Chip chip = (Chip) inflater.inflate(R.layout.chip_roulette, answerChips, false);
+ chip.setText(currentAnswer);
+ chip.setId(loadedAnswers.size());
+
+ // Add the chip with an animation
+ answerChips.addView(chip);
+ Animation animation = AnimationUtils.loadAnimation(getContext(), R.anim.chip_enter_anim);
+ chip.startAnimation(animation);
+
+ // Remove the chip and the element from the list
+ chip.setOnClickListener(view -> removeChip(chip));
+ }
+
+ // Remove a single chip
+ private void removeChip(final Chip chip) {
+ // Remove the chip with an animation
+ if (chip == null) return;
+ loadedAnswers.remove(chip.getText().toString());
+ final Animation animation = AnimationUtils.loadAnimation(getContext(), R.anim.chip_exit_anim);
+ chip.startAnimation(animation);
+ managePlaceholder();
+ chip.postDelayed(() -> {
+ answerChips.removeView(chip);
+ magicBall.setCustomAnswers(loadedAnswers.toArray(new String[0]));
+ }, 400);
+ }
+
+ // Evaluate the visibility of the placeholder
+ private void managePlaceholder() {
+ if (loadedAnswers.size() == 0) {
+ answerChips.setVisibility(View.GONE);
+ placeholder.setVisibility(View.VISIBLE);
+ } else {
+ answerChips.setVisibility(View.VISIBLE);
+ placeholder.setVisibility(View.GONE);
+ }
+ }
+
+ @Override
+ public void onDismiss(@NonNull DialogInterface dialog) {
+ SharedPreferences.Editor editor = sp.edit();
+ editor.putBoolean("custom_answers_active", customAnswersSwitch.isChecked());
+ StringBuilder answersString = new StringBuilder();
+ for (String s : loadedAnswers) {
+ answersString.append(s).append(";");
+ }
+ editor.putString("custom_answers", answersString.toString());
+ editor.apply();
+ super.onDismiss(dialog);
+ }
+}
diff --git a/app/src/main/java/com/minar/randomix/fragments/MagicBallFragment.java b/app/src/main/java/com/minar/randomix/fragments/MagicBallFragment.java
index be74a96..1000de9 100644
--- a/app/src/main/java/com/minar/randomix/fragments/MagicBallFragment.java
+++ b/app/src/main/java/com/minar/randomix/fragments/MagicBallFragment.java
@@ -1,5 +1,6 @@
package com.minar.randomix.fragments;
+import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.drawable.Animatable;
@@ -29,7 +30,9 @@ public class MagicBallFragment extends androidx.fragment.app.Fragment implements
private boolean shakeEnabled = false;
private SensorManager sensorManager;
private ShakeEventListener sensorListener;
- private final String[] magicAnswers = new String[36];
+ private String[] magicAnswers = new String[36];
+ private final MagicBallBottomSheet bottomSheet = new MagicBallBottomSheet(this);
+ private String[] customAnswers = null;
@Override
public void onResume() {
@@ -59,7 +62,10 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
v.findViewById(R.id.descriptionMagicBall).setVisibility(View.GONE);
ImageView shake = v.findViewById(R.id.magicBallButtonAnimation);
+ ImageView recentAnimation = v.findViewById(R.id.magicBallRecentButton);
+
shake.setOnClickListener(this);
+ recentAnimation.setOnClickListener(this);
// Manage the shake to launch option and bind the activity
act = (MainActivity) getActivity();
@@ -76,11 +82,33 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
@Override
public void onClick(View v) {
- if (v.getId() == R.id.magicBallButtonAnimation) {
+ Activity act = getActivity();
+ final View view = requireView();
+ int pressedId = v.getId();
+ ImageView recentAnimation = view.findViewById(R.id.magicBallRecentButton);
+
+ if (pressedId == R.id.magicBallRecentButton) {
+ // Start the animated vector drawable
+ Drawable recent = recentAnimation.getDrawable();
+ if (recent instanceof Animatable) ((Animatable) recent).start();
+ // Vibrate using the common method in MainActivity
+ if (act instanceof MainActivity) ((MainActivity) act).vibrate();
+
+ // Open a dialog with the recent answers sets
+ if (bottomSheet.isAdded()) return;
+ bottomSheet.show(getChildFragmentManager(), "magic_ball_bottom_sheet");
+ return;
+ }
+ if (pressedId == R.id.magicBallButtonAnimation) {
mainThrow();
}
}
+ // Used from the bottom sheet to set a custom set of answers
+ public void setCustomAnswers(String[] answers) {
+ this.customAnswers = answers;
+ }
+
private void mainThrow() {
// Start the animated vector drawable, make the button un-clickable during the execution
final ImageView magicBallAnimation = requireView().findViewById(R.id.magicBallButtonAnimation);
@@ -99,44 +127,47 @@ private void mainThrow() {
}
// Initialize the answers array
- magicAnswers[0] = getString(R.string.magic_answer_1);
- magicAnswers[1] = getString(R.string.magic_answer_2);
- magicAnswers[2] = getString(R.string.magic_answer_3);
- magicAnswers[3] = getString(R.string.magic_answer_4);
- magicAnswers[4] = getString(R.string.magic_answer_5);
- magicAnswers[5] = getString(R.string.magic_answer_6);
- magicAnswers[6] = getString(R.string.magic_answer_7);
- magicAnswers[7] = getString(R.string.magic_answer_8);
- magicAnswers[8] = getString(R.string.magic_answer_9);
- magicAnswers[9] = getString(R.string.magic_answer_10);
- magicAnswers[10] = getString(R.string.magic_answer_11);
- magicAnswers[11] = getString(R.string.magic_answer_12);
- magicAnswers[12] = getString(R.string.magic_answer_13);
- magicAnswers[13] = getString(R.string.magic_answer_14);
- magicAnswers[14] = getString(R.string.magic_answer_15);
- magicAnswers[15] = getString(R.string.magic_answer_16);
- magicAnswers[16] = getString(R.string.magic_answer_17);
- magicAnswers[17] = getString(R.string.magic_answer_18);
- magicAnswers[18] = getString(R.string.magic_answer_19);
- magicAnswers[19] = getString(R.string.magic_answer_20);
- magicAnswers[20] = getString(R.string.magic_answer_21);
- magicAnswers[21] = getString(R.string.magic_answer_22);
- magicAnswers[22] = getString(R.string.magic_answer_23);
- magicAnswers[23] = getString(R.string.magic_answer_24);
- magicAnswers[24] = getString(R.string.magic_answer_25);
- magicAnswers[25] = getString(R.string.magic_answer_26);
- magicAnswers[26] = getString(R.string.magic_answer_27);
- magicAnswers[27] = getString(R.string.magic_answer_28);
- magicAnswers[28] = getString(R.string.magic_answer_29);
- magicAnswers[29] = getString(R.string.magic_answer_30);
-
- // Rude answers
- magicAnswers[30] = getString(R.string.magic_answer_rude_1);
- magicAnswers[31] = getString(R.string.magic_answer_rude_2);
- magicAnswers[32] = getString(R.string.magic_answer_rude_3);
- magicAnswers[33] = getString(R.string.magic_answer_rude_4);
- magicAnswers[34] = getString(R.string.magic_answer_rude_5);
- magicAnswers[35] = getString(R.string.magic_answer_rude_6);
+ if (customAnswers != null) magicAnswers = customAnswers;
+ else {
+ magicAnswers[0] = getString(R.string.magic_answer_1);
+ magicAnswers[1] = getString(R.string.magic_answer_2);
+ magicAnswers[2] = getString(R.string.magic_answer_3);
+ magicAnswers[3] = getString(R.string.magic_answer_4);
+ magicAnswers[4] = getString(R.string.magic_answer_5);
+ magicAnswers[5] = getString(R.string.magic_answer_6);
+ magicAnswers[6] = getString(R.string.magic_answer_7);
+ magicAnswers[7] = getString(R.string.magic_answer_8);
+ magicAnswers[8] = getString(R.string.magic_answer_9);
+ magicAnswers[9] = getString(R.string.magic_answer_10);
+ magicAnswers[10] = getString(R.string.magic_answer_11);
+ magicAnswers[11] = getString(R.string.magic_answer_12);
+ magicAnswers[12] = getString(R.string.magic_answer_13);
+ magicAnswers[13] = getString(R.string.magic_answer_14);
+ magicAnswers[14] = getString(R.string.magic_answer_15);
+ magicAnswers[15] = getString(R.string.magic_answer_16);
+ magicAnswers[16] = getString(R.string.magic_answer_17);
+ magicAnswers[17] = getString(R.string.magic_answer_18);
+ magicAnswers[18] = getString(R.string.magic_answer_19);
+ magicAnswers[19] = getString(R.string.magic_answer_20);
+ magicAnswers[20] = getString(R.string.magic_answer_21);
+ magicAnswers[21] = getString(R.string.magic_answer_22);
+ magicAnswers[22] = getString(R.string.magic_answer_23);
+ magicAnswers[23] = getString(R.string.magic_answer_24);
+ magicAnswers[24] = getString(R.string.magic_answer_25);
+ magicAnswers[25] = getString(R.string.magic_answer_26);
+ magicAnswers[26] = getString(R.string.magic_answer_27);
+ magicAnswers[27] = getString(R.string.magic_answer_28);
+ magicAnswers[28] = getString(R.string.magic_answer_29);
+ magicAnswers[29] = getString(R.string.magic_answer_30);
+
+ // Rude answers
+ magicAnswers[30] = getString(R.string.magic_answer_rude_1);
+ magicAnswers[31] = getString(R.string.magic_answer_rude_2);
+ magicAnswers[32] = getString(R.string.magic_answer_rude_3);
+ magicAnswers[33] = getString(R.string.magic_answer_rude_4);
+ magicAnswers[34] = getString(R.string.magic_answer_rude_5);
+ magicAnswers[35] = getString(R.string.magic_answer_rude_6);
+ }
// Choose a random number between 0 and the answer number
Random ran = new Random();
diff --git a/app/src/main/java/com/minar/randomix/fragments/RouletteFragment.java b/app/src/main/java/com/minar/randomix/fragments/RouletteFragment.java
index 1eaf7d5..0fc87fb 100644
--- a/app/src/main/java/com/minar/randomix/fragments/RouletteFragment.java
+++ b/app/src/main/java/com/minar/randomix/fragments/RouletteFragment.java
@@ -203,7 +203,7 @@ public void onClick(View v) {
// Start the animated vector drawable
Drawable recent = recentAnimation.getDrawable();
if (recent instanceof Animatable) ((Animatable) recent).start();
- // Vibrate and play sound using the common method in MainActivity
+ // Vibrate using the common method in MainActivity
if (act instanceof MainActivity) ((MainActivity) act).vibrate();
// Open a dialog with the recent searches
diff --git a/app/src/main/res/layout/fragment_magic_ball.xml b/app/src/main/res/layout/fragment_magic_ball.xml
index aeae4cd..4119a4d 100644
--- a/app/src/main/res/layout/fragment_magic_ball.xml
+++ b/app/src/main/res/layout/fragment_magic_ball.xml
@@ -60,6 +60,19 @@
android:focusable="true"
android:src="@drawable/magic_ball_vector_animation" />
+
+
diff --git a/app/src/main/res/layout/fragment_roulette.xml b/app/src/main/res/layout/fragment_roulette.xml
index 343a655..fa0927d 100644
--- a/app/src/main/res/layout/fragment_roulette.xml
+++ b/app/src/main/res/layout/fragment_roulette.xml
@@ -47,7 +47,7 @@
android:layout_weight="0.12"
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
- android:contentDescription="@string/delete_roulette_hint"
+ android:contentDescription="@string/recent_title"
android:focusable="true"
android:hapticFeedbackEnabled="false"
android:src="@drawable/recent_vector_animation" />
@@ -60,10 +60,10 @@
android:layout_weight="0.8"
android:hint="@string/insert_roulette_hint"
app:boxBackgroundColor="?android:statusBarColor"
- app:boxCornerRadiusBottomEnd="10dp"
- app:boxCornerRadiusBottomStart="10dp"
- app:boxCornerRadiusTopEnd="10dp"
- app:boxCornerRadiusTopStart="10dp"
+ app:boxCornerRadiusBottomEnd="@dimen/dialog_corners"
+ app:boxCornerRadiusBottomStart="@dimen/dialog_corners"
+ app:boxCornerRadiusTopEnd="@dimen/dialog_corners"
+ app:boxCornerRadiusTopStart="@dimen/dialog_corners"
app:boxStrokeWidth="@dimen/text_box_stroke_width"
app:boxStrokeWidthFocused="@dimen/text_box_focused_stroke_width"
app:endIconMode="clear_text"
diff --git a/app/src/main/res/layout/magic_ball_bottom_sheet.xml b/app/src/main/res/layout/magic_ball_bottom_sheet.xml
new file mode 100644
index 0000000..33641b2
--- /dev/null
+++ b/app/src/main/res/layout/magic_ball_bottom_sheet.xml
@@ -0,0 +1,152 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/roulette_bottom_sheet.xml b/app/src/main/res/layout/roulette_bottom_sheet.xml
index 98c3af5..0787ded 100644
--- a/app/src/main/res/layout/roulette_bottom_sheet.xml
+++ b/app/src/main/res/layout/roulette_bottom_sheet.xml
@@ -56,7 +56,7 @@
android:paddingStart="@dimen/side_drawable_margin"
android:paddingEnd="@dimen/activity_horizontal_margin"
android:text="@string/recent_title"
- android:textAppearance="@style/TextAppearance.Material3.BodyLarge"
+ android:textAppearance="@style/TextAppearance.Material3.HeadlineSmall"
android:textColor="?attr/colorPrimary"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/recentImage"
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index d6233f8..e8777aa 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -82,6 +82,10 @@
Lol! How stupid.
You\'re crazy.
Go to hell.
+ No custom answers. Add one from the above text field. You can delete them by tapping on them.
+ Custom answers
+ Use custom answers
+ Insert an answer…
Dice mode
From ebece2b9dda4deeb10a0dbdf306fbbe15b58fcec Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 15:34:01 +0100
Subject: [PATCH 15/44] Magic ball bottom sheet done
---
.../fragments/MagicBallBottomSheet.java | 55 ++++++++------
.../randomix/fragments/MagicBallFragment.java | 18 +++--
app/src/main/res/drawable/animated_edit.xml | 71 +++++++++++++++++++
.../main/res/layout/fragment_magic_ball.xml | 2 +-
.../res/layout/magic_ball_bottom_sheet.xml | 6 +-
5 files changed, 122 insertions(+), 30 deletions(-)
create mode 100644 app/src/main/res/drawable/animated_edit.xml
diff --git a/app/src/main/java/com/minar/randomix/fragments/MagicBallBottomSheet.java b/app/src/main/java/com/minar/randomix/fragments/MagicBallBottomSheet.java
index a0e9936..cd15187 100644
--- a/app/src/main/java/com/minar/randomix/fragments/MagicBallBottomSheet.java
+++ b/app/src/main/java/com/minar/randomix/fragments/MagicBallBottomSheet.java
@@ -51,8 +51,9 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
sp = PreferenceManager.getDefaultSharedPreferences(getContext());
boolean customActive = sp.getBoolean("custom_answers_active", false);
String customAnswers = sp.getString("custom_answers", "");
+ loadedAnswers.clear();
Collections.addAll(loadedAnswers, customAnswers.split(";"));
- loadedAnswers.remove("");
+ loadedAnswers.remove(""); // Ensure no empty elements are saved
placeholder = v.findViewById(R.id.customAnswersEmptyPlaceholder);
// Animate the drawable in loop
@@ -72,6 +73,9 @@ public void onAnimationEnd(Drawable drawable) {
answerChips = v.findViewById(R.id.customAnswerChipGroup);
answerText = v.findViewById(R.id.customAnswerText);
TextInputLayout answerTextLayout = v.findViewById(R.id.customAnswerTextLayout);
+ answerTextLayout.setEndIconOnClickListener(v1 -> {
+ insertAnswerChip(""); // Empty answer = take it from the text field
+ });
answerText.setOnEditorActionListener(((v1, actionId, event) -> {
if (actionId == EditorInfo.IME_ACTION_DONE || actionId == EditorInfo.IME_ACTION_GO || actionId == EditorInfo.IME_ACTION_SEND) {
// Insert in both the list and the layout
@@ -81,20 +85,10 @@ public void onAnimationEnd(Drawable drawable) {
return false;
}));
- // Manage placeholder and chips
- managePlaceholder();
- if (!loadedAnswers.isEmpty())
- for (String s : loadedAnswers.toArray(new String[0])) {
- System.out.println("Inserting: " + s);
- insertAnswerChip(s);
- }
-
// Manage the switch
customAnswersSwitch = v.findViewById(R.id.customAnswerSwitch);
- if (!customActive || loadedAnswers.size() < 3)
- customAnswersSwitch.setActivated(false);
- else
- customAnswersSwitch.setActivated(false);
+ customAnswersSwitch.setChecked(customActive);
+ customAnswersSwitch.setEnabled(loadedAnswers.size() >= 3);
customAnswersSwitch.setOnCheckedChangeListener((buttonView, checked) -> {
if (checked) {
magicBall.setCustomAnswers(loadedAnswers.toArray(new String[0]));
@@ -103,13 +97,21 @@ public void onAnimationEnd(Drawable drawable) {
}
});
+ // Manage placeholder and chips
+ managePlaceholder();
+ if (!loadedAnswers.isEmpty()) {
+ for (String s : loadedAnswers) {
+ insertAnswerChip(s);
+ }
+ }
+
return v;
}
// Insert the chip for a custom answer
private void insertAnswerChip(String answer) {
String currentAnswer;
- if (!answer.equals("")) currentAnswer = answer;
+ if (!answer.isEmpty()) currentAnswer = answer;
else {
currentAnswer = answerText.getText().toString().trim();
currentAnswer = currentAnswer.replaceAll("\\s+", " ");
@@ -117,19 +119,22 @@ private void insertAnswerChip(String answer) {
}
// Check if the limit is reached
- if (loadedAnswers.size() > 150) {
+ if (loadedAnswers.size() > 50 || currentAnswer.isEmpty() || currentAnswer.equals(" ")) {
return;
}
- // Add to the list
- loadedAnswers.add(currentAnswer);
+ // Add to the list if the answer is not empty
+ if (answer.isEmpty()) {
+ loadedAnswers.add(currentAnswer);
+ }
+ if (loadedAnswers.size() > 2) customAnswersSwitch.setEnabled(true);
managePlaceholder();
// Inflate the layout and its onclick action
LayoutInflater inflater = LayoutInflater.from(getActivity());
final Chip chip = (Chip) inflater.inflate(R.layout.chip_roulette, answerChips, false);
chip.setText(currentAnswer);
- chip.setId(loadedAnswers.size());
+ chip.setId(loadedAnswers.size() + 100);
// Add the chip with an animation
answerChips.addView(chip);
@@ -145,13 +150,11 @@ private void removeChip(final Chip chip) {
// Remove the chip with an animation
if (chip == null) return;
loadedAnswers.remove(chip.getText().toString());
+ if (!(loadedAnswers.size() > 2)) customAnswersSwitch.setEnabled(false);
final Animation animation = AnimationUtils.loadAnimation(getContext(), R.anim.chip_exit_anim);
chip.startAnimation(animation);
managePlaceholder();
- chip.postDelayed(() -> {
- answerChips.removeView(chip);
- magicBall.setCustomAnswers(loadedAnswers.toArray(new String[0]));
- }, 400);
+ chip.postDelayed(() -> answerChips.removeView(chip), 400);
}
// Evaluate the visibility of the placeholder
@@ -171,9 +174,15 @@ public void onDismiss(@NonNull DialogInterface dialog) {
editor.putBoolean("custom_answers_active", customAnswersSwitch.isChecked());
StringBuilder answersString = new StringBuilder();
for (String s : loadedAnswers) {
- answersString.append(s).append(";");
+ String answer = s.replace(";", "");
+ answersString.append(answer).append(";");
}
editor.putString("custom_answers", answersString.toString());
+
+ // Set the custom answers to make sure they are updated
+ if (customAnswersSwitch.isChecked())
+ magicBall.setCustomAnswers(loadedAnswers.toArray(new String[0]));
+
editor.apply();
super.onDismiss(dialog);
}
diff --git a/app/src/main/java/com/minar/randomix/fragments/MagicBallFragment.java b/app/src/main/java/com/minar/randomix/fragments/MagicBallFragment.java
index 1000de9..df54ee4 100644
--- a/app/src/main/java/com/minar/randomix/fragments/MagicBallFragment.java
+++ b/app/src/main/java/com/minar/randomix/fragments/MagicBallFragment.java
@@ -22,6 +22,7 @@
import com.minar.randomix.activities.MainActivity;
import com.minar.randomix.utilities.ShakeEventListener;
+import java.util.Collections;
import java.util.Random;
public class MagicBallFragment extends androidx.fragment.app.Fragment implements OnClickListener {
@@ -30,7 +31,7 @@ public class MagicBallFragment extends androidx.fragment.app.Fragment implements
private boolean shakeEnabled = false;
private SensorManager sensorManager;
private ShakeEventListener sensorListener;
- private String[] magicAnswers = new String[36];
+ private String[] magicAnswers;
private final MagicBallBottomSheet bottomSheet = new MagicBallBottomSheet(this);
private String[] customAnswers = null;
@@ -119,6 +120,11 @@ private void mainThrow() {
((Animatable) drawable).start();
}
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext());
+ boolean customAnswersEnabled = sp.getBoolean("custom_answers_active", false);
+ if (customAnswersEnabled) {
+ String customAnswers = sp.getString("custom_answers", "");
+ if (!customAnswers.isEmpty()) this.customAnswers = customAnswers.split(";");
+ }
// Vibrate and play sound using the common method in MainActivity
if (act != null) {
@@ -129,6 +135,7 @@ private void mainThrow() {
// Initialize the answers array
if (customAnswers != null) magicAnswers = customAnswers;
else {
+ magicAnswers = new String[36];
magicAnswers[0] = getString(R.string.magic_answer_1);
magicAnswers[1] = getString(R.string.magic_answer_2);
magicAnswers[2] = getString(R.string.magic_answer_3);
@@ -172,9 +179,12 @@ private void mainThrow() {
// Choose a random number between 0 and the answer number
Random ran = new Random();
final int n;
- if (sp.getBoolean("rude_answers", true)) n = ran.nextInt(36);
- else n = ran.nextInt(30);
-
+ if (customAnswers != null && customAnswers.length > 2)
+ n = ran.nextInt(customAnswers.length);
+ else {
+ if (sp.getBoolean("rude_answers", true)) n = ran.nextInt(36);
+ else n = ran.nextInt(30);
+ }
// Get the text view and set its value depending on n
final TextView textViewResult = requireView().findViewById(R.id.resultMagicBall);
diff --git a/app/src/main/res/drawable/animated_edit.xml b/app/src/main/res/drawable/animated_edit.xml
new file mode 100644
index 0000000..763f18d
--- /dev/null
+++ b/app/src/main/res/drawable/animated_edit.xml
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_magic_ball.xml b/app/src/main/res/layout/fragment_magic_ball.xml
index 4119a4d..32bf80b 100644
--- a/app/src/main/res/layout/fragment_magic_ball.xml
+++ b/app/src/main/res/layout/fragment_magic_ball.xml
@@ -71,7 +71,7 @@
android:focusable="true"
android:hapticFeedbackEnabled="false"
android:padding="@dimen/activity_horizontal_margin"
- android:src="@drawable/recent_vector_animation" />
+ android:src="@drawable/animated_edit" />
diff --git a/app/src/main/res/layout/magic_ball_bottom_sheet.xml b/app/src/main/res/layout/magic_ball_bottom_sheet.xml
index 33641b2..d2a2ca3 100644
--- a/app/src/main/res/layout/magic_ball_bottom_sheet.xml
+++ b/app/src/main/res/layout/magic_ball_bottom_sheet.xml
@@ -15,7 +15,6 @@
android:id="@+id/magicBallBottomSheet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:animateLayoutChanges="true"
android:fitsSystemWindows="true"
android:paddingBottom="@dimen/linear_vertical_margin"
app:behavior_fitToContents="false"
@@ -102,12 +101,15 @@
Date: Mon, 30 Jan 2023 15:44:12 +0100
Subject: [PATCH 16/44] New translations strings.xml (Dutch)
---
app/src/main/res/values-nl/strings.xml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 9aaddbf..b617e7a 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -72,6 +72,10 @@
Lol! Wat dom.
Je bent gek.
Ga naar de hel.
+ No custom answers. Add one from the above text field. You can delete them by tapping on them.
+ Custom answers
+ Use custom answers
+ Insert an answer…
Dobbelsteen modus
Dobbelstenen kunnen handig zijn, in een tafelspel bijvoorbeeld! De app gooit één tot tien dobbelstenen voor je. Selecteer het aantal bij instellingen. Veel succes!
From f93442cd2e2329ff8b0203ade36655d3636036a1 Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 15:44:13 +0100
Subject: [PATCH 17/44] New translations strings.xml (Serbian (Cyrillic))
---
app/src/main/res/values-sr/strings.xml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml
index f3ffab1..c809e1c 100644
--- a/app/src/main/res/values-sr/strings.xml
+++ b/app/src/main/res/values-sr/strings.xml
@@ -72,6 +72,10 @@
Лол! Како тупаво.
Полудио си.
Иди у пакао.
+ No custom answers. Add one from the above text field. You can delete them by tapping on them.
+ Custom answers
+ Use custom answers
+ Insert an answer…
Мод за коцке
Коцке могу бити корисне, на столној игри например! Апликација ће једну до десет коцких за вас бацити. Одаберите количину у подешавањима. Сретно!
From 45bcc51a65c299db08948c29b065494e4d972a54 Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 15:44:14 +0100
Subject: [PATCH 18/44] New translations strings.xml (Croatian)
---
app/src/main/res/values-hr/strings.xml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml
index 3223a03..ff0f053 100644
--- a/app/src/main/res/values-hr/strings.xml
+++ b/app/src/main/res/values-hr/strings.xml
@@ -72,6 +72,10 @@
Lol! Kako glupo.
Poludio si.
Idi u pakao.
+ No custom answers. Add one from the above text field. You can delete them by tapping on them.
+ Custom answers
+ Use custom answers
+ Insert an answer…
Mod za kocke
Kocke mogu biti korisne, na stolnoj igri naprimjer! Aplikacija će jednu do deset kockih za vas baciti. Odaberite količinu u postavkama. Sretno!
From 2f2576dfd16bbc8feaa79e4d8ca36830d50dd539 Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 15:44:15 +0100
Subject: [PATCH 19/44] New translations strings.xml (English, United Kingdom)
---
app/src/main/res/values-en-rGB/strings.xml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/res/values-en-rGB/strings.xml b/app/src/main/res/values-en-rGB/strings.xml
index 0f326a2..f8669e0 100644
--- a/app/src/main/res/values-en-rGB/strings.xml
+++ b/app/src/main/res/values-en-rGB/strings.xml
@@ -72,6 +72,10 @@
Lol! How stupid.
You\'re crazy.
Go to hell.
+ No custom answers. Add one from the above text field. You can delete them by tapping on them.
+ Custom answers
+ Use custom answers
+ Insert an answer…
Dice mode
Dice can be useful, in a table game for example! The app will throw one to ten dice for you. Select the number from settings. Good luck!
From 5260f54e6ad87ea5d1015d7aefbbab0e28600c7a Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 15:44:16 +0100
Subject: [PATCH 20/44] New translations strings.xml (Bosnian)
---
app/src/main/res/values-bs/strings.xml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/res/values-bs/strings.xml b/app/src/main/res/values-bs/strings.xml
index e9763fa..41183c0 100644
--- a/app/src/main/res/values-bs/strings.xml
+++ b/app/src/main/res/values-bs/strings.xml
@@ -72,6 +72,10 @@
Lol! Kako tupavo.
Poludio si.
Idi u pakao.
+ No custom answers. Add one from the above text field. You can delete them by tapping on them.
+ Custom answers
+ Use custom answers
+ Insert an answer…
Mod za kocke
Kocke mogu biti korisne, na stolnoj igri naprimjer! Aplikacija će jednu do deset kockih za vas baciti. Odaberite količinu u podešavanjima. Sretno!
From 97dd54abe7b9fe3a0f99eb825d3b93dd649c362f Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 15:44:17 +0100
Subject: [PATCH 21/44] New translations strings.xml (Serbian (Latin))
---
app/src/main/res/values-sr-rCS/strings.xml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/res/values-sr-rCS/strings.xml b/app/src/main/res/values-sr-rCS/strings.xml
index 3afe3ed..7062313 100644
--- a/app/src/main/res/values-sr-rCS/strings.xml
+++ b/app/src/main/res/values-sr-rCS/strings.xml
@@ -72,6 +72,10 @@
Lol! Kako tupavo.
Poludio si.
Idi u pakao.
+ No custom answers. Add one from the above text field. You can delete them by tapping on them.
+ Custom answers
+ Use custom answers
+ Insert an answer…
Mod za kocke
Kocke mogu biti korisne, na stolnoj igri naprimer! Aplikacija će jednu do deset kockih za vas baciti. Odaberite količinu u podešavanjima. Sretno!
From 467bdadb82a9a47a58f2a9d55aca6e266adf3bf0 Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 15:44:18 +0100
Subject: [PATCH 22/44] New translations strings.xml (French)
---
app/src/main/res/values-fr/strings.xml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index e4366d3..6bf23f3 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -72,6 +72,10 @@
Lol! Qu\'est que tu es bête.
T\'es fou!
Va en enfer.
+ No custom answers. Add one from the above text field. You can delete them by tapping on them.
+ Custom answers
+ Use custom answers
+ Insert an answer…
Dé
Un dé peut être pratique, pour un jeu de plateau par exemple ! Cette appli peut lancer entre 1 et 10 dés
From 5cde21ed24eb431ba471847fcb82edaa17688b6e Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 15:44:19 +0100
Subject: [PATCH 23/44] New translations strings.xml (Spanish)
---
app/src/main/res/values-es/strings.xml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index c69a33f..9a857df 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -72,6 +72,10 @@
¡Jajaja! Que estúpido.
Estas loco/a.
Vete al diablo.
+ No custom answers. Add one from the above text field. You can delete them by tapping on them.
+ Custom answers
+ Use custom answers
+ Insert an answer…
Modo dado
¡Un dado podría ser útil, en un juego de mesa, por ejemplo! La aplicación arrojará de uno a diez dados por ti. Seleccione el número de la configuración. ¡Buena suerte!
From 18a1198c3371e5352ed4657a08a2fd53542dbc3f Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 15:44:20 +0100
Subject: [PATCH 24/44] New translations strings.xml (Czech)
---
app/src/main/res/values-cs/strings.xml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 5910482..2d6ccd3 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -72,6 +72,10 @@
Cha! Jak hloupé.
Jsi blázen.
Jdi do háje.
+ No custom answers. Add one from the above text field. You can delete them by tapping on them.
+ Custom answers
+ Use custom answers
+ Insert an answer…
Režim kostky
Kostky se mohou hodit, například ve stolních hrách! Aplikace za vás hodí jednu až deseti kostky. Počet si vyberte v nastavení. Hodně štěstí!
From dc03c8687476ac922bd80b5ac06169eab15fdcde Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 15:44:21 +0100
Subject: [PATCH 25/44] New translations strings.xml (German)
---
app/src/main/res/values-de/strings.xml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 0d86356..ca35d0a 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -72,6 +72,10 @@
Lol! Wie dumm.
Du bist verrückt.
Fahr zur Hölle.
+ No custom answers. Add one from the above text field. You can delete them by tapping on them.
+ Custom answers
+ Use custom answers
+ Insert an answer…
Würfel Modus
Würfel können nützlich sein, bei einem Gesellschaftsspiel zum Beispiel! Die App wirft einen bis zehn Würfel für dich. Wähle die Anzahl in den Einstellungen aus. Viel Glück!
From 5ca61e1f10be428de89a3825627bff95fd06e758 Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 15:44:21 +0100
Subject: [PATCH 26/44] New translations strings.xml (Italian)
---
app/src/main/res/values-it/strings.xml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 6e94770..6c8a205 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -72,6 +72,10 @@
Lol! Che idiozia.
Tu sei pazzo/a.
Va all\'inferno.
+ No custom answers. Add one from the above text field. You can delete them by tapping on them.
+ Custom answers
+ Use custom answers
+ Insert an answer…
Modalità dado
Un dado può essere utile, ad esempio in un gioco da tavola! L\'app ne lancerà da uno a dieci per te. Seleziona il numero dalle impostazioni. Buona fortuna!
From f20c7a1b40961d7dd8324d26c8eac1f2ad5ef58f Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 15:44:22 +0100
Subject: [PATCH 27/44] New translations strings.xml (Portuguese)
---
app/src/main/res/values-pt/strings.xml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 727bf11..9ec6aad 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -72,6 +72,10 @@
Lol! Quanta estupidez em uma pergunta.
Você é louco.
Vá para o inferno.
+ No custom answers. Add one from the above text field. You can delete them by tapping on them.
+ Custom answers
+ Use custom answers
+ Insert an answer…
Modo dado
Os dados podem ser úteis, em um jogo de mesa, por exemplo! O aplicativo lançará de um a dez dados para você. Selecione o número nas configurações. Boa sorte!
From 5fd322b308713ccf8b7aa9a6c4681d06aed90e82 Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 15:44:23 +0100
Subject: [PATCH 28/44] New translations strings.xml (Russian)
---
app/src/main/res/values-ru/strings.xml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 43e511e..000b05a 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -72,6 +72,10 @@
Как глупо.
Ты сумасшедший.
Иди к чёрту.
+ No custom answers. Add one from the above text field. You can delete them by tapping on them.
+ Custom answers
+ Use custom answers
+ Insert an answer…
Кости
Кости могут быть полезны, например, в настольной игре! Приложение бросает за вас от одного до десяти кубиков. Количество можно выбрать в настройках. Удачи!
From 1010d93dc35c433597c319749c771d7c17f42a2c Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 15:44:24 +0100
Subject: [PATCH 29/44] New translations strings.xml (Chinese Simplified)
---
app/src/main/res/values-zh-rCN/strings.xml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index c4dd7fa..218da19 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -72,6 +72,10 @@
哈!真蠢。
你他妈疯了吧。
去死吧。
+ No custom answers. Add one from the above text field. You can delete them by tapping on them.
+ Custom answers
+ Use custom answers
+ Insert an answer…
骰子模式
骰子有时候会很有用,例如在桌面游戏中!这个应用程序会为你扔一到十个骰子,在设置中调整骰子的数量。祝你好运!
From b15474071fa198ed38862e620f57977218406835 Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 15:44:26 +0100
Subject: [PATCH 30/44] New translations strings.xml (Chinese Traditional)
---
app/src/main/res/values-zh-rTW/strings.xml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 139a575..d6d6a45 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -72,6 +72,10 @@
哈!真蠢。
你他媽瘋了吧。
去死吧。
+ No custom answers. Add one from the above text field. You can delete them by tapping on them.
+ Custom answers
+ Use custom answers
+ Insert an answer…
骰子模式
骰子在某些場合如在桌遊中很有用!這個程式可為你扔一到十個骰子,在設定中調整骰子的數量。祝你好運!
From 9531620faf9da700600dd05f7c79a3b5c9603dd7 Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 15:44:27 +0100
Subject: [PATCH 31/44] New translations strings.xml (Portuguese, Brazilian)
---
app/src/main/res/values-pt-rBR/strings.xml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 727bf11..9ec6aad 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -72,6 +72,10 @@
Lol! Quanta estupidez em uma pergunta.
Você é louco.
Vá para o inferno.
+ No custom answers. Add one from the above text field. You can delete them by tapping on them.
+ Custom answers
+ Use custom answers
+ Insert an answer…
Modo dado
Os dados podem ser úteis, em um jogo de mesa, por exemplo! O aplicativo lançará de um a dez dados para você. Selecione o número nas configurações. Boa sorte!
From e59704553fccabbedc57589e6335c8c6ace188f2 Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 15:44:28 +0100
Subject: [PATCH 32/44] New translations strings.xml (Indonesian)
---
app/src/main/res/values-id/strings.xml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml
index fb591b6..2189053 100644
--- a/app/src/main/res/values-id/strings.xml
+++ b/app/src/main/res/values-id/strings.xml
@@ -72,6 +72,10 @@
Wkwk! Bodoh sekali.
Anda gila.
Pergi sana ke neraka.
+ No custom answers. Add one from the above text field. You can delete them by tapping on them.
+ Custom answers
+ Use custom answers
+ Insert an answer…
Mode Dadu
Dadu bisa berguna, di permainan meja misalnya! Aplikasi ini akan melempar satu hingga sepuluh dadu untuk Anda. Pilih jumlah dadunya dari Pengaturan. Semoga berhasil!
From 33e759767212346cce9d2acab028dc82045c878c Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 15:44:29 +0100
Subject: [PATCH 33/44] New translations strings.xml (Asturian)
---
app/src/main/res/values-ast/strings.xml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/res/values-ast/strings.xml b/app/src/main/res/values-ast/strings.xml
index e569bd5..bb6f13b 100644
--- a/app/src/main/res/values-ast/strings.xml
+++ b/app/src/main/res/values-ast/strings.xml
@@ -73,6 +73,10 @@
¡Ḥaḥa! Vaya fatada.
Tas ensin cepiyar.
Vete al infiernu.
+ No custom answers. Add one from the above text field. You can delete them by tapping on them.
+ Custom answers
+ Use custom answers
+ Insert an answer…
Mou de dau
El dau pue ser útil, por exemplu, nun xuegu de mesa. L\'aplicación va tirar el númberu de daos qu\'esbilles nos axustes (de 1 a 10). ¡Bona suerte!
From 78d6fbcc4a2ab46388a85d43733ef0a79d7ed636 Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 16:05:05 +0100
Subject: [PATCH 34/44] Improvements and refactoring
---
.../fragments/MagicBallBottomSheet.java | 20 +++++++++++-----
.../randomix/fragments/MagicBallFragment.java | 3 +--
.../randomix/fragments/RouletteFragment.java | 2 +-
.../main/res/drawable/bottom_sheet_pill.xml | 2 +-
app/src/main/res/drawable/dialog_bg_monet.xml | 16 ++++++-------
.../{chip_roulette.xml => custom_chip.xml} | 4 +++-
app/src/main/res/layout/fragment_roulette.xml | 24 +++++++++----------
.../res/layout/magic_ball_bottom_sheet.xml | 11 +++++----
.../main/res/layout/roulette_bottom_sheet.xml | 4 ++--
app/src/main/res/values/dimens.xml | 2 +-
app/src/main/res/values/styles.xml | 8 +++----
11 files changed, 53 insertions(+), 43 deletions(-)
rename app/src/main/res/layout/{chip_roulette.xml => custom_chip.xml} (81%)
diff --git a/app/src/main/java/com/minar/randomix/fragments/MagicBallBottomSheet.java b/app/src/main/java/com/minar/randomix/fragments/MagicBallBottomSheet.java
index cd15187..e16e864 100644
--- a/app/src/main/java/com/minar/randomix/fragments/MagicBallBottomSheet.java
+++ b/app/src/main/java/com/minar/randomix/fragments/MagicBallBottomSheet.java
@@ -119,7 +119,7 @@ private void insertAnswerChip(String answer) {
}
// Check if the limit is reached
- if (loadedAnswers.size() > 50 || currentAnswer.isEmpty() || currentAnswer.equals(" ")) {
+ if (loadedAnswers.size() > 100 || currentAnswer.isEmpty() || currentAnswer.equals(" ")) {
return;
}
@@ -127,14 +127,18 @@ private void insertAnswerChip(String answer) {
if (answer.isEmpty()) {
loadedAnswers.add(currentAnswer);
}
- if (loadedAnswers.size() > 2) customAnswersSwitch.setEnabled(true);
+ if (loadedAnswers.size() > 2) {
+ customAnswersSwitch.setEnabled(true);
+ if (customAnswersSwitch.isChecked())
+ magicBall.setCustomAnswers(loadedAnswers.toArray(new String[0]));
+ }
managePlaceholder();
// Inflate the layout and its onclick action
LayoutInflater inflater = LayoutInflater.from(getActivity());
- final Chip chip = (Chip) inflater.inflate(R.layout.chip_roulette, answerChips, false);
+ final Chip chip = (Chip) inflater.inflate(R.layout.custom_chip, answerChips, false);
chip.setText(currentAnswer);
- chip.setId(loadedAnswers.size() + 100);
+ chip.setId(loadedAnswers.size());
// Add the chip with an animation
answerChips.addView(chip);
@@ -150,7 +154,10 @@ private void removeChip(final Chip chip) {
// Remove the chip with an animation
if (chip == null) return;
loadedAnswers.remove(chip.getText().toString());
- if (!(loadedAnswers.size() > 2)) customAnswersSwitch.setEnabled(false);
+ if (loadedAnswers.size() < 2) {
+ customAnswersSwitch.setEnabled(false);
+ magicBall.setCustomAnswers(null);
+ }
final Animation animation = AnimationUtils.loadAnimation(getContext(), R.anim.chip_exit_anim);
chip.startAnimation(animation);
managePlaceholder();
@@ -180,8 +187,9 @@ public void onDismiss(@NonNull DialogInterface dialog) {
editor.putString("custom_answers", answersString.toString());
// Set the custom answers to make sure they are updated
- if (customAnswersSwitch.isChecked())
+ if (customAnswersSwitch.isChecked() && customAnswersSwitch.isEnabled())
magicBall.setCustomAnswers(loadedAnswers.toArray(new String[0]));
+ else magicBall.setCustomAnswers(null);
editor.apply();
super.onDismiss(dialog);
diff --git a/app/src/main/java/com/minar/randomix/fragments/MagicBallFragment.java b/app/src/main/java/com/minar/randomix/fragments/MagicBallFragment.java
index df54ee4..5bac59b 100644
--- a/app/src/main/java/com/minar/randomix/fragments/MagicBallFragment.java
+++ b/app/src/main/java/com/minar/randomix/fragments/MagicBallFragment.java
@@ -22,7 +22,6 @@
import com.minar.randomix.activities.MainActivity;
import com.minar.randomix.utilities.ShakeEventListener;
-import java.util.Collections;
import java.util.Random;
public class MagicBallFragment extends androidx.fragment.app.Fragment implements OnClickListener {
@@ -133,7 +132,7 @@ private void mainThrow() {
}
// Initialize the answers array
- if (customAnswers != null) magicAnswers = customAnswers;
+ if (customAnswers != null && customAnswers.length > 2) magicAnswers = customAnswers;
else {
magicAnswers = new String[36];
magicAnswers[0] = getString(R.string.magic_answer_1);
diff --git a/app/src/main/java/com/minar/randomix/fragments/RouletteFragment.java b/app/src/main/java/com/minar/randomix/fragments/RouletteFragment.java
index 0fc87fb..6d9bb88 100644
--- a/app/src/main/java/com/minar/randomix/fragments/RouletteFragment.java
+++ b/app/src/main/java/com/minar/randomix/fragments/RouletteFragment.java
@@ -361,7 +361,7 @@ private void insertRouletteChip(String option, boolean limitNumber) {
// Inflate the layout and its onclick action
LayoutInflater inflater = LayoutInflater.from(getActivity());
- final Chip chip = (Chip) inflater.inflate(R.layout.chip_roulette, optionsList, false);
+ final Chip chip = (Chip) inflater.inflate(R.layout.custom_chip, optionsList, false);
chip.setText(currentOption);
chip.setId(options.size());
diff --git a/app/src/main/res/drawable/bottom_sheet_pill.xml b/app/src/main/res/drawable/bottom_sheet_pill.xml
index abda1f1..25d67fe 100644
--- a/app/src/main/res/drawable/bottom_sheet_pill.xml
+++ b/app/src/main/res/drawable/bottom_sheet_pill.xml
@@ -2,5 +2,5 @@
-
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/dialog_bg_monet.xml b/app/src/main/res/drawable/dialog_bg_monet.xml
index eacc46c..dd69b33 100644
--- a/app/src/main/res/drawable/dialog_bg_monet.xml
+++ b/app/src/main/res/drawable/dialog_bg_monet.xml
@@ -4,20 +4,20 @@
+ android:bottomLeftRadius="@dimen/rounded_corners"
+ android:bottomRightRadius="@dimen/rounded_corners"
+ android:topLeftRadius="@dimen/rounded_corners"
+ android:topRightRadius="@dimen/rounded_corners" />
-
+ android:bottomLeftRadius="@dimen/rounded_corners"
+ android:bottomRightRadius="@dimen/rounded_corners"
+ android:topLeftRadius="@dimen/rounded_corners"
+ android:topRightRadius="@dimen/rounded_corners" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/chip_roulette.xml b/app/src/main/res/layout/custom_chip.xml
similarity index 81%
rename from app/src/main/res/layout/chip_roulette.xml
rename to app/src/main/res/layout/custom_chip.xml
index 60f54f3..df6e984 100644
--- a/app/src/main/res/layout/chip_roulette.xml
+++ b/app/src/main/res/layout/custom_chip.xml
@@ -3,11 +3,13 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:ellipsize="end"
android:text="@string/title_roulette"
android:textAlignment="center"
+ android:textAppearance="@style/TextAppearance.Material3.BodySmall"
android:textColor="?attr/colorSurface"
app:chipBackgroundColor="@android:color/transparent"
- app:chipCornerRadius="@dimen/dialog_corners"
+ app:chipCornerRadius="@dimen/rounded_corners"
app:chipStrokeColor="?attr/colorSurfaceVariant"
app:chipStrokeWidth="@dimen/text_box_stroke_width"
app:chipSurfaceColor="?attr/colorOutline"
diff --git a/app/src/main/res/layout/fragment_roulette.xml b/app/src/main/res/layout/fragment_roulette.xml
index fa0927d..21b25da 100644
--- a/app/src/main/res/layout/fragment_roulette.xml
+++ b/app/src/main/res/layout/fragment_roulette.xml
@@ -60,10 +60,10 @@
android:layout_weight="0.8"
android:hint="@string/insert_roulette_hint"
app:boxBackgroundColor="?android:statusBarColor"
- app:boxCornerRadiusBottomEnd="@dimen/dialog_corners"
- app:boxCornerRadiusBottomStart="@dimen/dialog_corners"
- app:boxCornerRadiusTopEnd="@dimen/dialog_corners"
- app:boxCornerRadiusTopStart="@dimen/dialog_corners"
+ app:boxCornerRadiusBottomEnd="@dimen/rounded_corners"
+ app:boxCornerRadiusBottomStart="@dimen/rounded_corners"
+ app:boxCornerRadiusTopEnd="@dimen/rounded_corners"
+ app:boxCornerRadiusTopStart="@dimen/rounded_corners"
app:boxStrokeWidth="@dimen/text_box_stroke_width"
app:boxStrokeWidthFocused="@dimen/text_box_focused_stroke_width"
app:endIconMode="clear_text"
@@ -116,10 +116,10 @@
android:layout_weight=".45"
android:hint="@string/min"
app:boxBackgroundColor="?android:statusBarColor"
- app:boxCornerRadiusBottomEnd="@dimen/dialog_corners"
- app:boxCornerRadiusBottomStart="@dimen/dialog_corners"
- app:boxCornerRadiusTopEnd="@dimen/dialog_corners"
- app:boxCornerRadiusTopStart="@dimen/dialog_corners"
+ app:boxCornerRadiusBottomEnd="@dimen/rounded_corners"
+ app:boxCornerRadiusBottomStart="@dimen/rounded_corners"
+ app:boxCornerRadiusTopEnd="@dimen/rounded_corners"
+ app:boxCornerRadiusTopStart="@dimen/rounded_corners"
app:boxStrokeWidth="@dimen/text_box_stroke_width"
app:boxStrokeWidthFocused="@dimen/text_box_focused_stroke_width"
app:expandedHintEnabled="true"
@@ -161,10 +161,10 @@
android:layout_weight=".45"
android:hint="@string/max"
app:boxBackgroundColor="?android:statusBarColor"
- app:boxCornerRadiusBottomEnd="@dimen/dialog_corners"
- app:boxCornerRadiusBottomStart="@dimen/dialog_corners"
- app:boxCornerRadiusTopEnd="@dimen/dialog_corners"
- app:boxCornerRadiusTopStart="@dimen/dialog_corners"
+ app:boxCornerRadiusBottomEnd="@dimen/rounded_corners"
+ app:boxCornerRadiusBottomStart="@dimen/rounded_corners"
+ app:boxCornerRadiusTopEnd="@dimen/rounded_corners"
+ app:boxCornerRadiusTopStart="@dimen/rounded_corners"
app:boxStrokeWidth="@dimen/text_box_stroke_width"
app:boxStrokeWidthFocused="@dimen/text_box_focused_stroke_width"
app:expandedHintEnabled="true"
diff --git a/app/src/main/res/layout/magic_ball_bottom_sheet.xml b/app/src/main/res/layout/magic_ball_bottom_sheet.xml
index d2a2ca3..9066c75 100644
--- a/app/src/main/res/layout/magic_ball_bottom_sheet.xml
+++ b/app/src/main/res/layout/magic_ball_bottom_sheet.xml
@@ -70,10 +70,10 @@
android:hint="@string/insert_answer_hint"
android:paddingHorizontal="@dimen/activity_horizontal_margin"
app:boxBackgroundColor="?android:statusBarColor"
- app:boxCornerRadiusBottomEnd="@dimen/dialog_corners"
- app:boxCornerRadiusBottomStart="@dimen/dialog_corners"
- app:boxCornerRadiusTopEnd="@dimen/dialog_corners"
- app:boxCornerRadiusTopStart="@dimen/dialog_corners"
+ app:boxCornerRadiusBottomEnd="@dimen/rounded_corners"
+ app:boxCornerRadiusBottomStart="@dimen/rounded_corners"
+ app:boxCornerRadiusTopEnd="@dimen/rounded_corners"
+ app:boxCornerRadiusTopStart="@dimen/rounded_corners"
app:boxStrokeWidth="@dimen/text_box_stroke_width"
app:boxStrokeWidthFocused="@dimen/text_box_focused_stroke_width"
app:endIconDrawable="@drawable/insert_vector_animation"
@@ -93,7 +93,7 @@
android:layout_height="match_parent"
android:imeOptions="actionDone"
android:inputType="textAutoCorrect"
- android:maxLength="50"
+ android:maxLength="60"
android:padding="0dp"
android:textAlignment="center" />
@@ -109,6 +109,7 @@
android:paddingVertical="@dimen/activity_vertical_margin"
app:chipSpacing="@dimen/chip_spacing"
app:chipSpacingHorizontal="@dimen/chip_spacing"
+ app:chipSpacingVertical="@dimen/chip_spacing"
app:flow_horizontalAlign="center"
app:layout_constraintBottom_toTopOf="@id/customAnswerSwitch"
app:layout_constraintEnd_toEndOf="parent"
diff --git a/app/src/main/res/layout/roulette_bottom_sheet.xml b/app/src/main/res/layout/roulette_bottom_sheet.xml
index 0787ded..742c202 100644
--- a/app/src/main/res/layout/roulette_bottom_sheet.xml
+++ b/app/src/main/res/layout/roulette_bottom_sheet.xml
@@ -70,7 +70,7 @@
android:text="@string/letters_shortcut"
android:textColor="?attr/colorPrimary"
app:chipBackgroundColor="@drawable/chip_bg_state_list"
- app:chipCornerRadius="@dimen/dialog_corners"
+ app:chipCornerRadius="@dimen/rounded_corners"
app:chipIcon="@drawable/insert_vector_animation"
app:chipIconEnabled="true"
app:chipIconTint="?attr/colorPrimary"
@@ -89,7 +89,7 @@
android:text="@string/numbers_1_100_shortcut"
android:textColor="?attr/colorPrimary"
app:chipBackgroundColor="@drawable/chip_bg_state_list"
- app:chipCornerRadius="@dimen/dialog_corners"
+ app:chipCornerRadius="@dimen/rounded_corners"
app:chipIcon="@drawable/insert_vector_animation"
app:chipIconEnabled="true"
app:chipIconTint="?attr/colorPrimary"
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 5f106ce..40a1fc6 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -31,7 +31,7 @@
42dp
- 16dp
+ 16dp
56dp
550dp
10
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 6296c68..88b7f7b 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -63,7 +63,7 @@
@@ -102,12 +102,12 @@
From 3808dac452916d7b50ef2c25449737e4fb776366 Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 16:55:40 +0100
Subject: [PATCH 35/44] New translations strings.xml (Dutch)
---
app/src/main/res/values-nl/strings.xml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index b617e7a..ba8041e 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -72,10 +72,10 @@
Lol! Wat dom.
Je bent gek.
Ga naar de hel.
- No custom answers. Add one from the above text field. You can delete them by tapping on them.
- Custom answers
- Use custom answers
- Insert an answer…
+ Geen aangepaste antwoorden. Voeg er één toe uit het bovenstaande tekstveld. U kunt deze verwijderen door erop te tikken.
+ Aangepaste antwoorden
+ Gebruik aangepaste antwoorden
+ Voeg een antwoord toe…
Dobbelsteen modus
Dobbelstenen kunnen handig zijn, in een tafelspel bijvoorbeeld! De app gooit één tot tien dobbelstenen voor je. Selecteer het aantal bij instellingen. Veel succes!
From 5981fa29ba943f4655d0d7e6cfbaf86c520d7759 Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 16:55:43 +0100
Subject: [PATCH 36/44] New translations strings.xml (French)
---
app/src/main/res/values-fr/strings.xml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 6bf23f3..5b25088 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -72,10 +72,10 @@
Lol! Qu\'est que tu es bête.
T\'es fou!
Va en enfer.
- No custom answers. Add one from the above text field. You can delete them by tapping on them.
- Custom answers
- Use custom answers
- Insert an answer…
+ Aucune réponse personnalisée. Ajoutez-en une dans le champ de texte ci-dessus. Vous pouvez les supprimer en appuyant dessus.
+ Réponses personnalisées
+ Utiliser les réponses personnalisées
+ Insérer une réponse…
Dé
Un dé peut être pratique, pour un jeu de plateau par exemple ! Cette appli peut lancer entre 1 et 10 dés
From b9567433e8804cfd9187ad1b3e72df25bc52d147 Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 16:55:44 +0100
Subject: [PATCH 37/44] New translations strings.xml (Spanish)
---
app/src/main/res/values-es/strings.xml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 9a857df..47df536 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -72,10 +72,10 @@
¡Jajaja! Que estúpido.
Estas loco/a.
Vete al diablo.
- No custom answers. Add one from the above text field. You can delete them by tapping on them.
- Custom answers
- Use custom answers
- Insert an answer…
+ No hay respuestas personalizadas. Añada una desde el campo de texto de arriba. Puede eliminarlas tocando en ellas.
+ Respuestas personalizadas
+ Usar respuestas personalizadas
+ Inserte una respuesta…
Modo dado
¡Un dado podría ser útil, en un juego de mesa, por ejemplo! La aplicación arrojará de uno a diez dados por ti. Seleccione el número de la configuración. ¡Buena suerte!
From 5a2afc7ac39199b4c6d31e5e3e8e719615725eff Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 16:55:45 +0100
Subject: [PATCH 38/44] New translations strings.xml (Czech)
---
app/src/main/res/values-cs/strings.xml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 2d6ccd3..36d648b 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -72,10 +72,10 @@
Cha! Jak hloupé.
Jsi blázen.
Jdi do háje.
- No custom answers. Add one from the above text field. You can delete them by tapping on them.
- Custom answers
- Use custom answers
- Insert an answer…
+ Žádné vlastní odpovědi. Přidejte je z výše uvedeného textového pole. Můžete je odstranit klepnutím na ně.
+ Vlastní odpovědi
+ Použít vlastní odpovědi
+ Vložte odpověď…
Režim kostky
Kostky se mohou hodit, například ve stolních hrách! Aplikace za vás hodí jednu až deseti kostky. Počet si vyberte v nastavení. Hodně štěstí!
From 63eb0813cc3e3850bf3232cb5cf665524c8d8088 Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 16:55:46 +0100
Subject: [PATCH 39/44] New translations strings.xml (German)
---
app/src/main/res/values-de/strings.xml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index ca35d0a..9144b73 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -72,10 +72,10 @@
Lol! Wie dumm.
Du bist verrückt.
Fahr zur Hölle.
- No custom answers. Add one from the above text field. You can delete them by tapping on them.
- Custom answers
- Use custom answers
- Insert an answer…
+ Keine benutzerdefinierten Antworten. Fügen Sie eine aus dem oberen Textfeld hinzu. Sie können sie löschen, indem Sie auf sie tippen.
+ Benutzerdefinierte Antworten
+ Eigene Antworten verwenden
+ Eine Antwort einfügen…
Würfel Modus
Würfel können nützlich sein, bei einem Gesellschaftsspiel zum Beispiel! Die App wirft einen bis zehn Würfel für dich. Wähle die Anzahl in den Einstellungen aus. Viel Glück!
From 8e4ac6cb6738fac1974b9b453071405f5678cd87 Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 16:55:47 +0100
Subject: [PATCH 40/44] New translations strings.xml (Italian)
---
app/src/main/res/values-it/strings.xml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 6c8a205..2c5e8be 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -72,10 +72,10 @@
Lol! Che idiozia.
Tu sei pazzo/a.
Va all\'inferno.
- No custom answers. Add one from the above text field. You can delete them by tapping on them.
- Custom answers
- Use custom answers
- Insert an answer…
+ Nessuna risposta personalizzata. Aggiungine una dal campo di testo sopra. Puoi eliminarle toccandole.
+ Risposte personalizzate
+ Usa risposte personalizzate
+ Inserisci una risposta…
Modalità dado
Un dado può essere utile, ad esempio in un gioco da tavola! L\'app ne lancerà da uno a dieci per te. Seleziona il numero dalle impostazioni. Buona fortuna!
From f122260d1c74bd35eff9f0ad831d1da1c6e4e72e Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 16:55:48 +0100
Subject: [PATCH 41/44] New translations strings.xml (Portuguese)
---
app/src/main/res/values-pt/strings.xml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 9ec6aad..65834af 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -72,10 +72,10 @@
Lol! Quanta estupidez em uma pergunta.
Você é louco.
Vá para o inferno.
- No custom answers. Add one from the above text field. You can delete them by tapping on them.
- Custom answers
- Use custom answers
- Insert an answer…
+ Nenhuma resposta personalizada. Adicione uma no campo de texto acima. Você pode excluí-las tocando nelas.
+ Respostas personalizadas
+ Usar respostas personalizadas
+ Insira uma resposta…
Modo dado
Os dados podem ser úteis, em um jogo de mesa, por exemplo! O aplicativo lançará de um a dez dados para você. Selecione o número nas configurações. Boa sorte!
From f384e5fc8c047b170590213dd44628989c81e482 Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 16:55:49 +0100
Subject: [PATCH 42/44] New translations strings.xml (Russian)
---
app/src/main/res/values-ru/strings.xml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 000b05a..6e029c0 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -72,10 +72,10 @@
Как глупо.
Ты сумасшедший.
Иди к чёрту.
- No custom answers. Add one from the above text field. You can delete them by tapping on them.
- Custom answers
- Use custom answers
- Insert an answer…
+ Нет пользовательских ответов. Добавьте один из указанного выше текстового поля. Вы можете удалить их, нажав на них.
+ Пользовательские ответы
+ Использовать пользовательские ответы
+ Вставить ответ…
Кости
Кости могут быть полезны, например, в настольной игре! Приложение бросает за вас от одного до десяти кубиков. Количество можно выбрать в настройках. Удачи!
From 87fa7ce31b4f76e6b3748c4f0d72b864345c2ac4 Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 16:55:51 +0100
Subject: [PATCH 43/44] New translations strings.xml (Portuguese, Brazilian)
---
app/src/main/res/values-pt-rBR/strings.xml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 9ec6aad..57a8c00 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -72,10 +72,10 @@
Lol! Quanta estupidez em uma pergunta.
Você é louco.
Vá para o inferno.
- No custom answers. Add one from the above text field. You can delete them by tapping on them.
- Custom answers
- Use custom answers
- Insert an answer…
+ Nenhuma resposta personalizada. Adicione uma no campo de texto acima. Você pode excluí-las tocando nelas.
+ Respostas personalizadas
+ Usar respostas personalizadas
+ Inserir uma resposta…
Modo dado
Os dados podem ser úteis, em um jogo de mesa, por exemplo! O aplicativo lançará de um a dez dados para você. Selecione o número nas configurações. Boa sorte!
From cd1134e3a313e56631a914670deb00426757f140 Mon Sep 17 00:00:00 2001
From: minar
Date: Mon, 30 Jan 2023 17:51:38 +0100
Subject: [PATCH 44/44] Fastlane and README.md updated
---
README.md | 85 ++++++++++--------
app/build.gradle | 4 +-
.../metadata/android/en-US/changelogs/40.txt | 3 +
.../en-US/images/phoneScreenshots/01.jpg | Bin 0 -> 338955 bytes
.../en-US/images/phoneScreenshots/01.png | Bin 339350 -> 0 bytes
5 files changed, 55 insertions(+), 37 deletions(-)
create mode 100644 fastlane/metadata/android/en-US/changelogs/40.txt
create mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/01.jpg
delete mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/01.png
diff --git a/README.md b/README.md
index 22f92ed..a65678d 100644
--- a/README.md
+++ b/README.md
@@ -9,41 +9,48 @@ An open source app to choose randomly between numbers, answers, options and so o
## Introduction
-This is an open source app created to experiment some new android features, but it's also available on Play Store and F-Droid for all users.
-The main purpose of the app is provide a **random choice** in different ways. The app contains some basic personalization options and an introduction, plus a lot of **animated vector drawables**. The design is a bit personal, but it mostly follows the guidelines.
+
+This is an open source app created to experiment some new android features, but it's also available
+on Play Store and F-Droid for all users.
+The main purpose of the app is provide a **random choice** in different ways. The app contains some
+basic personalization options and an introduction, plus a lot of **animated vector drawables**. The
+design is a bit personal, but it mostly follows the guidelines.
## Translations (refer to [Crowdin](https://crwd.in/randomix))
-| LANGUAGE | SPECIAL THANKS |
-|:----------------------|-------------------------:|
-| **English** | myself, cosmojg |
-| **Italian** | myself |
-| **Spanish** | myself |
-| **German** | deep-ocean-fish, julius-d|
-| **Russian** | BValeo |
-| **French** | Firokat |
-| **Portuguese** | Kiskadee-dev |
-| **Brazilian** | Kiskadee-dev |
-| **Czech** | Miloš Koliáš, mormegil-cz|
-| **Simplified Chinese**| pumguy |
-| **Indonesian** | the7thNightmare |
-| **Chinese (Taiwan)** | Still34 |
-| **Asturian** | Softastur |
-| **English (GB)** | SecularSteve |
-| **Dutch** | SecularSteve |
-| **Bosnian** | SecularSteve |
-| **Croatian** | SecularSteve |
-| **Serbian** | SecularSteve |
-| **Serbian (latin)** | SecularSteve |
+| LANGUAGE | SPECIAL THANKS |
+|:-----------------------|--------------------------:|
+| **English** | myself, cosmojg |
+| **Italian** | myself |
+| **Spanish** | myself |
+| **German** | deep-ocean-fish, julius-d |
+| **Russian** | BValeo |
+| **French** | Firokat |
+| **Portuguese** | Kiskadee-dev |
+| **Brazilian** | Kiskadee-dev |
+| **Czech** | Miloš Koliáš, mormegil-cz |
+| **Simplified Chinese** | pumguy |
+| **Indonesian** | the7thNightmare |
+| **Chinese (Taiwan)** | Still34 |
+| **Asturian** | Softastur |
+| **English (GB)** | SecularSteve |
+| **Dutch** | SecularSteve |
+| **Bosnian** | SecularSteve |
+| **Croatian** | SecularSteve |
+| **Serbian** | SecularSteve |
+| **Serbian (latin)** | SecularSteve |
Special thanks to Nickoriginal for the overall improvement of each translation
## Features
+
- Every tab in the bottom navigation bar contains a type of random choice. The available types are:
- - **Roulette** -> chooses between a specified number of options or a custom number range, entered from the user. Includes a list of recent options easy to select, pin, delete or restore.
- - **Coin** -> simply flips a coin and prints the result.
- - **Dice** -> throws a chosen number of dice and prints the result.
- - **Magic Ball** -> provides randomly chosen answers to any question.
+ - **Roulette** -> chooses between a specified number of options or a custom number range,
+ entered from the user. Includes a list of recent options easy to select, pin, delete or
+ restore.
+ - **Coin** -> simply flips a coin and prints the result.
+ - **Dice** -> throws a chosen number of dice and prints the result.
+ - **Magic Ball** -> provides randomly chosen answers to any question.
- Light and dark themes (Automatic dark mode supported)
- Full Material You support
- Selectable accent (no app restart needed)
@@ -51,6 +58,7 @@ Special thanks to Nickoriginal for the overall improvement of each translation
- The app remember the last used mode
- Roulette presets for letters and numbers
- Custom ranges (values from 0 to 99999)
+- Customizable magic ball answers
- Multiwindows support
- Android 12 animated splashscreen supported
- Android 13 per-app language support
@@ -64,8 +72,9 @@ Special thanks to Nickoriginal for the overall improvement of each translation
- Available in many languages (see the table above)
## Screenshots
+
-
+
@@ -76,20 +85,26 @@ Special thanks to Nickoriginal for the overall improvement of each translation
## Download
-The app is now available through Google Play and F-Droid.
+The app is now available through Google Play and F-Droid.
[
](https://f-droid.org/packages/com.minar.randomix/)
+alt="Get it on F-Droid"
+height="80">](https://f-droid.org/packages/com.minar.randomix/)
[
](https://play.google.com/store/apps/details?id=com.minar.randomix)
+alt="Get it on Google Play"
+height="80">](https://play.google.com/store/apps/details?id=com.minar.randomix)
## Credits and contributions
+
Randomix uses an open source library:
+
- [App Intro](https://github.com/AppIntro/AppIntro)
-Currently, Randomix supports the languages in the above table. If you want to translate the app in any other language or update an existing translation, just contact me or send a pull request: you'll be quoted both on Github and in the Play Store description.
+Currently, Randomix supports the languages in the above table. If you want to translate the app in
+any other language or update an existing translation, just contact me or send a pull request: you'll
+be quoted both on Github and in the Play Store description.
-This app was written during my free time as a training. It was first published on June 1, 2018. Many good devs have helped me understanding the best practices and they taught me a lot of useful tricks. A special thank to every contributor. and God bless Stack Overflow.
+This app was written during my free time as a training. It was first published on June 1, 2018. Many
+good devs have helped me understanding the best practices and they taught me a lot of useful tricks.
+A special thank to every contributor. and God bless Stack Overflow.
diff --git a/app/build.gradle b/app/build.gradle
index 4b480c8..3783add 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -6,8 +6,8 @@ android {
applicationId "com.minar.randomix"
minSdkVersion 23
targetSdkVersion 33
- versionCode 39
- versionName "2.4"
+ versionCode 40
+ versionName "2.5"
resConfigs 'en', 'en-rGB', 'ast', 'bs', 'cs', 'de', 'es', 'fr', 'hr', 'id', 'it', 'nl', 'ru', 'pt', 'pt-rBR', 'sr', 'sr-rCS', 'zh-rCN', 'zh-rTW'
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
diff --git a/fastlane/metadata/android/en-US/changelogs/40.txt b/fastlane/metadata/android/en-US/changelogs/40.txt
new file mode 100644
index 0000000..93dad3e
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/40.txt
@@ -0,0 +1,3 @@
+- New custom answers support for the magic ball
+- New translations
+- Fixes
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/01.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/01.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..43e79a25dc8e905b2a56db3b01fcbdbd364cffdf
GIT binary patch
literal 338955
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