From 55b3a02da5474fbd3fe57a58fcb17f29974692a1 Mon Sep 17 00:00:00 2001 From: Tommaso Berlose Date: Mon, 4 May 2020 01:46:22 +0200 Subject: [PATCH] Bugfixes --- .../components/BottomSheetColorPicker.kt | 65 +++- .../anotherwidget/helpers/AlarmHelper.kt | 9 +- .../ui/fragments/AdvancedSettingsFragment.kt | 9 +- .../ui/fragments/CalendarSettingsFragment.kt | 8 +- .../ui/fragments/ClockSettingsFragment.kt | 2 +- .../ui/fragments/GeneralSettingsFragment.kt | 11 +- .../ui/fragments/WeatherSettingsFragment.kt | 4 +- .../ui/viewmodels/SupportDevViewModel.kt | 5 +- .../layout/activity_choose_application.xml | 2 + .../main/res/layout/bottom_sheet_menu_hor.xml | 27 +- app/src/main/res/values/arrays.xml | 302 +++++++++++++++++- 11 files changed, 404 insertions(+), 40 deletions(-) diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/components/BottomSheetColorPicker.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/components/BottomSheetColorPicker.kt index 580cca1..2a7bed1 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/components/BottomSheetColorPicker.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/components/BottomSheetColorPicker.kt @@ -3,16 +3,29 @@ package com.tommasoberlose.anotherwidget.components import android.content.Context import android.content.res.ColorStateList import android.graphics.Color +import android.text.Editable +import android.text.TextWatcher +import android.util.Log import android.view.View import android.widget.GridLayout import androidx.annotation.ColorInt import androidx.core.content.ContextCompat import androidx.core.view.isVisible +import androidx.core.widget.addTextChangedListener +import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog import com.tommasoberlose.anotherwidget.R +import com.tommasoberlose.anotherwidget.helpers.ColorHelper import com.tommasoberlose.anotherwidget.helpers.ColorHelper.isColorDark +import com.tommasoberlose.anotherwidget.utils.expand +import com.tommasoberlose.anotherwidget.utils.reveal +import kotlinx.android.synthetic.main.bottom_sheet_menu_hor.* import kotlinx.android.synthetic.main.bottom_sheet_menu_hor.view.* +import kotlinx.android.synthetic.main.bottom_sheet_menu_hor.view.color_loader import kotlinx.android.synthetic.main.color_picker_menu_item.view.* +import kotlinx.coroutines.* +import java.lang.Exception +import java.util.prefs.Preferences class BottomSheetColorPicker( context: Context, @@ -22,6 +35,8 @@ class BottomSheetColorPicker( private val onColorSelected: ((selectedValue: Int) -> Unit)? = null ) : BottomSheetDialog(context, R.style.BottomSheetDialogTheme) { + private val loadingJob: Job? = null + override fun show() { val view = View.inflate(context, R.layout.bottom_sheet_menu_hor, null) @@ -29,27 +44,45 @@ class BottomSheetColorPicker( view.header.isVisible = header != null view.header_text.text = header ?: "" - // Menu - for (@ColorInt color: Int in colors) { - val itemView = View.inflate(context, R.layout.color_picker_menu_item, null) - itemView.color.setCardBackgroundColor(ColorStateList.valueOf(color)) - itemView.check.setColorFilter(ContextCompat.getColor(context, - if (color.isColorDark()) android.R.color.white else android.R.color.black - ), android.graphics.PorterDuff.Mode.MULTIPLY) - itemView.check.isVisible = selected == color - itemView.color.setOnClickListener { - onColorSelected?.invoke(color) - this.dismiss() + val itemViews: ArrayList = ArrayList() + + GlobalScope.launch(Dispatchers.IO) { + for (@ColorInt color: Int in colors) { + val itemView = View.inflate(context, R.layout.color_picker_menu_item, null) + itemView.color.setCardBackgroundColor(ColorStateList.valueOf(color)) + itemView.check.setColorFilter(ContextCompat.getColor(context, + if (color.isColorDark()) android.R.color.white else android.R.color.black + ), android.graphics.PorterDuff.Mode.MULTIPLY) + itemView.check.isVisible = selected == color + itemView.color.setOnClickListener { + onColorSelected?.invoke(color) + this@BottomSheetColorPicker.dismiss() + } + itemViews.add(itemView) + } + + withContext(Dispatchers.Main) { + itemViews.forEach { + view.menu.addView(it, GridLayout.LayoutParams( + GridLayout.spec(GridLayout.UNDEFINED, 1f), + GridLayout.spec(GridLayout.UNDEFINED, 1f) + )) + } + color_loader.isVisible = false + view.menu.isVisible = true + this@BottomSheetColorPicker.behavior.state = BottomSheetBehavior.STATE_EXPANDED } - view.menu.addView(itemView, GridLayout.LayoutParams( - GridLayout.spec(GridLayout.UNDEFINED, 1f), - GridLayout.spec(GridLayout.UNDEFINED, 1f) - ) - ) } + // Menu + setContentView(view) super.show() } + override fun onStop() { + loadingJob?.cancel() + super.onStop() + } + } \ No newline at end of file diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/AlarmHelper.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/AlarmHelper.kt index 537e18a..a949b07 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/AlarmHelper.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/AlarmHelper.kt @@ -7,12 +7,13 @@ import java.util.* object AlarmHelper { fun getNextAlarm(context: Context): String = with(context.getSystemService(Context.ALARM_SERVICE) as AlarmManager) { + val alarm = nextAlarmClock return if ( - nextAlarmClock != null - && nextAlarmClock.triggerTime - Calendar.getInstance().timeInMillis > 2 * 60 * 1000 - && nextAlarmClock.triggerTime - Calendar.getInstance().timeInMillis < 24 * 60 * 60 * 1000 + alarm != null + && alarm.triggerTime - Calendar.getInstance().timeInMillis > 2 * 60 * 1000 + && alarm.triggerTime - Calendar.getInstance().timeInMillis < 24 * 60 * 60 * 1000 ) { - DateFormat.getTimeFormat(context).format(Date(nextAlarmClock.triggerTime)) + DateFormat.getTimeFormat(context).format(Date(alarm.triggerTime)) } else { "" } diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/AdvancedSettingsFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/AdvancedSettingsFragment.kt index 736edad..ff18847 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/AdvancedSettingsFragment.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/AdvancedSettingsFragment.kt @@ -29,6 +29,7 @@ import com.tommasoberlose.anotherwidget.ui.activities.SupportDevActivity import com.tommasoberlose.anotherwidget.ui.viewmodels.MainViewModel import com.tommasoberlose.anotherwidget.helpers.CalendarHelper import com.tommasoberlose.anotherwidget.ui.widgets.MainWidget +import com.tommasoberlose.anotherwidget.utils.checkGrantedPermission import com.tommasoberlose.anotherwidget.utils.openURI import kotlinx.android.synthetic.main.fragment_advanced_settings.* import kotlinx.coroutines.delay @@ -86,7 +87,7 @@ class AdvancedSettingsFragment : Fragment() { }) viewModel.showWallpaper.observe(viewLifecycleOwner, Observer { - show_wallpaper_label.text = if (it && requireActivity().checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) getString(R.string.settings_visible) else getString(R.string.settings_not_visible) + show_wallpaper_label.text = if (it && activity?.checkGrantedPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == true) getString(R.string.settings_visible) else getString(R.string.settings_not_visible) }) } @@ -136,15 +137,15 @@ class AdvancedSettingsFragment : Fragment() { } action_translate.setOnClickListener { - requireActivity().openURI("https://github.com/tommasoberlose/another-widget/blob/master/app/src/main/res/values/strings.xml") + activity?.openURI("https://github.com/tommasoberlose/another-widget/blob/master/app/src/main/res/values/strings.xml") } action_website.setOnClickListener { - requireActivity().openURI("http://tommasoberlose.com/") + activity?.openURI("http://tommasoberlose.com/") } action_feedback.setOnClickListener { - requireActivity().openURI("https://github.com/tommasoberlose/another-widget/issues") + activity?.openURI("https://github.com/tommasoberlose/another-widget/issues") } action_help_dev.setOnClickListener { diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/CalendarSettingsFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/CalendarSettingsFragment.kt index cd153b0..6812022 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/CalendarSettingsFragment.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/CalendarSettingsFragment.kt @@ -208,7 +208,7 @@ class CalendarSettingsFragment : Fragment() { checkReadEventsPermission() }.show() } else { - requireActivity().toast(getString(R.string.calendar_settings_list_error)) + activity?.toast(getString(R.string.calendar_settings_list_error)) } } @@ -293,7 +293,7 @@ class CalendarSettingsFragment : Fragment() { dialog.addOnSelectItemListener { value -> if (value == "-") { - startActivity(Intent(requireActivity(), CustomDateActivity::class.java)) + startActivity(Intent(requireContext(), CustomDateActivity::class.java)) } else { Preferences.dateFormat = value } @@ -311,7 +311,7 @@ class CalendarSettingsFragment : Fragment() { } private fun checkReadEventsPermission(showEvents: Boolean = Preferences.showEvents) { - if (requireActivity().checkGrantedPermission(Manifest.permission.READ_CALENDAR)) { + if (activity?.checkGrantedPermission(Manifest.permission.READ_CALENDAR) == true) { show_events_label.text = if (showEvents) getString(R.string.show_events_visible) else getString(R.string.show_events_not_visible) read_calendar_permission_alert_icon.isVisible = false CalendarHelper.updateEventList(requireContext()) @@ -325,7 +325,7 @@ class CalendarSettingsFragment : Fragment() { } private fun requirePermission() { - Dexter.withContext(requireActivity()) + Dexter.withContext(requireContext()) .withPermissions( Manifest.permission.READ_CALENDAR ).withListener(object: MultiplePermissionsListener { diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/ClockSettingsFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/ClockSettingsFragment.kt index 7f2e11b..a543da9 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/ClockSettingsFragment.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/ClockSettingsFragment.kt @@ -127,7 +127,7 @@ class ClockSettingsFragment : Fragment() { action_clock_app.setOnClickListener { if (Preferences.showClock) { - startActivityForResult(Intent(requireActivity(), ChooseApplicationActivity::class.java), + startActivityForResult(Intent(requireContext(), ChooseApplicationActivity::class.java), RequestCode.CLOCK_APP_REQUEST_CODE.code ) } diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/GeneralSettingsFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/GeneralSettingsFragment.kt index 741fd13..01dfff8 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/GeneralSettingsFragment.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/GeneralSettingsFragment.kt @@ -22,8 +22,10 @@ import com.tommasoberlose.anotherwidget.helpers.SettingsStringHelper import com.tommasoberlose.anotherwidget.ui.activities.MainActivity import com.tommasoberlose.anotherwidget.ui.viewmodels.MainViewModel import kotlinx.android.synthetic.main.fragment_general_settings.* +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext class GeneralSettingsFragment : Fragment() { @@ -33,6 +35,7 @@ class GeneralSettingsFragment : Fragment() { } private lateinit var viewModel: MainViewModel + private lateinit var colors: IntArray override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -59,6 +62,12 @@ class GeneralSettingsFragment : Fragment() { super.onActivityCreated(savedInstanceState) setupListener() + lifecycleScope.launch(Dispatchers.IO) { + val lazyColors = requireContext().resources.getIntArray(R.array.material_colors) + withContext(Dispatchers.Main) { + colors = lazyColors + } + } } @@ -140,7 +149,7 @@ class GeneralSettingsFragment : Fragment() { Color.parseColor(Preferences.textGlobalColor) } BottomSheetColorPicker(requireContext(), - colors = requireActivity().resources.getIntArray(R.array.grey), + colors = colors, header = getString(R.string.settings_font_color_title), selected = textColor, onColorSelected = { color: Int -> diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/WeatherSettingsFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/WeatherSettingsFragment.kt index 2e93abc..7a1a832 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/WeatherSettingsFragment.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/WeatherSettingsFragment.kt @@ -132,7 +132,7 @@ class WeatherSettingsFragment : Fragment() { } private fun checkLocationPermission() { - if (requireActivity().checkGrantedPermission(Manifest.permission.ACCESS_FINE_LOCATION)) { + if (activity?.checkGrantedPermission(Manifest.permission.ACCESS_FINE_LOCATION) == true) { location_permission_alert_icon.isVisible = false WeatherReceiver.setUpdates(requireContext()) } else if (Preferences.showWeather && Preferences.customLocationAdd == "") { @@ -228,7 +228,7 @@ class WeatherSettingsFragment : Fragment() { } private fun requirePermission() { - Dexter.withContext(requireActivity()) + Dexter.withContext(requireContext()) .withPermissions( Manifest.permission.ACCESS_FINE_LOCATION ).withListener(object: MultiplePermissionsListener { diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/viewmodels/SupportDevViewModel.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/viewmodels/SupportDevViewModel.kt index 2b4c6a5..e6f310b 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/viewmodels/SupportDevViewModel.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/viewmodels/SupportDevViewModel.kt @@ -49,13 +49,14 @@ class SupportDevViewModel : ViewModel() { fun handlePurchase(purchase: Purchase) { if (!purchase.isAcknowledged) { viewModelScope.launch(Dispatchers.IO) { + val token = purchase.purchaseToken val acknowledgePurchaseParams = AcknowledgePurchaseParams.newBuilder() - .setPurchaseToken(purchase.purchaseToken) + .setPurchaseToken(token) billingClient.acknowledgePurchase(acknowledgePurchaseParams.build()) val consumeParams = ConsumeParams.newBuilder() - .setPurchaseToken(purchase.purchaseToken) + .setPurchaseToken(token) .build() billingClient.consumePurchase(consumeParams) } diff --git a/app/src/main/res/layout/activity_choose_application.xml b/app/src/main/res/layout/activity_choose_application.xml index 71e1986..1c53100 100644 --- a/app/src/main/res/layout/activity_choose_application.xml +++ b/app/src/main/res/layout/activity_choose_application.xml @@ -69,6 +69,8 @@ android:paddingLeft="16dp" android:paddingRight="16dp" android:inputType="textCapWords" + android:textColor="@color/colorPrimaryText" + android:textColorHint="@color/colorSecondaryText" android:textAlignment="viewStart" android:id="@+id/search" android:gravity="center_vertical|start" diff --git a/app/src/main/res/layout/bottom_sheet_menu_hor.xml b/app/src/main/res/layout/bottom_sheet_menu_hor.xml index ea3551d..bd4493e 100644 --- a/app/src/main/res/layout/bottom_sheet_menu_hor.xml +++ b/app/src/main/res/layout/bottom_sheet_menu_hor.xml @@ -30,10 +30,27 @@ android:layout_marginTop="16dp" android:background="@color/disabledButtonBackground" /> - + android:layout_height="wrap_content"> + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 479e2b5..8fe435b 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -1,6 +1,7 @@ - + + #FFFFFF #FAFAFA #F5F5F5 @@ -13,5 +14,304 @@ #424242 #212121 #000000 + + + + #FFEBEE + #FFCDD2 + #EF9A9A + #E57373 + #EF5350 + #F44336 + #E53935 + #D32F2F + #C62828 + #B71C1C + #FF8A80 + #FF5252 + #FF1744 + #D50000 + + + + #FCE4EC + #F8BBD0 + #F48FB1 + #F06292 + #EC407A + #E91E63 + #D81B60 + #C2185B + #AD1457 + #880E4F + #FF80AB + #FF4081 + #F50057 + #C51162 + + + + #F3E5F5 + #E1BEE7 + #CE93D8 + #BA68C8 + #AB47BC + #9C27B0 + #8E24AA + #7B1FA2 + #6A1B9A + #4A148C + #EA80FC + #E040FB + #D500F9 + #AA00FF + + + + #EDE7F6 + #D1C4E9 + #B39DDB + #9575CD + #7E57C2 + #673AB7 + #5E35B1 + #512DA8 + #4527A0 + #311B92 + #B388FF + #7C4DFF + #651FFF + #6200EA + + + + #E8EAF6 + #C5CAE9 + #9FA8DA + #7986CB + #5C6BC0 + #3F51B5 + #3949AB + #303F9F + #283593 + #1A237E + #8C9EFF + #536DFE + #3D5AFE + #304FFE + + + + #E3F2FD + #BBDEFB + #90CAF9 + #64B5F6 + #42A5F5 + #2196F3 + #1E88E5 + #1976D2 + #1565C0 + #0D47A1 + #82B1FF + #448AFF + #2979FF + #2962FF + + + + #E1F5FE + #B3E5FC + #81D4FA + #4FC3F7 + #29B6F6 + #03A9F4 + #039BE5 + #0288D1 + #0277BD + #01579B + #80D8FF + #40C4FF + #00B0FF + #0091EA + + + + #E0F7FA + #B2EBF2 + #80DEEA + #4DD0E1 + #26C6DA + #00BCD4 + #00ACC1 + #0097A7 + #00838F + #006064 + #84FFFF + #18FFFF + #00E5FF + #00B8D4 + + + + #E0F2F1 + #B2DFDB + #80CBC4 + #4DB6AC + #26A69A + #009688 + #00897B + #00796B + #00695C + #004D40 + #A7FFEB + #64FFDA + #1DE9B6 + #00BFA5 + + + + #E8F5E9 + #C8E6C9 + #A5D6A7 + #81C784 + #66BB6A + #4CAF50 + #43A047 + #388E3C + #2E7D32 + #1B5E20 + #B9F6CA + #69F0AE + #00E676 + #00C853 + + + + #F1F8E9 + #DCEDC8 + #C5E1A5 + #AED581 + #9CCC65 + #8BC34A + #7CB342 + #689F38 + #558B2F + #33691E + #CCFF90 + #B2FF59 + #76FF03 + #64DD17 + + + + #F9FBE7 + #F0F4C3 + #E6EE9C + #DCE775 + #D4E157 + #CDDC39 + #C0CA33 + #AFB42B + #9E9D24 + #827717 + #F4FF81 + #EEFF41 + #C6FF00 + #AEEA00 + + + + #FFFDE7 + #FFF9C4 + #FFF59D + #FFF176 + #FFEE58 + #FFEB3B + #FDD835 + #FBC02D + #F9A825 + #F57F17 + #FFFF8D + #FFFF00 + #FFEA00 + #FFD600 + + + + #FFF8E1 + #FFECB3 + #FFE082 + #FFD54F + #FFCA28 + #FFC107 + #FFB300 + #FFA000 + #FF8F00 + #FF6F00 + #FFE57F + #FFD740 + #FFC400 + #FFAB00 + + + + #FFF3E0 + #FFE0B2 + #FFCC80 + #FFB74D + #FFA726 + #FF9800 + #FB8C00 + #F57C00 + #EF6C00 + #E65100 + #FFD180 + #FFAB40 + #FF9100 + #FF6D00 + + + + #FBE9E7 + #FFCCBC + #FFAB91 + #FF8A65 + #FF7043 + #FF5722 + #F4511E + #E64A19 + #D84315 + #BF360C + #FF9E80 + #FF6E40 + #FF3D00 + #DD2C00 + + + + #EFEBE9 + #D7CCC8 + #BCAAA4 + #A1887F + #8D6E63 + #795548 + #6D4C41 + #5D4037 + #4E342E + #3E2723 + + + + #ECEFF1 + #CFD8DC + #B0BEC5 + #90A4AE + #78909C + #607D8B + #546E7A + #455A64 + #37474F + #263238 + \ No newline at end of file