From be0dea16ae78ca1ee6ed219cd6bc3c76f2a257be Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 3 Apr 2018 23:26:34 +0200 Subject: [PATCH] fix #29, replace modulo with percent --- .../calculator/MainActivityTest.java | 47 ++++++++---------- .../calculator/activities/MainActivity.kt | 2 +- .../activities/WidgetConfigureActivity.kt | 2 +- .../calculator/helpers/CalculatorImpl.kt | 8 +-- .../calculator/helpers/Constants.kt | 49 +++++++++---------- .../calculator/helpers/MyWidgetProvider.kt | 8 +-- .../calculator/operation/OperationFactory.kt | 18 +++---- ...ModuloOperation.kt => PercentOperation.kt} | 4 +- app/src/main/res/layout/activity_main.xml | 5 +- 9 files changed, 68 insertions(+), 75 deletions(-) rename app/src/main/kotlin/com/simplemobiletools/calculator/operation/{ModuloOperation.kt => PercentOperation.kt} (65%) diff --git a/app/src/androidTest/java/com/simplemobiletools/calculator/MainActivityTest.java b/app/src/androidTest/java/com/simplemobiletools/calculator/MainActivityTest.java index c38f35b7..6d0f9937 100644 --- a/app/src/androidTest/java/com/simplemobiletools/calculator/MainActivityTest.java +++ b/app/src/androidTest/java/com/simplemobiletools/calculator/MainActivityTest.java @@ -102,13 +102,15 @@ public class MainActivityTest { } @Test - public void moduloTest() { - press(R.id.btn_7); - press(R.id.btn_modulo); + public void percentTest() { + press(R.id.btn_1); + press(R.id.btn_0); + press(R.id.btn_percent); press(R.id.btn_2); + press(R.id.btn_0); press(R.id.btn_equals); - checkResult("1"); - checkFormula("7%2"); + checkResult("2"); + checkFormula("10%20"); } @Test @@ -173,32 +175,25 @@ public class MainActivityTest { checkResult("4"); checkFormula("7-3"); - press(R.id.btn_5); + press(R.id.btn_1); + press(R.id.btn_0); press(R.id.btn_divide); - checkResult("20"); - checkFormula("4*5"); + checkResult("40"); + checkFormula("4*10"); + + press(R.id.btn_5); + press(R.id.btn_power); + checkResult("8"); + checkFormula("40/5"); press(R.id.btn_2); - press(R.id.btn_modulo); - checkResult("10"); - checkFormula("20/2"); - - press(R.id.btn_4); - press(R.id.btn_power); - checkResult("2"); - checkFormula("10%4"); - - press(R.id.btn_8); - press(R.id.btn_modulo); - checkResult("256"); - checkFormula("2^8"); + press(R.id.btn_percent); + checkResult("64"); + checkFormula("8^2"); press(R.id.btn_root); - checkResult("16"); - checkFormula("√256"); - - press(R.id.btn_clear); - checkResult("1"); + checkResult("8"); + checkFormula("√64"); press(R.id.btn_clear); checkResult("0"); diff --git a/app/src/main/kotlin/com/simplemobiletools/calculator/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calculator/activities/MainActivity.kt index 216eeb1a..cdec5a0d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calculator/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calculator/activities/MainActivity.kt @@ -38,7 +38,7 @@ class MainActivity : SimpleActivity(), Calculator { btn_minus.setOnClickListener { calc.handleOperation(MINUS); checkHaptic(it) } btn_multiply.setOnClickListener { calc.handleOperation(MULTIPLY); checkHaptic(it) } btn_divide.setOnClickListener { calc.handleOperation(DIVIDE); checkHaptic(it) } - btn_modulo.setOnClickListener { calc.handleOperation(MODULO); checkHaptic(it) } + btn_percent.setOnClickListener { calc.handleOperation(PERCENT); checkHaptic(it) } btn_power.setOnClickListener { calc.handleOperation(POWER); checkHaptic(it) } btn_root.setOnClickListener { calc.handleOperation(ROOT); checkHaptic(it) } diff --git a/app/src/main/kotlin/com/simplemobiletools/calculator/activities/WidgetConfigureActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calculator/activities/WidgetConfigureActivity.kt index fe310fb2..13e27edc 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calculator/activities/WidgetConfigureActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calculator/activities/WidgetConfigureActivity.kt @@ -107,7 +107,7 @@ class WidgetConfigureActivity : SimpleActivity() { config_text_color.setBackgroundColor(mTextColor) config_save.setTextColor(mTextColor) - val viewIds = intArrayOf(R.id.btn_0, R.id.btn_1, R.id.btn_2, R.id.btn_3, R.id.btn_4, R.id.btn_5, R.id.btn_6, R.id.btn_7, R.id.btn_8, R.id.btn_9, R.id.btn_modulo, R.id.btn_power, R.id.btn_root, R.id.btn_clear, R.id.btn_reset, R.id.btn_divide, R.id.btn_multiply, R.id.btn_minus, R.id.btn_plus, R.id.btn_decimal, R.id.btn_equals) + val viewIds = intArrayOf(R.id.btn_0, R.id.btn_1, R.id.btn_2, R.id.btn_3, R.id.btn_4, R.id.btn_5, R.id.btn_6, R.id.btn_7, R.id.btn_8, R.id.btn_9, R.id.btn_percent, R.id.btn_power, R.id.btn_root, R.id.btn_clear, R.id.btn_reset, R.id.btn_divide, R.id.btn_multiply, R.id.btn_minus, R.id.btn_plus, R.id.btn_decimal, R.id.btn_equals) result.setTextColor(mTextColor) formula.setTextColor(mTextColor) diff --git a/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/CalculatorImpl.kt b/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/CalculatorImpl.kt index 999cba87..379f37b0 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/CalculatorImpl.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/CalculatorImpl.kt @@ -112,8 +112,9 @@ class CalculatorImpl(calculator: Calculator, val context: Context) { } fun handleOperation(operation: String) { - if (lastKey == DIGIT && operation != ROOT) + if (lastKey == DIGIT && operation != ROOT) { handleResult() + } mResetValue = true lastKey = operation @@ -175,8 +176,9 @@ class CalculatorImpl(calculator: Calculator, val context: Context) { private fun zeroClicked() { val value = displayedNumber - if (value != "0") + if (value != "0") { addDigit(0) + } } private fun getSign(lastOperation: String?) = when (lastOperation) { @@ -184,7 +186,7 @@ class CalculatorImpl(calculator: Calculator, val context: Context) { MINUS -> "-" MULTIPLY -> "*" DIVIDE -> "/" - MODULO -> "%" + PERCENT -> "%" POWER -> "^" ROOT -> "√" else -> "" diff --git a/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/Constants.kt index a92a19a7..8e8af427 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/Constants.kt @@ -1,29 +1,26 @@ package com.simplemobiletools.calculator.helpers -val DIGIT = "digit" -val EQUALS = "equals" -val PLUS = "plus" -val MINUS = "minus" -val MULTIPLY = "multiply" -val DIVIDE = "divide" -val MODULO = "modulo" -val POWER = "power" -val ROOT = "root" -val DECIMAL = "decimal" -val CLEAR = "clear" -val RESET = "reset" +const val DIGIT = "digit" +const val EQUALS = "equals" +const val PLUS = "plus" +const val MINUS = "minus" +const val MULTIPLY = "multiply" +const val DIVIDE = "divide" +const val PERCENT = "percent" +const val POWER = "power" +const val ROOT = "root" +const val DECIMAL = "decimal" +const val CLEAR = "clear" +const val RESET = "reset" -val NAN = "NaN" -val ZERO = "zero" -val ONE = "one" -val TWO = "two" -val THREE = "three" -val FOUR = "four" -val FIVE = "five" -val SIX = "six" -val SEVEN = "seven" -val EIGHT = "eight" -val NINE = "nine" - -// shared preferences -val VIBRATE_ON_BUTTON_PRESS = "vibrate_on_button_press" +const val NAN = "NaN" +const val ZERO = "zero" +const val ONE = "one" +const val TWO = "two" +const val THREE = "three" +const val FOUR = "four" +const val FIVE = "five" +const val SIX = "six" +const val SEVEN = "seven" +const val EIGHT = "eight" +const val NINE = "nine" diff --git a/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/MyWidgetProvider.kt b/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/MyWidgetProvider.kt index bc8ca6cb..ecf467dd 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/MyWidgetProvider.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/MyWidgetProvider.kt @@ -45,7 +45,7 @@ class MyWidgetProvider : AppWidgetProvider(), Calculator { setupIntent(context, views, MINUS, R.id.btn_minus) setupIntent(context, views, MULTIPLY, R.id.btn_multiply) setupIntent(context, views, DIVIDE, R.id.btn_divide) - setupIntent(context, views, MODULO, R.id.btn_modulo) + setupIntent(context, views, PERCENT, R.id.btn_percent) setupIntent(context, views, POWER, R.id.btn_power) setupIntent(context, views, ROOT, R.id.btn_root) setupIntent(context, views, CLEAR, R.id.btn_clear) @@ -80,7 +80,7 @@ class MyWidgetProvider : AppWidgetProvider(), Calculator { private fun updateTextColors(views: RemoteViews, color: Int) { val viewIds = intArrayOf(R.id.formula, R.id.result, R.id.btn_0, R.id.btn_1, R.id.btn_2, R.id.btn_3, R.id.btn_4, R.id.btn_5, R.id.btn_6, - R.id.btn_7, R.id.btn_8, R.id.btn_9, R.id.btn_modulo, R.id.btn_power, R.id.btn_root, R.id.btn_clear, R.id.btn_reset, R.id.btn_divide, + R.id.btn_7, R.id.btn_8, R.id.btn_9, R.id.btn_percent, R.id.btn_power, R.id.btn_root, R.id.btn_clear, R.id.btn_reset, R.id.btn_divide, R.id.btn_multiply, R.id.btn_minus, R.id.btn_plus, R.id.btn_decimal, R.id.btn_equals) for (i in viewIds) { @@ -91,7 +91,7 @@ class MyWidgetProvider : AppWidgetProvider(), Calculator { override fun onReceive(context: Context, intent: Intent) { val action = intent.action when (action) { - DECIMAL, ZERO, ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, EQUALS, CLEAR, RESET, PLUS, MINUS, MULTIPLY, DIVIDE, MODULO, POWER, ROOT -> myAction(action, context) + DECIMAL, ZERO, ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, EQUALS, CLEAR, RESET, PLUS, MINUS, MULTIPLY, DIVIDE, PERCENT, POWER, ROOT -> myAction(action, context) else -> super.onReceive(context, intent) } } @@ -116,7 +116,7 @@ class MyWidgetProvider : AppWidgetProvider(), Calculator { EQUALS -> calc!!.handleEquals() CLEAR -> calc!!.handleClear() RESET -> calc!!.handleReset() - PLUS, MINUS, MULTIPLY, DIVIDE, MODULO, POWER, ROOT -> calc!!.handleOperation(action) + PLUS, MINUS, MULTIPLY, DIVIDE, PERCENT, POWER, ROOT -> calc!!.handleOperation(action) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calculator/operation/OperationFactory.kt b/app/src/main/kotlin/com/simplemobiletools/calculator/operation/OperationFactory.kt index 44b472f8..48694337 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calculator/operation/OperationFactory.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calculator/operation/OperationFactory.kt @@ -6,15 +6,15 @@ import com.simplemobiletools.calculator.operation.base.Operation object OperationFactory { fun forId(id: String, baseValue: Double, secondValue: Double): Operation? { - when (id) { - PLUS -> return PlusOperation(baseValue, secondValue) - MINUS -> return MinusOperation(baseValue, secondValue) - DIVIDE -> return DivideOperation(baseValue, secondValue) - MULTIPLY -> return MultiplyOperation(baseValue, secondValue) - MODULO -> return ModuloOperation(baseValue, secondValue) - POWER -> return PowerOperation(baseValue, secondValue) - ROOT -> return RootOperation(baseValue) - else -> return null + return when (id) { + PLUS -> PlusOperation(baseValue, secondValue) + MINUS -> MinusOperation(baseValue, secondValue) + DIVIDE -> DivideOperation(baseValue, secondValue) + MULTIPLY -> MultiplyOperation(baseValue, secondValue) + PERCENT -> PercentOperation(baseValue, secondValue) + POWER -> PowerOperation(baseValue, secondValue) + ROOT -> RootOperation(baseValue) + else -> null } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calculator/operation/ModuloOperation.kt b/app/src/main/kotlin/com/simplemobiletools/calculator/operation/PercentOperation.kt similarity index 65% rename from app/src/main/kotlin/com/simplemobiletools/calculator/operation/ModuloOperation.kt rename to app/src/main/kotlin/com/simplemobiletools/calculator/operation/PercentOperation.kt index 57f3c33b..dfa9b97a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calculator/operation/ModuloOperation.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calculator/operation/PercentOperation.kt @@ -3,12 +3,12 @@ package com.simplemobiletools.calculator.operation import com.simplemobiletools.calculator.operation.base.BinaryOperation import com.simplemobiletools.calculator.operation.base.Operation -class ModuloOperation(baseValue: Double, secondValue: Double) : BinaryOperation(baseValue, secondValue), Operation { +class PercentOperation(baseValue: Double, secondValue: Double) : BinaryOperation(baseValue, secondValue), Operation { override fun getResult(): Double { var result = 0.0 if (secondValue != 0.0) { - result = baseValue % secondValue + result = (baseValue / 100) * secondValue } return result } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index d11de69b..7e882690 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -41,13 +41,12 @@ android:orientation="horizontal">