From c2c5cd7ca8773a92fdfa229d4b2d300d9e6e196c Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 30 Nov 2017 19:04:26 +0100 Subject: [PATCH] add optional vibration on button pressing --- app/build.gradle | 4 +- .../calculator/activities/MainActivity.kt | 49 +++++++++++-------- .../calculator/activities/SettingsActivity.kt | 10 ++++ .../calculator/extensions/Context.kt | 2 +- .../calculator/helpers/Config.kt | 4 ++ .../calculator/helpers/Constants.kt | 3 ++ app/src/main/res/layout/activity_settings.xml | 21 ++++++++ app/src/main/res/values-de/strings.xml | 4 +- app/src/main/res/values-es/strings.xml | 4 +- app/src/main/res/values-fr/strings.xml | 4 +- app/src/main/res/values-it/strings.xml | 4 +- app/src/main/res/values-ja/strings.xml | 4 +- app/src/main/res/values-pl/strings.xml | 4 +- app/src/main/res/values-pt/strings.xml | 4 +- app/src/main/res/values-ru/strings.xml | 4 +- app/src/main/res/values-sk/strings.xml | 4 +- app/src/main/res/values-sv/strings.xml | 4 +- app/src/main/res/values-tr/strings.xml | 4 +- app/src/main/res/values/colors.xml | 1 - app/src/main/res/values/strings.xml | 4 +- 20 files changed, 105 insertions(+), 37 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 69e52e1d..86b601ee 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -40,13 +40,13 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:3.0.3' + implementation 'com.simplemobiletools:commons:3.0.9' implementation 'me.grantland:autofittextview:0.2.1' testImplementation 'junit:junit:4.12' testImplementation 'org.robolectric:robolectric:3.5.1' - androidTestImplementation 'com.android.support:support-annotations:27.0.1' + androidTestImplementation 'com.android.support:support-annotations:27.0.2' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test:rules:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' 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 e132dee9..a24d6c80 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calculator/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calculator/activities/MainActivity.kt @@ -1,18 +1,18 @@ package com.simplemobiletools.calculator.activities -import android.content.ClipData -import android.content.ClipboardManager import android.content.Context import android.content.Intent import android.os.Bundle import android.view.Menu import android.view.MenuItem +import android.view.View import com.simplemobiletools.calculator.BuildConfig import com.simplemobiletools.calculator.R import com.simplemobiletools.calculator.extensions.config import com.simplemobiletools.calculator.extensions.updateViewColors import com.simplemobiletools.calculator.helpers.* -import com.simplemobiletools.commons.extensions.toast +import com.simplemobiletools.commons.extensions.copyToClipboard +import com.simplemobiletools.commons.extensions.performHapticFeedback import com.simplemobiletools.commons.extensions.value import com.simplemobiletools.commons.helpers.LICENSE_AUTOFITTEXTVIEW import com.simplemobiletools.commons.helpers.LICENSE_ESPRESSO @@ -23,6 +23,8 @@ import me.grantland.widget.AutofitHelper class MainActivity : SimpleActivity(), Calculator { private var storedTextColor = 0 + private var vibrateOnButtonPress = true + lateinit var calc: CalculatorImpl override fun onCreate(savedInstanceState: Bundle?) { @@ -31,22 +33,22 @@ class MainActivity : SimpleActivity(), Calculator { calc = CalculatorImpl(this, applicationContext) - btn_plus.setOnClickListener { calc.handleOperation(PLUS) } - btn_minus.setOnClickListener { calc.handleOperation(MINUS) } - btn_multiply.setOnClickListener { calc.handleOperation(MULTIPLY) } - btn_divide.setOnClickListener { calc.handleOperation(DIVIDE) } - btn_modulo.setOnClickListener { calc.handleOperation(MODULO) } - btn_power.setOnClickListener { calc.handleOperation(POWER) } - btn_root.setOnClickListener { calc.handleOperation(ROOT) } + btn_plus.setOnClickListener { calc.handleOperation(PLUS); checkHaptic(it) } + 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_power.setOnClickListener { calc.handleOperation(POWER); checkHaptic(it) } + btn_root.setOnClickListener { calc.handleOperation(ROOT); checkHaptic(it) } - btn_clear.setOnClickListener { calc.handleClear() } + btn_clear.setOnClickListener { calc.handleClear(); checkHaptic(it) } btn_clear.setOnLongClickListener { calc.handleReset(); true } getButtonIds().forEach { - it.setOnClickListener { calc.numpadClicked(it.id) } + it.setOnClickListener { calc.numpadClicked(it.id); checkHaptic(it) } } - btn_equals.setOnClickListener { calc.handleEquals() } + btn_equals.setOnClickListener { calc.handleEquals(); checkHaptic(it) } formula.setOnLongClickListener { copyToClipboard(false) } result.setOnLongClickListener { copyToClipboard(true) } @@ -59,6 +61,7 @@ class MainActivity : SimpleActivity(), Calculator { if (storedTextColor != config.textColor) { updateViewColors(calculator_holder, config.textColor) } + vibrateOnButtonPress = config.vibrateOnButtonPress } override fun onPause() { @@ -80,6 +83,12 @@ class MainActivity : SimpleActivity(), Calculator { return true } + private fun checkHaptic(view: View) { + if (vibrateOnButtonPress) { + view.performHapticFeedback() + } + } + private fun launchSettings() { startActivity(Intent(applicationContext, SettingsActivity::class.java)) } @@ -96,14 +105,12 @@ class MainActivity : SimpleActivity(), Calculator { value = result.value } - if (value.isEmpty()) - return false - - val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager - val clip = ClipData.newPlainText(resources.getString(R.string.app_name), value) - clipboard.primaryClip = clip - toast(R.string.copied_to_clipboard) - return true + return if (value.isEmpty()) { + false + } else { + copyToClipboard(value) + true + } } override fun setValue(value: String, context: Context) { diff --git a/app/src/main/kotlin/com/simplemobiletools/calculator/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calculator/activities/SettingsActivity.kt index 50895cdd..6bc5d9ee 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calculator/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calculator/activities/SettingsActivity.kt @@ -2,6 +2,7 @@ package com.simplemobiletools.calculator.activities import android.os.Bundle import com.simplemobiletools.calculator.R +import com.simplemobiletools.calculator.extensions.config import com.simplemobiletools.commons.extensions.updateTextColors import kotlinx.android.synthetic.main.activity_settings.* @@ -16,6 +17,7 @@ class SettingsActivity : SimpleActivity() { super.onResume() setupCustomizeColors() + setupVibrate() updateTextColors(settings_scrollview) } @@ -24,4 +26,12 @@ class SettingsActivity : SimpleActivity() { startCustomizationActivity() } } + + private fun setupVibrate() { + settings_vibrate.isChecked = config.vibrateOnButtonPress + settings_vibrate_holder.setOnClickListener { + settings_vibrate.toggle() + config.vibrateOnButtonPress = settings_vibrate.isChecked + } + } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calculator/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/calculator/extensions/Context.kt index e07d6bb7..8ce61e14 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calculator/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calculator/extensions/Context.kt @@ -6,7 +6,7 @@ import android.widget.Button import android.widget.TextView import com.simplemobiletools.calculator.helpers.Config -val Context.config: Config get() = Config.newInstance(this) +val Context.config: Config get() = Config.newInstance(applicationContext) // we are reusing the same layout in the app and widget, but cannot use MyTextView etc in a widget, so color regular view types like this fun Context.updateViewColors(viewGroup: ViewGroup, textColor: Int) { diff --git a/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/Config.kt index f9c286a0..23d3bbe5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/Config.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/Config.kt @@ -7,4 +7,8 @@ class Config(context: Context) : BaseConfig(context) { companion object { fun newInstance(context: Context) = Config(context) } + + var vibrateOnButtonPress: Boolean + get() = prefs.getBoolean(VIBRATE_ON_BUTTON_PRESS, true) + set(vibrateOnButton) = prefs.edit().putBoolean(VIBRATE_ON_BUTTON_PRESS, vibrateOnButton).apply() } 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 0b140063..e5e78d4a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/Constants.kt @@ -23,3 +23,6 @@ val SIX = "six" val SEVEN = "seven" val EIGHT = "eight" val NINE = "nine" + +// shared preferences +val VIBRATE_ON_BUTTON_PRESS = "vibrate_on_button_press" diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 66d1e351..e12a5010 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -29,5 +29,26 @@ android:text="@string/customize_colors"/> + + + + + + + diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 95628522..c9fc6282 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -1,7 +1,9 @@ Schlichter Rechner Rechner - Wert in Zwischenablage kopiert + + + Vibrate on button press Ein Taschenrechner mit grundlegenden Funktionen und einem anpassbaren Widget. diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 3728d72c..3f2e38d2 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -1,7 +1,9 @@ Simple Calculator Calculadora - Valor copiado en el portapapeles + + + Vibrate on button press Una calculadora con funciones básicas y un widget personalizable. diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 4984a4ec..2147b4ce 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -1,7 +1,9 @@ Simple Calculette Calculette - Valeur copiée dans le presse-papier + + + Vibrate on button press Une calculette avec les fonctions de base et un widget customisable. diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 714d4569..8223645d 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -1,7 +1,9 @@ Simple Calculator Calculator - Valore copiato negli appunti + + + Vibrate on button press A calculator with the basic functions and a customizable widget. diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 72a2ce06..877c5775 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -1,7 +1,9 @@  シンプル電卓 電卓 - 値をクリップボードにコピーしました + + + Vibrate on button press 基本機能とカスタマイズ可能なウィジェットを備えた電卓。 diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index f7987efc..c7496212 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -1,7 +1,9 @@ Prosty Kalkulator Kalkulator - Wartość została skopiowana do schowka + + + Vibrate on button press Kalulator z podstawowymi funkcjami oraz konfiguralnym widżetem. diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index b476aa60..fdee98af 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -1,7 +1,9 @@ Simple Calculator Calculadora - Valor copiado para a área de transferência + + + Vibrate on button press Uma calculadora com funções básicas e um widget personalizável. diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 4090832d..a5d832c2 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -1,7 +1,9 @@ Simple Calculator Калькулятор - Значение скопировано в буфер обмена + + + Vibrate on button press Калькулятор с базовым функционалом и настраиваемым виджетом. diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index d59a0cf0..f4f49bcd 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -1,7 +1,9 @@ Jednoduchá kalkulačka Kalkulačka - Hodnota bola skopírovaná do schránky + + + Vibrate on button press Kalkulačka so základnými funkciami a prispôsobiteľným widgetom. diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index b46e22d8..ea20cf5c 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -1,7 +1,9 @@ Simple Calculator Kalkylator - Värdet kopierat till urklippet + + + Vibrate on button press En kalkylator med grundläggande funktioner och en anpassningsbar widget. diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 2e33caaf..c8e93876 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -1,7 +1,9 @@ Basit Hesap Makinesi Hesap Makinesi - Panoya kopyalanan değer + + + Vibrate on button press Temel fonksiyonları ve özelleştirilebilir bir araç\'lı bir hesap makinesi. diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 5f977b4f..9c073a1e 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,5 +1,4 @@ - #77000000 #11000000 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c8f8148d..8223645d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,7 +1,9 @@ Simple Calculator Calculator - Value copied to clipboard + + + Vibrate on button press A calculator with the basic functions and a customizable widget.