diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index e62f585..9aff3fb 100644 Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/components/OnSingleClickListener.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/components/OnSingleClickListener.kt new file mode 100644 index 0000000..6462ec2 --- /dev/null +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/components/OnSingleClickListener.kt @@ -0,0 +1,31 @@ +package com.tommasoberlose.anotherwidget.components + +import android.view.View + +class OnSingleClickListener : View.OnClickListener { + + private val onClickListener: View.OnClickListener + + constructor(listener: View.OnClickListener) { + onClickListener = listener + } + + constructor(listener: (View) -> Unit) { + onClickListener = View.OnClickListener { listener.invoke(it) } + } + + override fun onClick(v: View) { + val currentTimeMillis = System.currentTimeMillis() + + if (currentTimeMillis >= previousClickTimeMillis + DELAY_MILLIS) { + previousClickTimeMillis = currentTimeMillis + onClickListener.onClick(v) + } + } + + companion object { + private const val DELAY_MILLIS = 200L + private var previousClickTimeMillis = 0L + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/MainFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/MainFragment.kt index 613cad6..0bae616 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/MainFragment.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/MainFragment.kt @@ -94,7 +94,7 @@ class MainFragment : Fragment() { navHost?.navController?.addOnDestinationChangedListener { controller, destination, _ -> val show = destination.id != R.id.tabSelectorFragment binding.actionBack.animate().alpha(if (show) 1f else 0f).setDuration(200).translationX((if (show) 0f else 4f).convertDpToPixel(requireContext())).start() - binding.actionBack.setOnClickListener { + binding.actionBack.setOnSingleClickListener { controller.navigateUp() } binding.actionBack.isClickable = show @@ -105,7 +105,7 @@ class MainFragment : Fragment() { binding.fragmentTitle.text = if (show) destination.label.toString() else getString(R.string.app_name) } - binding.actionSettings.setOnClickListener { + binding.actionSettings.setOnSingleClickListener { Navigation.findNavController(it).navigate(R.id.action_appMainFragment_to_appSettingsFragment,) } diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/SettingsFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/SettingsFragment.kt index a6fc9e5..ccb0bef 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/SettingsFragment.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/SettingsFragment.kt @@ -36,6 +36,7 @@ import com.tommasoberlose.anotherwidget.ui.activities.settings.SupportDevActivit import com.tommasoberlose.anotherwidget.ui.viewmodels.MainViewModel import com.tommasoberlose.anotherwidget.utils.checkGrantedPermission import com.tommasoberlose.anotherwidget.utils.openURI +import com.tommasoberlose.anotherwidget.utils.setOnSingleClickListener import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch @@ -76,7 +77,7 @@ class SettingsFragment : Fragment() { override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) - binding.actionBack.setOnClickListener { + binding.actionBack.setOnSingleClickListener { Navigation.findNavController(it).popBackStack() } diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/GesturesFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/GesturesFragment.kt index 4f9fa61..d16aff1 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/GesturesFragment.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/GesturesFragment.kt @@ -100,7 +100,7 @@ class GesturesFragment : Fragment() { maintainScrollPosition { binding.calendarAppLabel.text = when { it == IntentHelper.DO_NOTHING_OPTION -> getString(R.string.gestures_do_nothing) - it == IntentHelper.REFRESH_WIDGET_OPTION -> "None, the widget will be refreshed" + it == IntentHelper.REFRESH_WIDGET_OPTION -> getString(R.string.gestures_refresh_widget) it != IntentHelper.DEFAULT_OPTION -> it else -> { if (IntentHelper.getCalendarIntent(requireContext()).isDefaultSet(requireContext())) { @@ -125,7 +125,7 @@ class GesturesFragment : Fragment() { maintainScrollPosition { binding.clockAppLabel.text = when { it == IntentHelper.DO_NOTHING_OPTION -> getString(R.string.gestures_do_nothing) - it == IntentHelper.REFRESH_WIDGET_OPTION -> "None, the widget will be refreshed" + it == IntentHelper.REFRESH_WIDGET_OPTION -> getString(R.string.gestures_refresh_widget) it != IntentHelper.DEFAULT_OPTION -> it else -> { if (IntentHelper.getClockIntent(requireContext()).isDefaultSet(requireContext())) { @@ -144,7 +144,7 @@ class GesturesFragment : Fragment() { maintainScrollPosition { binding.weatherAppLabel.text = when { it == IntentHelper.DO_NOTHING_OPTION -> getString(R.string.gestures_do_nothing) - it == IntentHelper.REFRESH_WIDGET_OPTION -> "None, the widget will be refreshed" + it == IntentHelper.REFRESH_WIDGET_OPTION -> getString(R.string.gestures_refresh_widget) it != IntentHelper.DEFAULT_OPTION -> it else -> getString(R.string.default_weather_app) } diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/PreferencesFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/PreferencesFragment.kt index 92b89b5..3c6c9d2 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/PreferencesFragment.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/PreferencesFragment.kt @@ -106,15 +106,15 @@ class PreferencesFragment : Fragment() { private fun setupListener() { - binding.actionTypography.setOnClickListener { + binding.actionTypography.setOnSingleClickListener { Navigation.findNavController(it).navigate(R.id.action_tabSelectorFragment_to_typographyTabFragment) } - binding.actionGeneralSettings.setOnClickListener { + binding.actionGeneralSettings.setOnSingleClickListener { Navigation.findNavController(it).navigate(R.id.action_tabSelectorFragment_to_generalTabFragment) } - binding.actionShowEvents.setOnClickListener { + binding.actionShowEvents.setOnSingleClickListener { Navigation.findNavController(it).navigate(R.id.action_tabSelectorFragment_to_calendarTabFragment) } @@ -126,7 +126,7 @@ class PreferencesFragment : Fragment() { } } - binding.actionShowWeather.setOnClickListener { + binding.actionShowWeather.setOnSingleClickListener { Navigation.findNavController(it).navigate(R.id.action_tabSelectorFragment_to_weatherTabFragment) } @@ -139,7 +139,7 @@ class PreferencesFragment : Fragment() { } } - binding.actionShowClock.setOnClickListener { + binding.actionShowClock.setOnSingleClickListener { Navigation.findNavController(it).navigate(R.id.action_tabSelectorFragment_to_clockTabFragment) } @@ -147,11 +147,11 @@ class PreferencesFragment : Fragment() { Preferences.showClock = enabled } - binding.actionShowGlance.setOnClickListener { + binding.actionShowGlance.setOnSingleClickListener { Navigation.findNavController(it).navigate(R.id.action_tabSelectorFragment_to_glanceTabFragment) } - binding.actionTabDefaultApp.setOnClickListener { + binding.actionTabDefaultApp.setOnSingleClickListener { Navigation.findNavController(it).navigate(R.id.action_tabSelectorFragment_to_gesturesFragment) } } diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/utils/Extensions.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/utils/Extensions.kt index 129e0e4..707f29b 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/utils/Extensions.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/utils/Extensions.kt @@ -26,6 +26,7 @@ import androidx.browser.customtabs.CustomTabColorSchemeParams import androidx.core.animation.addListener import androidx.core.view.isVisible import com.tommasoberlose.anotherwidget.R +import com.tommasoberlose.anotherwidget.components.OnSingleClickListener import java.util.* @@ -253,4 +254,12 @@ fun Locale.isMetric(): Boolean { "US", "LR", "MM", "GB" -> false else -> true } +} + +fun View.setOnSingleClickListener(l: View.OnClickListener) { + setOnClickListener(OnSingleClickListener(l)) +} + +fun View.setOnSingleClickListener(l: (View) -> Unit) { + setOnClickListener(OnSingleClickListener(l)) } \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f407e3f..3d2c9b0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -358,4 +358,5 @@ Widget spacing and tweaks Smart content Spacing + None, the widget will be refreshed diff --git a/build.gradle b/build.gradle index 19b085b..abafc28 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:4.1.1' + classpath 'com.android.tools.build:gradle:4.1.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.google.gms:google-services:4.3.4'