diff --git a/.idea/navEditor.xml b/.idea/navEditor.xml index 8b8435a..1d9b984 100644 --- a/.idea/navEditor.xml +++ b/.idea/navEditor.xml @@ -87,6 +87,18 @@ + + + + + + + @@ -130,6 +142,11 @@ + + + + + diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/global/Preferences.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/global/Preferences.kt index ae1ae89..8d7b898 100755 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/global/Preferences.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/global/Preferences.kt @@ -117,10 +117,9 @@ object Preferences : KotprefModel() { var showXiaomiWarning by booleanPref(default = true) // Glance - var showGlance by booleanPref(default = true) var enabledGlanceProviderOrder by stringPref(default = "") var customNotes by stringPref(default = "") - var showNextAlarm by booleanPref(default = true) + var showNextAlarm by booleanPref(default = false) var showBatteryCharging by booleanPref(default = false) var isBatteryLevelLow by booleanPref(default = false) var isCharging by booleanPref(default = false) diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/GlanceProviderHelper.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/GlanceProviderHelper.kt index 787614d..be80a25 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/GlanceProviderHelper.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/GlanceProviderHelper.kt @@ -101,7 +101,7 @@ object GlanceProviderHelper { val eventRepository = EventRepository(context) BatteryHelper.updateBatteryInfo(context) - val showGlance = Preferences.showGlance && (eventRepository.getEventsCount() == 0 || !Preferences.showEvents || Preferences.showEventsAsGlanceProvider) + val showGlance = (eventRepository.getEventsCount() == 0 || !Preferences.showEvents || Preferences.showEventsAsGlanceProvider) && ( (Preferences.showNotifications && ActiveNotificationsHelper.showLastNotification()) || (Preferences.showNextAlarm && AlarmHelper.getNextAlarm(context) != "") || diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/activities/tabs/CustomFontActivity.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/activities/tabs/CustomFontActivity.kt index 5fc3779..065ad75 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/activities/tabs/CustomFontActivity.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/activities/tabs/CustomFontActivity.kt @@ -76,7 +76,7 @@ class CustomFontActivity : AppCompatActivity() { injector.clicked(R.id.text) { val dialog = BottomSheetMenu(this, header = item) - listOf("100", "200", "regular", "500", "700", "800").forEachIndexed { index, s -> + listOf("100", "200", "regular", "500", "700", "800").forEachIndexed { _, s -> dialog.addItem(SettingsStringHelper.getVariantLabel(this, s), s) } dialog.addOnSelectItemListener { value -> 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 71bfdc0..0274521 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 @@ -184,14 +184,14 @@ class MainFragment : Fragment(), SharedPreferences.OnSharedPreferenceChangeList binding.widgetDetail.clockBottomMarginLarge.isVisible = Preferences.showClock && Preferences.clockBottomMargin == Constants.ClockBottomMargin.LARGE.value - if ((Preferences.showClock && (binding.widgetDetail.time.alpha ?: 1f < 1f)) || (!Preferences.showClock && (binding.widgetDetail.time.alpha ?: 0f > 0f))) { + if ((Preferences.showClock && (binding.widgetDetail.time.alpha < 1f)) || (!Preferences.showClock && (binding.widgetDetail.time.alpha > 0f))) { if (Preferences.showClock) { binding.widgetDetail.timeContainer.layoutParams = binding.widgetDetail.timeContainer.layoutParams.apply { height = RelativeLayout.LayoutParams.WRAP_CONTENT } binding.widgetDetail.timeContainer.measure(0, 0) } - val initialHeight = binding.widgetDetail.timeContainer.measuredHeight ?: 0 + val initialHeight = binding.widgetDetail.timeContainer.measuredHeight ValueAnimator.ofFloat( if (Preferences.showClock) 0f else 1f, if (Preferences.showClock) 1f else 0f 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 e667700..e63eb7b 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 @@ -94,7 +94,7 @@ class SettingsFragment : Fragment() { viewModel.darkThemePreference.observe(viewLifecycleOwner, Observer { AppCompatDelegate.setDefaultNightMode(it) maintainScrollPosition { - binding.theme?.text = when (it) { + binding.theme.text = when (it) { AppCompatDelegate.MODE_NIGHT_NO -> getString(R.string.settings_subtitle_dark_theme_light) AppCompatDelegate.MODE_NIGHT_YES -> getString(R.string.settings_subtitle_dark_theme_dark) AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY -> getString(R.string.settings_subtitle_dark_theme_by_battery_saver) @@ -105,7 +105,7 @@ class SettingsFragment : Fragment() { }) viewModel.installedIntegrations.observe(viewLifecycleOwner, Observer { - binding.integrationsCountLabel?.text = + binding.integrationsCountLabel.text = getString(R.string.label_count_installed_integrations).format( it) }) diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/CalendarFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/CalendarFragment.kt index 547995e..6d76830 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/CalendarFragment.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/CalendarFragment.kt @@ -72,7 +72,6 @@ class CalendarFragment : Fragment() { binding.showAllDayToggle.setCheckedImmediatelyNoEvent(Preferences.calendarAllDay) binding.showOnlyBusyEventsToggle.setCheckedImmediatelyNoEvent(Preferences.showOnlyBusyEvents) binding.showDiffTimeToggle.setCheckedImmediatelyNoEvent(Preferences.showDiffTime) - binding.showMultipleEventsToggle.setCheckedImmediatelyNoEvent(Preferences.showNextEvent) setupListener() @@ -125,36 +124,6 @@ class CalendarFragment : Fragment() { updateCalendar() } - viewModel.showNextEvent.observe(viewLifecycleOwner) { - maintainScrollPosition { - binding.showMultipleEventsLabel.text = - if (it) getString(R.string.settings_visible) else getString(R.string.settings_not_visible) - } - } - - viewModel.calendarAppName.observe(viewLifecycleOwner) { - maintainScrollPosition { - binding.calendarAppLabel.text = when { - Preferences.calendarAppName != "" -> Preferences.calendarAppName - else -> { - if (IntentHelper.getCalendarIntent(requireContext()).isDefaultSet(requireContext())) { - getString( - R.string.default_calendar_app - ) - } else { - getString(R.string.nothing) - } - } - } - } - } - - viewModel.openEventDetails.observe(viewLifecycleOwner) { - maintainScrollPosition { - binding.openEventDetailsLabel.text = if (it) getString(R.string.default_event_app) else getString(R.string.default_calendar_app) - } - } - } private fun setupListener() { @@ -264,14 +233,6 @@ class CalendarFragment : Fragment() { updateCalendar() } - binding.actionShowMultipleEvents.setOnClickListener { - binding.showMultipleEventsToggle.isChecked = !binding.showMultipleEventsToggle.isChecked - } - - binding.showMultipleEventsToggle.setOnCheckedChangeListener { _, isChecked -> - Preferences.showNextEvent = isChecked - } - binding.actionShowDiffTime.setOnClickListener { binding.showDiffTimeToggle.isChecked = !binding.showDiffTimeToggle.isChecked } @@ -311,20 +272,6 @@ class CalendarFragment : Fragment() { Preferences.showUntil = value }.show() } - - binding.actionOpenEventDetails.setOnClickListener { - BottomSheetMenu(requireContext(), header = getString(R.string.settings_event_app_title)).setSelectedValue(Preferences.openEventDetails) - .addItem(getString(R.string.default_event_app), true) - .addItem(getString(R.string.default_calendar_app), false) - .addOnSelectItemListener { value -> - Preferences.openEventDetails = value - } - .show() - } - - binding.actionCalendarApp.setOnClickListener { - startActivityForResult(Intent(requireContext(), ChooseApplicationActivity::class.java), RequestCode.CALENDAR_APP_REQUEST_CODE.code) - } } private fun updateCalendar() { diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/ClockFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/ClockFragment.kt index 0c20c9a..02f4b24 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/ClockFragment.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/ClockFragment.kt @@ -18,7 +18,7 @@ import com.google.android.material.transition.MaterialSharedAxis import com.tommasoberlose.anotherwidget.R import com.tommasoberlose.anotherwidget.components.BottomSheetColorPicker import com.tommasoberlose.anotherwidget.components.BottomSheetMenu -import com.tommasoberlose.anotherwidget.databinding.FragmentClockBinding +import com.tommasoberlose.anotherwidget.databinding.FragmentTabClockBinding import com.tommasoberlose.anotherwidget.global.Constants import com.tommasoberlose.anotherwidget.global.Preferences import com.tommasoberlose.anotherwidget.global.RequestCode @@ -45,7 +45,7 @@ class ClockFragment : Fragment() { private lateinit var viewModel: MainViewModel private lateinit var colors: IntArray - private lateinit var binding: FragmentClockBinding + private lateinit var binding: FragmentTabClockBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -59,7 +59,7 @@ class ClockFragment : Fragment() { ): View { viewModel = ViewModelProvider(activity as MainActivity).get(MainViewModel::class.java) - binding = FragmentClockBinding.inflate(inflater) + binding = FragmentTabClockBinding.inflate(inflater) subscribeUi(viewModel) @@ -94,11 +94,6 @@ class ClockFragment : Fragment() { binding.is24Format = DateFormat.is24HourFormat(requireContext()) binding.isDarkModeEnabled = activity?.isDarkTheme() == true - viewModel.showBigClockWarning.observe(viewLifecycleOwner) { - binding.largeClockWarning.isVisible = it - binding.smallClockWarning.isVisible = !it - } - viewModel.clockTextSize.observe(viewLifecycleOwner) { maintainScrollPosition { binding.clockTextSizeLabel.text = String.format("%.0fsp", it) @@ -154,40 +149,9 @@ class ClockFragment : Fragment() { } } } - - viewModel.clockBottomMargin.observe(viewLifecycleOwner) { - maintainScrollPosition { - binding.clockBottomMarginLabel.text = when (it) { - Constants.ClockBottomMargin.NONE.value -> getString(R.string.settings_clock_bottom_margin_subtitle_none) - Constants.ClockBottomMargin.SMALL.value -> getString(R.string.settings_clock_bottom_margin_subtitle_small) - Constants.ClockBottomMargin.LARGE.value -> getString(R.string.settings_clock_bottom_margin_subtitle_large) - else -> getString(R.string.settings_clock_bottom_margin_subtitle_medium) - } - } - } - - viewModel.clockAppName.observe(viewLifecycleOwner) { - maintainScrollPosition { - binding.clockAppLabel.text = when { - Preferences.clockAppName != "" -> Preferences.clockAppName - else -> { - if (IntentHelper.getClockIntent(requireContext()).isDefaultSet(requireContext())) { - getString( - R.string.default_clock_app - ) - } else { - getString(R.string.nothing) - } - } - } - } - } } private fun setupListener() { - binding.actionHideLargeClockWarning.setOnClickListener { - Preferences.showBigClockWarning = false - } binding.actionClockTextSize.setOnClickListener { val dialog = BottomSheetMenu( @@ -236,39 +200,6 @@ class ClockFragment : Fragment() { } ).show() } - - binding.actionClockBottomMarginSize.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() - } - - binding.actionClockApp.setOnClickListener { - startActivityForResult( - Intent(requireContext(), ChooseApplicationActivity::class.java), - RequestCode.CLOCK_APP_REQUEST_CODE.code - ) - } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { 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 new file mode 100644 index 0000000..c942192 --- /dev/null +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/GesturesFragment.kt @@ -0,0 +1,192 @@ +package com.tommasoberlose.anotherwidget.ui.fragments.tabs + +import android.annotation.SuppressLint +import android.content.Intent +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.databinding.DataBindingUtil +import androidx.fragment.app.Fragment +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.lifecycleScope +import com.chibatching.kotpref.blockingBulk +import com.google.android.material.transition.MaterialSharedAxis +import com.tommasoberlose.anotherwidget.R +import com.tommasoberlose.anotherwidget.components.BottomSheetColorPicker +import com.tommasoberlose.anotherwidget.components.BottomSheetMenu +import com.tommasoberlose.anotherwidget.databinding.FragmentTabGesturesBinding +import com.tommasoberlose.anotherwidget.databinding.FragmentTabLayoutBinding +import com.tommasoberlose.anotherwidget.global.Constants +import com.tommasoberlose.anotherwidget.global.Preferences +import com.tommasoberlose.anotherwidget.global.RequestCode +import com.tommasoberlose.anotherwidget.helpers.ColorHelper +import com.tommasoberlose.anotherwidget.helpers.ColorHelper.toHexValue +import com.tommasoberlose.anotherwidget.helpers.ColorHelper.toIntValue +import com.tommasoberlose.anotherwidget.helpers.DateHelper +import com.tommasoberlose.anotherwidget.helpers.IntentHelper +import com.tommasoberlose.anotherwidget.ui.activities.tabs.CustomDateActivity +import com.tommasoberlose.anotherwidget.ui.activities.MainActivity +import com.tommasoberlose.anotherwidget.ui.activities.tabs.ChooseApplicationActivity +import com.tommasoberlose.anotherwidget.ui.viewmodels.MainViewModel +import com.tommasoberlose.anotherwidget.utils.isDarkTheme +import com.tommasoberlose.anotherwidget.utils.isDefaultSet +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import java.util.* + +class GesturesFragment : Fragment() { + + companion object { + fun newInstance() = GesturesFragment() + } + + private lateinit var viewModel: MainViewModel + private lateinit var colors: IntArray + private lateinit var binding: FragmentTabGesturesBinding + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) + returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + + viewModel = ViewModelProvider(activity as MainActivity).get(MainViewModel::class.java) + binding = FragmentTabGesturesBinding.inflate(inflater) + + subscribeUi(viewModel) + + binding.lifecycleOwner = this + binding.viewModel = viewModel + + return binding.root + } + + override fun onActivityCreated(savedInstanceState: Bundle?) { + super.onActivityCreated(savedInstanceState) + + binding.showMultipleEventsToggle.setCheckedImmediatelyNoEvent(Preferences.showNextEvent) + setupListener() + + binding.scrollView.viewTreeObserver?.addOnScrollChangedListener { + viewModel.fragmentScrollY.value = binding.scrollView.scrollY + } + } + + + @SuppressLint("DefaultLocale") + private fun subscribeUi( + viewModel: MainViewModel + ) { + + viewModel.showNextEvent.observe(viewLifecycleOwner) { + maintainScrollPosition { + binding.showMultipleEventsLabel.text = + if (it) getString(R.string.settings_visible) else getString(R.string.settings_not_visible) + } + } + + viewModel.calendarAppName.observe(viewLifecycleOwner) { + maintainScrollPosition { + binding.calendarAppLabel.text = when { + Preferences.calendarAppName != "" -> Preferences.calendarAppName + else -> { + if (IntentHelper.getCalendarIntent(requireContext()).isDefaultSet(requireContext())) { + getString( + R.string.default_calendar_app + ) + } else { + getString(R.string.nothing) + } + } + } + } + } + + viewModel.openEventDetails.observe(viewLifecycleOwner) { + maintainScrollPosition { + binding.openEventDetailsLabel.text = if (it) getString(R.string.default_event_app) else getString(R.string.default_calendar_app) + } + } + + viewModel.clockAppName.observe(viewLifecycleOwner) { + maintainScrollPosition { + binding.clockAppLabel.text = when { + Preferences.clockAppName != "" -> Preferences.clockAppName + else -> { + if (IntentHelper.getClockIntent(requireContext()).isDefaultSet(requireContext())) { + getString( + R.string.default_clock_app + ) + } else { + getString(R.string.nothing) + } + } + } + } + } + + viewModel.weatherAppName.observe(viewLifecycleOwner) { + maintainScrollPosition { + binding.weatherAppLabel.text = + if (it != "") it else getString(R.string.default_weather_app) + } + } + } + + private fun setupListener() { + + binding.actionShowMultipleEvents.setOnClickListener { + binding.showMultipleEventsToggle.isChecked = !binding.showMultipleEventsToggle.isChecked + } + + binding.showMultipleEventsToggle.setOnCheckedChangeListener { _, isChecked -> + Preferences.showNextEvent = isChecked + } + + binding.actionOpenEventDetails.setOnClickListener { + BottomSheetMenu(requireContext(), header = getString(R.string.settings_event_app_title)).setSelectedValue(Preferences.openEventDetails) + .addItem(getString(R.string.default_event_app), true) + .addItem(getString(R.string.default_calendar_app), false) + .addOnSelectItemListener { value -> + Preferences.openEventDetails = value + } + .show() + } + + binding.actionCalendarApp.setOnClickListener { + startActivityForResult(Intent(requireContext(), ChooseApplicationActivity::class.java), RequestCode.CALENDAR_APP_REQUEST_CODE.code) + } + + binding.actionClockApp.setOnClickListener { + startActivityForResult( + Intent(requireContext(), ChooseApplicationActivity::class.java), + RequestCode.CLOCK_APP_REQUEST_CODE.code + ) + } + + binding.actionWeatherApp.setOnClickListener { + startActivityForResult( + Intent(requireContext(), ChooseApplicationActivity::class.java), + RequestCode.WEATHER_APP_REQUEST_CODE.code + ) + } + } + + private fun maintainScrollPosition(callback: () -> Unit) { + binding.scrollView.isScrollable = false + callback.invoke() + lifecycleScope.launch { + delay(200) + binding.scrollView.isScrollable = true + } + } +} diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/GlanceTabFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/GlanceTabFragment.kt index 923ac11..f0b0913 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/GlanceTabFragment.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/GlanceTabFragment.kt @@ -104,20 +104,18 @@ class GlanceTabFragment : Fragment() { it.setImageDrawable(ContextCompat.getDrawable(requireContext(), item.icon)) } .clicked(R.id.item) { - if (Preferences.showGlance) { - if (provider == Constants.GlanceProviderId.CUSTOM_INFO) { - CustomNotesDialog(requireContext()){ - adapter.notifyItemRangeChanged(0, adapter.data.size) - }.show() - } else { - dialog = GlanceSettingsDialog(requireActivity(), provider) { - adapter.notifyItemRangeChanged(0, adapter.data.size) - } - dialog?.setOnDismissListener { - dialog = null - } - dialog?.show() + if (provider == Constants.GlanceProviderId.CUSTOM_INFO) { + CustomNotesDialog(requireContext()){ + adapter.notifyItemRangeChanged(0, adapter.data.size) + }.show() + } else { + dialog = GlanceSettingsDialog(requireActivity(), provider) { + adapter.notifyItemRangeChanged(0, adapter.data.size) } + dialog?.setOnDismissListener { + dialog = null + } + dialog?.show() } } var isVisible = false @@ -356,7 +354,6 @@ class GlanceTabFragment : Fragment() { private fun subscribeUi( viewModel: MainViewModel, ) { - binding.isGlanceVisible = Preferences.showGlance } private fun setupListener() { diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/LayoutFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/LayoutFragment.kt index 9977161..5ea1174 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/LayoutFragment.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/LayoutFragment.kt @@ -102,6 +102,17 @@ class LayoutFragment : Fragment() { } } + viewModel.clockBottomMargin.observe(viewLifecycleOwner) { + maintainScrollPosition { + binding.clockBottomMarginLabel.text = when (it) { + Constants.ClockBottomMargin.NONE.value -> getString(R.string.settings_clock_bottom_margin_subtitle_none) + Constants.ClockBottomMargin.SMALL.value -> getString(R.string.settings_clock_bottom_margin_subtitle_small) + Constants.ClockBottomMargin.LARGE.value -> getString(R.string.settings_clock_bottom_margin_subtitle_large) + else -> getString(R.string.settings_clock_bottom_margin_subtitle_medium) + } + } + } + viewModel.backgroundCardColor.observe(viewLifecycleOwner) { maintainScrollPosition { if (Preferences.backgroundCardAlpha == "00") { @@ -146,12 +157,6 @@ class LayoutFragment : Fragment() { } } - viewModel.dateFormat.observe(viewLifecycleOwner) { - maintainScrollPosition { - binding.dateFormatLabel.text = DateHelper.getDateText(requireContext(), Calendar.getInstance()) - } - } - viewModel.showDividers.observe(viewLifecycleOwner) { maintainScrollPosition { binding.showDividersLabel.text = @@ -188,33 +193,30 @@ class LayoutFragment : Fragment() { }.show() } - binding.actionDateFormat.setOnClickListener { - val now = Calendar.getInstance() - val dialog = BottomSheetMenu(requireContext(), header = getString(R.string.settings_date_format_title)).setSelectedValue(Preferences.dateFormat) - - dialog.addItem(DateHelper.getDefaultDateText(requireContext(), now), "") - if (Preferences.dateFormat != "") { - dialog.addItem(DateHelper.getDateText(requireContext(), now), Preferences.dateFormat) - } - dialog.addItem(getString(R.string.custom_date_format), "-") - - dialog.addOnSelectItemListener { value -> - when (value) { - "-" -> { - startActivity(Intent(requireContext(), CustomDateActivity::class.java)) - } - "" -> { - Preferences.blockingBulk { - isDateCapitalize = false - isDateUppercase = false - } - Preferences.dateFormat = value - } - else -> { - Preferences.dateFormat = value - } - } - }.show() + binding.actionClockBottomMarginSize.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() } binding.actionBackgroundColor.setOnClickListener { 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 8480754..0b21bc6 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 @@ -77,7 +77,6 @@ class PreferencesFragment : Fragment() { binding.isCalendarEnabled = Preferences.showEvents binding.isWeatherVisible = Preferences.showWeather binding.isClockVisible = Preferences.showClock - binding.isGlanceVisible = Preferences.showGlance viewModel.showEvents.observe(viewLifecycleOwner) { maintainScrollPosition { @@ -104,13 +103,6 @@ class PreferencesFragment : Fragment() { binding.isClockVisible = it } } - - viewModel.showGlance.observe(viewLifecycleOwner) { - maintainScrollPosition { - binding.isGlanceVisible = it - } - } - } private fun setupListener() { @@ -149,12 +141,13 @@ class PreferencesFragment : Fragment() { binding.showClockSwitch.setOnCheckedChangeListener { _, enabled: Boolean -> Preferences.showClock = enabled } + binding.actionShowGlance.setOnClickListener { Navigation.findNavController(it).navigate(R.id.action_tabSelectorFragment_to_glanceTabFragment) } - binding.showGlanceSwitch.setOnCheckedChangeListener { _, enabled: Boolean -> - Preferences.showGlance = enabled + binding.actionTabDefaultApp.setOnClickListener { + Navigation.findNavController(it).navigate(R.id.action_tabSelectorFragment_to_gesturesFragment) } } diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/TypographyFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/TypographyFragment.kt index 906b457..4aa6b0d 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/TypographyFragment.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/TypographyFragment.kt @@ -10,6 +10,7 @@ import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope +import com.chibatching.kotpref.blockingBulk import com.chibatching.kotpref.bulk import com.google.android.material.transition.MaterialSharedAxis import com.tommasoberlose.anotherwidget.R @@ -22,9 +23,11 @@ import com.tommasoberlose.anotherwidget.global.RequestCode import com.tommasoberlose.anotherwidget.helpers.ColorHelper import com.tommasoberlose.anotherwidget.helpers.ColorHelper.toHexValue import com.tommasoberlose.anotherwidget.helpers.ColorHelper.toIntValue +import com.tommasoberlose.anotherwidget.helpers.DateHelper import com.tommasoberlose.anotherwidget.helpers.SettingsStringHelper import com.tommasoberlose.anotherwidget.ui.activities.tabs.CustomFontActivity import com.tommasoberlose.anotherwidget.ui.activities.MainActivity +import com.tommasoberlose.anotherwidget.ui.activities.tabs.CustomDateActivity import com.tommasoberlose.anotherwidget.ui.viewmodels.MainViewModel import com.tommasoberlose.anotherwidget.ui.widgets.MainWidget import com.tommasoberlose.anotherwidget.utils.isDarkTheme @@ -32,6 +35,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import java.util.* class TypographyFragment : Fragment() { @@ -234,6 +238,12 @@ class TypographyFragment : Fragment() { MainWidget.updateWidget(requireContext()) } } + + viewModel.dateFormat.observe(viewLifecycleOwner) { + maintainScrollPosition { + binding.dateFormatLabel.text = DateHelper.getDateText(requireContext(), Calendar.getInstance()) + } + } } private fun setupListener() { @@ -354,6 +364,35 @@ class TypographyFragment : Fragment() { } }.show() } + + binding.actionDateFormat.setOnClickListener { + val now = Calendar.getInstance() + val dialog = BottomSheetMenu(requireContext(), header = getString(R.string.settings_date_format_title)).setSelectedValue(Preferences.dateFormat) + + dialog.addItem(DateHelper.getDefaultDateText(requireContext(), now), "") + if (Preferences.dateFormat != "") { + dialog.addItem(DateHelper.getDateText(requireContext(), now), Preferences.dateFormat) + } + dialog.addItem(getString(R.string.custom_date_format), "-") + + dialog.addOnSelectItemListener { value -> + when (value) { + "-" -> { + startActivity(Intent(requireContext(), CustomDateActivity::class.java)) + } + "" -> { + Preferences.blockingBulk { + isDateCapitalize = false + isDateUppercase = false + } + Preferences.dateFormat = value + } + else -> { + Preferences.dateFormat = value + } + } + }.show() + } } private fun maintainScrollPosition(callback: () -> Unit) { diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/WeatherFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/WeatherFragment.kt index 2bbcb3f..b6e2b8a 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/WeatherFragment.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/tabs/WeatherFragment.kt @@ -132,13 +132,6 @@ class WeatherFragment : Fragment() { } checkLocationPermission() } - - viewModel.weatherAppName.observe(viewLifecycleOwner) { - maintainScrollPosition { - binding.weatherAppLabel.text = - if (it != "") it else getString(R.string.default_weather_app) - } - } } private fun checkLocationPermission() { @@ -220,13 +213,6 @@ class WeatherFragment : Fragment() { binding.actionWeatherIconPack.setOnClickListener { IconPackSelector(requireContext(), header = getString(R.string.settings_weather_icon_pack_title)).show() } - - binding.actionWeatherApp.setOnClickListener { - startActivityForResult( - Intent(requireContext(), ChooseApplicationActivity::class.java), - RequestCode.WEATHER_APP_REQUEST_CODE.code - ) - } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/viewmodels/MainViewModel.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/viewmodels/MainViewModel.kt index 7b0cc86..3833646 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/viewmodels/MainViewModel.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/viewmodels/MainViewModel.kt @@ -75,7 +75,6 @@ class MainViewModel : ViewModel() { val weatherProviderLocationError = Preferences.asLiveData(Preferences::weatherProviderLocationError) // Glance - val showGlance = Preferences.asLiveData(Preferences::showGlance) val showMusic = Preferences.asLiveData(Preferences::showMusic) val showNextAlarm = Preferences.asLiveData(Preferences::showNextAlarm) val showBatteryCharging = Preferences.asLiveData(Preferences::showBatteryCharging) diff --git a/app/src/main/res/layout/fragment_preferences.xml b/app/src/main/res/layout/fragment_preferences.xml index 6339c97..383827a 100644 --- a/app/src/main/res/layout/fragment_preferences.xml +++ b/app/src/main/res/layout/fragment_preferences.xml @@ -14,9 +14,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/fragment_clock.xml b/app/src/main/res/layout/fragment_tab_clock.xml similarity index 64% rename from app/src/main/res/layout/fragment_clock.xml rename to app/src/main/res/layout/fragment_tab_clock.xml index d161c77..6225e2d 100644 --- a/app/src/main/res/layout/fragment_clock.xml +++ b/app/src/main/res/layout/fragment_tab_clock.xml @@ -28,45 +28,6 @@ android:paddingBottom="8dp" android:focusable="true" android:orientation="vertical"> - - - - - - - - - - - - - - - - - - - - - - + + + + - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_tab_layout.xml b/app/src/main/res/layout/fragment_tab_layout.xml index 337dc87..bc7d8af 100644 --- a/app/src/main/res/layout/fragment_tab_layout.xml +++ b/app/src/main/res/layout/fragment_tab_layout.xml @@ -24,48 +24,11 @@ - - - - - - - + + + + + + + + - + + + + + + + - - - - - - - - diff --git a/app/src/main/res/navigation/settings_nav_graph.xml b/app/src/main/res/navigation/settings_nav_graph.xml index 18a1593..f71cd28 100644 --- a/app/src/main/res/navigation/settings_nav_graph.xml +++ b/app/src/main/res/navigation/settings_nav_graph.xml @@ -45,9 +45,16 @@ + + \ No newline at end of file