diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ab72527..12c4db4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -145,6 +145,11 @@ + + \ No newline at end of file diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/components/IconPackSelector.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/components/IconPackSelector.kt new file mode 100644 index 0000000..7957345 --- /dev/null +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/components/IconPackSelector.kt @@ -0,0 +1,57 @@ +package com.tommasoberlose.anotherwidget.components + +import android.content.Context +import android.view.View +import android.widget.ImageView +import androidx.core.content.ContextCompat +import androidx.core.view.isVisible +import com.google.android.material.bottomsheet.BottomSheetDialog +import com.tommasoberlose.anotherwidget.R +import com.tommasoberlose.anotherwidget.global.Constants +import com.tommasoberlose.anotherwidget.global.Preferences +import com.tommasoberlose.anotherwidget.helpers.WeatherHelper +import kotlinx.android.synthetic.main.bottom_sheet_menu.view.* +import kotlinx.android.synthetic.main.bottom_sheet_menu.view.header +import kotlinx.android.synthetic.main.fragment_weather_settings.* +import kotlinx.android.synthetic.main.icon_pack_menu_item.view.* + +class IconPackSelector(context: Context, private val header: String? = null) : BottomSheetDialog(context, R.style.BottomSheetDialogTheme) { + + override fun show() { + val view = View.inflate(context, R.layout.bottom_sheet_menu, null) + + // Header + view.header.isVisible = header != null + view.header_text.text = header ?: "" + + view.warning_text.isVisible = false + + // Menu + for (item in Constants.WeatherIconPack.values()) { + val itemView = View.inflate(context, R.layout.icon_pack_menu_item, null) + itemView.label.text = context.getString(R.string.settings_weather_icon_pack_default).format(item.value + 1) + itemView.isSelected = item.value == Preferences.weatherIconPack + + itemView.icon_1.setImageDrawable(ContextCompat.getDrawable(context, WeatherHelper.getWeatherIconResource("01d", item.value))) + itemView.icon_2.setImageDrawable(ContextCompat.getDrawable(context, WeatherHelper.getWeatherIconResource("01n", item.value))) + itemView.icon_3.setImageDrawable(ContextCompat.getDrawable(context, WeatherHelper.getWeatherIconResource("10d", item.value))) + itemView.icon_4.setImageDrawable(ContextCompat.getDrawable(context, WeatherHelper.getWeatherIconResource("09n", item.value))) + + listOf(itemView.icon_1, itemView.icon_2, itemView.icon_3, itemView.icon_4).forEach { + if (item == Constants.WeatherIconPack.MINIMAL) { + it.setColorFilter(ContextCompat.getColor(context, R.color.colorPrimaryText)) + } else { + it.setColorFilter(ContextCompat.getColor(context, android.R.color.transparent)) + } + } + + itemView.setOnClickListener { + Preferences.weatherIconPack = item.value + this.dismiss() + } + view.menu.addView(itemView) + } + setContentView(view) + super.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/db/EventRepository.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/db/EventRepository.kt index a497ee1..5d2b725 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/db/EventRepository.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/db/EventRepository.kt @@ -1,6 +1,7 @@ package com.tommasoberlose.anotherwidget.db import android.content.Context +import android.provider.CalendarContract import android.util.Log import com.chibatching.kotpref.bulk import com.tommasoberlose.anotherwidget.global.Preferences @@ -122,13 +123,18 @@ class EventRepository(val context: Context) { MainWidget.updateWidget(context) } - fun getFutureEvents(): RealmResults { + fun getFutureEvents(): List { val now = Calendar.getInstance().timeInMillis realm.refresh() - return realm.where(Event::class.java).greaterThan("endDate", now).findAll() + return realm + .where(Event::class.java) + .greaterThan("endDate", now) + .findAll() + .filter { (Preferences.showDeclinedEvents || it.selfAttendeeStatus != CalendarContract.Attendees.ATTENDEE_STATUS_DECLINED) } + .filter { (Preferences.calendarAllDay || !it.allDay) } } - private fun getEvents(): RealmResults { + private fun getEvents(): List { val now = Calendar.getInstance().timeInMillis val limit = Calendar.getInstance().apply { timeInMillis = now @@ -145,7 +151,13 @@ class EventRepository(val context: Context) { } } realm.refresh() - return realm.where(Event::class.java).greaterThan("endDate", now).lessThanOrEqualTo("startDate", limit.timeInMillis).findAll() + return realm + .where(Event::class.java) + .greaterThan("endDate", now) + .lessThanOrEqualTo("startDate", limit.timeInMillis) + .findAll() + .filter { (Preferences.showDeclinedEvents || it.selfAttendeeStatus != CalendarContract.Attendees.ATTENDEE_STATUS_DECLINED) } + .filter { (Preferences.calendarAllDay || !it.allDay) } } fun getEventsCount(): Int = getEvents().size 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 b21ac66..d95db56 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/CalendarHelper.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/CalendarHelper.kt @@ -1,8 +1,14 @@ package com.tommasoberlose.anotherwidget.helpers import android.Manifest +import android.app.job.JobInfo +import android.app.job.JobParameters +import android.app.job.JobScheduler +import android.app.job.JobService +import android.content.ComponentName import android.content.ContentUris import android.content.Context +import android.content.Intent import android.provider.CalendarContract import android.util.Log import com.tommasoberlose.anotherwidget.services.EventListenerJob @@ -10,6 +16,7 @@ import com.tommasoberlose.anotherwidget.db.EventRepository import com.tommasoberlose.anotherwidget.models.Event import com.tommasoberlose.anotherwidget.global.Preferences import com.tommasoberlose.anotherwidget.receivers.UpdatesReceiver +import com.tommasoberlose.anotherwidget.services.UpdateCalendarJob import com.tommasoberlose.anotherwidget.ui.fragments.MainFragment import com.tommasoberlose.anotherwidget.ui.widgets.MainWidget import com.tommasoberlose.anotherwidget.utils.checkGrantedPermission @@ -25,104 +32,7 @@ import kotlin.collections.ArrayList object CalendarHelper { fun updateEventList(context: Context) { - val eventRepository = EventRepository(context) - if (Preferences.showEvents) { - val eventList = ArrayList() - - val now = Calendar.getInstance() - val begin = Calendar.getInstance().apply { - set(Calendar.MILLISECOND, 0) - set(Calendar.SECOND, 0) - set(Calendar.MINUTE, 0) - set(Calendar.HOUR_OF_DAY, 0) - } - val limit = Calendar.getInstance().apply { - timeInMillis = begin.timeInMillis - add(Calendar.DAY_OF_YEAR, 2) - } - - if (!context.checkGrantedPermission( - Manifest.permission.READ_CALENDAR - ) - ) { - eventRepository.resetNextEventData() - } else { - try { - val provider = CalendarProvider(context) - val data = provider.getInstances(begin.timeInMillis, limit.timeInMillis) - if (data != null) { - val instances = data.list - for (instance in instances) { - try { - val e = provider.getEvent(instance.eventId) - if (e != null && !e.deleted && instance.begin <= limit.timeInMillis && now.timeInMillis < instance.end && (Preferences.calendarAllDay || !e.allDay) && !getFilteredCalendarIdList().contains( - e.calendarId - ) && (Preferences.showDeclinedEvents || e.selfAttendeeStatus.toInt() != CalendarContract.Attendees.ATTENDEE_STATUS_DECLINED) - ) { - if (e.allDay) { - val start = Calendar.getInstance() - start.timeInMillis = instance.begin - val end = Calendar.getInstance() - end.timeInMillis = instance.end - instance.begin = - start.timeInMillis - start.timeZone.getOffset(start.timeInMillis) - instance.end = - end.timeInMillis - end.timeZone.getOffset(end.timeInMillis) - } - eventList.add( - Event( - instance.id, - e.id, - e.title ?: "", - instance.begin, - instance.end, - e.calendarId.toInt(), - e.allDay, - e.eventLocation ?: "" - ) - ) - } - } catch (ignored: Exception) { - } - } - } - - if (eventList.isEmpty()) { - eventRepository.resetNextEventData() - eventRepository.clearEvents() - } else { - eventList.sortWith(Comparator { event: Event, event1: Event -> - if (event.allDay && event1.allDay) { - event.startDate.compareTo(event1.startDate) - } else if (event.allDay) { - 1 - } else if (event1.allDay) { - -1 - } else { - event1.startDate.compareTo(event.startDate) - } - }) - eventList.reverse() - eventRepository.saveEvents( - eventList - ) - eventRepository.saveNextEventData( - eventList[0] - ) - } - } catch (ignored: java.lang.Exception) { - - } - } - } else { - eventRepository.resetNextEventData() - } - - UpdatesReceiver.setUpdates(context) - MainWidget.updateWidget(context) - - EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) - eventRepository.close() + UpdateCalendarJob.enqueueWork(context, Intent()) } fun getCalendarList(context: Context): List { @@ -144,7 +54,8 @@ object CalendarHelper { } fun getFilteredCalendarIdList(): List { - return Preferences.calendarFilter.split(",").map { it.replace(" ", "") }.filter { it != "" }.map { it.toLong() } + return Preferences.calendarFilter.split(",").map { it.replace(" ", "") } + .filter { it != "" }.map { it.toLong() } } fun filterCalendar(list: List) { diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/IntentHelper.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/IntentHelper.kt index da994bc..8615f85 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/IntentHelper.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/IntentHelper.kt @@ -11,9 +11,11 @@ import android.provider.AlarmClock import android.provider.CalendarContract import android.provider.CalendarContract.Events import android.util.Log +import com.tommasoberlose.anotherwidget.R import com.tommasoberlose.anotherwidget.global.Preferences import com.tommasoberlose.anotherwidget.models.Event import com.tommasoberlose.anotherwidget.ui.widgets.MainWidget +import com.tommasoberlose.anotherwidget.utils.toast import java.util.* @@ -64,12 +66,8 @@ object IntentHelper { flags = Intent.FLAG_ACTIVITY_NEW_TASK } } catch (e: Exception) { - Intent(Intent.ACTION_VIEW).apply { - addCategory(Intent.CATEGORY_DEFAULT) - flags = Intent.FLAG_ACTIVITY_NEW_TASK - data = Uri.parse("dynact://velour/weather/ProxyActivity") - component = ComponentName("com.google.android.googlequicksearchbox", "com.google.android.apps.gsa.velour.DynamicActivityTrampoline") - } + context.toast(context.getString(R.string.error_opening_app)) + Intent() } } } @@ -98,10 +96,8 @@ object IntentHelper { data = calendarUri } } catch (e: Exception) { - e.printStackTrace() - Intent(Intent.ACTION_VIEW).apply { - data = calendarUri - } + context.toast(context.getString(R.string.error_opening_app)) + Intent() } } } @@ -132,23 +128,33 @@ object IntentHelper { } } } else { - getCalendarIntent(context).apply { - action = Intent.ACTION_VIEW - data = uri - if (!e.allDay) { - putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, e.startDate) - putExtra(CalendarContract.EXTRA_EVENT_END_TIME, e.endDate) - } else { - val start = Calendar.getInstance().apply { - timeInMillis = e.startDate + val calendarIntent = getCalendarIntent(context) + if (calendarIntent.action == Intent.ACTION_VIEW) { + calendarIntent.apply { + data = uri + if (!e.allDay) { + putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, e.startDate) + putExtra(CalendarContract.EXTRA_EVENT_END_TIME, e.endDate) + } else { + val start = Calendar.getInstance().apply { + timeInMillis = e.startDate + } + val end = Calendar.getInstance().apply { + timeInMillis = e.endDate + } + putExtra( + CalendarContract.EXTRA_EVENT_BEGIN_TIME, + start.timeInMillis + start.timeZone.getOffset(start.timeInMillis) + ) + putExtra( + CalendarContract.EXTRA_EVENT_END_TIME, + end.timeInMillis + end.timeZone.getOffset(end.timeInMillis) + ) + putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, 1) } - val end = Calendar.getInstance().apply { - timeInMillis = e.endDate - } - putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, start.timeInMillis + start.timeZone.getOffset(start.timeInMillis)) - putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end.timeInMillis + end.timeZone.getOffset(end.timeInMillis)) - putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, 1) } + } else { + Intent() } } } @@ -175,9 +181,8 @@ object IntentHelper { addCategory(Intent.CATEGORY_LAUNCHER) } } catch (e: Exception) { - Intent(AlarmClock.ACTION_SHOW_ALARMS).apply { - flags = Intent.FLAG_ACTIVITY_NEW_TASK - } + context.toast(context.getString(R.string.error_opening_app)) + Intent() } } } @@ -199,6 +204,7 @@ object IntentHelper { addCategory(Intent.CATEGORY_LAUNCHER) } } catch (e: Exception) { + context.toast(context.getString(R.string.error_opening_app)) Intent() } } @@ -212,6 +218,7 @@ object IntentHelper { addCategory(Intent.CATEGORY_LAUNCHER) } } catch (e: Exception) { + context.toast(context.getString(R.string.error_opening_app)) Intent() } } diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/WeatherHelper.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/WeatherHelper.kt index 7242a75..a08d95d 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/WeatherHelper.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/WeatherHelper.kt @@ -46,10 +46,10 @@ object WeatherHelper { MainWidget.updateWidget(context) } - fun getWeatherIconResource(icon: String): Int { + fun getWeatherIconResource(icon: String, style: Int = Preferences.weatherIconPack): Int { return when (icon) { "01d" -> { - when (Preferences.weatherIconPack) { + when (style) { Constants.WeatherIconPack.COOL.value -> R.drawable.clear_day_3 Constants.WeatherIconPack.MINIMAL.value -> R.drawable.clear_day_2 Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.clear_day_4 @@ -57,7 +57,7 @@ object WeatherHelper { } } "02d" -> { - when (Preferences.weatherIconPack) { + when (style) { Constants.WeatherIconPack.COOL.value -> R.drawable.partly_cloudy_3 Constants.WeatherIconPack.MINIMAL.value -> R.drawable.partly_cloudy_2 Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.partly_cloudy_4 @@ -65,7 +65,7 @@ object WeatherHelper { } } "03d" -> { - when (Preferences.weatherIconPack) { + when (style) { Constants.WeatherIconPack.COOL.value -> R.drawable.mostly_cloudy_3 Constants.WeatherIconPack.MINIMAL.value -> R.drawable.mostly_cloudy_2 Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.mostly_cloudy_4 @@ -73,7 +73,7 @@ object WeatherHelper { } } "04d" -> { - when (Preferences.weatherIconPack) { + when (style) { Constants.WeatherIconPack.COOL.value -> R.drawable.cloudy_weather_3 Constants.WeatherIconPack.MINIMAL.value -> R.drawable.cloudy_weather_2 Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.cloudy_weather_4 @@ -81,7 +81,7 @@ object WeatherHelper { } } "09d" -> { - when (Preferences.weatherIconPack) { + when (style) { Constants.WeatherIconPack.COOL.value -> R.drawable.storm_weather_day_3 Constants.WeatherIconPack.MINIMAL.value -> R.drawable.storm_weather_day_2 Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.storm_weather_day_4 @@ -89,7 +89,7 @@ object WeatherHelper { } } "10d" -> { - when (Preferences.weatherIconPack) { + when (style) { Constants.WeatherIconPack.COOL.value -> R.drawable.rainy_day_3 Constants.WeatherIconPack.MINIMAL.value -> R.drawable.rainy_day_2 Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.rainy_day_4 @@ -97,7 +97,7 @@ object WeatherHelper { } } "11d" -> { - when (Preferences.weatherIconPack) { + when (style) { Constants.WeatherIconPack.COOL.value -> R.drawable.thunder_day_3 Constants.WeatherIconPack.MINIMAL.value -> R.drawable.thunder_day_2 Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.thunder_day_4 @@ -105,7 +105,7 @@ object WeatherHelper { } } "13d" -> { - when (Preferences.weatherIconPack) { + when (style) { Constants.WeatherIconPack.COOL.value -> R.drawable.snow_day_3 Constants.WeatherIconPack.MINIMAL.value -> R.drawable.snow_day_2 Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.snow_day_4 @@ -113,7 +113,7 @@ object WeatherHelper { } } "50d" -> { - when (Preferences.weatherIconPack) { + when (style) { Constants.WeatherIconPack.COOL.value -> R.drawable.haze_day_3 Constants.WeatherIconPack.MINIMAL.value -> R.drawable.haze_day_2 Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.haze_day_4 @@ -121,7 +121,7 @@ object WeatherHelper { } } "80d" -> { - when (Preferences.weatherIconPack) { + when (style) { Constants.WeatherIconPack.COOL.value -> R.drawable.windy_day_3 Constants.WeatherIconPack.MINIMAL.value -> R.drawable.windy_day_2 Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.windy_day_4 @@ -129,7 +129,7 @@ object WeatherHelper { } } "81d" -> { - when (Preferences.weatherIconPack) { + when (style) { Constants.WeatherIconPack.COOL.value -> R.drawable.rain_snow_day_3 Constants.WeatherIconPack.MINIMAL.value -> R.drawable.rain_snow_day_2 Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.rain_snow_day_4 @@ -137,7 +137,7 @@ object WeatherHelper { } } "82d" -> { - when (Preferences.weatherIconPack) { + when (style) { Constants.WeatherIconPack.COOL.value -> R.drawable.haze_weather_3 Constants.WeatherIconPack.MINIMAL.value -> R.drawable.haze_weather_2 Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.haze_weather_4 @@ -148,7 +148,7 @@ object WeatherHelper { "01n" -> { - when (Preferences.weatherIconPack) { + when (style) { Constants.WeatherIconPack.COOL.value -> R.drawable.clear_night_3 Constants.WeatherIconPack.MINIMAL.value -> R.drawable.clear_night_2 Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.clear_night_4 @@ -156,7 +156,7 @@ object WeatherHelper { } } "02n" -> { - when (Preferences.weatherIconPack) { + when (style) { Constants.WeatherIconPack.COOL.value -> R.drawable.partly_cloudy_night_3 Constants.WeatherIconPack.MINIMAL.value -> R.drawable.partly_cloudy_night_2 Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.partly_cloudy_night_4 @@ -164,7 +164,7 @@ object WeatherHelper { } } "03n" -> { - when (Preferences.weatherIconPack) { + when (style) { Constants.WeatherIconPack.COOL.value -> R.drawable.mostly_cloudy_night_3 Constants.WeatherIconPack.MINIMAL.value -> R.drawable.mostly_cloudy_night_2 Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.mostly_cloudy_night_4 @@ -172,7 +172,7 @@ object WeatherHelper { } } "04n" -> { - when (Preferences.weatherIconPack) { + when (style) { Constants.WeatherIconPack.COOL.value -> R.drawable.cloudy_weather_3 Constants.WeatherIconPack.MINIMAL.value -> R.drawable.cloudy_weather_2 Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.cloudy_weather_4 @@ -180,7 +180,7 @@ object WeatherHelper { } } "09n" -> { - when (Preferences.weatherIconPack) { + when (style) { Constants.WeatherIconPack.COOL.value -> R.drawable.storm_weather_night_3 Constants.WeatherIconPack.MINIMAL.value -> R.drawable.storm_weather_night_2 Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.storm_weather_night_4 @@ -188,7 +188,7 @@ object WeatherHelper { } } "10n" -> { - when (Preferences.weatherIconPack) { + when (style) { Constants.WeatherIconPack.COOL.value -> R.drawable.rainy_night_3 Constants.WeatherIconPack.MINIMAL.value -> R.drawable.rainy_night_2 Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.rainy_night_4 @@ -196,7 +196,7 @@ object WeatherHelper { } } "11n" -> { - when (Preferences.weatherIconPack) { + when (style) { Constants.WeatherIconPack.COOL.value -> R.drawable.thunder_night_3 Constants.WeatherIconPack.MINIMAL.value -> R.drawable.thunder_night_2 Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.thunder_night_4 @@ -204,7 +204,7 @@ object WeatherHelper { } } "13n" -> { - when (Preferences.weatherIconPack) { + when (style) { Constants.WeatherIconPack.COOL.value -> R.drawable.snow_night_3 Constants.WeatherIconPack.MINIMAL.value -> R.drawable.snow_night_2 Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.snow_night_4 @@ -212,7 +212,7 @@ object WeatherHelper { } } "50n" -> { - when (Preferences.weatherIconPack) { + when (style) { Constants.WeatherIconPack.COOL.value -> R.drawable.haze_night_3 Constants.WeatherIconPack.MINIMAL.value -> R.drawable.haze_night_2 Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.haze_night_4 @@ -220,7 +220,7 @@ object WeatherHelper { } } "80n" -> { - when (Preferences.weatherIconPack) { + when (style) { Constants.WeatherIconPack.COOL.value -> R.drawable.windy_night_3 Constants.WeatherIconPack.MINIMAL.value -> R.drawable.windy_night_2 Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.windy_night_4 @@ -228,7 +228,7 @@ object WeatherHelper { } } "81n" -> { - when (Preferences.weatherIconPack) { + when (style) { Constants.WeatherIconPack.COOL.value -> R.drawable.rain_snow_night_3 Constants.WeatherIconPack.MINIMAL.value -> R.drawable.rain_snow_night_2 Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.rain_snow_night_4 @@ -236,7 +236,7 @@ object WeatherHelper { } } "82n" -> { - when (Preferences.weatherIconPack) { + when (style) { Constants.WeatherIconPack.COOL.value -> R.drawable.haze_weather_3 Constants.WeatherIconPack.MINIMAL.value -> R.drawable.haze_weather_2 Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.haze_weather_4 diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/models/Event.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/models/Event.kt index dce92bb..5517774 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/models/Event.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/models/Event.kt @@ -1,5 +1,6 @@ package com.tommasoberlose.anotherwidget.models +import android.provider.CalendarContract import io.realm.RealmObject import java.util.Date @@ -7,14 +8,17 @@ import java.util.Date * Created by tommaso on 05/10/17. */ -open class Event(var id: Long = 0, - var eventID: Long = 0, - var title: String = "", - var startDate: Long = 0, - var endDate: Long = 0, - var calendarID: Int = 0, - var allDay: Boolean = false, - var address: String = "") : RealmObject() { +open class Event( + var id: Long = 0, + var eventID: Long = 0, + var title: String = "", + var startDate: Long = 0, + var endDate: Long = 0, + var calendarID: Int = 0, + var allDay: Boolean = false, + var address: String = "", + var selfAttendeeStatus: Int = CalendarContract.Attendees.ATTENDEE_STATUS_NONE +) : RealmObject() { override fun toString(): String { return "Event:\nEVENT ID: " + eventID + "\nTITLE: " + title + "\nSTART DATE: " + Date(startDate) + "\nEND DATE: " + Date(endDate) + "\nCAL ID: " + calendarID + "\nADDRESS: " + address } diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/services/UpdateCalendarJob.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/services/UpdateCalendarJob.kt new file mode 100644 index 0000000..5d42813 --- /dev/null +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/services/UpdateCalendarJob.kt @@ -0,0 +1,134 @@ +package com.tommasoberlose.anotherwidget.services + +import android.Manifest +import android.content.Context +import android.content.Intent +import android.util.Log +import androidx.core.app.JobIntentService +import com.tommasoberlose.anotherwidget.db.EventRepository +import com.tommasoberlose.anotherwidget.global.Preferences +import com.tommasoberlose.anotherwidget.helpers.CalendarHelper +import com.tommasoberlose.anotherwidget.models.Event +import com.tommasoberlose.anotherwidget.receivers.UpdatesReceiver +import com.tommasoberlose.anotherwidget.ui.fragments.MainFragment +import com.tommasoberlose.anotherwidget.ui.widgets.MainWidget +import com.tommasoberlose.anotherwidget.utils.checkGrantedPermission +import me.everything.providers.android.calendar.CalendarProvider +import org.greenrobot.eventbus.EventBus +import java.util.* +import kotlin.Comparator +import kotlin.collections.ArrayList + +class UpdateCalendarJob : JobIntentService() { + + companion object { + val jobId = 1200 + + fun enqueueWork(context: Context, work: Intent) { + enqueueWork(context, UpdateCalendarJob::class.java, jobId, work) + } + } + + override fun onHandleWork(intent: Intent) { + val eventRepository = EventRepository(this) + if (Preferences.showEvents) { + val eventList = ArrayList() + + val now = Calendar.getInstance() + val begin = Calendar.getInstance().apply { + set(Calendar.MILLISECOND, 0) + set(Calendar.SECOND, 0) + set(Calendar.MINUTE, 0) + set(Calendar.HOUR_OF_DAY, 0) + } + val limit = Calendar.getInstance().apply { + timeInMillis = begin.timeInMillis + add(Calendar.DAY_OF_YEAR, 2) + } + + if (!checkGrantedPermission( + Manifest.permission.READ_CALENDAR + ) + ) { + eventRepository.resetNextEventData() + } else { + try { + val provider = CalendarProvider(this) + val data = provider.getInstances(begin.timeInMillis, limit.timeInMillis) + if (data != null) { + val instances = data.list + for (instance in instances) { + try { + val e = provider.getEvent(instance.eventId) + if (e != null && !e.deleted && instance.begin <= limit.timeInMillis && now.timeInMillis < instance.end && !CalendarHelper.getFilteredCalendarIdList() + .contains(e.calendarId) + ) { + if (e.allDay) { + val start = Calendar.getInstance() + start.timeInMillis = instance.begin + val end = Calendar.getInstance() + end.timeInMillis = instance.end + instance.begin = + start.timeInMillis - start.timeZone.getOffset(start.timeInMillis) + instance.end = + end.timeInMillis - end.timeZone.getOffset(end.timeInMillis) + } + eventList.add( + Event( + id = instance.id, + eventID = e.id, + title = e.title ?: "", + startDate = instance.begin, + endDate = instance.end, + calendarID = e.calendarId.toInt(), + allDay = e.allDay, + address = e.eventLocation ?: "", + selfAttendeeStatus = e.selfAttendeeStatus.toInt() + ) + ) + } + } catch (ignored: Exception) { + } + } + } + + if (eventList.isEmpty()) { + eventRepository.resetNextEventData() + eventRepository.clearEvents() + } else { + eventList.sortWith(Comparator { event: Event, event1: Event -> + if (event.allDay && event1.allDay) { + event.startDate.compareTo(event1.startDate) + } else if (event.allDay) { + 1 + } else if (event1.allDay) { + -1 + } else { + event1.startDate.compareTo(event.startDate) + } + }) + eventList.reverse() + eventRepository.saveEvents( + eventList + ) + eventRepository.saveNextEventData( + eventList[0] + ) + } + } catch (ignored: java.lang.Exception) { + + } + } + } else { + eventRepository.resetNextEventData() + } + + UpdatesReceiver.setUpdates(this) + MainWidget.updateWidget(this) + + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) + eventRepository.close() + + Log.d("ciao", "aggiornati") + } +} \ No newline at end of file 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 86c38ca..3d508b1 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 @@ -109,14 +109,12 @@ class CalendarTabFragment : Fragment() { all_day_label?.text = if (it) getString(R.string.settings_visible) else getString(R.string.settings_not_visible) } - 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) } - updateCalendar() }) viewModel.secondRowInformation.observe(viewLifecycleOwner, Observer { 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 8e5957e..f152a00 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 @@ -8,6 +8,7 @@ import android.content.Intent import android.content.IntentFilter import android.content.pm.PackageManager import android.os.Bundle +import android.text.format.DateFormat import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -49,6 +50,7 @@ class ClockTabFragment : Fragment() { private lateinit var viewModel: MainViewModel private lateinit var colors: IntArray + private lateinit var binding: FragmentClockSettingsBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -60,7 +62,7 @@ class ClockTabFragment : Fragment() { ): View { viewModel = ViewModelProvider(activity as MainActivity).get(MainViewModel::class.java) - val binding = DataBindingUtil.inflate(inflater, R.layout.fragment_clock_settings, container, false) + binding = DataBindingUtil.inflate(inflater, R.layout.fragment_clock_settings, container, false) subscribeUi(binding, viewModel) @@ -89,6 +91,7 @@ class ClockTabFragment : Fragment() { viewModel: MainViewModel ) { binding.isClockVisible = Preferences.showClock + binding.is24Format = DateFormat.is24HourFormat(requireContext()) viewModel.showBigClockWarning.observe(viewLifecycleOwner, Observer { large_clock_warning?.isVisible = it @@ -266,6 +269,11 @@ class ClockTabFragment : Fragment() { super.onActivityResult(requestCode, resultCode, data) } + override fun onResume() { + binding.is24Format = DateFormat.is24HourFormat(requireContext()) + super.onResume() + } + private fun maintainScrollPosition(callback: () -> Unit) { scrollView.isScrollable = false callback.invoke() 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 3edc6a8..d019470 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 @@ -25,6 +25,7 @@ import com.karumi.dexter.listener.PermissionRequest import com.karumi.dexter.listener.multi.MultiplePermissionsListener import com.tommasoberlose.anotherwidget.R import com.tommasoberlose.anotherwidget.components.BottomSheetMenu +import com.tommasoberlose.anotherwidget.components.IconPackSelector import com.tommasoberlose.anotherwidget.databinding.FragmentWeatherSettingsBinding import com.tommasoberlose.anotherwidget.global.Constants import com.tommasoberlose.anotherwidget.global.Preferences @@ -133,12 +134,12 @@ 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("02d"))) - if (it == Constants.WeatherIconPack.MINIMAL.value) { - weather_icon_pack.setColorFilter(ContextCompat.getColor(requireContext(), R.color.colorPrimaryText)) - } else { - weather_icon_pack.setColorFilter(ContextCompat.getColor(requireContext(), android.R.color.transparent)) - } +// 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 { +// weather_icon_pack.setColorFilter(ContextCompat.getColor(requireContext(), android.R.color.transparent)) +// } } checkLocationPermission() }) @@ -236,13 +237,7 @@ class WeatherTabFragment : Fragment() { action_weather_icon_pack.setOnClickListener { if (Preferences.showWeather) { - val dialog = BottomSheetMenu(requireContext(), header = getString(R.string.settings_weather_icon_pack_title)).setSelectedValue(Preferences.weatherIconPack) - Constants.WeatherIconPack.values().forEach { - dialog.addItem(getString(R.string.settings_weather_icon_pack_default).format(it.value + 1), it.value) - } - dialog.addOnSelectItemListener { value -> - Preferences.weatherIconPack = value - }.show() + IconPackSelector(requireContext(), header = getString(R.string.settings_weather_icon_pack_title)).show() } } diff --git a/app/src/main/res/layout/fragment_calendar_settings.xml b/app/src/main/res/layout/fragment_calendar_settings.xml index 4be0311..728cec9 100644 --- a/app/src/main/res/layout/fragment_calendar_settings.xml +++ b/app/src/main/res/layout/fragment_calendar_settings.xml @@ -42,8 +42,7 @@ android:layout_width="48dp" android:layout_height="48dp" android:padding="12dp" - android:src="@drawable/round_today" - android:tint="@color/colorPrimaryText"/> + android:src="@drawable/calendar"/> + + + android:src="@drawable/clear_day_3"/> + + + + + + + + + \ No newline at end of file