diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/components/FixedFocusScrollView.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/components/FixedFocusScrollView.kt new file mode 100644 index 0000000..b5f88ab --- /dev/null +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/components/FixedFocusScrollView.kt @@ -0,0 +1,24 @@ +package com.tommasoberlose.anotherwidget.components + +import android.content.Context +import android.graphics.Rect +import android.util.AttributeSet +import android.util.Log +import android.view.View +import android.widget.ScrollView + + +class FixedFocusScrollView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyle: Int = 0 +) : ScrollView(context, attrs, defStyle) { + + var isScrollable = true + + override fun scrollTo(x: Int, y: Int) { + if (isScrollable) { + super.scrollTo(x, y) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/components/MenuItem.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/components/MenuItem.kt new file mode 100644 index 0000000..237390d --- /dev/null +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/components/MenuItem.kt @@ -0,0 +1,21 @@ +package com.tommasoberlose.anotherwidget.components + +import android.view.View +import android.widget.CompoundButton + +class MenuItem ( + val icon: Int, + val getIcon: (() -> Int)? = null, + val title: String, + val label: String = "", + val getLabel: (() -> String)? = null, + val isEnabled: (() -> Boolean) = fun (): Boolean { return true }, + val onClick: View.OnClickListener? = null, + val onLongClick: View.OnLongClickListener? = null, + val showToggle: Boolean = false, + val toggleValue: (() -> Boolean) = fun (): Boolean { return false }, + val onToggle: CompoundButton.OnCheckedChangeListener? = null, + val showPermission: (() -> Boolean) = fun (): Boolean { return false }, + val onPermissionClickListener: View.OnClickListener? = null, + val render: ((view: View) -> Unit)? = null +) \ No newline at end of file diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/CalendarHelper.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/CalendarHelper.kt index 57a3981..b21ac66 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/CalendarHelper.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/CalendarHelper.kt @@ -24,7 +24,6 @@ import kotlin.collections.ArrayList */ object CalendarHelper { - fun updateEventList(context: Context) { val eventRepository = EventRepository(context) if (Preferences.showEvents) { diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/CalendarTabFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/CalendarTabFragment.kt index db08b48..86c38ca 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/CalendarTabFragment.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/CalendarTabFragment.kt @@ -74,6 +74,11 @@ class CalendarTabFragment : Fragment() { override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) + show_all_day_toggle.isChecked = Preferences.calendarAllDay + show_declined_events_toggle.isChecked = Preferences.showDeclinedEvents + show_diff_time_toggle.isChecked = Preferences.showDiffTime + show_multiple_events_toggle.isChecked = Preferences.showNextEvent + setupListener() } @@ -82,6 +87,7 @@ class CalendarTabFragment : Fragment() { viewModel: MainViewModel ) { binding.isCalendarEnabled = Preferences.showEvents + binding.isDiffEnabled = Preferences.showDiffTime || !Preferences.showEvents viewModel.showEvents.observe(viewLifecycleOwner, Observer { maintainScrollPosition { @@ -92,8 +98,10 @@ class CalendarTabFragment : Fragment() { } else { CalendarHelper.removeEventUpdatesAndroidN(requireContext()) } + binding.isDiffEnabled = Preferences.showDiffTime || !it } checkReadEventsPermission() + updateCalendar() }) viewModel.calendarAllDay.observe(viewLifecycleOwner, Observer { @@ -101,14 +109,14 @@ class CalendarTabFragment : Fragment() { all_day_label?.text = if (it) getString(R.string.settings_visible) else getString(R.string.settings_not_visible) } - checkReadEventsPermission() + updateCalendar() }) viewModel.showDeclinedEvents.observe(viewLifecycleOwner, Observer { maintainScrollPosition { show_declined_events_label?.text = if (it) getString(R.string.settings_visible) else getString(R.string.settings_not_visible) } - checkReadEventsPermission() + updateCalendar() }) viewModel.secondRowInformation.observe(viewLifecycleOwner, Observer { @@ -120,6 +128,7 @@ class CalendarTabFragment : Fragment() { viewModel.showDiffTime.observe(viewLifecycleOwner, Observer { maintainScrollPosition { show_diff_time_label?.text = if (it) getString(R.string.settings_visible) else getString(R.string.settings_not_visible) + binding.isDiffEnabled = it || !Preferences.showEvents } }) @@ -138,7 +147,7 @@ class CalendarTabFragment : Fragment() { maintainScrollPosition { show_until_label?.text = getString(SettingsStringHelper.getShowUntilString(it)) } - checkReadEventsPermission() + updateCalendar() }) viewModel.showNextEvent.observe(viewLifecycleOwner, Observer { @@ -222,7 +231,7 @@ class CalendarTabFragment : Fragment() { dialog.addOnMultipleSelectItemListener { values -> CalendarHelper.filterCalendar(calendarSelectorList.map { it.id }.filter { !values.contains(it) }) - checkReadEventsPermission() + updateCalendar() }.show() } else { activity?.toast(getString(R.string.calendar_settings_list_error)) @@ -231,50 +240,54 @@ class CalendarTabFragment : Fragment() { action_show_all_day.setOnClickListener { if (Preferences.showEvents) { - BottomSheetMenu(requireContext(), header = getString(R.string.settings_all_day_title)).setSelectedValue(Preferences.calendarAllDay) - .addItem(getString(R.string.settings_visible), true) - .addItem(getString(R.string.settings_not_visible), false) - .addOnSelectItemListener { value -> - Preferences.calendarAllDay = value - }.show() + show_all_day_toggle.isChecked = !show_all_day_toggle.isChecked + } + } + + show_all_day_toggle.setOnCheckedChangeListener { _, isChecked -> + if (Preferences.showEvents) { + Preferences.calendarAllDay = isChecked } } action_show_declined_events.setOnClickListener { if (Preferences.showEvents) { - BottomSheetMenu(requireContext(), header = getString(R.string.settings_show_declined_events_title)).setSelectedValue(Preferences.showDeclinedEvents) - .addItem(getString(R.string.settings_visible), true) - .addItem(getString(R.string.settings_not_visible), false) - .addOnSelectItemListener { value -> - Preferences.showDeclinedEvents = value - }.show() + show_declined_events_toggle.isChecked = !show_declined_events_toggle.isChecked + } + } + + show_declined_events_toggle.setOnCheckedChangeListener { _, isChecked -> + if (Preferences.showEvents) { + Preferences.showDeclinedEvents = isChecked } } action_show_multiple_events.setOnClickListener { if (Preferences.showEvents) { - BottomSheetMenu(requireContext(), header = getString(R.string.settings_show_multiple_events_title)).setSelectedValue(Preferences.showNextEvent) - .addItem(getString(R.string.settings_visible), true) - .addItem(getString(R.string.settings_not_visible), false) - .addOnSelectItemListener { value -> - Preferences.showNextEvent = value - }.show() + show_multiple_events_toggle.isChecked = !show_multiple_events_toggle.isChecked + } + } + + show_multiple_events_toggle.setOnCheckedChangeListener { _, isChecked -> + if (Preferences.showEvents) { + Preferences.showNextEvent = isChecked } } action_show_diff_time.setOnClickListener { if (Preferences.showEvents) { - BottomSheetMenu(requireContext(), header = getString(R.string.settings_show_diff_time_title)).setSelectedValue(Preferences.showDiffTime) - .addItem(getString(R.string.settings_visible), true) - .addItem(getString(R.string.settings_not_visible), false) - .addOnSelectItemListener { value -> - Preferences.showDiffTime = value - }.show() + show_diff_time_toggle.isChecked = !show_diff_time_toggle.isChecked + } + } + + show_diff_time_toggle.setOnCheckedChangeListener { _, isChecked -> + if (Preferences.showEvents) { + Preferences.showDiffTime = isChecked } } action_widget_update_frequency.setOnClickListener { - if (Preferences.showEvents) { + if (Preferences.showEvents && Preferences.showDiffTime) { BottomSheetMenu(requireContext(), header = getString(R.string.settings_widget_update_frequency_title), message = getString(R.string.settings_widget_update_frequency_subtitle)).setSelectedValue(Preferences.widgetUpdateFrequency) .addItem(getString(R.string.settings_widget_update_frequency_high), Constants.WidgetUpdateFrequency.HIGH.value) .addItem(getString(R.string.settings_widget_update_frequency_default), Constants.WidgetUpdateFrequency.DEFAULT.value) @@ -329,7 +342,6 @@ class CalendarTabFragment : Fragment() { 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?.isVisible = false - CalendarHelper.updateEventList(requireContext()) } else { show_events_label?.text = if (showEvents) getString(R.string.description_permission_calendar) else getString(R.string.show_events_not_visible) read_calendar_permission_alert?.isVisible = showEvents @@ -339,6 +351,12 @@ class CalendarTabFragment : Fragment() { } } + private fun updateCalendar() { + if (activity?.checkGrantedPermission(Manifest.permission.READ_CALENDAR) == true) { + CalendarHelper.updateEventList(requireContext()) + } + } + private fun requirePermission() { Dexter.withContext(requireContext()) .withPermissions( @@ -386,11 +404,11 @@ class CalendarTabFragment : Fragment() { } private fun maintainScrollPosition(callback: () -> Unit) { - val scrollPosition = scrollView.scrollY + scrollView.isScrollable = false callback.invoke() lifecycleScope.launch { delay(200) - scrollView.smoothScrollTo(0, scrollPosition) + scrollView.isScrollable = true } } } diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/ClockTabFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/ClockTabFragment.kt index ed5adb8..8e5957e 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/ClockTabFragment.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/ClockTabFragment.kt @@ -21,6 +21,7 @@ import com.chibatching.kotpref.bulk import com.tommasoberlose.anotherwidget.R import com.tommasoberlose.anotherwidget.components.BottomSheetColorPicker import com.tommasoberlose.anotherwidget.components.BottomSheetMenu +import com.tommasoberlose.anotherwidget.components.FixedFocusScrollView import com.tommasoberlose.anotherwidget.databinding.FragmentClockSettingsBinding import com.tommasoberlose.anotherwidget.global.Constants import com.tommasoberlose.anotherwidget.global.Preferences @@ -72,6 +73,8 @@ class ClockTabFragment : Fragment() { override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) + ampm_indicator_toggle.isChecked = Preferences.showAMPMIndicator + lifecycleScope.launch(Dispatchers.IO) { val lazyColors = requireContext().resources.getIntArray(R.array.material_colors) withContext(Dispatchers.Main) { @@ -167,57 +170,88 @@ class ClockTabFragment : Fragment() { } action_clock_text_size.setOnClickListener { - val dialog = BottomSheetMenu(requireContext(), header = getString(R.string.settings_clock_text_size_title)).setSelectedValue(Preferences.clockTextSize) - (46 downTo 12).filter { it % 2 == 0 }.forEach { - dialog.addItem("${it}sp", it.toFloat()) + if (Preferences.showClock) { + val dialog = BottomSheetMenu( + requireContext(), + header = getString(R.string.settings_clock_text_size_title) + ).setSelectedValue(Preferences.clockTextSize) + (46 downTo 12).filter { it % 2 == 0 }.forEach { + dialog.addItem("${it}sp", it.toFloat()) + } + dialog.addOnSelectItemListener { value -> + Preferences.clockTextSize = value + }.show() } - dialog.addOnSelectItemListener { value -> - Preferences.clockTextSize = value - }.show() } action_ampm_indicator_size.setOnClickListener { - BottomSheetMenu(requireContext(), header = getString(R.string.settings_ampm_indicator_title)).setSelectedValue(Preferences.showAMPMIndicator) - .addItem(getString(R.string.settings_visible), true) - .addItem(getString(R.string.settings_not_visible), false) - .addOnSelectItemListener { value -> - Preferences.showAMPMIndicator = value - }.show() + if (Preferences.showClock) { + ampm_indicator_toggle.isChecked = !ampm_indicator_toggle.isChecked + } + } + + ampm_indicator_toggle.setOnCheckedChangeListener { _, isChecked -> + if (Preferences.showClock) { + Preferences.showAMPMIndicator = isChecked + } } action_clock_text_color.setOnClickListener { - BottomSheetColorPicker(requireContext(), - colors = colors, - header = getString(R.string.settings_font_color_title), - getSelected = ColorHelper::getClockFontColorRgb, - onColorSelected = { color: Int -> - val colorString = Integer.toHexString(color) - Preferences.clockTextColor = "#" + if (colorString.length > 6) colorString.substring(2) else colorString - }, - showAlphaSelector = true, - alpha = Preferences.clockTextAlpha.toIntValue(), - onAlphaChangeListener = { alpha -> - Preferences.clockTextAlpha = alpha.toHexValue() - } - ).show() + if (Preferences.showClock) { + BottomSheetColorPicker(requireContext(), + colors = colors, + header = getString(R.string.settings_font_color_title), + getSelected = ColorHelper::getClockFontColorRgb, + onColorSelected = { color: Int -> + val colorString = Integer.toHexString(color) + Preferences.clockTextColor = + "#" + if (colorString.length > 6) colorString.substring(2) else colorString + }, + showAlphaSelector = true, + alpha = Preferences.clockTextAlpha.toIntValue(), + onAlphaChangeListener = { alpha -> + Preferences.clockTextAlpha = alpha.toHexValue() + } + ).show() + } } action_clock_bottom_margin_size.setOnClickListener { - BottomSheetMenu(requireContext(), header = getString(R.string.settings_clock_bottom_margin_title)).setSelectedValue(Preferences.clockBottomMargin) - .addItem(getString(R.string.settings_clock_bottom_margin_subtitle_none), Constants.ClockBottomMargin.NONE.value) - .addItem(getString(R.string.settings_clock_bottom_margin_subtitle_small), Constants.ClockBottomMargin.SMALL.value) - .addItem(getString(R.string.settings_clock_bottom_margin_subtitle_medium), Constants.ClockBottomMargin.MEDIUM.value) - .addItem(getString(R.string.settings_clock_bottom_margin_subtitle_large), Constants.ClockBottomMargin.LARGE.value) - .addOnSelectItemListener { value -> - Preferences.clockBottomMargin = value - }.show() + if (Preferences.showClock) { + BottomSheetMenu( + requireContext(), + header = getString(R.string.settings_clock_bottom_margin_title) + ).setSelectedValue(Preferences.clockBottomMargin) + .addItem( + getString(R.string.settings_clock_bottom_margin_subtitle_none), + Constants.ClockBottomMargin.NONE.value + ) + .addItem( + getString(R.string.settings_clock_bottom_margin_subtitle_small), + Constants.ClockBottomMargin.SMALL.value + ) + .addItem( + getString(R.string.settings_clock_bottom_margin_subtitle_medium), + Constants.ClockBottomMargin.MEDIUM.value + ) + .addItem( + getString(R.string.settings_clock_bottom_margin_subtitle_large), + Constants.ClockBottomMargin.LARGE.value + ) + .addOnSelectItemListener { value -> + Preferences.clockBottomMargin = value + }.show() + } } action_clock_app.setOnClickListener { if (Preferences.showClock) { - startActivityForResult(Intent(requireContext(), ChooseApplicationActivity::class.java), - RequestCode.CLOCK_APP_REQUEST_CODE.code - ) + if (Preferences.showClock) { + startActivityForResult( + Intent(requireContext(), ChooseApplicationActivity::class.java), + RequestCode.CLOCK_APP_REQUEST_CODE.code + ) + } } } } @@ -233,11 +267,11 @@ class ClockTabFragment : Fragment() { } private fun maintainScrollPosition(callback: () -> Unit) { - val scrollPosition = scrollView.scrollY + scrollView.isScrollable = false callback.invoke() lifecycleScope.launch { delay(200) - scrollView.smoothScrollTo(0, scrollPosition) + scrollView.isScrollable = true } } } diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/GeneralTabFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/GeneralTabFragment.kt index c7c43dc..0312559 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/GeneralTabFragment.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/GeneralTabFragment.kt @@ -67,6 +67,8 @@ class GeneralTabFragment : Fragment() { override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) + show_dividers_toggle.isChecked = Preferences.showDividers + setupListener() lifecycleScope.launch(Dispatchers.IO) { val lazyColors = requireContext().resources.getIntArray(R.array.material_colors) @@ -186,15 +188,6 @@ class GeneralTabFragment : Fragment() { }) } - private fun maintainScrollPosition(callback: () -> Unit) { - val scrollPosition = scrollView.scrollY - callback.invoke() - lifecycleScope.launch { - delay(200) - scrollView.smoothScrollTo(0, scrollPosition) - } - } - private fun setupListener() { action_main_text_size.setOnClickListener { val dialog = BottomSheetMenu(requireContext(), header = getString(R.string.title_main_text_size)).setSelectedValue(Preferences.textMainSize) @@ -319,12 +312,11 @@ class GeneralTabFragment : Fragment() { } action_show_dividers.setOnClickListener { - BottomSheetMenu(requireContext(), header = getString(R.string.settings_show_dividers_title)).setSelectedValue(Preferences.showDividers) - .addItem(getString(R.string.settings_visible), true) - .addItem(getString(R.string.settings_not_visible), false) - .addOnSelectItemListener { value -> - Preferences.showDividers = value - }.show() + show_dividers_toggle.isChecked = !show_dividers_toggle.isChecked + } + + show_dividers_toggle.setOnCheckedChangeListener { _, isChecked -> + Preferences.showDividers = isChecked } } @@ -346,4 +338,13 @@ class GeneralTabFragment : Fragment() { } super.onActivityResult(requestCode, resultCode, data) } + + private fun maintainScrollPosition(callback: () -> Unit) { + scrollView.isScrollable = false + callback.invoke() + lifecycleScope.launch { + delay(200) + scrollView.isScrollable = true + } + } } diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/GlanceTabFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/GlanceTabFragment.kt index d05cb57..c9edcd1 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/GlanceTabFragment.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/GlanceTabFragment.kt @@ -373,11 +373,11 @@ class GlanceTabFragment : Fragment() { } private fun maintainScrollPosition(callback: () -> Unit) { - val scrollPosition = scrollView.scrollY + scrollView.isScrollable = false callback.invoke() lifecycleScope.launch { delay(200) - scrollView.smoothScrollTo(0, scrollPosition) + scrollView.isScrollable = true } } 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 2c66e95..1a16cf2 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 @@ -65,6 +65,8 @@ class SettingsFragment : Fragment() { binding.lifecycleOwner = this binding.viewModel = viewModel + subscribeUi(viewModel) + return binding.root } @@ -75,7 +77,8 @@ class SettingsFragment : Fragment() { Navigation.findNavController(it).popBackStack() } - subscribeUi(viewModel) + show_widget_preview_toggle.isChecked = Preferences.showPreview + show_wallpaper_toggle.isChecked = Preferences.showWallpaper setupListener() @@ -120,44 +123,26 @@ class SettingsFragment : Fragment() { } private fun setupListener() { - action_show_widget_preview.setOnClickListener { - maintainScrollPosition { - BottomSheetMenu(requireContext(), header = getString(R.string.action_show_widget_preview)) - .setSelectedValue(Preferences.showPreview) - .addItem( - getString(R.string.settings_visible), - true - ) - .addItem( - getString(R.string.settings_not_visible), - false - ) - .addOnSelectItemListener { value -> - Preferences.showPreview = value - }.show() - } + show_widget_preview_toggle.isChecked = !show_widget_preview_toggle.isChecked + } + + show_widget_preview_toggle.setOnCheckedChangeListener { _, isChecked -> + Preferences.showPreview = isChecked } action_show_wallpaper.setOnClickListener { - maintainScrollPosition { - BottomSheetMenu(requireContext(), header = getString(R.string.settings_title_show_wallpaper)) - .setSelectedValue(Preferences.showWallpaper && activity?.checkGrantedPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == true) - .addItem( - getString(R.string.settings_visible), - true - ) - .addItem( - getString(R.string.settings_not_visible), - false - ) - .addOnSelectItemListener { value -> - if (value) { - requirePermission() - } else { - Preferences.showWallpaper = value - } - }.show() + } + + action_show_wallpaper.setOnClickListener { + show_wallpaper_toggle.isChecked = !show_wallpaper_toggle.isChecked + } + + show_wallpaper_toggle.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + requirePermission() + } else { + Preferences.showWallpaper = isChecked } } @@ -211,11 +196,11 @@ class SettingsFragment : Fragment() { } private fun maintainScrollPosition(callback: () -> Unit) { - val scrollPosition = scrollView.scrollY + scrollView.isScrollable = false callback.invoke() lifecycleScope.launch { delay(200) - scrollView.smoothScrollTo(0, scrollPosition) + scrollView.isScrollable = true } } @@ -226,8 +211,8 @@ class SettingsFragment : Fragment() { ).withListener(object: MultiplePermissionsListener { override fun onPermissionsChecked(report: MultiplePermissionsReport?) { report?.let { - Preferences.showWallpaper = false - Preferences.showWallpaper = report.areAllPermissionsGranted() + show_wallpaper_toggle?.isChecked = false + show_wallpaper_toggle?.isChecked = report.areAllPermissionsGranted() } } override fun onPermissionRationaleShouldBeShown( diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/WeatherTabFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/WeatherTabFragment.kt index 8e3dd28..3edc6a8 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/WeatherTabFragment.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/WeatherTabFragment.kt @@ -133,7 +133,7 @@ class WeatherTabFragment : Fragment() { viewModel.weatherIconPack.observe(viewLifecycleOwner, Observer { maintainScrollPosition { label_weather_icon_pack?.text = getString(R.string.settings_weather_icon_pack_default).format((it + 1)) - weather_icon_pack.setImageDrawable(ContextCompat.getDrawable(requireContext(), WeatherHelper.getWeatherIconResource("01d"))) + weather_icon_pack.setImageDrawable(ContextCompat.getDrawable(requireContext(), WeatherHelper.getWeatherIconResource("02d"))) if (it == Constants.WeatherIconPack.MINIMAL.value) { weather_icon_pack.setColorFilter(ContextCompat.getColor(requireContext(), R.color.colorPrimaryText)) } else { @@ -303,11 +303,11 @@ class WeatherTabFragment : Fragment() { } private fun maintainScrollPosition(callback: () -> Unit) { - val scrollPosition = scrollView.scrollY + scrollView.isScrollable = false callback.invoke() lifecycleScope.launch { delay(200) - scrollView.smoothScrollTo(0, scrollPosition) + scrollView.isScrollable = true } } } diff --git a/app/src/main/res/drawable-hdpi/round_cloud_circle_black_18.png b/app/src/main/res/drawable-hdpi/round_cloud_circle_black_18.png new file mode 100644 index 0000000..7e0925d Binary files /dev/null and b/app/src/main/res/drawable-hdpi/round_cloud_circle_black_18.png differ diff --git a/app/src/main/res/drawable-hdpi/round_cloud_circle_black_24.png b/app/src/main/res/drawable-hdpi/round_cloud_circle_black_24.png new file mode 100644 index 0000000..e6f6dad Binary files /dev/null and b/app/src/main/res/drawable-hdpi/round_cloud_circle_black_24.png differ diff --git a/app/src/main/res/drawable-hdpi/round_cloud_circle_black_36.png b/app/src/main/res/drawable-hdpi/round_cloud_circle_black_36.png new file mode 100644 index 0000000..abeb1c0 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/round_cloud_circle_black_36.png differ diff --git a/app/src/main/res/drawable-hdpi/round_cloud_circle_black_48.png b/app/src/main/res/drawable-hdpi/round_cloud_circle_black_48.png new file mode 100644 index 0000000..ed6aaba Binary files /dev/null and b/app/src/main/res/drawable-hdpi/round_cloud_circle_black_48.png differ diff --git a/app/src/main/res/drawable-mdpi/round_cloud_circle_black_18.png b/app/src/main/res/drawable-mdpi/round_cloud_circle_black_18.png new file mode 100644 index 0000000..ae829d8 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/round_cloud_circle_black_18.png differ diff --git a/app/src/main/res/drawable-mdpi/round_cloud_circle_black_24.png b/app/src/main/res/drawable-mdpi/round_cloud_circle_black_24.png new file mode 100644 index 0000000..a6ebcbf Binary files /dev/null and b/app/src/main/res/drawable-mdpi/round_cloud_circle_black_24.png differ diff --git a/app/src/main/res/drawable-mdpi/round_cloud_circle_black_36.png b/app/src/main/res/drawable-mdpi/round_cloud_circle_black_36.png new file mode 100644 index 0000000..e6f6dad Binary files /dev/null and b/app/src/main/res/drawable-mdpi/round_cloud_circle_black_36.png differ diff --git a/app/src/main/res/drawable-mdpi/round_cloud_circle_black_48.png b/app/src/main/res/drawable-mdpi/round_cloud_circle_black_48.png new file mode 100644 index 0000000..7dc7c94 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/round_cloud_circle_black_48.png differ diff --git a/app/src/main/res/drawable-xhdpi/round_cloud_circle_black_18.png b/app/src/main/res/drawable-xhdpi/round_cloud_circle_black_18.png new file mode 100644 index 0000000..e6f6dad Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/round_cloud_circle_black_18.png differ diff --git a/app/src/main/res/drawable-xhdpi/round_cloud_circle_black_24.png b/app/src/main/res/drawable-xhdpi/round_cloud_circle_black_24.png new file mode 100644 index 0000000..7dc7c94 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/round_cloud_circle_black_24.png differ diff --git a/app/src/main/res/drawable-xhdpi/round_cloud_circle_black_36.png b/app/src/main/res/drawable-xhdpi/round_cloud_circle_black_36.png new file mode 100644 index 0000000..ed6aaba Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/round_cloud_circle_black_36.png differ diff --git a/app/src/main/res/drawable-xhdpi/round_cloud_circle_black_48.png b/app/src/main/res/drawable-xhdpi/round_cloud_circle_black_48.png new file mode 100644 index 0000000..545e41f Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/round_cloud_circle_black_48.png differ diff --git a/app/src/main/res/drawable-xxhdpi/round_cloud_circle_black_18.png b/app/src/main/res/drawable-xxhdpi/round_cloud_circle_black_18.png new file mode 100644 index 0000000..abeb1c0 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/round_cloud_circle_black_18.png differ diff --git a/app/src/main/res/drawable-xxhdpi/round_cloud_circle_black_24.png b/app/src/main/res/drawable-xxhdpi/round_cloud_circle_black_24.png new file mode 100644 index 0000000..ed6aaba Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/round_cloud_circle_black_24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/round_cloud_circle_black_36.png b/app/src/main/res/drawable-xxhdpi/round_cloud_circle_black_36.png new file mode 100644 index 0000000..f8f0a20 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/round_cloud_circle_black_36.png differ diff --git a/app/src/main/res/drawable-xxhdpi/round_cloud_circle_black_48.png b/app/src/main/res/drawable-xxhdpi/round_cloud_circle_black_48.png new file mode 100644 index 0000000..42800b9 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/round_cloud_circle_black_48.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/round_cloud_circle_black_18.png b/app/src/main/res/drawable-xxxhdpi/round_cloud_circle_black_18.png new file mode 100644 index 0000000..ed6aaba Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/round_cloud_circle_black_18.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/round_cloud_circle_black_24.png b/app/src/main/res/drawable-xxxhdpi/round_cloud_circle_black_24.png new file mode 100644 index 0000000..545e41f Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/round_cloud_circle_black_24.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/round_cloud_circle_black_36.png b/app/src/main/res/drawable-xxxhdpi/round_cloud_circle_black_36.png new file mode 100644 index 0000000..42800b9 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/round_cloud_circle_black_36.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/round_cloud_circle_black_48.png b/app/src/main/res/drawable-xxxhdpi/round_cloud_circle_black_48.png new file mode 100644 index 0000000..d681648 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/round_cloud_circle_black_48.png differ diff --git a/app/src/main/res/drawable/alarm.png b/app/src/main/res/drawable/alarm.png new file mode 100644 index 0000000..43e28aa Binary files /dev/null and b/app/src/main/res/drawable/alarm.png differ diff --git a/app/src/main/res/drawable/calendar.png b/app/src/main/res/drawable/calendar.png new file mode 100644 index 0000000..e044267 Binary files /dev/null and b/app/src/main/res/drawable/calendar.png differ diff --git a/app/src/main/res/drawable/clock.png b/app/src/main/res/drawable/clock.png new file mode 100644 index 0000000..e86b114 Binary files /dev/null and b/app/src/main/res/drawable/clock.png differ diff --git a/app/src/main/res/drawable/menu.png b/app/src/main/res/drawable/menu.png new file mode 100644 index 0000000..2c2f42b Binary files /dev/null and b/app/src/main/res/drawable/menu.png differ diff --git a/app/src/main/res/drawable/round_cloud_circle.xml b/app/src/main/res/drawable/round_cloud_circle.xml new file mode 100644 index 0000000..feaa819 --- /dev/null +++ b/app/src/main/res/drawable/round_cloud_circle.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/weather.png b/app/src/main/res/drawable/weather.png new file mode 100644 index 0000000..64f11b4 Binary files /dev/null and b/app/src/main/res/drawable/weather.png differ diff --git a/app/src/main/res/layout/fragment_calendar_settings.xml b/app/src/main/res/layout/fragment_calendar_settings.xml index 7e30fce..4be0311 100644 --- a/app/src/main/res/layout/fragment_calendar_settings.xml +++ b/app/src/main/res/layout/fragment_calendar_settings.xml @@ -7,9 +7,12 @@ + - + + + + - + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_clock_settings.xml b/app/src/main/res/layout/fragment_clock_settings.xml index ef030f1..4f55b0f 100644 --- a/app/src/main/res/layout/fragment_clock_settings.xml +++ b/app/src/main/res/layout/fragment_clock_settings.xml @@ -8,7 +8,7 @@ name="isClockVisible" type="Boolean" /> - + android:src="@drawable/alarm"/> + - + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_general_settings.xml b/app/src/main/res/layout/fragment_general_settings.xml index 728c692..f529c95 100644 --- a/app/src/main/res/layout/fragment_general_settings.xml +++ b/app/src/main/res/layout/fragment_general_settings.xml @@ -6,7 +6,7 @@ name="viewModel" type="com.tommasoberlose.anotherwidget.ui.viewmodels.MainViewModel" /> - + - + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_glance_settings.xml b/app/src/main/res/layout/fragment_glance_settings.xml index b729e99..6cbfdf0 100644 --- a/app/src/main/res/layout/fragment_glance_settings.xml +++ b/app/src/main/res/layout/fragment_glance_settings.xml @@ -10,7 +10,7 @@ name="isGlanceVisible" type="Boolean" /> - + android:src="@drawable/menu"/> - + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index a37adbd..7faae25 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -49,7 +49,7 @@ tools:ignore="RelativeOverlap" /> - + + - + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_weather_settings.xml b/app/src/main/res/layout/fragment_weather_settings.xml index 4ba620f..aa208e4 100644 --- a/app/src/main/res/layout/fragment_weather_settings.xml +++ b/app/src/main/res/layout/fragment_weather_settings.xml @@ -8,7 +8,7 @@ name="isWeatherVisible" type="Boolean" /> - - + \ No newline at end of file diff --git a/app/src/main/res/layout/settings_menu_header.xml b/app/src/main/res/layout/settings_menu_header.xml new file mode 100644 index 0000000..e9bd3f5 --- /dev/null +++ b/app/src/main/res/layout/settings_menu_header.xml @@ -0,0 +1,15 @@ + + \ No newline at end of file diff --git a/app/src/main/res/layout/settings_menu_item.xml b/app/src/main/res/layout/settings_menu_item.xml new file mode 100644 index 0000000..15710a9 --- /dev/null +++ b/app/src/main/res/layout/settings_menu_item.xml @@ -0,0 +1,61 @@ + + + + + + + + + + \ No newline at end of file