Close #310, added weather as glance provider
This commit is contained in:
parent
fb1953d513
commit
dd2a74aaf6
@ -51,6 +51,7 @@ class GlanceSettingsDialog(val context: Activity, val provider: Constants.Glance
|
|||||||
Constants.GlanceProviderId.NOTIFICATIONS -> context.getString(R.string.settings_show_notifications_title)
|
Constants.GlanceProviderId.NOTIFICATIONS -> context.getString(R.string.settings_show_notifications_title)
|
||||||
Constants.GlanceProviderId.GREETINGS -> context.getString(R.string.settings_show_greetings_title)
|
Constants.GlanceProviderId.GREETINGS -> context.getString(R.string.settings_show_greetings_title)
|
||||||
Constants.GlanceProviderId.EVENTS -> context.getString(R.string.settings_show_events_as_glance_provider_title)
|
Constants.GlanceProviderId.EVENTS -> context.getString(R.string.settings_show_events_as_glance_provider_title)
|
||||||
|
Constants.GlanceProviderId.WEATHER -> context.getString(R.string.settings_show_weather_as_glance_provider_title)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SUBTITLE*/
|
/* SUBTITLE*/
|
||||||
@ -63,6 +64,7 @@ class GlanceSettingsDialog(val context: Activity, val provider: Constants.Glance
|
|||||||
Constants.GlanceProviderId.NOTIFICATIONS -> context.getString(R.string.settings_show_notifications_subtitle)
|
Constants.GlanceProviderId.NOTIFICATIONS -> context.getString(R.string.settings_show_notifications_subtitle)
|
||||||
Constants.GlanceProviderId.GREETINGS -> context.getString(R.string.settings_show_greetings_subtitle)
|
Constants.GlanceProviderId.GREETINGS -> context.getString(R.string.settings_show_greetings_subtitle)
|
||||||
Constants.GlanceProviderId.EVENTS -> context.getString(R.string.settings_show_events_as_glance_provider_subtitle)
|
Constants.GlanceProviderId.EVENTS -> context.getString(R.string.settings_show_events_as_glance_provider_subtitle)
|
||||||
|
Constants.GlanceProviderId.WEATHER -> context.getString(R.string.settings_show_weather_as_glance_provider_subtitle)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SONG */
|
/* SONG */
|
||||||
@ -140,6 +142,13 @@ class GlanceSettingsDialog(val context: Activity, val provider: Constants.Glance
|
|||||||
checkCalendarConfig()
|
checkCalendarConfig()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* WEATHER */
|
||||||
|
if (provider == Constants.GlanceProviderId.WEATHER) {
|
||||||
|
binding.header.isVisible = false
|
||||||
|
binding.divider.isVisible = false
|
||||||
|
checkWeatherConfig()
|
||||||
|
}
|
||||||
|
|
||||||
/* TOGGLE */
|
/* TOGGLE */
|
||||||
binding.providerSwitch.setCheckedImmediatelyNoEvent(when (provider) {
|
binding.providerSwitch.setCheckedImmediatelyNoEvent(when (provider) {
|
||||||
Constants.GlanceProviderId.PLAYING_SONG -> Preferences.showMusic
|
Constants.GlanceProviderId.PLAYING_SONG -> Preferences.showMusic
|
||||||
@ -150,6 +159,7 @@ class GlanceSettingsDialog(val context: Activity, val provider: Constants.Glance
|
|||||||
Constants.GlanceProviderId.NOTIFICATIONS -> Preferences.showNotifications
|
Constants.GlanceProviderId.NOTIFICATIONS -> Preferences.showNotifications
|
||||||
Constants.GlanceProviderId.GREETINGS -> Preferences.showGreetings
|
Constants.GlanceProviderId.GREETINGS -> Preferences.showGreetings
|
||||||
Constants.GlanceProviderId.EVENTS -> Preferences.showEventsAsGlanceProvider
|
Constants.GlanceProviderId.EVENTS -> Preferences.showEventsAsGlanceProvider
|
||||||
|
Constants.GlanceProviderId.WEATHER -> Preferences.showWeatherAsGlanceProvider
|
||||||
})
|
})
|
||||||
|
|
||||||
var job: Job? = null
|
var job: Job? = null
|
||||||
@ -208,6 +218,9 @@ class GlanceSettingsDialog(val context: Activity, val provider: Constants.Glance
|
|||||||
Constants.GlanceProviderId.EVENTS -> {
|
Constants.GlanceProviderId.EVENTS -> {
|
||||||
Preferences.showEventsAsGlanceProvider = isChecked
|
Preferences.showEventsAsGlanceProvider = isChecked
|
||||||
}
|
}
|
||||||
|
Constants.GlanceProviderId.WEATHER -> {
|
||||||
|
Preferences.showWeatherAsGlanceProvider = isChecked
|
||||||
|
}
|
||||||
else -> {
|
else -> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -255,6 +268,19 @@ class GlanceSettingsDialog(val context: Activity, val provider: Constants.Glance
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun checkWeatherConfig() {
|
||||||
|
if (!Preferences.showWeather || (Preferences.weatherProviderError != "" && Preferences.weatherProviderError != "-") || Preferences.weatherProviderLocationError != "") {
|
||||||
|
binding.warningContainer.isVisible = true
|
||||||
|
binding.warningTitle.text = context.getString(R.string.settings_show_weather_as_glance_provider_error)
|
||||||
|
binding.warningContainer.setOnClickListener {
|
||||||
|
dismiss()
|
||||||
|
EventBus.getDefault().post(MainFragment.ChangeTabEvent(1))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
binding.warningContainer.isVisible = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun checkNotificationPermission() {
|
private fun checkNotificationPermission() {
|
||||||
when {
|
when {
|
||||||
ActiveNotificationsHelper.checkNotificationAccess(context) -> {
|
ActiveNotificationsHelper.checkNotificationAccess(context) -> {
|
||||||
|
@ -38,7 +38,8 @@ object Constants {
|
|||||||
GOOGLE_FIT_STEPS("GOOGLE_FIT_STEPS"),
|
GOOGLE_FIT_STEPS("GOOGLE_FIT_STEPS"),
|
||||||
NOTIFICATIONS("NOTIFICATIONS"),
|
NOTIFICATIONS("NOTIFICATIONS"),
|
||||||
GREETINGS("GREETINGS"),
|
GREETINGS("GREETINGS"),
|
||||||
EVENTS("EVENTS");
|
EVENTS("EVENTS"),
|
||||||
|
WEATHER("WEATHER");
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val map = GlanceProviderId.values().associateBy(GlanceProviderId::id)
|
private val map = GlanceProviderId.values().associateBy(GlanceProviderId::id)
|
||||||
|
@ -153,6 +153,7 @@ object Preferences : KotprefModel() {
|
|||||||
var appNotificationsFilter by stringPref(default = "")
|
var appNotificationsFilter by stringPref(default = "")
|
||||||
|
|
||||||
var showEventsAsGlanceProvider by booleanPref(default = false)
|
var showEventsAsGlanceProvider by booleanPref(default = false)
|
||||||
|
var showWeatherAsGlanceProvider by booleanPref(default = false)
|
||||||
|
|
||||||
// Integrations
|
// Integrations
|
||||||
var installedIntegrations by intPref(default = 0)
|
var installedIntegrations by intPref(default = 0)
|
||||||
|
@ -90,6 +90,12 @@ object GlanceProviderHelper {
|
|||||||
R.drawable.round_event_note_24
|
R.drawable.round_event_note_24
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
Constants.GlanceProviderId.WEATHER -> {
|
||||||
|
GlanceProvider(providerId.id,
|
||||||
|
context.getString(R.string.settings_show_weather_as_glance_provider_title),
|
||||||
|
R.drawable.round_brightness_5_24
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,6 +114,7 @@ object GlanceProviderHelper {
|
|||||||
(MediaPlayerHelper.isSomeonePlaying(context)) ||
|
(MediaPlayerHelper.isSomeonePlaying(context)) ||
|
||||||
(Preferences.showBatteryCharging && Preferences.isCharging || Preferences.isBatteryLevelLow) ||
|
(Preferences.showBatteryCharging && Preferences.isCharging || Preferences.isBatteryLevelLow) ||
|
||||||
(Preferences.customNotes.isNotEmpty()) ||
|
(Preferences.customNotes.isNotEmpty()) ||
|
||||||
|
(Preferences.showWeatherAsGlanceProvider && Preferences.weatherIcon != "") ||
|
||||||
(Preferences.showDailySteps && Preferences.googleFitSteps > 0) ||
|
(Preferences.showDailySteps && Preferences.googleFitSteps > 0) ||
|
||||||
(Preferences.showGreetings && GreetingsHelper.showGreetings()) ||
|
(Preferences.showGreetings && GreetingsHelper.showGreetings()) ||
|
||||||
(Preferences.showEventsAsGlanceProvider && Preferences.showEvents && context.checkGrantedPermission(
|
(Preferences.showEventsAsGlanceProvider && Preferences.showEvents && context.checkGrantedPermission(
|
||||||
|
@ -313,6 +313,23 @@ object WeatherHelper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getWeatherLabel(context: Context, icon: String): String {
|
||||||
|
return when (icon) {
|
||||||
|
"01d", "01n" -> context.getString(R.string.weather_label_clear)
|
||||||
|
"02d", "02n" -> context.getString(R.string.weather_label_partly_cloudy)
|
||||||
|
"03d", "03n" -> context.getString(R.string.weather_label_mostly_cloudy)
|
||||||
|
"04d", "04n" -> context.getString(R.string.weather_label_cloudy_weather)
|
||||||
|
"09d", "09n" -> context.getString(R.string.weather_label_storm_weather)
|
||||||
|
"10d", "10n" -> context.getString(R.string.weather_label_rainy)
|
||||||
|
"11d", "11n" -> context.getString(R.string.weather_label_thunder)
|
||||||
|
"13d", "13n" -> context.getString(R.string.weather_label_snow)
|
||||||
|
"50d", "50n", "82d", "82n" -> context.getString(R.string.weather_label_haze)
|
||||||
|
"80d", "80n" -> context.getString(R.string.weather_label_windy)
|
||||||
|
"81d", "81n" -> context.getString(R.string.weather_label_rain_snow)
|
||||||
|
else -> context.getString(R.string.weather_label_unknown)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun getWeatherGovIcon(iconString: String, isDaytime: Boolean): String = when {
|
fun getWeatherGovIcon(iconString: String, isDaytime: Boolean): String = when {
|
||||||
iconString.contains("skc") -> "01"
|
iconString.contains("skc") -> "01"
|
||||||
iconString.contains("few") -> "02"
|
iconString.contains("few") -> "02"
|
||||||
|
@ -141,10 +141,6 @@ class MainFragment : Fragment() {
|
|||||||
binding.toolbar.cardElevation = if (it > 0) 24f else 0f
|
binding.toolbar.cardElevation = if (it > 0) 24f else 0f
|
||||||
}
|
}
|
||||||
|
|
||||||
viewModel.clockPreferencesUpdate.observe(viewLifecycleOwner) {
|
|
||||||
onUpdateUiEvent(null)
|
|
||||||
}
|
|
||||||
|
|
||||||
viewModel.widgetPreferencesUpdate.observe(viewLifecycleOwner) {
|
viewModel.widgetPreferencesUpdate.observe(viewLifecycleOwner) {
|
||||||
onUpdateUiEvent(null)
|
onUpdateUiEvent(null)
|
||||||
}
|
}
|
||||||
@ -160,15 +156,21 @@ class MainFragment : Fragment() {
|
|||||||
val generatedView = MainWidget.getWidgetView(requireContext(), binding.widget.width, typeface)
|
val generatedView = MainWidget.getWidgetView(requireContext(), binding.widget.width, typeface)
|
||||||
|
|
||||||
if (generatedView != null) {
|
if (generatedView != null) {
|
||||||
|
val view: View = generatedView.apply(requireActivity().applicationContext, binding.widget)
|
||||||
|
view.measure(0, 0)
|
||||||
|
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
val view: View = generatedView.apply(requireActivity().applicationContext, binding.widget)
|
binding.widgetLoader.animate().scaleX(1f).scaleY(1f).alpha(1f)
|
||||||
view.measure(0, 0)
|
|
||||||
binding.widget.removeAllViews()
|
|
||||||
binding.widget.addView(view)
|
|
||||||
updatePreviewVisibility(view.measuredHeight)
|
|
||||||
binding.widgetLoader.animate().scaleX(0f).scaleY(0f).alpha(0f)
|
|
||||||
.setDuration(200L).start()
|
.setDuration(200L).start()
|
||||||
binding.widget.animate().alpha(1f).start()
|
binding.widget.animate().alpha(0f).setDuration(200L).withEndAction {
|
||||||
|
binding.widget.removeAllViews()
|
||||||
|
binding.widget.addView(view)
|
||||||
|
|
||||||
|
updatePreviewVisibility(view.measuredHeight)
|
||||||
|
binding.widgetLoader.animate().scaleX(0f).scaleY(0f).alpha(0f)
|
||||||
|
.setDuration(200L).start()
|
||||||
|
binding.widget.animate().alpha(1f).start()
|
||||||
|
}.start()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -177,7 +179,7 @@ class MainFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun updatePreviewVisibility(widgetHeight: Int) {
|
private fun updatePreviewVisibility(widgetHeight: Int) {
|
||||||
val newHeight = widgetHeight + 16f.convertDpToPixel(requireContext()).toInt()
|
val newHeight = widgetHeight + 32f.convertDpToPixel(requireContext()).toInt()
|
||||||
if (binding.preview.layoutParams.height != newHeight) {
|
if (binding.preview.layoutParams.height != newHeight) {
|
||||||
binding.preview.clearAnimation()
|
binding.preview.clearAnimation()
|
||||||
ValueAnimator.ofInt(
|
ValueAnimator.ofInt(
|
||||||
|
@ -293,6 +293,25 @@ class GlanceTabFragment : Fragment() {
|
|||||||
if (!(isVisible && hasError)) View.VISIBLE else View.GONE
|
if (!(isVisible && hasError)) View.VISIBLE else View.GONE
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
Constants.GlanceProviderId.WEATHER -> {
|
||||||
|
isVisible =
|
||||||
|
Preferences.showWeatherAsGlanceProvider
|
||||||
|
val hasError = !Preferences.showWeather || (Preferences.weatherProviderError != "" && Preferences.weatherProviderError != "-") || Preferences.weatherProviderLocationError != ""
|
||||||
|
injector.text(
|
||||||
|
R.id.label,
|
||||||
|
if (isVisible && !hasError) getString(R.string.settings_visible) else getString(
|
||||||
|
R.string.settings_not_visible
|
||||||
|
)
|
||||||
|
)
|
||||||
|
injector.visibility(
|
||||||
|
R.id.error_icon,
|
||||||
|
if (isVisible && hasError) View.VISIBLE else View.GONE
|
||||||
|
)
|
||||||
|
injector.visibility(
|
||||||
|
R.id.info_icon,
|
||||||
|
if (!(isVisible && hasError)) View.VISIBLE else View.GONE
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
injector.alpha(R.id.title, if (isVisible) 1f else .25f)
|
injector.alpha(R.id.title, if (isVisible) 1f else .25f)
|
||||||
|
@ -104,7 +104,8 @@ class MainViewModel(context: Application) : AndroidViewModel(context) {
|
|||||||
|
|
||||||
// UI
|
// UI
|
||||||
val fragmentScrollY = MutableLiveData<Int>()
|
val fragmentScrollY = MutableLiveData<Int>()
|
||||||
val clockPreferencesUpdate = MediatorLiveData<Boolean>().apply {
|
val widgetPreferencesUpdate = MediatorLiveData<Boolean>().apply {
|
||||||
|
addSource(Preferences.asLiveData(Preferences::showClock)) { value = true }
|
||||||
addSource(Preferences.asLiveData(Preferences::clockTextSize)) { value = true }
|
addSource(Preferences.asLiveData(Preferences::clockTextSize)) { value = true }
|
||||||
addSource(Preferences.asLiveData(Preferences::clockTextColor)) { value = true }
|
addSource(Preferences.asLiveData(Preferences::clockTextColor)) { value = true }
|
||||||
addSource(Preferences.asLiveData(Preferences::clockTextAlpha)) { value = true }
|
addSource(Preferences.asLiveData(Preferences::clockTextAlpha)) { value = true }
|
||||||
@ -113,8 +114,6 @@ class MainViewModel(context: Application) : AndroidViewModel(context) {
|
|||||||
addSource(Preferences.asLiveData(Preferences::showAMPMIndicator)) { value = true }
|
addSource(Preferences.asLiveData(Preferences::showAMPMIndicator)) { value = true }
|
||||||
addSource(Preferences.asLiveData(Preferences::clockBottomMargin)) { value = true }
|
addSource(Preferences.asLiveData(Preferences::clockBottomMargin)) { value = true }
|
||||||
addSource(Preferences.asLiveData(Preferences::altTimezoneLabel)) { value = true }
|
addSource(Preferences.asLiveData(Preferences::altTimezoneLabel)) { value = true }
|
||||||
}
|
|
||||||
val widgetPreferencesUpdate = MediatorLiveData<Boolean>().apply {
|
|
||||||
addSource(Preferences.asLiveData(Preferences::textGlobalColor)) { value = true }
|
addSource(Preferences.asLiveData(Preferences::textGlobalColor)) { value = true }
|
||||||
addSource(Preferences.asLiveData(Preferences::textGlobalAlpha)) { value = true }
|
addSource(Preferences.asLiveData(Preferences::textGlobalAlpha)) { value = true }
|
||||||
addSource(Preferences.asLiveData(Preferences::textSecondaryColor)) { value = true }
|
addSource(Preferences.asLiveData(Preferences::textSecondaryColor)) { value = true }
|
||||||
@ -175,6 +174,7 @@ class MainViewModel(context: Application) : AndroidViewModel(context) {
|
|||||||
addSource(Preferences.asLiveData(Preferences::musicPlayersFilter)) { value = true }
|
addSource(Preferences.asLiveData(Preferences::musicPlayersFilter)) { value = true }
|
||||||
addSource(Preferences.asLiveData(Preferences::appNotificationsFilter)) { value = true }
|
addSource(Preferences.asLiveData(Preferences::appNotificationsFilter)) { value = true }
|
||||||
addSource(Preferences.asLiveData(Preferences::showEventsAsGlanceProvider)) { value = true }
|
addSource(Preferences.asLiveData(Preferences::showEventsAsGlanceProvider)) { value = true }
|
||||||
|
addSource(Preferences.asLiveData(Preferences::showWeatherAsGlanceProvider)) { value = true }
|
||||||
|
|
||||||
addSource(Preferences.asLiveData(Preferences::installedIntegrations)) { value = true }
|
addSource(Preferences.asLiveData(Preferences::installedIntegrations)) { value = true }
|
||||||
}
|
}
|
||||||
|
@ -253,6 +253,7 @@ class AlignedWidget(val context: Context, val rightAligned: Boolean = false) {
|
|||||||
views.setViewVisibility(R.id.sub_line_top_margin_large_sans, View.GONE)
|
views.setViewVisibility(R.id.sub_line_top_margin_large_sans, View.GONE)
|
||||||
} else if (GlanceProviderHelper.showGlanceProviders(context)) {
|
} else if (GlanceProviderHelper.showGlanceProviders(context)) {
|
||||||
var showSomething = false
|
var showSomething = false
|
||||||
|
var isWeatherShown = false
|
||||||
loop@ for (provider: Constants.GlanceProviderId in GlanceProviderHelper.getGlanceProviders(context)) {
|
loop@ for (provider: Constants.GlanceProviderId in GlanceProviderHelper.getGlanceProviders(context)) {
|
||||||
when (provider) {
|
when (provider) {
|
||||||
Constants.GlanceProviderId.PLAYING_SONG -> {
|
Constants.GlanceProviderId.PLAYING_SONG -> {
|
||||||
@ -367,13 +368,29 @@ class AlignedWidget(val context: Context, val rightAligned: Boolean = false) {
|
|||||||
break@loop
|
break@loop
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Constants.GlanceProviderId.WEATHER -> {
|
||||||
|
if (Preferences.showWeather && Preferences.weatherIcon != "") {
|
||||||
|
val i = Intent(context, WidgetClickListenerReceiver::class.java)
|
||||||
|
i.action = Actions.ACTION_OPEN_WEATHER_INTENT
|
||||||
|
val weatherPIntent = PendingIntent.getBroadcast(context, widgetID, i, 0)
|
||||||
|
|
||||||
|
views.setOnClickPendingIntent(
|
||||||
|
R.id.sub_line_rect,
|
||||||
|
weatherPIntent
|
||||||
|
)
|
||||||
|
|
||||||
|
showSomething = true
|
||||||
|
isWeatherShown = true
|
||||||
|
break@loop
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (showSomething) {
|
if (showSomething) {
|
||||||
views.setViewVisibility(R.id.first_line_rect, View.VISIBLE)
|
views.setViewVisibility(R.id.first_line_rect, View.VISIBLE)
|
||||||
views.setViewVisibility(R.id.weather_rect, View.VISIBLE)
|
views.setViewVisibility(R.id.weather_rect, if (isWeatherShown) View.GONE else View.VISIBLE)
|
||||||
views.setViewVisibility(R.id.sub_line_rect, View.VISIBLE)
|
views.setViewVisibility(R.id.sub_line_rect, View.VISIBLE)
|
||||||
|
|
||||||
views.setViewVisibility(R.id.calendar_layout_rect, View.GONE)
|
views.setViewVisibility(R.id.calendar_layout_rect, View.GONE)
|
||||||
@ -412,8 +429,9 @@ class AlignedWidget(val context: Context, val rightAligned: Boolean = false) {
|
|||||||
|
|
||||||
|
|
||||||
// Generates the widget bitmap from the view
|
// Generates the widget bitmap from the view
|
||||||
fun generateWidgetView(typeface: Typeface? = null): LeftAlignedWidgetBinding? {
|
private fun generateWidgetView(typeface: Typeface? = null): LeftAlignedWidgetBinding? {
|
||||||
try {
|
try {
|
||||||
|
var isWeatherShownAsGlanceProvider = false
|
||||||
val eventRepository = EventRepository(context)
|
val eventRepository = EventRepository(context)
|
||||||
val nextEvent = eventRepository.getNextEvent()
|
val nextEvent = eventRepository.getNextEvent()
|
||||||
val eventsCount = eventRepository.getEventsCount()
|
val eventsCount = eventRepository.getEventsCount()
|
||||||
@ -727,6 +745,33 @@ class AlignedWidget(val context: Context, val rightAligned: Boolean = false) {
|
|||||||
break@loop
|
break@loop
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Constants.GlanceProviderId.WEATHER -> {
|
||||||
|
if (Preferences.showWeatherAsGlanceProvider && Preferences.weatherIcon != "") {
|
||||||
|
bindingView.subLineText.text = String.format(
|
||||||
|
Locale.getDefault(),
|
||||||
|
"%d°%s %s",
|
||||||
|
Preferences.weatherTemp.roundToInt(),
|
||||||
|
Preferences.weatherRealTempUnit,
|
||||||
|
WeatherHelper.getWeatherLabel(context, Preferences.weatherIcon)
|
||||||
|
)
|
||||||
|
bindingView.subLineIcon.isVisible = true
|
||||||
|
|
||||||
|
val icon: String = Preferences.weatherIcon
|
||||||
|
if (icon == "") {
|
||||||
|
bindingView.subLineIcon.isVisible = false
|
||||||
|
} else {
|
||||||
|
bindingView.subLineIcon.setImageResource(WeatherHelper.getWeatherIconResource(context, icon))
|
||||||
|
bindingView.subLineIcon.isVisible = true
|
||||||
|
}
|
||||||
|
|
||||||
|
bindingView.weatherDateLine.isVisible = false
|
||||||
|
bindingView.weatherSubLine.isVisible = false
|
||||||
|
|
||||||
|
showSomething = true
|
||||||
|
isWeatherShownAsGlanceProvider = true
|
||||||
|
break@loop
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -778,16 +823,22 @@ class AlignedWidget(val context: Context, val rightAligned: Boolean = false) {
|
|||||||
it.setTextColor(ColorHelper.getSecondaryFontColor(context.applicationContext.isDarkTheme()))
|
it.setTextColor(ColorHelper.getSecondaryFontColor(context.applicationContext.isDarkTheme()))
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Preferences.weatherIconPack != Constants.WeatherIconPack.MINIMAL.rawValue) {
|
if (!isWeatherShownAsGlanceProvider) {
|
||||||
listOf<ImageView>(bindingView.subLineIcon, bindingView.subLineIconShadow)
|
if (Preferences.weatherIconPack != Constants.WeatherIconPack.MINIMAL.rawValue) {
|
||||||
} else {
|
listOf<ImageView>(bindingView.subLineIcon, bindingView.subLineIconShadow)
|
||||||
listOf<ImageView>(bindingView.subLineIcon, bindingView.weatherSubLineWeatherIcon, bindingView.subLineIconShadow)
|
} else {
|
||||||
}.forEach {
|
listOf<ImageView>(
|
||||||
it.setColorFilter(ColorHelper.getSecondaryFontColorRgb(context.applicationContext.isDarkTheme()))
|
bindingView.subLineIcon,
|
||||||
it.alpha =
|
bindingView.weatherSubLineWeatherIcon,
|
||||||
(if (context.isDarkTheme()) Preferences.textSecondaryAlphaDark.toIntValue()
|
bindingView.subLineIconShadow
|
||||||
.toFloat() else Preferences.textSecondaryAlpha.toIntValue()
|
)
|
||||||
.toFloat()) / 100
|
}.forEach {
|
||||||
|
it.setColorFilter(ColorHelper.getSecondaryFontColorRgb(context.applicationContext.isDarkTheme()))
|
||||||
|
it.alpha =
|
||||||
|
(if (context.isDarkTheme()) Preferences.textSecondaryAlphaDark.toIntValue()
|
||||||
|
.toFloat() else Preferences.textSecondaryAlpha.toIntValue()
|
||||||
|
.toFloat()) / 100
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Text Size
|
// Text Size
|
||||||
|
@ -281,6 +281,7 @@ class StandardWidget(val context: Context) {
|
|||||||
|
|
||||||
} else if (GlanceProviderHelper.showGlanceProviders(context)) {
|
} else if (GlanceProviderHelper.showGlanceProviders(context)) {
|
||||||
var showSomething = false
|
var showSomething = false
|
||||||
|
var isWeatherShown = false
|
||||||
loop@ for (provider: Constants.GlanceProviderId in GlanceProviderHelper.getGlanceProviders(context)) {
|
loop@ for (provider: Constants.GlanceProviderId in GlanceProviderHelper.getGlanceProviders(context)) {
|
||||||
when (provider) {
|
when (provider) {
|
||||||
Constants.GlanceProviderId.PLAYING_SONG -> {
|
Constants.GlanceProviderId.PLAYING_SONG -> {
|
||||||
@ -395,6 +396,21 @@ class StandardWidget(val context: Context) {
|
|||||||
break@loop
|
break@loop
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Constants.GlanceProviderId.WEATHER -> {
|
||||||
|
if (Preferences.showWeather && Preferences.weatherIcon != "") {
|
||||||
|
val i = Intent(context, WidgetClickListenerReceiver::class.java)
|
||||||
|
i.action = Actions.ACTION_OPEN_WEATHER_INTENT
|
||||||
|
val weatherPIntent = PendingIntent.getBroadcast(context, widgetID, i, 0)
|
||||||
|
|
||||||
|
views.setOnClickPendingIntent(
|
||||||
|
R.id.sub_line_rect,
|
||||||
|
weatherPIntent
|
||||||
|
)
|
||||||
|
showSomething = true
|
||||||
|
isWeatherShown = true
|
||||||
|
break@loop
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -405,6 +421,7 @@ class StandardWidget(val context: Context) {
|
|||||||
BitmapHelper.getBitmapFromView(bindingView.subLine, draw = false, width = bindingView.subLine.width, height = bindingView.subLine.height)
|
BitmapHelper.getBitmapFromView(bindingView.subLine, draw = false, width = bindingView.subLine.width, height = bindingView.subLine.height)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
views.setViewVisibility(R.id.weather_rect, if (isWeatherShown) View.GONE else View.VISIBLE)
|
||||||
views.setViewVisibility(R.id.first_line_rect, View.VISIBLE)
|
views.setViewVisibility(R.id.first_line_rect, View.VISIBLE)
|
||||||
views.setViewVisibility(R.id.sub_line_rect, View.VISIBLE)
|
views.setViewVisibility(R.id.sub_line_rect, View.VISIBLE)
|
||||||
|
|
||||||
@ -438,8 +455,9 @@ class StandardWidget(val context: Context) {
|
|||||||
|
|
||||||
|
|
||||||
// Generates the widget bitmap from the view
|
// Generates the widget bitmap from the view
|
||||||
fun generateWidgetView(typeface: Typeface? = null): TheWidgetBinding? {
|
private fun generateWidgetView(typeface: Typeface? = null): TheWidgetBinding? {
|
||||||
try {
|
try {
|
||||||
|
var isWeatherShownAsGlanceProvider = false
|
||||||
val eventRepository = EventRepository(context)
|
val eventRepository = EventRepository(context)
|
||||||
val nextEvent = eventRepository.getNextEvent()
|
val nextEvent = eventRepository.getNextEvent()
|
||||||
val eventsCount = eventRepository.getEventsCount()
|
val eventsCount = eventRepository.getEventsCount()
|
||||||
@ -759,6 +777,33 @@ class StandardWidget(val context: Context) {
|
|||||||
break@loop
|
break@loop
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Constants.GlanceProviderId.WEATHER -> {
|
||||||
|
if (Preferences.showWeatherAsGlanceProvider && Preferences.weatherIcon != "") {
|
||||||
|
bindingView.subLineText.text = String.format(
|
||||||
|
Locale.getDefault(),
|
||||||
|
"%d°%s %s",
|
||||||
|
Preferences.weatherTemp.roundToInt(),
|
||||||
|
Preferences.weatherRealTempUnit,
|
||||||
|
WeatherHelper.getWeatherLabel(context, Preferences.weatherIcon)
|
||||||
|
)
|
||||||
|
bindingView.subLineIcon.isVisible = true
|
||||||
|
|
||||||
|
val icon: String = Preferences.weatherIcon
|
||||||
|
if (icon == "") {
|
||||||
|
bindingView.subLineIcon.isVisible = false
|
||||||
|
} else {
|
||||||
|
bindingView.subLineIcon.setImageResource(WeatherHelper.getWeatherIconResource(context, icon))
|
||||||
|
bindingView.subLineIcon.isVisible = true
|
||||||
|
}
|
||||||
|
|
||||||
|
bindingView.weatherDateLine.isVisible = false
|
||||||
|
bindingView.weatherSubLine.isVisible = false
|
||||||
|
|
||||||
|
isWeatherShownAsGlanceProvider = true
|
||||||
|
showSomething = true
|
||||||
|
break@loop
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -812,16 +857,22 @@ class StandardWidget(val context: Context) {
|
|||||||
it.setTextColor(ColorHelper.getSecondaryFontColor(context.applicationContext.isDarkTheme()))
|
it.setTextColor(ColorHelper.getSecondaryFontColor(context.applicationContext.isDarkTheme()))
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Preferences.weatherIconPack != Constants.WeatherIconPack.MINIMAL.rawValue) {
|
if (!isWeatherShownAsGlanceProvider) {
|
||||||
listOf<ImageView>(bindingView.subLineIcon, bindingView.subLineIconShadow)
|
if (Preferences.weatherIconPack != Constants.WeatherIconPack.MINIMAL.rawValue) {
|
||||||
} else {
|
listOf<ImageView>(bindingView.subLineIcon, bindingView.subLineIconShadow)
|
||||||
listOf<ImageView>(bindingView.subLineIcon, bindingView.weatherSubLineWeatherIcon, bindingView.subLineIconShadow)
|
} else {
|
||||||
}.forEach {
|
listOf<ImageView>(
|
||||||
it.setColorFilter(ColorHelper.getSecondaryFontColorRgb(context.applicationContext.isDarkTheme()))
|
bindingView.subLineIcon,
|
||||||
it.alpha =
|
bindingView.weatherSubLineWeatherIcon,
|
||||||
(if (context.isDarkTheme()) Preferences.textSecondaryAlphaDark.toIntValue()
|
bindingView.subLineIconShadow
|
||||||
.toFloat() else Preferences.textSecondaryAlpha.toIntValue()
|
)
|
||||||
.toFloat()) / 100
|
}.forEach {
|
||||||
|
it.setColorFilter(ColorHelper.getSecondaryFontColorRgb(context.applicationContext.isDarkTheme()))
|
||||||
|
it.alpha =
|
||||||
|
(if (context.isDarkTheme()) Preferences.textSecondaryAlphaDark.toIntValue()
|
||||||
|
.toFloat() else Preferences.textSecondaryAlpha.toIntValue()
|
||||||
|
.toFloat()) / 100
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Text Size
|
// Text Size
|
||||||
|
@ -195,6 +195,19 @@
|
|||||||
<string name="location_access_notification_title">Updating the weather…</string>
|
<string name="location_access_notification_title">Updating the weather…</string>
|
||||||
<string name="location_access_notification_subtitle">We\'re updating the weather based on your current location.</string>
|
<string name="location_access_notification_subtitle">We\'re updating the weather based on your current location.</string>
|
||||||
|
|
||||||
|
<string name="weather_label_clear">Clear</string>
|
||||||
|
<string name="weather_label_partly_cloudy">Partly cloudy</string>
|
||||||
|
<string name="weather_label_mostly_cloudy">Mostly cloudy</string>
|
||||||
|
<string name="weather_label_cloudy_weather">Cloudy</string>
|
||||||
|
<string name="weather_label_storm_weather">Storm</string>
|
||||||
|
<string name="weather_label_rainy">Rainy</string>
|
||||||
|
<string name="weather_label_thunder">Thunder</string>
|
||||||
|
<string name="weather_label_snow">Snow</string>
|
||||||
|
<string name="weather_label_haze">Haze</string>
|
||||||
|
<string name="weather_label_windy">Windy</string>
|
||||||
|
<string name="weather_label_rain_snow">Rain and snow</string>
|
||||||
|
<string name="weather_label_unknown">Unknown</string>
|
||||||
|
|
||||||
<!-- Clock -->
|
<!-- Clock -->
|
||||||
<string name="settings_clock_title">Clock</string>
|
<string name="settings_clock_title">Clock</string>
|
||||||
<string name="settings_clock_app_title">Clock</string>
|
<string name="settings_clock_app_title">Clock</string>
|
||||||
@ -293,6 +306,9 @@
|
|||||||
<string name="settings_show_events_as_glance_provider_subtitle">View a sneak peek of your calendar events and always show the current date.</string>
|
<string name="settings_show_events_as_glance_provider_subtitle">View a sneak peek of your calendar events and always show the current date.</string>
|
||||||
<string name="settings_show_events_as_glance_provider_error">Please enable the show of the events in the calendar tab and grant the required permission.</string>
|
<string name="settings_show_events_as_glance_provider_error">Please enable the show of the events in the calendar tab and grant the required permission.</string>
|
||||||
<string name="events_glance_provider_format">%1$s %2$s</string>
|
<string name="events_glance_provider_format">%1$s %2$s</string>
|
||||||
|
<string name="settings_show_weather_as_glance_provider_title">Weather</string>
|
||||||
|
<string name="settings_show_weather_as_glance_provider_subtitle">View more information about the weather and always show the current date.</string>
|
||||||
|
<string name="settings_show_weather_as_glance_provider_error">Please enable the show of the weather and fix the configuration\'s errors.</string>
|
||||||
|
|
||||||
<!-- Settings -->
|
<!-- Settings -->
|
||||||
<string name="action_share">Share</string>
|
<string name="action_share">Share</string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user