add optional vibration on button pressing

This commit is contained in:
tibbi
2017-11-30 19:04:26 +01:00
parent e5f01155ad
commit c2c5cd7ca8
20 changed files with 105 additions and 37 deletions

View File

@ -40,13 +40,13 @@ android {
} }
dependencies { dependencies {
implementation 'com.simplemobiletools:commons:3.0.3' implementation 'com.simplemobiletools:commons:3.0.9'
implementation 'me.grantland:autofittextview:0.2.1' implementation 'me.grantland:autofittextview:0.2.1'
testImplementation 'junit:junit:4.12' testImplementation 'junit:junit:4.12'
testImplementation 'org.robolectric:robolectric:3.5.1' 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:runner:1.0.1'
androidTestImplementation 'com.android.support.test:rules:1.0.1' androidTestImplementation 'com.android.support.test:rules:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'

View File

@ -1,18 +1,18 @@
package com.simplemobiletools.calculator.activities package com.simplemobiletools.calculator.activities
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.View
import com.simplemobiletools.calculator.BuildConfig import com.simplemobiletools.calculator.BuildConfig
import com.simplemobiletools.calculator.R import com.simplemobiletools.calculator.R
import com.simplemobiletools.calculator.extensions.config import com.simplemobiletools.calculator.extensions.config
import com.simplemobiletools.calculator.extensions.updateViewColors import com.simplemobiletools.calculator.extensions.updateViewColors
import com.simplemobiletools.calculator.helpers.* 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.extensions.value
import com.simplemobiletools.commons.helpers.LICENSE_AUTOFITTEXTVIEW import com.simplemobiletools.commons.helpers.LICENSE_AUTOFITTEXTVIEW
import com.simplemobiletools.commons.helpers.LICENSE_ESPRESSO import com.simplemobiletools.commons.helpers.LICENSE_ESPRESSO
@ -23,6 +23,8 @@ import me.grantland.widget.AutofitHelper
class MainActivity : SimpleActivity(), Calculator { class MainActivity : SimpleActivity(), Calculator {
private var storedTextColor = 0 private var storedTextColor = 0
private var vibrateOnButtonPress = true
lateinit var calc: CalculatorImpl lateinit var calc: CalculatorImpl
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
@ -31,22 +33,22 @@ class MainActivity : SimpleActivity(), Calculator {
calc = CalculatorImpl(this, applicationContext) calc = CalculatorImpl(this, applicationContext)
btn_plus.setOnClickListener { calc.handleOperation(PLUS) } btn_plus.setOnClickListener { calc.handleOperation(PLUS); checkHaptic(it) }
btn_minus.setOnClickListener { calc.handleOperation(MINUS) } btn_minus.setOnClickListener { calc.handleOperation(MINUS); checkHaptic(it) }
btn_multiply.setOnClickListener { calc.handleOperation(MULTIPLY) } btn_multiply.setOnClickListener { calc.handleOperation(MULTIPLY); checkHaptic(it) }
btn_divide.setOnClickListener { calc.handleOperation(DIVIDE) } btn_divide.setOnClickListener { calc.handleOperation(DIVIDE); checkHaptic(it) }
btn_modulo.setOnClickListener { calc.handleOperation(MODULO) } btn_modulo.setOnClickListener { calc.handleOperation(MODULO); checkHaptic(it) }
btn_power.setOnClickListener { calc.handleOperation(POWER) } btn_power.setOnClickListener { calc.handleOperation(POWER); checkHaptic(it) }
btn_root.setOnClickListener { calc.handleOperation(ROOT) } 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 } btn_clear.setOnLongClickListener { calc.handleReset(); true }
getButtonIds().forEach { 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) } formula.setOnLongClickListener { copyToClipboard(false) }
result.setOnLongClickListener { copyToClipboard(true) } result.setOnLongClickListener { copyToClipboard(true) }
@ -59,6 +61,7 @@ class MainActivity : SimpleActivity(), Calculator {
if (storedTextColor != config.textColor) { if (storedTextColor != config.textColor) {
updateViewColors(calculator_holder, config.textColor) updateViewColors(calculator_holder, config.textColor)
} }
vibrateOnButtonPress = config.vibrateOnButtonPress
} }
override fun onPause() { override fun onPause() {
@ -80,6 +83,12 @@ class MainActivity : SimpleActivity(), Calculator {
return true return true
} }
private fun checkHaptic(view: View) {
if (vibrateOnButtonPress) {
view.performHapticFeedback()
}
}
private fun launchSettings() { private fun launchSettings() {
startActivity(Intent(applicationContext, SettingsActivity::class.java)) startActivity(Intent(applicationContext, SettingsActivity::class.java))
} }
@ -96,14 +105,12 @@ class MainActivity : SimpleActivity(), Calculator {
value = result.value value = result.value
} }
if (value.isEmpty()) return if (value.isEmpty()) {
return false false
} else {
val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager copyToClipboard(value)
val clip = ClipData.newPlainText(resources.getString(R.string.app_name), value) true
clipboard.primaryClip = clip }
toast(R.string.copied_to_clipboard)
return true
} }
override fun setValue(value: String, context: Context) { override fun setValue(value: String, context: Context) {

View File

@ -2,6 +2,7 @@ package com.simplemobiletools.calculator.activities
import android.os.Bundle import android.os.Bundle
import com.simplemobiletools.calculator.R import com.simplemobiletools.calculator.R
import com.simplemobiletools.calculator.extensions.config
import com.simplemobiletools.commons.extensions.updateTextColors import com.simplemobiletools.commons.extensions.updateTextColors
import kotlinx.android.synthetic.main.activity_settings.* import kotlinx.android.synthetic.main.activity_settings.*
@ -16,6 +17,7 @@ class SettingsActivity : SimpleActivity() {
super.onResume() super.onResume()
setupCustomizeColors() setupCustomizeColors()
setupVibrate()
updateTextColors(settings_scrollview) updateTextColors(settings_scrollview)
} }
@ -24,4 +26,12 @@ class SettingsActivity : SimpleActivity() {
startCustomizationActivity() startCustomizationActivity()
} }
} }
private fun setupVibrate() {
settings_vibrate.isChecked = config.vibrateOnButtonPress
settings_vibrate_holder.setOnClickListener {
settings_vibrate.toggle()
config.vibrateOnButtonPress = settings_vibrate.isChecked
}
}
} }

