Update UI
This commit is contained in:
@ -1,11 +1,13 @@
|
||||
package com.tommasoberlose.anotherwidget
|
||||
|
||||
import android.Manifest
|
||||
import android.app.Application
|
||||
import android.util.Log
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import com.chibatching.kotpref.Kotpref
|
||||
import com.google.firebase.crashlytics.FirebaseCrashlytics
|
||||
import com.tommasoberlose.anotherwidget.global.Preferences
|
||||
import com.tommasoberlose.anotherwidget.utils.checkGrantedPermission
|
||||
import io.realm.Realm
|
||||
import io.realm.RealmConfiguration
|
||||
import net.danlew.android.joda.JodaTimeAndroid
|
||||
|
@ -22,6 +22,7 @@ import com.tommasoberlose.anotherwidget.global.Preferences
|
||||
import com.tommasoberlose.anotherwidget.global.RequestCode
|
||||
import com.tommasoberlose.anotherwidget.ui.activities.tabs.WeatherProviderActivity
|
||||
import com.tommasoberlose.anotherwidget.ui.viewmodels.MainViewModel
|
||||
import com.tommasoberlose.anotherwidget.utils.checkGrantedPermission
|
||||
|
||||
class MainActivity : AppCompatActivity() {
|
||||
|
||||
@ -131,4 +132,12 @@ class MainActivity : AppCompatActivity() {
|
||||
})
|
||||
.check()
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
|
||||
if (Preferences.showEvents && !checkGrantedPermission(Manifest.permission.READ_CALENDAR)) {
|
||||
Preferences.showEvents = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -59,7 +59,9 @@ class GlanceTabFragment : Fragment() {
|
||||
private var dialog: GlanceSettingsDialog? = null
|
||||
private lateinit var adapter: SlimAdapter
|
||||
private lateinit var viewModel: MainViewModel
|
||||
private lateinit var list: ArrayList<Constants.GlanceProviderId>
|
||||
private val list: ArrayList<Constants.GlanceProviderId> by lazy {
|
||||
GlanceProviderHelper.getGlanceProviders(requireContext())
|
||||
}
|
||||
private lateinit var binding: FragmentTabGlanceBinding
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
@ -81,8 +83,6 @@ class GlanceTabFragment : Fragment() {
|
||||
binding.lifecycleOwner = this
|
||||
binding.viewModel = viewModel
|
||||
|
||||
list = GlanceProviderHelper.getGlanceProviders(requireContext())
|
||||
|
||||
return binding.root
|
||||
}
|
||||
|
||||
@ -96,6 +96,10 @@ class GlanceTabFragment : Fragment() {
|
||||
|
||||
adapter = SlimAdapter.create()
|
||||
adapter
|
||||
.register<String>(R.layout.glance_providers_list_ornament) { item, injector ->
|
||||
injector.visibility(R.id.footer, if(item == "footer") View.VISIBLE else View.GONE)
|
||||
injector.visibility(R.id.header, if(item == "header") View.VISIBLE else View.GONE)
|
||||
}
|
||||
.register<GlanceProvider>(R.layout.glance_provider_item) { item, injector ->
|
||||
val provider = Constants.GlanceProviderId.from(item.id)!!
|
||||
injector
|
||||
@ -212,8 +216,8 @@ class GlanceTabFragment : Fragment() {
|
||||
}
|
||||
Constants.GlanceProviderId.GOOGLE_FIT_STEPS -> {
|
||||
val account: GoogleSignInAccount? = GoogleSignIn.getLastSignedInAccount(context)
|
||||
if (GoogleSignIn.hasPermissions(account, FITNESS_OPTIONS) && (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q || activity?.checkGrantedPermission(
|
||||
Manifest.permission.ACTIVITY_RECOGNITION) == true)
|
||||
if (GoogleSignIn.hasPermissions(account, FITNESS_OPTIONS) && (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q || requireActivity().checkGrantedPermission(
|
||||
Manifest.permission.ACTIVITY_RECOGNITION))
|
||||
) {
|
||||
injector.text(R.id.label,
|
||||
if (Preferences.showDailySteps) getString(R.string.settings_visible) else getString(
|
||||
@ -296,7 +300,7 @@ class GlanceTabFragment : Fragment() {
|
||||
GlanceProviderHelper.saveGlanceProviderOrder(
|
||||
list
|
||||
)
|
||||
adapter.updateData(list.mapNotNull { GlanceProviderHelper.getGlanceProviderById(requireContext(), it) })
|
||||
adapter.updateData(listOf("header") + list.mapNotNull { GlanceProviderHelper.getGlanceProviderById(requireContext(), it) } + listOf("footer"))
|
||||
}
|
||||
|
||||
override fun onChildDraw(
|
||||
@ -339,7 +343,6 @@ class GlanceTabFragment : Fragment() {
|
||||
})
|
||||
|
||||
mIth.attachToRecyclerView(binding.providersList)
|
||||
adapter.updateData(list.mapNotNull { GlanceProviderHelper.getGlanceProviderById(requireContext(), it) })
|
||||
binding.providersList.isNestedScrollingEnabled = false
|
||||
|
||||
setupListener()
|
||||
@ -347,6 +350,9 @@ class GlanceTabFragment : Fragment() {
|
||||
binding.scrollView.viewTreeObserver.addOnScrollChangedListener {
|
||||
viewModel.fragmentScrollY.value = binding.scrollView.scrollY
|
||||
}
|
||||
|
||||
|
||||
adapter.updateData(listOf("header") + list.mapNotNull { GlanceProviderHelper.getGlanceProviderById(requireContext(), it) } + listOf("footer"))
|
||||
}
|
||||
|
||||
private fun subscribeUi(
|
||||
@ -365,7 +371,7 @@ class GlanceTabFragment : Fragment() {
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
activity?.registerReceiver(nextAlarmChangeBroadcastReceiver,
|
||||
requireActivity().registerReceiver(nextAlarmChangeBroadcastReceiver,
|
||||
IntentFilter(AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED))
|
||||
if (dialog != null) {
|
||||
dialog?.show()
|
||||
@ -373,7 +379,7 @@ class GlanceTabFragment : Fragment() {
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
activity?.unregisterReceiver(nextAlarmChangeBroadcastReceiver)
|
||||
requireActivity().unregisterReceiver(nextAlarmChangeBroadcastReceiver)
|
||||
super.onStop()
|
||||
}
|
||||
|
||||
@ -430,7 +436,7 @@ class GlanceTabFragment : Fragment() {
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
adapter.notifyItemRangeChanged(0, adapter.data.size)
|
||||
adapter.notifyItemRangeChanged(0, adapter.data?.size ?: 0)
|
||||
if (dialog != null) {
|
||||
dialog?.show()
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.databinding.DataBindingUtil
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.Observer
|
||||
@ -81,17 +82,17 @@ class PreferencesFragment : Fragment() {
|
||||
|
||||
viewModel.showEvents.observe(viewLifecycleOwner) {
|
||||
maintainScrollPosition {
|
||||
binding.showEventsSwitch.setCheckedImmediatelyNoEvent(it)
|
||||
if (it) {
|
||||
CalendarHelper.setEventUpdatesAndroidN(requireContext())
|
||||
} else {
|
||||
CalendarHelper.removeEventUpdatesAndroidN(requireContext())
|
||||
}
|
||||
}
|
||||
checkReadEventsPermission()
|
||||
}
|
||||
|
||||
viewModel.showWeather.observe(viewLifecycleOwner) {
|
||||
checkLocationPermission()
|
||||
checkWeatherProviderConfig()
|
||||
}
|
||||
|
||||
viewModel.showClock.observe(viewLifecycleOwner) {
|
||||
@ -113,9 +114,13 @@ class PreferencesFragment : Fragment() {
|
||||
}
|
||||
|
||||
binding.showEventsSwitch.setOnCheckedChangeListener { _, enabled: Boolean ->
|
||||
Preferences.showEvents = enabled
|
||||
if (Preferences.showEvents) {
|
||||
requirePermission()
|
||||
if (enabled) {
|
||||
if (!requireActivity().checkGrantedPermission(Manifest.permission.READ_CALENDAR)) {
|
||||
binding.showEventsSwitch.setCheckedImmediatelyNoEvent(false)
|
||||
}
|
||||
requireCalendarPermission()
|
||||
} else {
|
||||
Preferences.showEvents = enabled
|
||||
}
|
||||
}
|
||||
|
||||
@ -125,6 +130,11 @@ class PreferencesFragment : Fragment() {
|
||||
|
||||
binding.showWeatherSwitch.setOnCheckedChangeListener { _, enabled: Boolean ->
|
||||
Preferences.showWeather = enabled
|
||||
if (enabled) {
|
||||
WeatherReceiver.setUpdates(requireContext())
|
||||
} else {
|
||||
WeatherReceiver.removeUpdates(requireContext())
|
||||
}
|
||||
}
|
||||
|
||||
binding.actionShowClock.setOnClickListener {
|
||||
@ -144,29 +154,17 @@ class PreferencesFragment : Fragment() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkReadEventsPermission(showEvents: Boolean = Preferences.showEvents) {
|
||||
if (activity?.checkGrantedPermission(Manifest.permission.READ_CALENDAR) == true) {
|
||||
} else {
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateCalendar() {
|
||||
if (activity?.checkGrantedPermission(Manifest.permission.READ_CALENDAR) == true) {
|
||||
CalendarHelper.updateEventList(requireContext())
|
||||
}
|
||||
}
|
||||
|
||||
private fun requirePermission() {
|
||||
private fun requireCalendarPermission() {
|
||||
Dexter.withContext(requireContext())
|
||||
.withPermissions(
|
||||
Manifest.permission.READ_CALENDAR
|
||||
).withListener(object: MultiplePermissionsListener {
|
||||
override fun onPermissionsChecked(report: MultiplePermissionsReport?) {
|
||||
report?.let {
|
||||
if (report.areAllPermissionsGranted()){
|
||||
checkReadEventsPermission()
|
||||
} else {
|
||||
Preferences.showEvents = false
|
||||
val granted = report.areAllPermissionsGranted()
|
||||
Preferences.showEvents = granted
|
||||
if (granted) {
|
||||
CalendarHelper.updateEventList(requireContext())
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -182,16 +180,20 @@ class PreferencesFragment : Fragment() {
|
||||
.check()
|
||||
}
|
||||
|
||||
private fun checkLocationPermission() {
|
||||
if (requireActivity().checkGrantedPermission(Manifest.permission.ACCESS_FINE_LOCATION)) {
|
||||
WeatherReceiver.setUpdates(requireContext())
|
||||
} else if (Preferences.showWeather && Preferences.customLocationAdd == "") {
|
||||
MaterialBottomSheetDialog(requireContext(), message = getString(R.string.background_location_warning))
|
||||
.setPositiveButton(getString(android.R.string.ok)) {
|
||||
requirePermission()
|
||||
}
|
||||
.show()
|
||||
private fun checkWeatherProviderConfig() {
|
||||
if (Preferences.showWeather && Preferences.weatherProviderError != "" && Preferences.weatherProviderError != "-" && !binding.weatherProviderError.isVisible) {
|
||||
binding.weatherProviderError.expand()
|
||||
} else {
|
||||
binding.weatherProviderError.collapse()
|
||||
}
|
||||
binding.weatherProviderError.text = Preferences.weatherProviderError
|
||||
|
||||
if (Preferences.showWeather && Preferences.weatherProviderLocationError != "" && !binding.weatherProviderError.isVisible) {
|
||||
binding.weatherProviderLocationError.expand()
|
||||
} else {
|
||||
binding.weatherProviderLocationError.collapse()
|
||||
}
|
||||
binding.weatherProviderLocationError.text = Preferences.weatherProviderLocationError
|
||||
}
|
||||
|
||||
private fun maintainScrollPosition(callback: () -> Unit) {
|
||||
|
@ -141,11 +141,7 @@ class WeatherFragment : Fragment() {
|
||||
} else if (Preferences.showWeather && Preferences.customLocationAdd == "") {
|
||||
binding.locationPermissionAlert.isVisible = true
|
||||
binding.locationPermissionAlert.setOnClickListener {
|
||||
MaterialBottomSheetDialog(requireContext(), message = getString(R.string.background_location_warning))
|
||||
.setPositiveButton(getString(android.R.string.ok)) {
|
||||
requirePermission()
|
||||
}
|
||||
.show()
|
||||
requirePermission()
|
||||
}
|
||||
} else {
|
||||
binding.locationPermissionAlert.isVisible = false
|
||||
@ -169,7 +165,6 @@ class WeatherFragment : Fragment() {
|
||||
}
|
||||
|
||||
private fun setupListener() {
|
||||
|
||||
binding.actionWeatherProvider.setOnClickListener {
|
||||
startActivityForResult(
|
||||
Intent(requireContext(), WeatherProviderActivity::class.java),
|
||||
|
Reference in New Issue
Block a user