diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser
index c91aa8d..096a5ef 100644
Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ
diff --git a/app/build.gradle b/app/build.gradle
index e7cbdf6..608f2c2 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -22,7 +22,7 @@ android {
applicationId "com.tommasoberlose.anotherwidget"
minSdkVersion 23
targetSdkVersion 29
- versionCode 87
+ versionCode 89
versionName "2.0.8"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
diff --git a/app/release/app-release.aab b/app/release/app-release.aab
index e10a053..522293f 100644
Binary files a/app/release/app-release.aab and b/app/release/app-release.aab differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d44558b..c2a8776 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -131,6 +131,7 @@
+
@@ -143,10 +144,6 @@
-
-
\ No newline at end of file
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/components/GlanceProviderSortMenu.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/components/GlanceProviderSortMenu.kt
index 4ebae1c..27a431c 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/components/GlanceProviderSortMenu.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/components/GlanceProviderSortMenu.kt
@@ -70,7 +70,7 @@ class GlanceProviderSortMenu(
// move item in `fromPos` to `toPos` in adapter.
adapter.notifyItemMoved(fromPos, toPos)
- val list = GlanceProviderHelper.getGlanceProviders()
+ val list = GlanceProviderHelper.getGlanceProviders(context)
Collections.swap(list, fromPos, toPos)
GlanceProviderHelper.saveGlanceProviderOrder(list)
return true
@@ -87,8 +87,7 @@ class GlanceProviderSortMenu(
mIth.attachToRecyclerView(view.menu)
adapter.updateData(
- GlanceProviderHelper.getGlanceProviders()
- .filter { it != Constants.GlanceProviderId.BATTERY_LEVEL_LOW }
+ GlanceProviderHelper.getGlanceProviders(context)
.mapNotNull { GlanceProviderHelper.getGlanceProviderById(context, it) }
)
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/global/Constants.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/global/Constants.kt
index 2648a71..61013cc 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/global/Constants.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/global/Constants.kt
@@ -22,4 +22,15 @@ object Constants {
CUSTOM_INFO("CUSTOM_INFO"),
GOOGLE_FIT_STEPS("GOOGLE_FIT_STEPS")
}
+
+ enum class WidgetUpdateFrequency(val value: Int) {
+ LOW(0),
+ DEFAULT(1),
+ HIGH(2)
+ }
+
+ enum class WeatherIconPack(val value: Int) {
+ DEFAULT(0),
+ MINIMAL(1)
+ }
}
\ No newline at end of file
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 79214fe..50dbad2 100755
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/global/Preferences.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/global/Preferences.kt
@@ -40,9 +40,15 @@ object Preferences : KotprefModel() {
var eventAppName by stringPref(key = "PREF_EVENT_APP_NAME", default = "")
var eventAppPackage by stringPref(key = "PREF_EVENT_APP_PACKAGE", default = "")
var openEventDetails by booleanPref(default = true)
+
+ var widgetUpdateFrequency by intPref(default = Constants.WidgetUpdateFrequency.DEFAULT.value)
+
var textGlobalColor by stringPref(key = "PREF_TEXT_COLOR", default = "#FFFFFF")
var textGlobalAlpha by stringPref(default = "FF")
+ var textSecondaryColor by stringPref(default = "#FFFFFF")
+ var textSecondaryAlpha by stringPref(default = "FF")
+
var backgroundCardColor by stringPref(default = "#000000")
var backgroundCardAlpha by stringPref(default = "00")
@@ -50,6 +56,8 @@ object Preferences : KotprefModel() {
var clockTextAlpha by stringPref(default = "FF")
var showAMPMIndicator by booleanPref(default = true)
+ var weatherIconPack by intPref(default = Constants.WeatherIconPack.DEFAULT.value)
+
// Global
var textMainSize by floatPref(key = "PREF_TEXT_MAIN_SIZE", default = 26f)
var textSecondSize by floatPref(key = "PREF_TEXT_SECOND_SIZE", default = 18f)
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/ColorHelper.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/ColorHelper.kt
index 0a8ef67..e8b9a54 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/ColorHelper.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/ColorHelper.kt
@@ -30,6 +30,31 @@ object ColorHelper {
Color.parseColor("#000000")
}
}
+
+ fun getSecondaryFontColor(): Int {
+ return try {
+ Color.parseColor("#%s%s".format(Preferences.textSecondaryAlpha, Preferences.textSecondaryColor.replace("#", "")))
+ } catch (e: Exception) {
+ Color.parseColor("#FFFFFFFF")
+ }
+ }
+
+ fun getSecondaryFontColorAlpha(): Int {
+ return try {
+ Preferences.textSecondaryAlpha.toIntValue().toDouble() * 255 / 100
+ } catch (e: Exception) {
+ "FF".toIntValue().toDouble() * 255 / 100
+ }.roundToInt()
+ }
+
+ fun getSecondaryFontColorRgb(): Int {
+ return try {
+ Color.parseColor(Preferences.textSecondaryColor)
+ } catch (e: Exception) {
+ Color.parseColor("#000000")
+ }
+ }
+
fun getClockFontColor(): Int {
return try {
Color.parseColor("#%s%s".format(Preferences.clockTextAlpha, Preferences.clockTextColor.replace("#", "")))
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/DateHelper.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/DateHelper.kt
index a435f70..9fda22d 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/DateHelper.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/DateHelper.kt
@@ -23,7 +23,7 @@ object DateHelper {
"%s, %s".format(
SimpleDateFormat("EEEE", Locale.getDefault()).format(date.time),
DateUtils.formatDateTime(context, date.timeInMillis, flags)
- ).getCapWordString()
+ )
}
}
@@ -33,6 +33,6 @@ object DateHelper {
return "%s, %s".format(
SimpleDateFormat("EEEE", Locale.getDefault()).format(date.time),
DateUtils.formatDateTime(context, date.timeInMillis, flags)
- ).getCapWordString()
+ )
}
}
\ No newline at end of file
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 7e00af6..84bbe2a 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/GlanceProviderHelper.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/GlanceProviderHelper.kt
@@ -6,12 +6,18 @@ import com.tommasoberlose.anotherwidget.db.EventRepository
import com.tommasoberlose.anotherwidget.global.Constants
import com.tommasoberlose.anotherwidget.global.Preferences
import com.tommasoberlose.anotherwidget.models.GlanceProvider
+import com.tommasoberlose.anotherwidget.utils.checkIfFitInstalled
import java.util.ArrayList
object GlanceProviderHelper {
- fun getGlanceProviders(): ArrayList {
+ fun getGlanceProviders(context: Context): ArrayList {
val enabledProviders = Preferences.enabledGlanceProviderOrder.split(",").filter { it != "" }
+
val providers = Constants.GlanceProviderId.values()
+ .filter { it != Constants.GlanceProviderId.BATTERY_LEVEL_LOW }
+ .filter {
+ context.checkIfFitInstalled() || it != Constants.GlanceProviderId.GOOGLE_FIT_STEPS
+ }.toTypedArray()
providers.sortWith(Comparator { p1, p2 ->
when {
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 0822ea1..3fa68e7 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/IntentHelper.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/IntentHelper.kt
@@ -178,4 +178,15 @@ object IntentHelper {
}
}
}
+
+ fun getFitIntent(context: Context): Intent {
+ val pm: PackageManager = context.packageManager
+ return try {
+ pm.getLaunchIntentForPackage("com.google.android.apps.fitness")!!.apply {
+ addCategory(Intent.CATEGORY_LAUNCHER)
+ }
+ } catch (e: Exception) {
+ Intent()
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/SettingsStringHelper.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/SettingsStringHelper.kt
index 2d64cbf..130060d 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/SettingsStringHelper.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/SettingsStringHelper.kt
@@ -3,6 +3,8 @@ package com.tommasoberlose.anotherwidget.helpers
import android.content.Context
import android.text.format.DateUtils
import com.tommasoberlose.anotherwidget.R
+import com.tommasoberlose.anotherwidget.global.Constants
+import com.tommasoberlose.anotherwidget.global.Preferences
import org.joda.time.DateTime
import java.util.concurrent.TimeUnit
@@ -68,9 +70,21 @@ object SettingsStringHelper {
difference += 60 * 1000 - (difference % (60 * 1000))
when {
- difference <= 0 || TimeUnit.MILLISECONDS.toHours(difference) < 1 -> {
+ difference <= 0 -> {
return ""
}
+ TimeUnit.MILLISECONDS.toHours(difference) < 1 && Preferences.widgetUpdateFrequency == Constants.WidgetUpdateFrequency.HIGH.value && TimeUnit.MILLISECONDS.toMinutes(difference) > 5 -> {
+ return DateUtils.getRelativeTimeSpanString(start, start - 1000 * 60 * (TimeUnit.MILLISECONDS.toMinutes(difference) - 1 - (TimeUnit.MILLISECONDS.toMinutes(difference) - 1) % 5), DateUtils.MINUTE_IN_MILLIS, DateUtils.FORMAT_ABBREV_RELATIVE).toString()
+ }
+ TimeUnit.MILLISECONDS.toHours(difference) < 1 && Preferences.widgetUpdateFrequency == Constants.WidgetUpdateFrequency.DEFAULT.value && TimeUnit.MILLISECONDS.toMinutes(difference) > 5 -> {
+ return DateUtils.getRelativeTimeSpanString(start, start - 1000 * 60 * (TimeUnit.MILLISECONDS.toMinutes(difference) - 1 - (TimeUnit.MILLISECONDS.toMinutes(difference) - 1) % 15), DateUtils.MINUTE_IN_MILLIS, DateUtils.FORMAT_ABBREV_RELATIVE).toString()
+ }
+ TimeUnit.MILLISECONDS.toHours(difference) < 1 && Preferences.widgetUpdateFrequency == Constants.WidgetUpdateFrequency.LOW.value -> {
+ return context.getString(R.string.soon)
+ }
+ TimeUnit.MILLISECONDS.toHours(difference) < 1 -> {
+ return context.getString(R.string.now)
+ }
TimeUnit.MILLISECONDS.toHours(difference) < 12 -> {
return DateUtils.getRelativeTimeSpanString(start, now, DateUtils.HOUR_IN_MILLIS, DateUtils.FORMAT_ABBREV_RELATIVE).toString()
}
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 7e82590..dcbbe3d 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/WeatherHelper.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/WeatherHelper.kt
@@ -6,6 +6,7 @@ import android.os.Build
import com.google.android.gms.location.LocationServices
import com.tommasoberlose.anotherwidget.R
import com.tommasoberlose.anotherwidget.db.EventRepository
+import com.tommasoberlose.anotherwidget.global.Constants
import com.tommasoberlose.anotherwidget.global.Preferences
import com.tommasoberlose.anotherwidget.network.WeatherNetworkApi
import com.tommasoberlose.anotherwidget.ui.fragments.MainFragment
@@ -49,79 +50,79 @@ object WeatherHelper {
fun getWeatherIconResource(icon: String): Int {
when (icon) {
"01d" -> {
- return R.drawable.clear_day
+ return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.clear_day else R.drawable.clear_day_2
}
"02d" -> {
- return R.drawable.partly_cloudy
+ return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.partly_cloudy else R.drawable.partly_cloudy_2
}
"03d" -> {
- return R.drawable.mostly_cloudy
+ return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.mostly_cloudy else R.drawable.mostly_cloudy_2
}
"04d" -> {
- return R.drawable.cloudy_weather
+ return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.cloudy_weather else R.drawable.cloudy_weather_2
}
"09d" -> {
- return R.drawable.storm_weather_day
+ return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.storm_weather_day else R.drawable.storm_weather_day_2
}
"10d" -> {
- return R.drawable.rainy_day
+ return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.rainy_day else R.drawable.rainy_day_2
}
"11d" -> {
- return R.drawable.thunder_day
+ return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.thunder_day else R.drawable.thunder_day_2
}
"13d" -> {
- return R.drawable.snow_day
+ return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.snow_day else R.drawable.snow_day_2
}
"50d" -> {
- return R.drawable.haze_day
+ return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.haze_day else R.drawable.haze_day_2
}
"80d" -> {
- return R.drawable.windy_day
+ return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.windy_day else R.drawable.windy_day_2
}
"81d" -> {
- return R.drawable.rain_snow_day
+ return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.rain_snow_day else R.drawable.rain_snow_day_2
}
"82d" -> {
- return R.drawable.haze_weather
+ return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.haze_weather else R.drawable.haze_weather_2
}
"01n" -> {
- return R.drawable.clear_night
+ return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.clear_night else R.drawable.clear_night_2
}
"02n" -> {
- return R.drawable.partly_cloudy_night
+ return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.partly_cloudy_night else R.drawable.partly_cloudy_night_2
}
"03n" -> {
- return R.drawable.mostly_cloudy_night
+ return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.mostly_cloudy_night else R.drawable.mostly_cloudy_night_2
}
"04n" -> {
- return R.drawable.cloudy_weather
+ return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.cloudy_weather else R.drawable.cloudy_weather_2
}
"09n" -> {
- return R.drawable.storm_weather_night
+ return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.storm_weather_night else R.drawable.storm_weather_night_2
}
"10n" -> {
- return R.drawable.rainy_night
+ return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.rainy_night else R.drawable.rainy_night_2
}
"11n" -> {
- return R.drawable.thunder_night
+ return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.thunder_night else R.drawable.thunder_night_2
}
"13n" -> {
- return R.drawable.snow_night
+ return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.snow_night else R.drawable.snow_night_2
}
"50n" -> {
- return R.drawable.haze_night
+ return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.haze_night else R.drawable.haze_night_2
}
"80n" -> {
- return R.drawable.windy_night
+ return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.windy_night else R.drawable.windy_night_2
}
"81n" -> {
- return R.drawable.rain_snow_night
+ return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.rain_snow_night else R.drawable.rain_snow_night_2
}
"82n" -> {
- return R.drawable.haze_weather
+ return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.haze_weather else R.drawable.haze_weather_2
}
else -> {
return R.drawable.unknown
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/ActivityDetectionReceiver.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/ActivityDetectionReceiver.kt
index 7d40d8b..14d5fa2 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/ActivityDetectionReceiver.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/ActivityDetectionReceiver.kt
@@ -30,6 +30,7 @@ class ActivityDetectionReceiver : BroadcastReceiver() {
val result = ActivityTransitionResult.extractResult(intent)!!
val lastEvent = result.transitionEvents.last()
+ Log.d("ciao", "activity detected: $lastEvent")
if (lastEvent.activityType == DetectedActivity.WALKING || lastEvent.activityType == DetectedActivity.RUNNING && lastEvent.transitionType == ActivityTransition.ACTIVITY_TRANSITION_EXIT) {
requestDailySteps(context)
}
@@ -37,6 +38,8 @@ class ActivityDetectionReceiver : BroadcastReceiver() {
if (intent.action == Intent.ACTION_BOOT_COMPLETED || intent.action == Intent.ACTION_MY_PACKAGE_REPLACED && Preferences.showDailySteps && Build.VERSION.SDK_INT < Build.VERSION_CODES.Q || context.checkGrantedPermission(Manifest.permission.ACTIVITY_RECOGNITION)) {
resetDailySteps()
registerFence(context)
+ } else {
+ resetDailySteps()
}
}
}
@@ -155,15 +158,15 @@ class ActivityDetectionReceiver : BroadcastReceiver() {
}
}
- fun setTimeout(context: Context) {
+ private fun setTimeout(context: Context) {
with(context.getSystemService(Context.ALARM_SERVICE) as AlarmManager) {
- cancel(PendingIntent.getBroadcast(context, 0, Intent(context, ActivityDetectionReceiver::class.java), 0))
+ cancel(PendingIntent.getBroadcast(context, 5, Intent(context, ActivityDetectionReceiver::class.java), 0))
setExactAndAllowWhileIdle(
AlarmManager.RTC,
- Calendar.getInstance().timeInMillis + 15 * 60 * 1000,
+ Calendar.getInstance().timeInMillis + 5 * 60 * 1000,
PendingIntent.getBroadcast(
context,
- 0,
+ 5,
Intent(context, ActivityDetectionReceiver::class.java),
0
)
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/BatteryLevelReceiver.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/BatteryLevelReceiver.kt
index 20c39df..b2944c9 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/BatteryLevelReceiver.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/BatteryLevelReceiver.kt
@@ -4,6 +4,7 @@ import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.os.BatteryManager
+import android.util.Log
import com.tommasoberlose.anotherwidget.global.Preferences
import com.tommasoberlose.anotherwidget.ui.widgets.MainWidget
@@ -14,6 +15,8 @@ class BatteryLevelReceiver : BroadcastReceiver() {
Intent.ACTION_BATTERY_OKAY -> Preferences.isBatteryLevelLow = false
}
MainWidget.updateWidget(context)
+
+ Log.d("ciao", "intent: ${intent}")
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/UpdatesReceiver.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/UpdatesReceiver.kt
index 6ee60df..e6577b4 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/UpdatesReceiver.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/UpdatesReceiver.kt
@@ -10,6 +10,8 @@ import androidx.core.app.AlarmManagerCompat
import androidx.core.content.ContextCompat.getSystemService
import com.tommasoberlose.anotherwidget.db.EventRepository
import com.tommasoberlose.anotherwidget.global.Actions
+import com.tommasoberlose.anotherwidget.global.Constants
+import com.tommasoberlose.anotherwidget.global.Preferences
import com.tommasoberlose.anotherwidget.helpers.CalendarHelper
import com.tommasoberlose.anotherwidget.models.Event
import com.tommasoberlose.anotherwidget.ui.widgets.MainWidget
@@ -68,24 +70,54 @@ class UpdatesReceiver : BroadcastReceiver() {
val diff = Period(now.timeInMillis, event.startDate)
if (event.startDate > now.timeInMillis) {
// Update the widget every hour till the event
- setExactAndAllowWhileIdle(
- AlarmManager.RTC,
- if (event.startDate - diff.hours * 1000 * 60 * 60 > (now.timeInMillis + 120 * 1000)) event.startDate - diff.hours * 1000 * 60 * 60 else now.timeInMillis + 120000,
- PendingIntent.getBroadcast(
- context,
- event.eventID.toInt(),
- Intent(context, UpdatesReceiver::class.java).apply {
- action = Actions.ACTION_TIME_UPDATE
- putExtra(EVENT_ID, event.eventID)
- },
- 0
+ if (diff.hours == 0) {
+ var minutes = 0
+ when (Preferences.widgetUpdateFrequency) {
+ Constants.WidgetUpdateFrequency.DEFAULT.value -> {
+ minutes = when {
+ diff.minutes > 50 -> 50
+ diff.minutes > 30 -> 30
+ diff.minutes > 15 -> 15
+ else -> 0
+ }
+ }
+ Constants.WidgetUpdateFrequency.HIGH.value -> {
+ minutes = diff.minutes - (diff.minutes % 5)
+ }
+ }
+ setExact(
+ AlarmManager.RTC,
+ if (event.startDate - minutes * 1000 * 60 > (now.timeInMillis + 120 * 1000)) event.startDate - 60 * 1000 * minutes else now.timeInMillis + 120000,
+ PendingIntent.getBroadcast(
+ context,
+ event.eventID.toInt(),
+ Intent(context, UpdatesReceiver::class.java).apply {
+ action = Actions.ACTION_TIME_UPDATE
+ putExtra(EVENT_ID, event.eventID)
+ },
+ 0
+ )
)
- )
+ } else {
+ setExact(
+ AlarmManager.RTC,
+ event.startDate - diff.hours * 1000 * 60 * 60,
+ PendingIntent.getBroadcast(
+ context,
+ event.eventID.toInt(),
+ Intent(context, UpdatesReceiver::class.java).apply {
+ action = Actions.ACTION_TIME_UPDATE
+ putExtra(EVENT_ID, event.eventID)
+ },
+ 0
+ )
+ )
+ }
} else {
// Update the widget one second after the event is finished
val fireTime =
if (event.endDate > now.timeInMillis + 120 * 1000) event.endDate else now.timeInMillis + 120000
- setExactAndAllowWhileIdle(
+ setExact(
AlarmManager.RTC,
fireTime,
PendingIntent.getBroadcast(
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 ebcb299..8fb7c8e 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
@@ -123,6 +123,17 @@ class CalendarTabFragment : Fragment() {
}
})
+ viewModel.widgetUpdateFrequency.observe(viewLifecycleOwner, Observer {
+ maintainScrollPosition {
+ widget_update_frequency_label?.text = when (it) {
+ Constants.WidgetUpdateFrequency.HIGH.value -> getString(R.string.settings_widget_update_frequency_high)
+ Constants.WidgetUpdateFrequency.DEFAULT.value -> getString(R.string.settings_widget_update_frequency_default)
+ Constants.WidgetUpdateFrequency.LOW.value -> getString(R.string.settings_widget_update_frequency_low)
+ else -> ""
+ }
+ }
+ })
+
viewModel.showUntil.observe(viewLifecycleOwner, Observer {
maintainScrollPosition {
show_until_label?.text = getString(SettingsStringHelper.getShowUntilString(it))
@@ -262,6 +273,18 @@ class CalendarTabFragment : Fragment() {
}
}
+ action_widget_update_frequency.setOnClickListener {
+ if (Preferences.showEvents) {
+ BottomSheetMenu(requireContext(), header = getString(R.string.settings_widget_update_frequency_title), message = getString(R.string.settings_widget_update_frequency_subtitle)).setSelectedValue(Preferences.widgetUpdateFrequency)
+ .addItem(getString(R.string.settings_widget_update_frequency_high), Constants.WidgetUpdateFrequency.HIGH.value)
+ .addItem(getString(R.string.settings_widget_update_frequency_default), Constants.WidgetUpdateFrequency.DEFAULT.value)
+ .addItem(getString(R.string.settings_widget_update_frequency_low), Constants.WidgetUpdateFrequency.LOW.value)
+ .addOnSelectItemListener { value ->
+ Preferences.widgetUpdateFrequency = value
+ }.show()
+ }
+ }
+
action_second_row_info.setOnClickListener {
if (Preferences.showEvents) {
val dialog = BottomSheetMenu(requireContext(), header = getString(R.string.settings_second_row_info_title)).setSelectedValue(Preferences.secondRowInformation)
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/GeneralTabFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/GeneralTabFragment.kt
index 6f0441c..319382d 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/GeneralTabFragment.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/GeneralTabFragment.kt
@@ -116,6 +116,28 @@ class GeneralTabFragment : Fragment() {
}
})
+ viewModel.textSecondaryColor.observe(viewLifecycleOwner, Observer {
+ maintainScrollPosition {
+ if (Preferences.textSecondaryAlpha == "00") {
+ secondary_font_color_label?.text = getString(R.string.transparent)
+ } else {
+ secondary_font_color_label?.text =
+ "#%s".format(Integer.toHexString(ColorHelper.getSecondaryFontColor())).toUpperCase()
+ }
+ }
+ })
+
+ viewModel.textSecondaryAlpha.observe(viewLifecycleOwner, Observer {
+ maintainScrollPosition {
+ if (Preferences.textSecondaryAlpha == "00") {
+ secondary_font_color_label?.text = getString(R.string.transparent)
+ } else {
+ secondary_font_color_label?.text =
+ "#%s".format(Integer.toHexString(ColorHelper.getSecondaryFontColor())).toUpperCase()
+ }
+ }
+ })
+
viewModel.backgroundCardColor.observe(viewLifecycleOwner, Observer {
maintainScrollPosition {
if (Preferences.backgroundCardAlpha == "00") {
@@ -211,6 +233,23 @@ class GeneralTabFragment : Fragment() {
).show()
}
+ action_secondary_font_color.setOnClickListener {
+ BottomSheetColorPicker(requireContext(),
+ colors = colors,
+ header = getString(R.string.settings_secondary_font_color_title),
+ getSelected = ColorHelper::getSecondaryFontColorRgb,
+ onColorSelected = { color: Int ->
+ val colorString = Integer.toHexString(color)
+ Preferences.textSecondaryColor = "#" + if (colorString.length > 6) colorString.substring(2) else colorString
+ },
+ showAlphaSelector = true,
+ alpha = Preferences.textSecondaryAlpha.toIntValue(),
+ onAlphaChangeListener = { alpha ->
+ Preferences.textSecondaryAlpha = alpha.toHexValue()
+ }
+ ).show()
+ }
+
action_date_format.setOnClickListener {
if (Preferences.showEvents) {
val now = Calendar.getInstance()
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/GlanceTabFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/GlanceTabFragment.kt
index 22dec8e..e17612f 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/GlanceTabFragment.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/GlanceTabFragment.kt
@@ -43,7 +43,10 @@ import com.tommasoberlose.anotherwidget.receivers.ActivityDetectionReceiver.Comp
import com.tommasoberlose.anotherwidget.ui.activities.MainActivity
import com.tommasoberlose.anotherwidget.ui.viewmodels.MainViewModel
import com.tommasoberlose.anotherwidget.utils.checkGrantedPermission
+import com.tommasoberlose.anotherwidget.utils.checkIfFitInstalled
+import kotlinx.android.synthetic.main.fragment_calendar_settings.*
import kotlinx.android.synthetic.main.fragment_glance_settings.*
+import kotlinx.android.synthetic.main.fragment_glance_settings.scrollView
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
@@ -79,6 +82,8 @@ class GlanceTabFragment : Fragment() {
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
+ action_show_steps.isVisible = requireContext().checkIfFitInstalled()
+
setupListener()
updateNextAlarmWarningUi()
}
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 7b8746a..d075ce1 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
@@ -124,127 +124,110 @@ class MainFragment : Fragment(), SharedPreferences.OnSharedPreferenceChangeList
private fun updateUI() {
uiJob?.cancel()
- if (preview != null) {
- preview.clearAnimation()
- time_container.clearAnimation()
- if (Preferences.showPreview) {
- preview.setCardBackgroundColor(
- ContextCompat.getColor(
- requireContext(),
- if (ColorHelper.getFontColor()
- .isColorDark()
- ) android.R.color.white else R.color.colorAccent
- )
+ preview?.clearAnimation()
+ time_container?.clearAnimation()
+
+ if (Preferences.showPreview) {
+ preview?.setCardBackgroundColor(
+ ContextCompat.getColor(
+ requireContext(),
+ if (ColorHelper.getFontColor()
+ .isColorDark()
+ ) android.R.color.white else R.color.colorAccent
)
- widget_shape_background?.setImageDrawable(
- BitmapHelper.getTintedDrawable(
- requireContext(),
- R.drawable.card_background,
- ColorHelper.getBackgroundColor()
- )
+ )
+ widget_shape_background?.setImageDrawable(
+ BitmapHelper.getTintedDrawable(
+ requireContext(),
+ R.drawable.card_background,
+ ColorHelper.getBackgroundColor()
)
- uiJob = viewLifecycleOwner.lifecycleScope.launch(Dispatchers.IO) {
- val generatedView = MainWidget.generateWidgetView(requireContext())
+ )
+ uiJob = viewLifecycleOwner.lifecycleScope.launch(Dispatchers.IO) {
+ val generatedView = MainWidget.generateWidgetView(requireContext())
- withContext(Dispatchers.Main) {
- generatedView.measure(0, 0)
- preview.measure(0, 0)
- }
+ withContext(Dispatchers.Main) {
+ generatedView.measure(0, 0)
+ preview?.measure(0, 0)
+ }
- val bitmap = BitmapHelper.getBitmapFromView(
+ val bitmap = if (preview != null) {
+ BitmapHelper.getBitmapFromView(
generatedView,
if (preview.width > 0) preview.width else generatedView.measuredWidth,
generatedView.measuredHeight
)
- withContext(Dispatchers.Main) {
- // Clock
- time.setTextColor(ColorHelper.getClockFontColor())
- time_am_pm.setTextColor(ColorHelper.getClockFontColor())
- time.setTextSize(
- TypedValue.COMPLEX_UNIT_SP,
- Preferences.clockTextSize.toPixel(requireContext())
- )
- time_am_pm.setTextSize(
- TypedValue.COMPLEX_UNIT_SP,
- Preferences.clockTextSize.toPixel(requireContext()) / 5 * 2
- )
- time_am_pm.isVisible = Preferences.showAMPMIndicator
+ } else {
+ null
+ }
+ withContext(Dispatchers.Main) {
+ // Clock
+ time?.setTextColor(ColorHelper.getClockFontColor())
+ time_am_pm?.setTextColor(ColorHelper.getClockFontColor())
+ time?.setTextSize(
+ TypedValue.COMPLEX_UNIT_SP,
+ Preferences.clockTextSize.toPixel(requireContext())
+ )
+ time_am_pm?.setTextSize(
+ TypedValue.COMPLEX_UNIT_SP,
+ Preferences.clockTextSize.toPixel(requireContext()) / 5 * 2
+ )
+ time_am_pm?.isVisible = Preferences.showAMPMIndicator
- // Clock bottom margin
- clock_bottom_margin_none.isVisible =
- Preferences.showClock && Preferences.clockBottomMargin == Constants.ClockBottomMargin.NONE.value
- clock_bottom_margin_small.isVisible =
- Preferences.showClock && Preferences.clockBottomMargin == Constants.ClockBottomMargin.SMALL.value
- clock_bottom_margin_medium.isVisible =
- Preferences.showClock && Preferences.clockBottomMargin == Constants.ClockBottomMargin.MEDIUM.value
- clock_bottom_margin_large.isVisible =
- Preferences.showClock && Preferences.clockBottomMargin == Constants.ClockBottomMargin.LARGE.value
+ // Clock bottom margin
+ clock_bottom_margin_none?.isVisible =
+ Preferences.showClock && Preferences.clockBottomMargin == Constants.ClockBottomMargin.NONE.value
+ clock_bottom_margin_small?.isVisible =
+ Preferences.showClock && Preferences.clockBottomMargin == Constants.ClockBottomMargin.SMALL.value
+ clock_bottom_margin_medium?.isVisible =
+ Preferences.showClock && Preferences.clockBottomMargin == Constants.ClockBottomMargin.MEDIUM.value
+ clock_bottom_margin_large?.isVisible =
+ Preferences.showClock && Preferences.clockBottomMargin == Constants.ClockBottomMargin.LARGE.value
- if ((Preferences.showClock && !time_container.isVisible) || (!Preferences.showClock && time_container.isVisible)) {
- if (Preferences.showClock) {
- time_container.layoutParams = time_container.layoutParams.apply {
- height = RelativeLayout.LayoutParams.WRAP_CONTENT
- }
- time_container.measure(0, 0)
- }
- val initialHeight = time_container.measuredHeight
- ValueAnimator.ofFloat(
- if (Preferences.showClock) 0f else 1f,
- if (Preferences.showClock) 1f else 0f
- ).apply {
- duration = 500L
- addUpdateListener {
- val animatedValue = animatedValue as Float
- time_container.layoutParams =
- time_container.layoutParams.apply {
- height = (initialHeight * animatedValue).toInt()
- }
- time.alpha = animatedValue
- }
- addListener(
- onStart = {
- if (Preferences.showClock) {
- time_container.isVisible = true
- }
- },
- onEnd = {
- if (!Preferences.showClock) {
- time_container.isVisible = false
- }
- }
- )
- }.start()
-
- ValueAnimator.ofInt(
- preview.height,
- PREVIEW_BASE_HEIGHT.toPixel(requireContext()) + if (Preferences.showClock) 100.toPixel(
- requireContext()
- ) else 0
- ).apply {
- duration = 500L
- addUpdateListener {
- val animatedValue = animatedValue as Int
- val layoutParams = preview.layoutParams
- layoutParams.height = animatedValue
- preview.layoutParams = layoutParams
- }
- }.start()
- } else {
- time_container.layoutParams = time_container.layoutParams.apply {
+ if ((Preferences.showClock && time_container?.isVisible == false) || (!Preferences.showClock && time_container?.isVisible == true)) {
+ if (Preferences.showClock) {
+ time_container?.layoutParams = time_container.layoutParams.apply {
height = RelativeLayout.LayoutParams.WRAP_CONTENT
}
- time_container.measure(0, 0)
+ time_container?.measure(0, 0)
}
+ val initialHeight = time_container?.measuredHeight ?: 0
+ ValueAnimator.ofFloat(
+ if (Preferences.showClock) 0f else 1f,
+ if (Preferences.showClock) 1f else 0f
+ ).apply {
+ duration = 500L
+ addUpdateListener {
+ val animatedValue = animatedValue as Float
+ time_container?.layoutParams =
+ time_container.layoutParams.apply {
+ height = (initialHeight * animatedValue).toInt()
+ }
+ time?.alpha = animatedValue
+ }
+ addListener(
+ onStart = {
+ if (Preferences.showClock) {
+ time_container?.isVisible = true
+ }
+ },
+ onEnd = {
+ if (!Preferences.showClock) {
+ time_container?.isVisible = false
+ }
+ }
+ )
+ }.start()
- if (preview.height == 0) {
+ if (preview != null) {
ValueAnimator.ofInt(
preview.height,
PREVIEW_BASE_HEIGHT.toPixel(requireContext()) + if (Preferences.showClock) 100.toPixel(
requireContext()
) else 0
).apply {
- duration = 300L
+ duration = 500L
addUpdateListener {
val animatedValue = animatedValue as Int
val layoutParams = preview.layoutParams
@@ -253,14 +236,37 @@ class MainFragment : Fragment(), SharedPreferences.OnSharedPreferenceChangeList
}
}.start()
}
-
- widget_loader.animate().scaleX(0f).scaleY(0f).alpha(0f).setDuration(200L)
- .start()
- bitmap_container.setImageBitmap(bitmap)
- widget.animate().alpha(1f).start()
+ } else {
+ time_container?.layoutParams = time_container.layoutParams.apply {
+ height = RelativeLayout.LayoutParams.WRAP_CONTENT
+ }
+ time_container?.measure(0, 0)
}
+
+ if (preview != null && preview.height == 0) {
+ ValueAnimator.ofInt(
+ preview.height,
+ PREVIEW_BASE_HEIGHT.toPixel(requireContext()) + if (Preferences.showClock) 100.toPixel(
+ requireContext()
+ ) else 0
+ ).apply {
+ duration = 300L
+ addUpdateListener {
+ val animatedValue = animatedValue as Int
+ val layoutParams = preview.layoutParams
+ layoutParams.height = animatedValue
+ preview?.layoutParams = layoutParams
+ }
+ }.start()
+ }
+
+ widget_loader?.animate()?.scaleX(0f)?.scaleY(0f)?.alpha(0f)?.setDuration(200L)?.start()
+ bitmap_container?.setImageBitmap(bitmap)
+ widget?.animate()?.alpha(1f)?.start()
}
- } else {
+ }
+ } else {
+ if (preview != null) {
ValueAnimator.ofInt(
preview.height,
0
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 e897be7..8e10b01 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
@@ -5,6 +5,7 @@ import android.app.Activity
import android.content.Intent
import android.os.Build
import android.os.Bundle
+import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -126,6 +127,16 @@ class WeatherTabFragment : Fragment() {
checkLocationPermission()
})
+ viewModel.weatherIconPack.observe(viewLifecycleOwner, Observer {
+ maintainScrollPosition {
+ label_weather_icon_pack?.text = when (it) {
+ Constants.WeatherIconPack.MINIMAL.value -> getString(R.string.settings_weather_icon_pack_minimal)
+ else -> getString(R.string.settings_weather_icon_pack_default)
+ }
+ }
+ checkLocationPermission()
+ })
+
viewModel.weatherAppName.observe(viewLifecycleOwner, Observer {
maintainScrollPosition {
weather_app_label?.text =
@@ -217,6 +228,17 @@ class WeatherTabFragment : Fragment() {
}
}
+ action_weather_icon_pack.setOnClickListener {
+ if (Preferences.showWeather) {
+ BottomSheetMenu(requireContext(), header = getString(R.string.settings_weather_icon_pack_title)).setSelectedValue(Preferences.weatherIconPack)
+ .addItem(getString(R.string.settings_weather_icon_pack_default), Constants.WeatherIconPack.DEFAULT.value)
+ .addItem(getString(R.string.settings_weather_icon_pack_minimal), Constants.WeatherIconPack.MINIMAL.value)
+ .addOnSelectItemListener { value ->
+ Preferences.weatherIconPack = value
+ }.show()
+ }
+ }
+
action_weather_app.setOnClickListener {
if (Preferences.showWeather) {
startActivityForResult(
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 3b1415d..5dd84a0 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
@@ -9,6 +9,8 @@ class MainViewModel : ViewModel() {
// General Settings
val textGlobalColor = Preferences.asLiveData(Preferences::textGlobalColor)
val textGlobalAlpha = Preferences.asLiveData(Preferences::textGlobalAlpha)
+ val textSecondaryColor = Preferences.asLiveData(Preferences::textSecondaryColor)
+ val textSecondaryAlpha = Preferences.asLiveData(Preferences::textSecondaryAlpha)
val backgroundCardColor = Preferences.asLiveData(Preferences::backgroundCardColor)
val backgroundCardAlpha = Preferences.asLiveData(Preferences::backgroundCardAlpha)
val textMainSize = Preferences.asLiveData(Preferences::textMainSize)
@@ -27,6 +29,7 @@ class MainViewModel : ViewModel() {
val showNextEvent = Preferences.asLiveData(Preferences::showNextEvent)
val openEventDetails = Preferences.asLiveData(Preferences::openEventDetails)
val calendarAppName = Preferences.asLiveData(Preferences::calendarAppName)
+ val widgetUpdateFrequency = Preferences.asLiveData(Preferences::widgetUpdateFrequency)
// Clock Settings
val showClock = Preferences.asLiveData(Preferences::showClock)
@@ -52,6 +55,7 @@ class MainViewModel : ViewModel() {
val customLocationAdd = Preferences.asLiveData(Preferences::customLocationAdd)
val showWeatherWarning = Preferences.asLiveData(Preferences::showWeatherWarning)
+ val weatherIconPack = Preferences.asLiveData(Preferences::weatherIconPack)
// Glance
val showGlance = Preferences.asLiveData(Preferences::showGlance)
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/widgets/MainWidget.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/widgets/MainWidget.kt
index 5def9bf..21ba6ef 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/widgets/MainWidget.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/widgets/MainWidget.kt
@@ -261,7 +261,7 @@ class MainWidget : AppWidgetProvider() {
views.setViewVisibility(R.id.empty_layout_rect, View.GONE)
views.setViewVisibility(R.id.calendar_layout_rect, View.VISIBLE)
} else if (GlanceProviderHelper.showGlanceProviders(context)) {
- loop@ for (provider:Constants.GlanceProviderId in GlanceProviderHelper.getGlanceProviders()) {
+ loop@ for (provider:Constants.GlanceProviderId in GlanceProviderHelper.getGlanceProviders(context)) {
when (provider) {
Constants.GlanceProviderId.PLAYING_SONG -> {
if (MediaPlayerHelper.isSomeonePlaying(context)) {
@@ -306,6 +306,13 @@ class MainWidget : AppWidgetProvider() {
}
Constants.GlanceProviderId.GOOGLE_FIT_STEPS -> {
if (Preferences.showDailySteps && Preferences.googleFitSteps > 0) {
+ val fitIntent = PendingIntent.getActivity(
+ context,
+ widgetID,
+ IntentHelper.getFitIntent(context),
+ 0
+ )
+ views.setOnClickPendingIntent(R.id.second_row_rect, fitIntent)
break@loop
}
}
@@ -446,7 +453,10 @@ class MainWidget : AppWidgetProvider() {
val eventRepository = EventRepository(context)
val v = View.inflate(context, R.layout.the_widget, null)
- val now = Calendar.getInstance()
+ val now = Calendar.getInstance().apply {
+ set(Calendar.SECOND, 0)
+ set(Calendar.MILLISECOND, 0)
+ }
v.empty_layout.visibility = View.VISIBLE
v.calendar_layout.visibility = View.GONE
@@ -466,7 +476,7 @@ class MainWidget : AppWidgetProvider() {
v.next_event.text = nextEvent.title
- if (Preferences.showDiffTime && now.timeInMillis < (nextEvent.startDate - 1000 * 60 * 60)) {
+ if (Preferences.showDiffTime && now.timeInMillis < nextEvent.startDate) {
v.next_event_difference_time.text = if (!nextEvent.allDay) {
SettingsStringHelper.getDifferenceText(
context,
@@ -512,7 +522,7 @@ class MainWidget : AppWidgetProvider() {
} else {
val flags: Int = DateUtils.FORMAT_SHOW_DATE or DateUtils.FORMAT_NO_YEAR or DateUtils.FORMAT_ABBREV_MONTH
- v.next_event_date.text = DateUtils.formatDateTime(context, now.timeInMillis, flags).getCapWordString()
+ v.next_event_date.text = DateUtils.formatDateTime(context, now.timeInMillis, flags)
}
}
@@ -520,7 +530,7 @@ class MainWidget : AppWidgetProvider() {
v.calendar_layout.visibility = View.VISIBLE
} else if (GlanceProviderHelper.showGlanceProviders(context)) {
v.second_row_icon.isVisible = true
- loop@ for (provider:Constants.GlanceProviderId in GlanceProviderHelper.getGlanceProviders()) {
+ loop@ for (provider:Constants.GlanceProviderId in GlanceProviderHelper.getGlanceProviders(context)) {
when (provider) {
Constants.GlanceProviderId.PLAYING_SONG -> {
if (MediaPlayerHelper.isSomeonePlaying(context)) {
@@ -562,6 +572,7 @@ class MainWidget : AppWidgetProvider() {
if (Preferences.customNotes.isNotEmpty()) {
v.second_row_icon.isVisible = false
v.next_event_date.text = Preferences.customNotes
+ v.next_event_date.maxLines = 2
break@loop
}
}
@@ -587,14 +598,30 @@ class MainWidget : AppWidgetProvider() {
// Color
- listOf(v.empty_date, v.divider1, v.temp, v.next_event, v.next_event_difference_time, v.next_event_date, v.divider2, v.calendar_temp, v.divider3, v.special_temp).forEach {
+ listOf(v.empty_date, v.divider1, v.temp, v.next_event, v.next_event_difference_time, v.divider3, v.special_temp).forEach {
it.setTextColor(ColorHelper.getFontColor())
}
- listOf(v.second_row_icon, v.action_next, v.action_previous).forEach {
+ if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) {
+ listOf(v.action_next, v.action_previous)
+ } else {
+ listOf(v.action_next, v.action_previous, v.empty_weather_icon, v.special_weather_icon)
+ }.forEach {
it.setColorFilter(ColorHelper.getFontColor())
}
+ listOf(v.next_event_date, v.divider2, v.calendar_temp).forEach {
+ it.setTextColor(ColorHelper.getSecondaryFontColor())
+ }
+
+ if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) {
+ listOf(v.second_row_icon)
+ } else {
+ listOf(v.second_row_icon, v.weather_icon)
+ }.forEach {
+ it.setColorFilter(ColorHelper.getSecondaryFontColor())
+ }
+
// Text Size
listOf>(
v.empty_date to Preferences.textMainSize,
@@ -615,11 +642,11 @@ class MainWidget : AppWidgetProvider() {
v.second_row_icon.scaleX = Preferences.textSecondSize / 18f
v.second_row_icon.scaleY = Preferences.textSecondSize / 18f
- v.weather_icon.scaleX = Preferences.textSecondSize / 16f
- v.weather_icon.scaleY = Preferences.textSecondSize / 16f
+ v.weather_icon.scaleX = Preferences.textSecondSize / 14f
+ v.weather_icon.scaleY = Preferences.textSecondSize / 14f
- v.empty_weather_icon.scaleX = Preferences.textMainSize / 20f
- v.empty_weather_icon.scaleY = Preferences.textMainSize / 20f
+ v.empty_weather_icon.scaleX = Preferences.textMainSize / 18f
+ v.empty_weather_icon.scaleY = Preferences.textMainSize / 18f
v.action_next.scaleX = Preferences.textMainSize / 28f
v.action_next.scaleY = Preferences.textMainSize / 28f
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/utils/Extensions.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/utils/Extensions.kt
index 983b727..12ca1d9 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/utils/Extensions.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/utils/Extensions.kt
@@ -212,4 +212,13 @@ fun String.getCapWordString(): String {
} catch (e: Exception) {
this
}
+}
+
+fun Context.checkIfFitInstalled(): Boolean {
+ return try {
+ packageManager.getPackageInfo("com.google.android.apps.fitness", PackageManager.GET_ACTIVITIES)
+ true
+ } catch (e: Exception) {
+ false
+ }
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/clear_day_2.png b/app/src/main/res/drawable/clear_day_2.png
new file mode 100644
index 0000000..0bc89de
Binary files /dev/null and b/app/src/main/res/drawable/clear_day_2.png differ
diff --git a/app/src/main/res/drawable/clear_night_2.png b/app/src/main/res/drawable/clear_night_2.png
new file mode 100644
index 0000000..0166c2a
Binary files /dev/null and b/app/src/main/res/drawable/clear_night_2.png differ
diff --git a/app/src/main/res/drawable/cloudy_weather_2.png b/app/src/main/res/drawable/cloudy_weather_2.png
new file mode 100644
index 0000000..8fb9862
Binary files /dev/null and b/app/src/main/res/drawable/cloudy_weather_2.png differ
diff --git a/app/src/main/res/drawable/haze_day_2.png b/app/src/main/res/drawable/haze_day_2.png
new file mode 100644
index 0000000..1817f5f
Binary files /dev/null and b/app/src/main/res/drawable/haze_day_2.png differ
diff --git a/app/src/main/res/drawable/haze_night_2.png b/app/src/main/res/drawable/haze_night_2.png
new file mode 100644
index 0000000..c3b033b
Binary files /dev/null and b/app/src/main/res/drawable/haze_night_2.png differ
diff --git a/app/src/main/res/drawable/haze_weather_2.png b/app/src/main/res/drawable/haze_weather_2.png
new file mode 100644
index 0000000..9379e83
Binary files /dev/null and b/app/src/main/res/drawable/haze_weather_2.png differ
diff --git a/app/src/main/res/drawable/mostly_cloudy_2.png b/app/src/main/res/drawable/mostly_cloudy_2.png
new file mode 100644
index 0000000..7d25354
Binary files /dev/null and b/app/src/main/res/drawable/mostly_cloudy_2.png differ
diff --git a/app/src/main/res/drawable/mostly_cloudy_night_2.png b/app/src/main/res/drawable/mostly_cloudy_night_2.png
new file mode 100644
index 0000000..e3079d2
Binary files /dev/null and b/app/src/main/res/drawable/mostly_cloudy_night_2.png differ
diff --git a/app/src/main/res/drawable/partly_cloudy_2.png b/app/src/main/res/drawable/partly_cloudy_2.png
new file mode 100644
index 0000000..a1c5f11
Binary files /dev/null and b/app/src/main/res/drawable/partly_cloudy_2.png differ
diff --git a/app/src/main/res/drawable/partly_cloudy_night_2.png b/app/src/main/res/drawable/partly_cloudy_night_2.png
new file mode 100644
index 0000000..10c1027
Binary files /dev/null and b/app/src/main/res/drawable/partly_cloudy_night_2.png differ
diff --git a/app/src/main/res/drawable/rain_snow_2.png b/app/src/main/res/drawable/rain_snow_2.png
new file mode 100644
index 0000000..173bc9a
Binary files /dev/null and b/app/src/main/res/drawable/rain_snow_2.png differ
diff --git a/app/src/main/res/drawable/rain_snow_day_2.png b/app/src/main/res/drawable/rain_snow_day_2.png
new file mode 100644
index 0000000..a6f1aa6
Binary files /dev/null and b/app/src/main/res/drawable/rain_snow_day_2.png differ
diff --git a/app/src/main/res/drawable/rain_snow_night_2.png b/app/src/main/res/drawable/rain_snow_night_2.png
new file mode 100644
index 0000000..af1a9d3
Binary files /dev/null and b/app/src/main/res/drawable/rain_snow_night_2.png differ
diff --git a/app/src/main/res/drawable/rainy_day_2.png b/app/src/main/res/drawable/rainy_day_2.png
new file mode 100644
index 0000000..b7d4ffa
Binary files /dev/null and b/app/src/main/res/drawable/rainy_day_2.png differ
diff --git a/app/src/main/res/drawable/rainy_night_2.png b/app/src/main/res/drawable/rainy_night_2.png
new file mode 100644
index 0000000..88fe02b
Binary files /dev/null and b/app/src/main/res/drawable/rainy_night_2.png differ
diff --git a/app/src/main/res/drawable/rainy_weather_2.png b/app/src/main/res/drawable/rainy_weather_2.png
new file mode 100644
index 0000000..173bc9a
Binary files /dev/null and b/app/src/main/res/drawable/rainy_weather_2.png differ
diff --git a/app/src/main/res/drawable/showcase_2.png b/app/src/main/res/drawable/showcase_2.png
new file mode 100644
index 0000000..d0f3638
Binary files /dev/null and b/app/src/main/res/drawable/showcase_2.png differ
diff --git a/app/src/main/res/drawable/snow_day_2.png b/app/src/main/res/drawable/snow_day_2.png
new file mode 100644
index 0000000..ebdf970
Binary files /dev/null and b/app/src/main/res/drawable/snow_day_2.png differ
diff --git a/app/src/main/res/drawable/snow_night_2.png b/app/src/main/res/drawable/snow_night_2.png
new file mode 100644
index 0000000..50ff440
Binary files /dev/null and b/app/src/main/res/drawable/snow_night_2.png differ
diff --git a/app/src/main/res/drawable/snow_weather_2.png b/app/src/main/res/drawable/snow_weather_2.png
new file mode 100644
index 0000000..29ac249
Binary files /dev/null and b/app/src/main/res/drawable/snow_weather_2.png differ
diff --git a/app/src/main/res/drawable/storm_weather_2.png b/app/src/main/res/drawable/storm_weather_2.png
new file mode 100644
index 0000000..6b7050b
Binary files /dev/null and b/app/src/main/res/drawable/storm_weather_2.png differ
diff --git a/app/src/main/res/drawable/storm_weather_day_2.png b/app/src/main/res/drawable/storm_weather_day_2.png
new file mode 100644
index 0000000..d0f3638
Binary files /dev/null and b/app/src/main/res/drawable/storm_weather_day_2.png differ
diff --git a/app/src/main/res/drawable/storm_weather_night_2.png b/app/src/main/res/drawable/storm_weather_night_2.png
new file mode 100644
index 0000000..d0dacc1
Binary files /dev/null and b/app/src/main/res/drawable/storm_weather_night_2.png differ
diff --git a/app/src/main/res/drawable/thunder_day_2.png b/app/src/main/res/drawable/thunder_day_2.png
new file mode 100644
index 0000000..e267850
Binary files /dev/null and b/app/src/main/res/drawable/thunder_day_2.png differ
diff --git a/app/src/main/res/drawable/thunder_night_2.png b/app/src/main/res/drawable/thunder_night_2.png
new file mode 100644
index 0000000..306ebe5
Binary files /dev/null and b/app/src/main/res/drawable/thunder_night_2.png differ
diff --git a/app/src/main/res/drawable/thunder_weather_2.png b/app/src/main/res/drawable/thunder_weather_2.png
new file mode 100644
index 0000000..2bf3ea6
Binary files /dev/null and b/app/src/main/res/drawable/thunder_weather_2.png differ
diff --git a/app/src/main/res/drawable/windy_day_2.png b/app/src/main/res/drawable/windy_day_2.png
new file mode 100644
index 0000000..6e05f30
Binary files /dev/null and b/app/src/main/res/drawable/windy_day_2.png differ
diff --git a/app/src/main/res/drawable/windy_night_2.png b/app/src/main/res/drawable/windy_night_2.png
new file mode 100644
index 0000000..71ca04d
Binary files /dev/null and b/app/src/main/res/drawable/windy_night_2.png differ
diff --git a/app/src/main/res/drawable/windy_weather_2.png b/app/src/main/res/drawable/windy_weather_2.png
new file mode 100644
index 0000000..78e682f
Binary files /dev/null and b/app/src/main/res/drawable/windy_weather_2.png differ
diff --git a/app/src/main/res/font/product_sans.xml b/app/src/main/res/font/product_sans.xml
new file mode 100644
index 0000000..8c58422
--- /dev/null
+++ b/app/src/main/res/font/product_sans.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/font/product_sans_black.ttf b/app/src/main/res/font/product_sans_black.ttf
new file mode 100644
index 0000000..060739f
Binary files /dev/null and b/app/src/main/res/font/product_sans_black.ttf differ
diff --git a/app/src/main/res/font/product_sans_bold.ttf b/app/src/main/res/font/product_sans_bold.ttf
new file mode 100755
index 0000000..d847195
Binary files /dev/null and b/app/src/main/res/font/product_sans_bold.ttf differ
diff --git a/app/src/main/res/font/product_sans_bold_italic.ttf b/app/src/main/res/font/product_sans_bold_italic.ttf
new file mode 100755
index 0000000..129d12d
Binary files /dev/null and b/app/src/main/res/font/product_sans_bold_italic.ttf differ
diff --git a/app/src/main/res/font/product_sans_italic.ttf b/app/src/main/res/font/product_sans_italic.ttf
new file mode 100755
index 0000000..5fc56d4
Binary files /dev/null and b/app/src/main/res/font/product_sans_italic.ttf differ
diff --git a/app/src/main/res/font/product_sans_light.ttf b/app/src/main/res/font/product_sans_light.ttf
new file mode 100644
index 0000000..1221e07
Binary files /dev/null and b/app/src/main/res/font/product_sans_light.ttf differ
diff --git a/app/src/main/res/font/product_sans_medium.ttf b/app/src/main/res/font/product_sans_medium.ttf
new file mode 100644
index 0000000..85860e6
Binary files /dev/null and b/app/src/main/res/font/product_sans_medium.ttf differ
diff --git a/app/src/main/res/font/product_sans_regular.ttf b/app/src/main/res/font/product_sans_regular.ttf
new file mode 100755
index 0000000..c0442ee
Binary files /dev/null and b/app/src/main/res/font/product_sans_regular.ttf differ
diff --git a/app/src/main/res/font/product_sans_thin.ttf b/app/src/main/res/font/product_sans_thin.ttf
new file mode 100644
index 0000000..9d08714
Binary files /dev/null and b/app/src/main/res/font/product_sans_thin.ttf differ
diff --git a/app/src/main/res/layout/activity_choose_application.xml b/app/src/main/res/layout/activity_choose_application.xml
index 04f72a1..261862e 100644
--- a/app/src/main/res/layout/activity_choose_application.xml
+++ b/app/src/main/res/layout/activity_choose_application.xml
@@ -84,6 +84,7 @@
android:textColorHint="@color/colorSecondaryText"
android:textAlignment="viewStart"
android:id="@+id/search"
+ android:fontFamily="@font/product_sans"
android:gravity="center_vertical|start"
android:hint="@string/search"
android:text="@={viewModel.searchInput}"
diff --git a/app/src/main/res/layout/activity_custom_date.xml b/app/src/main/res/layout/activity_custom_date.xml
index 1d8cc56..790c1a5 100644
--- a/app/src/main/res/layout/activity_custom_date.xml
+++ b/app/src/main/res/layout/activity_custom_date.xml
@@ -87,6 +87,7 @@
android:maxLines="1"
android:singleLine="true"
android:hint="@string/settings_date_format_title"
+ android:fontFamily="@font/product_sans"
android:text="@={viewModel.dateInput}"
android:autofillHints=""
tools:ignore="TextFields" />
@@ -116,7 +117,7 @@
android:layout_width="match_parent"
android:layout_height="48dp"
android:id="@+id/date_format_value"
- android:textAppearance="@style/TextAppearance.AppCompat.Button"
+ android:textAppearance="@style/AnotherWidget.Settings.Title"
android:letterSpacing="0"
android:textColor="@color/colorPrimaryText"
android:textSize="20sp"
diff --git a/app/src/main/res/layout/activity_custom_location.xml b/app/src/main/res/layout/activity_custom_location.xml
index 6127dc5..ecd93a8 100644
--- a/app/src/main/res/layout/activity_custom_location.xml
+++ b/app/src/main/res/layout/activity_custom_location.xml
@@ -70,6 +70,7 @@
android:paddingRight="16dp"
android:inputType="textCapWords"
android:id="@+id/location"
+ android:fontFamily="@font/product_sans"
android:gravity="center_vertical|start"
android:hint="@string/search"
android:textAlignment="viewStart"
diff --git a/app/src/main/res/layout/activity_support_dev.xml b/app/src/main/res/layout/activity_support_dev.xml
index 1505075..721447e 100644
--- a/app/src/main/res/layout/activity_support_dev.xml
+++ b/app/src/main/res/layout/activity_support_dev.xml
@@ -55,7 +55,7 @@
android:layout_height="wrap_content"
android:paddingBottom="20dp"
android:textColor="@color/colorSecondaryText"
- android:textAppearance="@style/TextAppearance.AppCompat.Small"
+ android:textAppearance="@style/AnotherWidget.Settings.Subtitle"
android:textSize="16sp"
android:gravity="center"
android:text="@string/support_dev_subtitle" />
diff --git a/app/src/main/res/layout/activity_weather_provider.xml b/app/src/main/res/layout/activity_weather_provider.xml
index ddae682..a9494b7 100644
--- a/app/src/main/res/layout/activity_weather_provider.xml
+++ b/app/src/main/res/layout/activity_weather_provider.xml
@@ -80,6 +80,7 @@
app:boxStrokeColor="@color/colorAccent"
app:hintTextColor="@color/colorAccent"
android:hint="@string/api_key_hint"
+ android:fontFamily="@font/product_sans"
android:textAlignment="viewStart"
android:textDirection="locale"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
@@ -88,6 +89,7 @@
android:layout_height="wrap_content"
android:textAlignment="viewStart"
android:textDirection="locale"
+ android:fontFamily="@font/product_sans"
android:gravity="center_vertical|start" />
diff --git a/app/src/main/res/layout/bottom_sheet_dialog.xml b/app/src/main/res/layout/bottom_sheet_dialog.xml
index a6fe0ab..d04ae80 100644
--- a/app/src/main/res/layout/bottom_sheet_dialog.xml
+++ b/app/src/main/res/layout/bottom_sheet_dialog.xml
@@ -16,7 +16,7 @@
android:paddingBottom="16dp"
android:orientation="vertical">
diff --git a/app/src/main/res/layout/bottom_sheet_menu_divider.xml b/app/src/main/res/layout/bottom_sheet_menu_divider.xml
index 2a9edbf..63cf5af 100644
--- a/app/src/main/res/layout/bottom_sheet_menu_divider.xml
+++ b/app/src/main/res/layout/bottom_sheet_menu_divider.xml
@@ -21,6 +21,7 @@
android:duplicateParentState="true"
android:id="@+id/label"
android:textSize="15sp"
+ android:textStyle="bold"
android:textColor="@color/colorAccent"
android:textAppearance="@style/TextAppearance.AppCompat.Button"
app:textAllCaps="false" />
diff --git a/app/src/main/res/layout/bottom_sheet_menu_hor.xml b/app/src/main/res/layout/bottom_sheet_menu_hor.xml
index 893ccd9..7751b2e 100644
--- a/app/src/main/res/layout/bottom_sheet_menu_hor.xml
+++ b/app/src/main/res/layout/bottom_sheet_menu_hor.xml
@@ -19,7 +19,7 @@
android:visibility="gone"
android:orientation="vertical">
diff --git a/app/src/main/res/layout/fragment_calendar_settings.xml b/app/src/main/res/layout/fragment_calendar_settings.xml
index 9223da8..43abe08 100644
--- a/app/src/main/res/layout/fragment_calendar_settings.xml
+++ b/app/src/main/res/layout/fragment_calendar_settings.xml
@@ -274,6 +274,43 @@
style="@style/AnotherWidget.Settings.Subtitle"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout/fragment_general_settings.xml b/app/src/main/res/layout/fragment_general_settings.xml
index 51451ed..ff70941 100644
--- a/app/src/main/res/layout/fragment_general_settings.xml
+++ b/app/src/main/res/layout/fragment_general_settings.xml
@@ -55,6 +55,43 @@
style="@style/AnotherWidget.Settings.Subtitle"/>
+
+
+
+
+
+
+
+ android:text="@string/settings_secondary_font_color_title"/>
diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml
index 5a2ef1e..a37adbd 100644
--- a/app/src/main/res/layout/fragment_settings.xml
+++ b/app/src/main/res/layout/fragment_settings.xml
@@ -45,7 +45,7 @@
android:text="@string/settings_title"
android:textColor="@color/colorPrimaryText"
android:gravity="center"
- android:textAppearance="@style/TextAppearance.AppCompat.Title"
+ android:textAppearance="@style/AnotherWidget.Main.Title"
tools:ignore="RelativeOverlap" />
diff --git a/app/src/main/res/layout/fragment_weather_settings.xml b/app/src/main/res/layout/fragment_weather_settings.xml
index 00de550..694f74e 100644
--- a/app/src/main/res/layout/fragment_weather_settings.xml
+++ b/app/src/main/res/layout/fragment_weather_settings.xml
@@ -48,7 +48,7 @@
android:text="@string/weather_warning"
android:textColor="@color/colorPrimaryText"
android:letterSpacing="0"
- android:textAppearance="@style/TextAppearance.AppCompat.Button"
+ android:textAppearance="@style/AnotherWidget.Settings.Title"
app:textAllCaps="false" />
+
+
+
+
+
+
+
-
+ android:textAppearance="@style/AnotherWidget.Settings.Title"/>
diff --git a/app/src/main/res/layout/the_widget.xml b/app/src/main/res/layout/the_widget.xml
index ecca95f..6095b48 100644
--- a/app/src/main/res/layout/the_widget.xml
+++ b/app/src/main/res/layout/the_widget.xml
@@ -43,7 +43,7 @@
android:layout_height="20dp"
android:id="@+id/empty_weather_icon"
android:layout_marginStart="4dp"
- android:layout_marginEnd="4dp"/>
+ android:layout_marginEnd="8dp"/>
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index fac099f..dbeaedb 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -230,4 +230,15 @@
We need a few permissions to get your daily steps from Google Fit.
Show AM/PM Indicator
%d steps today
+ Second row text color
+ soon
+ now
+ Time left update frequency
+ High frequency causes more battery consume
+ Low
+ Default
+ High
+ Icon pack
+ Default
+ Minimal
\ No newline at end of file
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index e89aba7..09229d4 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -210,4 +210,15 @@
We need a few permissions to get your daily steps from Google Fit.
Show AM/PM Indicator
%d steps today
+ Second row text color
+ soon
+ now
+ Time left update frequency
+ High frequency causes more battery consume
+ Low
+ Default
+ High
+ Icon pack
+ Default
+ Minimal
\ No newline at end of file
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index eb75d13..3985f48 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -98,7 +98,8 @@
Orario evento
Location evento
Mostra orario prossimo allarme
- Colore Testo
+ Colore testo prima riga
+ Colore testo seconda riga
Dimensione Testo Prima Riga
Dimensione Testo Seconda Riga
Orologio
@@ -209,4 +210,14 @@
Abbiamo bisogno di alcuni permessi per leggere i tuoi passi di oggi da Google Fit.
Mostra AM/PM
%d passi
+ a breve
+ ora
+ Frequenza aggiornamento tempo rimanente
+ Maggiore è la frequenza maggiore sarà il consumo di batteria
+ Bassa
+ Default
+ Alta
+ Icon pack
+ Default
+ Minimal
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ddbcae1..ff8d561 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -104,7 +104,8 @@
Event address
Event time
Show next alarm time
- Text color
+ First row text color
+ Second row text color
Background color
First row text size
Second row text size
@@ -222,4 +223,14 @@
Low battery level
Show AM/PM Indicator
%d steps so far
+ soon
+ now
+ Time left update frequency
+ High frequency causes more battery consume
+ Low
+ Default
+ High
+ Icon pack
+ Default
+ Minimal
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 243ad95..5a6e555 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -19,15 +19,18 @@