View File

@ -6,7 +6,7 @@ import android.widget.Button
import android.widget.TextView import android.widget.TextView
import com.simplemobiletools.calculator.helpers.Config 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 // 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) { fun Context.updateViewColors(viewGroup: ViewGroup, textColor: Int) {

View File

@ -7,4 +7,8 @@ class Config(context: Context) : BaseConfig(context) {
companion object { companion object {
fun newInstance(context: Context) = Config(context) 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()
} }

View File

@ -23,3 +23,6 @@ val SIX = "six"
val SEVEN = "seven" val SEVEN = "seven"
val EIGHT = "eight" val EIGHT = "eight"
val NINE = "nine" val NINE = "nine"
// shared preferences
val VIBRATE_ON_BUTTON_PRESS = "vibrate_on_button_press"

View File

@ -29,5 +29,26 @@
android:text="@string/customize_colors"/> android:text="@string/customize_colors"/>
</RelativeLayout> </RelativeLayout>
<RelativeLayout
android:id="@+id/settings_vibrate_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
android:padding="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_vibrate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/vibrate_on_button_press"/>
</RelativeLayout>
</LinearLayout> </LinearLayout>
</ScrollView> </ScrollView>

View File

@ -1,7 +1,9 @@
<resources> <resources>
<string name="app_name">Schlichter Rechner</string> <string name="app_name">Schlichter Rechner</string>
<string name="app_launcher_name">Rechner</string> <string name="app_launcher_name">Rechner</string>
<string name="copied_to_clipboard">Wert in Zwischenablage kopiert</string>
<!-- Settings -->
<string name="vibrate_on_button_press">Vibrate on button press</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have --> <!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<string name="app_short_description">Ein Taschenrechner mit grundlegenden Funktionen und einem anpassbaren Widget.</string> <string name="app_short_description">Ein Taschenrechner mit grundlegenden Funktionen und einem anpassbaren Widget.</string>

View File

@ -1,7 +1,9 @@
<resources> <resources>
<string name="app_name">Simple Calculator</string> <string name="app_name">Simple Calculator</string>
<string name="app_launcher_name">Calculadora</string> <string name="app_launcher_name">Calculadora</string>
<string name="copied_to_clipboard">Valor copiado en el portapapeles</string>
<!-- Settings -->
<string name="vibrate_on_button_press">Vibrate on button press</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have --> <!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<string name="app_short_description">Una calculadora con funciones básicas y un widget personalizable.</string> <string name="app_short_description">Una calculadora con funciones básicas y un widget personalizable.</string>

View File

@ -1,7 +1,9 @@
<resources> <resources>
<string name="app_name">Simple Calculette</string> <string name="app_name">Simple Calculette</string>
<string name="app_launcher_name">Calculette</string> <string name="app_launcher_name">Calculette</string>
<string name="copied_to_clipboard">Valeur copiée dans le presse-papier</string>
<!-- Settings -->
<string name="vibrate_on_button_press">Vibrate on button press</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have --> <!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<string name="app_short_description">Une calculette avec les fonctions de base et un widget customisable.</string> <string name="app_short_description">Une calculette avec les fonctions de base et un widget customisable.</string>

View File

@ -1,7 +1,9 @@
<resources> <resources>
<string name="app_name">Simple Calculator</string> <string name="app_name">Simple Calculator</string>
<string name="app_launcher_name">Calculator</string> <string name="app_launcher_name">Calculator</string>
<string name="copied_to_clipboard">Valore copiato negli appunti</string>
<!-- Settings -->
<string name="vibrate_on_button_press">Vibrate on button press</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have --> <!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<string name="app_short_description">A calculator with the basic functions and a customizable widget.</string> <string name="app_short_description">A calculator with the basic functions and a customizable widget.</string>

View File

@ -1,7 +1,9 @@
<resources> <resources>
<string name="app_name">シンプル電卓</string> <string name="app_name">シンプル電卓</string>
<string name="app_launcher_name">電卓</string> <string name="app_launcher_name">電卓</string>
<string name="copied_to_clipboard">値をクリップボードにコピーしました</string>
<!-- Settings -->
<string name="vibrate_on_button_press">Vibrate on button press</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have --> <!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<string name="app_short_description">基本機能とカスタマイズ可能なウィジェットを備えた電卓。</string> <string name="app_short_description">基本機能とカスタマイズ可能なウィジェットを備えた電卓。</string>

View File

@ -1,7 +1,9 @@
<resources> <resources>
<string name="app_name">Prosty Kalkulator</string> <string name="app_name">Prosty Kalkulator</string>
<string name="app_launcher_name">Kalkulator</string> <string name="app_launcher_name">Kalkulator</string>
<string name="copied_to_clipboard">Wartość została skopiowana do schowka</string>
<!-- Settings -->
<string name="vibrate_on_button_press">Vibrate on button press</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have --> <!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<string name="app_short_description">Kalulator z podstawowymi funkcjami oraz konfiguralnym widżetem.</string> <string name="app_short_description">Kalulator z podstawowymi funkcjami oraz konfiguralnym widżetem.</string>

View File

@ -1,7 +1,9 @@
<resources> <resources>
<string name="app_name">Simple Calculator</string> <string name="app_name">Simple Calculator</string>
<string name="app_launcher_name">Calculadora</string> <string name="app_launcher_name">Calculadora</string>
<string name="copied_to_clipboard">Valor copiado para a área de transferência</string>
<!-- Settings -->
<string name="vibrate_on_button_press">Vibrate on button press</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have --> <!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<string name="app_short_description">Uma calculadora com funções básicas e um widget personalizável.</string> <string name="app_short_description">Uma calculadora com funções básicas e um widget personalizável.</string>

View File

@ -1,7 +1,9 @@
<resources> <resources>
<string name="app_name">Simple Calculator</string> <string name="app_name">Simple Calculator</string>
<string name="app_launcher_name">Калькулятор</string> <string name="app_launcher_name">Калькулятор</string>
<string name="copied_to_clipboard">Значение скопировано в буфер обмена</string>
<!-- Settings -->
<string name="vibrate_on_button_press">Vibrate on button press</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have --> <!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<string name="app_short_description">Калькулятор с базовым функционалом и настраиваемым виджетом.</string> <string name="app_short_description">Калькулятор с базовым функционалом и настраиваемым виджетом.</string>

View File

@ -1,7 +1,9 @@
<resources> <resources>
<string name="app_name">Jednoduchá kalkulačka</string> <string name="app_name">Jednoduchá kalkulačka</string>
<string name="app_launcher_name">Kalkulačka</string> <string name="app_launcher_name">Kalkulačka</string>
<string name="copied_to_clipboard">Hodnota bola skopírovaná do schránky</string>
<!-- Settings -->
<string name="vibrate_on_button_press">Vibrate on button press</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have --> <!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<string name="app_short_description">Kalkulačka so základnými funkciami a prispôsobiteľným widgetom.</string> <string name="app_short_description">Kalkulačka so základnými funkciami a prispôsobiteľným widgetom.</string>

View File

@ -1,7 +1,9 @@
<resources> <resources>
<string name="app_name">Simple Calculator</string> <string name="app_name">Simple Calculator</string>
<string name="app_launcher_name">Kalkylator</string> <string name="app_launcher_name">Kalkylator</string>
<string name="copied_to_clipboard">Värdet kopierat till urklippet</string>
<!-- Settings -->
<string name="vibrate_on_button_press">Vibrate on button press</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have --> <!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<string name="app_short_description">En kalkylator med grundläggande funktioner och en anpassningsbar widget.</string> <string name="app_short_description">En kalkylator med grundläggande funktioner och en anpassningsbar widget.</string>

View File

@ -1,7 +1,9 @@
<resources> <resources>
<string name="app_name">Basit Hesap Makinesi</string> <string name="app_name">Basit Hesap Makinesi</string>
<string name="app_launcher_name">Hesap Makinesi</string> <string name="app_launcher_name">Hesap Makinesi</string>
<string name="copied_to_clipboard">Panoya kopyalanan değer</string>
<!-- Settings -->
<string name="vibrate_on_button_press">Vibrate on button press</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have --> <!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<string name="app_short_description">Temel fonksiyonları ve özelleştirilebilir bir araç\'lı bir hesap makinesi.</string> <string name="app_short_description">Temel fonksiyonları ve özelleştirilebilir bir araç\'lı bir hesap makinesi.</string>

View File

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<color name="text_grey">#77000000</color>
<color name="dark_grey_pressed_mask">#11000000</color> <color name="dark_grey_pressed_mask">#11000000</color>
</resources> </resources>

View File

@ -1,7 +1,9 @@
<resources> <resources>
<string name="app_name">Simple Calculator</string> <string name="app_name">Simple Calculator</string>
<string name="app_launcher_name">Calculator</string> <string name="app_launcher_name">Calculator</string>
<string name="copied_to_clipboard">Value copied to clipboard</string>
<!-- Settings -->
<string name="vibrate_on_button_press">Vibrate on button press</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have --> <!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<string name="app_short_description">A calculator with the basic functions and a customizable widget.</string> <string name="app_short_description">A calculator with the basic functions and a customizable widget.</string>