Compare commits

...

32 Commits

Author SHA1 Message Date
863b8f79d8 Bump the version 2020-05-20 13:46:27 +02:00
857a8009b6 Fix #137 2020-05-20 13:37:37 +02:00
9199f28ad9 Fix french translation and add a new icon pack 2020-05-20 13:34:32 +02:00
ddb1b7494a Merge pull request #135 from Moutony/patch-7
Update stings.xml (values-fr) - May 19, 2020 ver.
2020-05-20 12:19:51 +02:00
fd2b1ba976 Update strings.xml
Some translations may be oddly long. I will correct them once I see what they look like in the app.
2020-05-19 20:12:02 +02:00
90f0d7de00 Build v2.0.10 2020-05-19 20:07:08 +02:00
66ad5e0839 Fix #133 2020-05-19 20:01:11 +02:00
2ac7e072e5 Close #134 2020-05-19 19:49:21 +02:00
a3392dabcf Add a new cool icon pack 2020-05-19 19:48:33 +02:00
c2c54a04d2 Merge pull request #131 from LastInLine/patch-1
Update strings.xml
2020-05-19 10:28:33 +02:00
2c237058b3 Close #132 2020-05-19 10:27:54 +02:00
aa2b4b0510 Update strings.xml
Singular/plural switch for weather info visibility and changed awkward phrasing around time remaining until an event.
2020-05-18 21:38:56 -04:00
4c27d1dd9b Fix future events 2020-05-18 20:36:59 +02:00
eba5575ee2 Fix event not found error 2020-05-18 14:14:32 +02:00
aff7e407ca Merge pull request #127 from chreddy/patch-2
Adding Danish translation
2020-05-18 12:47:39 +02:00
f7fc31d968 Fix all day events widget date 2020-05-18 12:44:46 +02:00
90b588603d Update strings.xml
settings_general_title was a mistake indeed. This has been changed.

As for settings_second_row_info_subtitle_0, this has been translated correctly already. However I noticed that I must've overlooked next_alarm_warning previously, so I've added a translation of this as well.
2020-05-18 12:38:57 +02:00
5d9bd11abb Fix #129 2020-05-18 12:19:15 +02:00
01005ec443 Clean the project 2020-05-18 12:07:04 +02:00
eaf6400e8b Merge pull request #84 from zmni/translation
Create Indonesian translation
2020-05-18 12:05:21 +02:00
30339c7375 Merge pull request #124 from shtraus12/master
Added Russian translation (values-ru)
2020-05-18 12:00:08 +02:00
87da284be4 Update strings 2020-05-18 11:49:57 +02:00
573c6d03e5 Adding Danish translation
I re-did my previous translation, based on the newly updated string.xml.
Because of this, I've closed the previous pull request as well.
2020-05-18 00:27:53 +02:00
79e87b0648 Add files via upload 2020-05-17 16:51:41 +03:00
9e9a91690e Update Indonesian translation 2020-05-17 19:12:38 +07:00
5f699af509 Show translated in-app purchases 2020-05-17 13:25:19 +02:00
aae40b9dd3 Merge branch 'master' into translation
* master:
  Update strings
  Add settings header
  Add battery level handler
  Fix #120
2020-05-17 18:22:52 +07:00
26b1948b70 Update Indonesian translation 2020-05-14 22:49:58 +07:00
af64818dff Merge branch 'master' into translation
* master:
  Update the build version
  Update event repository
  Update the events selector. Fix #95
  Fix #113, #111, #79, #107, #109
  Add weather icon pack, updates frequency and fix google fit
  Update ui
  Update icons
  Fix dark theme toggle issue
  Bugfixes
  Update google fit integration
  Update beta release
  update gitignore
  Clean project files
  Add google fit connection
  Add google fit integration
2020-05-14 22:14:50 +07:00
f28596c194 Merge branch 'master' into translation
* master:
  Gix switcher, update glance, add glance order, add ampm toggle
  Merge crud-device
  Add dividers toggle
  Add integreations activity, removed long time until intervals
  Change music fragment to at a glance
  Update build version
  Fix #83
  Add current song
  Add clock text color
2020-05-10 04:27:13 +07:00
7f41a92a91 Update Indonesian translation 2020-05-10 04:06:26 +07:00
40c9253159 Create Indonesian translation 2020-05-08 19:04:48 +07:00
89 changed files with 1253 additions and 236 deletions

4
.gitignore vendored
View File

@ -1,12 +1,10 @@
*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
/.idea/*
.DS_Store
/build
/captures
.externalNativeBuild
/tasksintegration/build
apikey.properties
/app/google-services.json

Binary file not shown.

View File

@ -13,6 +13,13 @@ Also, as much as possible, there are always updates and new features in the shor
Help me developing with feedback and support me on how you can.
<div style="text-align:center"><a href="https://play.google.com/store/apps/details?id=com.tommasoberlose.anotherwidget" target="_blank"><img src="google-play-badge.png" height="100" /></a></div>
Help with translations
-------
Hey! You could view the file strings.xml ([here](https://github.com/tommasoberlose/another-widget/blob/master/app/src/main/res/values/strings.xml)) that contains the English version of the app strings.
You have to copy the file, create a copy of it inside the folder values-[LANGUAGE-SUFFIX] with the translated strings and create a pull request to submit your changes.
License
-------
Copyright (C) 2017-2020 Tommaso Berlose (http://tommasoberlose.com)

View File

@ -10,10 +10,6 @@ apply plugin: 'kotlin-android-extensions'
apply plugin: 'realm-android'
def apiKeyPropertiesFile = rootProject.file("apikey.properties")
def apiKeyProperties = new Properties()
apiKeyProperties.load(new FileInputStream(apiKeyPropertiesFile))
android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
@ -22,12 +18,10 @@ android {
applicationId "com.tommasoberlose.anotherwidget"
minSdkVersion 23
targetSdkVersion 29
versionCode 93
versionName "2.0.9"
versionCode 100
versionName "2.0.11"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
manifestPlaceholders = [ "AWARENESS_API_KEY": apiKeyProperties['AWARENESS_API_KEY']]
}
buildTypes {

Binary file not shown.

View File

@ -46,7 +46,22 @@ class EventRepository(val context: Context) {
fun getNextEvent(): Event? {
val nextEvent = getEventByEventId(Preferences.nextEventId)
val event = if (nextEvent != null && nextEvent.endDate > Calendar.getInstance().timeInMillis) {
val now = Calendar.getInstance().timeInMillis
val limit = Calendar.getInstance().apply {
timeInMillis = now
when (Preferences.showUntil) {
0 -> add(Calendar.HOUR, 3)
1 -> add(Calendar.HOUR, 6)
2 -> add(Calendar.HOUR, 12)
3 -> add(Calendar.DAY_OF_MONTH, 1)
4 -> add(Calendar.DAY_OF_MONTH, 3)
5 -> add(Calendar.DAY_OF_MONTH, 7)
6 -> add(Calendar.MINUTE, 30)
7 -> add(Calendar.HOUR, 1)
else -> add(Calendar.HOUR, 6)
}
}
val event = if (nextEvent != null && nextEvent.endDate > now && nextEvent.startDate < limit.timeInMillis) {
nextEvent
} else {
val events = getEvents()
@ -107,12 +122,32 @@ class EventRepository(val context: Context) {
MainWidget.updateWidget(context)
}
fun getEvents(): RealmResults<Event> {
fun getFutureEvents(): RealmResults<Event> {
val now = Calendar.getInstance().timeInMillis
realm.refresh()
return realm.where(Event::class.java).greaterThan("endDate", now).findAll()
}
private fun getEvents(): RealmResults<Event> {
val now = Calendar.getInstance().timeInMillis
val limit = Calendar.getInstance().apply {
timeInMillis = now
when (Preferences.showUntil) {
0 -> add(Calendar.HOUR, 3)
1 -> add(Calendar.HOUR, 6)
2 -> add(Calendar.HOUR, 12)
3 -> add(Calendar.DAY_OF_MONTH, 1)
4 -> add(Calendar.DAY_OF_MONTH, 3)
5 -> add(Calendar.DAY_OF_MONTH, 7)
6 -> add(Calendar.MINUTE, 30)
7 -> add(Calendar.HOUR, 1)
else -> add(Calendar.HOUR, 6)
}
}
realm.refresh()
return realm.where(Event::class.java).greaterThan("endDate", now).lessThanOrEqualTo("startDate", limit.timeInMillis).findAll()
}
fun getEventsCount(): Int = getEvents().size
fun close() {

View File

@ -31,6 +31,8 @@ object Constants {
enum class WeatherIconPack(val value: Int) {
DEFAULT(0),
MINIMAL(1)
MINIMAL(1),
COOL(2),
GOOGLE_NEWS(3)
}
}

View File

@ -37,23 +37,11 @@ object CalendarHelper {
set(Calendar.MINUTE, 0)
set(Calendar.HOUR_OF_DAY, 0)
}
val limit = Calendar.getInstance()
when (Preferences.showUntil) {
0 -> limit.add(Calendar.HOUR, 3)
1 -> limit.add(Calendar.HOUR, 6)
2 -> limit.add(Calendar.HOUR, 12)
3 -> limit.add(Calendar.DAY_OF_MONTH, 1)
4 -> limit.add(Calendar.DAY_OF_MONTH, 3)
5 -> limit.add(Calendar.DAY_OF_MONTH, 7)
6 -> limit.add(Calendar.MINUTE, 30)
7 -> limit.add(Calendar.HOUR, 1)
else -> limit.add(Calendar.HOUR, 6)
val limit = Calendar.getInstance().apply {
timeInMillis = begin.timeInMillis
add(Calendar.DAY_OF_YEAR, 2)
}
val builder = CalendarContract.Instances.CONTENT_URI.buildUpon()
ContentUris.appendId(builder, begin.timeInMillis)
ContentUris.appendId(builder, limit.timeInMillis)
if (!context.checkGrantedPermission(
Manifest.permission.READ_CALENDAR
)

View File

@ -114,6 +114,7 @@ object IntentHelper {
if (Preferences.calendarAppPackage == "") {
Intent(Intent.ACTION_VIEW).apply {
data = uri
flags = (Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED or Intent.FLAG_ACTIVITY_CLEAR_TOP)
if (!e.allDay) {
putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, e.startDate)
putExtra(CalendarContract.EXTRA_EVENT_END_TIME, e.endDate)
@ -182,7 +183,7 @@ object IntentHelper {
}
}
fun getBatteryIntent(context: Context): Intent {
fun getBatteryIntent(): Intent {
return Intent(Intent.ACTION_POWER_USAGE_SUMMARY)
}

View File

@ -47,81 +47,201 @@ object WeatherHelper {
}
fun getWeatherIconResource(icon: String): Int {
when (icon) {
return when (icon) {
"01d" -> {
return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.clear_day else R.drawable.clear_day_2
when (Preferences.weatherIconPack) {
Constants.WeatherIconPack.COOL.value -> R.drawable.clear_day_3
Constants.WeatherIconPack.MINIMAL.value -> R.drawable.clear_day_2
Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.clear_day_4
else -> R.drawable.clear_day
}
}
"02d" -> {
return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.partly_cloudy else R.drawable.partly_cloudy_2
when (Preferences.weatherIconPack) {
Constants.WeatherIconPack.COOL.value -> R.drawable.partly_cloudy_3
Constants.WeatherIconPack.MINIMAL.value -> R.drawable.partly_cloudy_2
Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.partly_cloudy_4
else -> R.drawable.partly_cloudy
}
}
"03d" -> {
return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.mostly_cloudy else R.drawable.mostly_cloudy_2
when (Preferences.weatherIconPack) {
Constants.WeatherIconPack.COOL.value -> R.drawable.mostly_cloudy_3
Constants.WeatherIconPack.MINIMAL.value -> R.drawable.mostly_cloudy_2
Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.mostly_cloudy_4
else -> R.drawable.mostly_cloudy
}
}
"04d" -> {
return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.cloudy_weather else R.drawable.cloudy_weather_2
when (Preferences.weatherIconPack) {
Constants.WeatherIconPack.COOL.value -> R.drawable.cloudy_weather_3
Constants.WeatherIconPack.MINIMAL.value -> R.drawable.cloudy_weather_2
Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.cloudy_weather_4
else -> R.drawable.cloudy_weather
}
}
"09d" -> {
return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.storm_weather_day else R.drawable.storm_weather_day_2
when (Preferences.weatherIconPack) {
Constants.WeatherIconPack.COOL.value -> R.drawable.storm_weather_day_3
Constants.WeatherIconPack.MINIMAL.value -> R.drawable.storm_weather_day_2
Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.storm_weather_day_4
else -> R.drawable.storm_weather_day
}
}
"10d" -> {
return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.rainy_day else R.drawable.rainy_day_2
when (Preferences.weatherIconPack) {
Constants.WeatherIconPack.COOL.value -> R.drawable.rainy_day_3
Constants.WeatherIconPack.MINIMAL.value -> R.drawable.rainy_day_2
Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.rainy_day_4
else -> R.drawable.rainy_day
}
}
"11d" -> {
return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.thunder_day else R.drawable.thunder_day_2
when (Preferences.weatherIconPack) {
Constants.WeatherIconPack.COOL.value -> R.drawable.thunder_day_3
Constants.WeatherIconPack.MINIMAL.value -> R.drawable.thunder_day_2
Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.thunder_day_4
else -> R.drawable.thunder_day
}
}
"13d" -> {
return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.snow_day else R.drawable.snow_day_2
when (Preferences.weatherIconPack) {
Constants.WeatherIconPack.COOL.value -> R.drawable.snow_day_3
Constants.WeatherIconPack.MINIMAL.value -> R.drawable.snow_day_2
Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.snow_day_4
else -> R.drawable.snow_day
}
}
"50d" -> {
return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.haze_day else R.drawable.haze_day_2
when (Preferences.weatherIconPack) {
Constants.WeatherIconPack.COOL.value -> R.drawable.haze_day_3
Constants.WeatherIconPack.MINIMAL.value -> R.drawable.haze_day_2
Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.haze_day_4
else -> R.drawable.haze_day
}
}
"80d" -> {
return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.windy_day else R.drawable.windy_day_2
when (Preferences.weatherIconPack) {
Constants.WeatherIconPack.COOL.value -> R.drawable.windy_day_3
Constants.WeatherIconPack.MINIMAL.value -> R.drawable.windy_day_2
Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.windy_day_4
else -> R.drawable.windy_day
}
}
"81d" -> {
return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.rain_snow_day else R.drawable.rain_snow_day_2
when (Preferences.weatherIconPack) {
Constants.WeatherIconPack.COOL.value -> R.drawable.rain_snow_day_3
Constants.WeatherIconPack.MINIMAL.value -> R.drawable.rain_snow_day_2
Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.rain_snow_day_4
else -> R.drawable.rain_snow_day
}
}
"82d" -> {
return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.haze_weather else R.drawable.haze_weather_2
when (Preferences.weatherIconPack) {
Constants.WeatherIconPack.COOL.value -> R.drawable.haze_weather_3
Constants.WeatherIconPack.MINIMAL.value -> R.drawable.haze_weather_2
Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.haze_weather_4
else -> R.drawable.haze_weather
}
}
"01n" -> {
return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.clear_night else R.drawable.clear_night_2
when (Preferences.weatherIconPack) {
Constants.WeatherIconPack.COOL.value -> R.drawable.clear_night_3
Constants.WeatherIconPack.MINIMAL.value -> R.drawable.clear_night_2
Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.clear_night_4
else -> R.drawable.clear_night
}
}
"02n" -> {
return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.partly_cloudy_night else R.drawable.partly_cloudy_night_2
when (Preferences.weatherIconPack) {
Constants.WeatherIconPack.COOL.value -> R.drawable.partly_cloudy_night_3
Constants.WeatherIconPack.MINIMAL.value -> R.drawable.partly_cloudy_night_2
Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.partly_cloudy_night_4
else -> R.drawable.partly_cloudy_night
}
}
"03n" -> {
return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.mostly_cloudy_night else R.drawable.mostly_cloudy_night_2
when (Preferences.weatherIconPack) {
Constants.WeatherIconPack.COOL.value -> R.drawable.mostly_cloudy_night_3
Constants.WeatherIconPack.MINIMAL.value -> R.drawable.mostly_cloudy_night_2
Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.mostly_cloudy_night_4
else -> R.drawable.mostly_cloudy_night
}
}
"04n" -> {
return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.cloudy_weather else R.drawable.cloudy_weather_2
when (Preferences.weatherIconPack) {
Constants.WeatherIconPack.COOL.value -> R.drawable.cloudy_weather_3
Constants.WeatherIconPack.MINIMAL.value -> R.drawable.cloudy_weather_2
Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.cloudy_weather_4
else -> R.drawable.cloudy_weather
}
}
"09n" -> {
return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.storm_weather_night else R.drawable.storm_weather_night_2
when (Preferences.weatherIconPack) {
Constants.WeatherIconPack.COOL.value -> R.drawable.storm_weather_night_3
Constants.WeatherIconPack.MINIMAL.value -> R.drawable.storm_weather_night_2
Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.storm_weather_night_4
else -> R.drawable.storm_weather_night
}
}
"10n" -> {
return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.rainy_night else R.drawable.rainy_night_2
when (Preferences.weatherIconPack) {
Constants.WeatherIconPack.COOL.value -> R.drawable.rainy_night_3
Constants.WeatherIconPack.MINIMAL.value -> R.drawable.rainy_night_2
Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.rainy_night_4
else -> R.drawable.rainy_night
}
}
"11n" -> {
return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.thunder_night else R.drawable.thunder_night_2
when (Preferences.weatherIconPack) {
Constants.WeatherIconPack.COOL.value -> R.drawable.thunder_night_3
Constants.WeatherIconPack.MINIMAL.value -> R.drawable.thunder_night_2
Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.thunder_night_4
else -> R.drawable.thunder_night
}
}
"13n" -> {
return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.snow_night else R.drawable.snow_night_2
when (Preferences.weatherIconPack) {
Constants.WeatherIconPack.COOL.value -> R.drawable.snow_night_3
Constants.WeatherIconPack.MINIMAL.value -> R.drawable.snow_night_2
Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.snow_night_4
else -> R.drawable.snow_night
}
}
"50n" -> {
return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.haze_night else R.drawable.haze_night_2
when (Preferences.weatherIconPack) {
Constants.WeatherIconPack.COOL.value -> R.drawable.haze_night_3
Constants.WeatherIconPack.MINIMAL.value -> R.drawable.haze_night_2
Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.haze_night_4
else -> R.drawable.haze_night
}
}
"80n" -> {
return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.windy_night else R.drawable.windy_night_2
when (Preferences.weatherIconPack) {
Constants.WeatherIconPack.COOL.value -> R.drawable.windy_night_3
Constants.WeatherIconPack.MINIMAL.value -> R.drawable.windy_night_2
Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.windy_night_4
else -> R.drawable.windy_night
}
}
"81n" -> {
return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.rain_snow_night else R.drawable.rain_snow_night_2
when (Preferences.weatherIconPack) {
Constants.WeatherIconPack.COOL.value -> R.drawable.rain_snow_night_3
Constants.WeatherIconPack.MINIMAL.value -> R.drawable.rain_snow_night_2
Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.rain_snow_night_4
else -> R.drawable.rain_snow_night
}
}
"82n" -> {
return if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) R.drawable.haze_weather else R.drawable.haze_weather_2
when (Preferences.weatherIconPack) {
Constants.WeatherIconPack.COOL.value -> R.drawable.haze_weather_3
Constants.WeatherIconPack.MINIMAL.value -> R.drawable.haze_weather_2
Constants.WeatherIconPack.GOOGLE_NEWS.value -> R.drawable.haze_weather_4
else -> R.drawable.haze_weather
}
}
else -> {
return R.drawable.unknown

View File

@ -29,12 +29,12 @@ class UpdatesReceiver : BroadcastReceiver() {
Intent.ACTION_TIME_CHANGED,
Intent.ACTION_TIMEZONE_CHANGED,
Intent.ACTION_LOCALE_CHANGED,
Intent.ACTION_DATE_CHANGED,
Actions.ACTION_CALENDAR_UPDATE -> {
CalendarHelper.updateEventList(context)
}
"com.sec.android.widgetapp.APPWIDGET_RESIZE",
Intent.ACTION_DATE_CHANGED,
AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED,
Actions.ACTION_TIME_UPDATE -> {
MainWidget.updateWidget(context)
@ -53,7 +53,7 @@ class UpdatesReceiver : BroadcastReceiver() {
if (eventId == null) {
removeUpdates(context)
eventRepository.getEvents().forEach { event ->
eventRepository.getFutureEvents().forEach { event ->
setEventUpdate(context, event)
}
} else {
@ -72,65 +72,92 @@ class UpdatesReceiver : BroadcastReceiver() {
set(Calendar.MILLISECOND, 0)
}
val diff = Period(now.timeInMillis, event.startDate)
if (event.startDate > now.timeInMillis) {
// Update the widget every hour till the event
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
val limit = when (Preferences.showUntil) {
0 -> 1000 * 60 * 60 * 3
1 -> 1000 * 60 * 60 * 6
2 -> 1000 * 60 * 60 * 12
3 -> 1000 * 60 * 60 * 24
4 -> 1000 * 60 * 60 * 24 * 3
5 -> 1000 * 60 * 60 * 24 * 7
6 -> 1000 * 60 * 30
7 -> 1000 * 60 * 60
else -> 1000 * 60 * 60 * 6
}
if (event.startDate <= limit) {
if (event.startDate > now.timeInMillis) {
// Update the widget every hour till the event
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)
}
}
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
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)
},
PendingIntent.FLAG_UPDATE_CURRENT
)
)
)
} else {
setExact(
AlarmManager.RTC,
event.startDate - diff.hours * 1000 * 60 * 60 + if (diff.minutes > 30) (-30) else (+30),
PendingIntent.getBroadcast(
context,
event.eventID.toInt(),
Intent(context, UpdatesReceiver::class.java).apply {
action = Actions.ACTION_TIME_UPDATE
putExtra(EVENT_ID, event.eventID)
},
PendingIntent.FLAG_UPDATE_CURRENT
)
)
}
} 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
setExact(
AlarmManager.RTC,
event.startDate - diff.hours * 1000 * 60 * 60 + if (diff.minutes > 30) (- 30) else (+ 30),
fireTime,
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
setExact(
AlarmManager.RTC,
fireTime,
if (event.startDate - limit > now.timeInMillis + 120 * 1000) event.startDate - limit 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
PendingIntent.FLAG_UPDATE_CURRENT
)
)
}
@ -140,7 +167,7 @@ class UpdatesReceiver : BroadcastReceiver() {
fun removeUpdates(context: Context) {
with(context.getSystemService(Context.ALARM_SERVICE) as AlarmManager) {
val eventRepository = EventRepository(context)
eventRepository.getEvents().forEach {
eventRepository.getFutureEvents().forEach {
cancel(PendingIntent.getBroadcast(context, it.eventID.toInt(), Intent(context, UpdatesReceiver::class.java), 0))
}
eventRepository.close()

View File

@ -6,6 +6,7 @@ import android.location.Address
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.isVisible
@ -47,7 +48,15 @@ class SupportDevActivity : AppCompatActivity(), PurchasesUpdatedListener {
.register<SkuDetails>(R.layout.inapp_product_layout) { item, injector ->
item.sku
injector
.text(R.id.product_title, item.sku.replace("(Another Widget)", ""))
.with<TextView>(R.id.product_title) {
it.text = when (item.sku) {
"donation_coffee" -> getString(R.string.donation_coffee)
"donation_donuts" -> getString(R.string.donation_donuts)
"donation_breakfast" -> getString(R.string.donation_breakfast)
"donation_lunch" -> getString(R.string.donation_lunch)
else -> ""
}
}
.text(R.id.product_price, item.price)
.clicked(R.id.item) {
viewModel.purchase(this, item)

View File

@ -300,7 +300,7 @@ class CalendarTabFragment : Fragment() {
action_show_until.setOnClickListener {
if (Preferences.showEvents) {
val dialog = BottomSheetMenu<Int>(requireContext(), header = getString(R.string.settings_show_until_title)).setSelectedValue(Preferences.showUntil)
intArrayOf(6,7,0,1,2,3).forEach {
intArrayOf(6,7,0,1,2,3, 4, 5).forEach {
dialog.addItem(getString(SettingsStringHelper.getShowUntilString(it)), it)
}
dialog.addOnSelectItemListener { value ->

View File

@ -251,24 +251,22 @@ class GeneralTabFragment : Fragment() {
}
action_date_format.setOnClickListener {
if (Preferences.showEvents) {
val now = Calendar.getInstance()
val dialog = BottomSheetMenu<String>(requireContext(), header = getString(R.string.settings_date_format_title)).setSelectedValue(Preferences.dateFormat)
val now = Calendar.getInstance()
val dialog = BottomSheetMenu<String>(requireContext(), header = getString(R.string.settings_date_format_title)).setSelectedValue(Preferences.dateFormat)
dialog.addItem(DateHelper.getDefaultDateText(requireContext(), now), "")
if (Preferences.dateFormat != "") {
dialog.addItem(DateHelper.getDateText(requireContext(), now), Preferences.dateFormat)
}
dialog.addItem(getString(R.string.custom_date_format), "-")
dialog.addOnSelectItemListener { value ->
if (value == "-") {
startActivity(Intent(requireContext(), CustomDateActivity::class.java))
} else {
Preferences.dateFormat = value
}
}.show()
dialog.addItem(DateHelper.getDefaultDateText(requireContext(), now), "")
if (Preferences.dateFormat != "") {
dialog.addItem(DateHelper.getDateText(requireContext(), now), Preferences.dateFormat)
}
dialog.addItem(getString(R.string.custom_date_format), "-")
dialog.addOnSelectItemListener { value ->
if (value == "-") {
startActivity(Intent(requireContext(), CustomDateActivity::class.java))
} else {
Preferences.dateFormat = value
}
}.show()
}
action_background_color.setOnClickListener {

View File

@ -44,6 +44,7 @@ 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 com.tommasoberlose.anotherwidget.utils.toast
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
@ -177,6 +178,22 @@ class GlanceTabFragment : Fragment() {
}
}
action_show_next_alarm.setOnLongClickListener {
with(requireContext().getSystemService(Context.ALARM_SERVICE) as AlarmManager) {
val alarm = nextAlarmClock
if (alarm != null && alarm.showIntent != null) {
val pm = requireContext().packageManager as PackageManager
val appNameOrPackage = try {
pm.getApplicationLabel(pm.getApplicationInfo(alarm.showIntent?.creatorPackage ?: "", 0))
} catch (e: Exception) {
alarm.showIntent?.creatorPackage ?: ""
}
activity?.toast(getString(R.string.next_alarm_warning).format(appNameOrPackage), long = true)
}
}
true
}
action_show_low_battery_level_warning.setOnClickListener {
if (Preferences.showGlance) {
BottomSheetMenu<Boolean>(
@ -232,8 +249,7 @@ class GlanceTabFragment : Fragment() {
} catch (e: Exception) {
alarm.showIntent?.creatorPackage ?: ""
}
show_next_alarm_warning.text =
getString(R.string.next_alarm_warning).format(appNameOrPackage)
show_next_alarm_warning.text = getString(R.string.next_alarm_warning).format(appNameOrPackage)
} else {
show_next_alarm_label?.text = if (Preferences.showNextAlarm) getString(R.string.settings_visible) else getString(
R.string.settings_not_visible)

View File

@ -10,6 +10,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.core.os.BuildCompat
import androidx.core.view.isVisible
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.Fragment
@ -28,7 +29,9 @@ import com.tommasoberlose.anotherwidget.databinding.FragmentWeatherSettingsBindi
import com.tommasoberlose.anotherwidget.global.Constants
import com.tommasoberlose.anotherwidget.global.Preferences
import com.tommasoberlose.anotherwidget.global.RequestCode
import com.tommasoberlose.anotherwidget.helpers.ColorHelper
import com.tommasoberlose.anotherwidget.helpers.SettingsStringHelper
import com.tommasoberlose.anotherwidget.helpers.WeatherHelper
import com.tommasoberlose.anotherwidget.receivers.WeatherReceiver
import com.tommasoberlose.anotherwidget.ui.activities.ChooseApplicationActivity
import com.tommasoberlose.anotherwidget.ui.activities.CustomLocationActivity
@ -129,9 +132,12 @@ class WeatherTabFragment : Fragment() {
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)
label_weather_icon_pack?.text = getString(R.string.settings_weather_icon_pack_default).format((it + 1))
weather_icon_pack.setImageDrawable(ContextCompat.getDrawable(requireContext(), WeatherHelper.getWeatherIconResource("01d")))
if (it == Constants.WeatherIconPack.MINIMAL.value) {
weather_icon_pack.setColorFilter(ContextCompat.getColor(requireContext(), R.color.colorPrimaryText))
} else {
weather_icon_pack.setColorFilter(ContextCompat.getColor(requireContext(), android.R.color.transparent))
}
}
checkLocationPermission()
@ -230,12 +236,13 @@ class WeatherTabFragment : Fragment() {
action_weather_icon_pack.setOnClickListener {
if (Preferences.showWeather) {
BottomSheetMenu<Int>(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()
val dialog = BottomSheetMenu<Int>(requireContext(), header = getString(R.string.settings_weather_icon_pack_title)).setSelectedValue(Preferences.weatherIconPack)
Constants.WeatherIconPack.values().forEach {
dialog.addItem(getString(R.string.settings_weather_icon_pack_default).format(it.value + 1), it.value)
}
dialog.addOnSelectItemListener { value ->
Preferences.weatherIconPack = value
}.show()
}
}

View File

@ -112,7 +112,7 @@ class MainWidget : AppWidgetProvider() {
context,
appWidgetId,
IntentHelper.getWidgetUpdateIntent(context),
0
PendingIntent.FLAG_UPDATE_CURRENT
)
views.setOnClickPendingIntent(R.id.widget_shape_background, refreshIntent)
} catch (ex: Exception) {
@ -157,7 +157,7 @@ class MainWidget : AppWidgetProvider() {
context,
widgetID,
IntentHelper.getCalendarIntent(context),
0
PendingIntent.FLAG_UPDATE_CURRENT
)
views.setOnClickPendingIntent(R.id.empty_date_rect, calPIntent)
@ -180,7 +180,7 @@ class MainWidget : AppWidgetProvider() {
context,
NewCalendarEventReceiver::class.java
).apply { action = Actions.ACTION_GO_TO_NEXT_EVENT },
0
PendingIntent.FLAG_UPDATE_CURRENT
)
)
@ -198,7 +198,7 @@ class MainWidget : AppWidgetProvider() {
context,
NewCalendarEventReceiver::class.java
).apply { action = Actions.ACTION_GO_TO_PREVIOUS_EVENT },
0
PendingIntent.FLAG_UPDATE_CURRENT
)
)
} else {
@ -210,7 +210,7 @@ class MainWidget : AppWidgetProvider() {
context,
widgetID,
IntentHelper.getEventIntent(context, nextEvent),
0
PendingIntent.FLAG_UPDATE_CURRENT
)
views.setOnClickPendingIntent(R.id.next_event_rect, pIntent)
views.setOnClickPendingIntent(R.id.next_event_difference_time_rect, pIntent)
@ -233,7 +233,7 @@ class MainWidget : AppWidgetProvider() {
context,
widgetID,
IntentHelper.getGoogleMapsIntentFromAddress(context, nextEvent.address),
0
PendingIntent.FLAG_UPDATE_CURRENT
)
views.setOnClickPendingIntent(R.id.second_row_rect, mapIntent)
} else {
@ -245,7 +245,7 @@ class MainWidget : AppWidgetProvider() {
nextEvent,
forceEventDetails = true
),
0
PendingIntent.FLAG_UPDATE_CURRENT
)
views.setOnClickPendingIntent(R.id.second_row_rect, pIntentDetail)
}
@ -263,7 +263,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)) {
} else if (GlanceProviderHelper.showGlanceProviders(context) && v.calendar_layout.isVisible) {
loop@ for (provider:Constants.GlanceProviderId in GlanceProviderHelper.getGlanceProviders(context)) {
when (provider) {
Constants.GlanceProviderId.PLAYING_SONG -> {
@ -272,7 +272,7 @@ class MainWidget : AppWidgetProvider() {
context,
widgetID,
IntentHelper.getMusicIntent(context),
0
PendingIntent.FLAG_UPDATE_CURRENT
)
views.setOnClickPendingIntent(R.id.second_row_rect, musicIntent)
break@loop
@ -284,7 +284,7 @@ class MainWidget : AppWidgetProvider() {
context,
widgetID,
IntentHelper.getClockIntent(context),
0
PendingIntent.FLAG_UPDATE_CURRENT
)
views.setOnClickPendingIntent(R.id.second_row_rect, alarmIntent)
break@loop
@ -297,8 +297,8 @@ class MainWidget : AppWidgetProvider() {
val batteryIntent = PendingIntent.getActivity(
context,
widgetID,
IntentHelper.getBatteryIntent(context),
0
IntentHelper.getBatteryIntent(),
PendingIntent.FLAG_UPDATE_CURRENT
)
views.setOnClickPendingIntent(R.id.second_row_rect, batteryIntent)
break@loop
@ -316,7 +316,7 @@ class MainWidget : AppWidgetProvider() {
context,
widgetID,
IntentHelper.getFitIntent(context),
0
PendingIntent.FLAG_UPDATE_CURRENT
)
views.setOnClickPendingIntent(R.id.second_row_rect, fitIntent)
break@loop
@ -530,7 +530,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)
v.next_event_date.text = DateUtils.formatDateTime(context, nextEvent.startDate, flags)
}
}
@ -538,6 +538,7 @@ class MainWidget : AppWidgetProvider() {
v.calendar_layout.visibility = View.VISIBLE
} else if (GlanceProviderHelper.showGlanceProviders(context)) {
v.second_row_icon.isVisible = true
var showSomething = false
loop@ for (provider:Constants.GlanceProviderId in GlanceProviderHelper.getGlanceProviders(context)) {
when (provider) {
Constants.GlanceProviderId.PLAYING_SONG -> {
@ -549,6 +550,7 @@ class MainWidget : AppWidgetProvider() {
)
)
v.next_event_date.text = MediaPlayerHelper.getMediaInfo()
showSomething = true
break@loop
}
}
@ -561,6 +563,7 @@ class MainWidget : AppWidgetProvider() {
)
)
v.next_event_date.text = AlarmHelper.getNextAlarm(context)
showSomething = true
break@loop
}
}
@ -575,11 +578,13 @@ class MainWidget : AppWidgetProvider() {
} else {
v.next_event_date.text = context.getString(R.string.charging)
}
showSomething = true
break@loop
} else if (Preferences.isBatteryLevelLow) {
v.second_row_icon.isVisible = false
v.next_event_date.text =
context.getString(R.string.battery_low_warning)
showSomething = true
break@loop
}
}
@ -590,6 +595,7 @@ class MainWidget : AppWidgetProvider() {
v.next_event_date.text = Preferences.customNotes
v.next_event_date.gravity
v.next_event_date.maxLines = 2
showSomething = true
break@loop
}
}
@ -597,15 +603,20 @@ class MainWidget : AppWidgetProvider() {
if (Preferences.showDailySteps && Preferences.googleFitSteps > 0) {
v.second_row_icon.isVisible = false
v.next_event_date.text = context.getString(R.string.daily_steps_counter).format(Preferences.googleFitSteps)
showSomething = true
break@loop
}
}
}
}
v.next_event.text = DateHelper.getDateText(context, now)
v.empty_layout.visibility = View.GONE
v.calendar_layout.visibility = View.VISIBLE
if (showSomething) {
v.next_event.text = DateHelper.getDateText(context, now)
v.empty_layout.visibility = View.GONE
v.calendar_layout.visibility = View.VISIBLE
} else {
v.second_row_icon.isVisible = false
}
}
@ -614,7 +625,7 @@ class MainWidget : AppWidgetProvider() {
it.setTextColor(ColorHelper.getFontColor())
}
if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) {
if (Preferences.weatherIconPack != Constants.WeatherIconPack.MINIMAL.value) {
listOf<ImageView>(v.action_next, v.action_previous)
} else {
listOf<ImageView>(v.action_next, v.action_previous, v.empty_weather_icon, v.special_weather_icon)
@ -626,7 +637,7 @@ class MainWidget : AppWidgetProvider() {
it.setTextColor(ColorHelper.getSecondaryFontColor())
}
if (Preferences.weatherIconPack == Constants.WeatherIconPack.DEFAULT.value) {
if (Preferences.weatherIconPack != Constants.WeatherIconPack.MINIMAL.value) {
listOf<ImageView>(v.second_row_icon)
} else {
listOf<ImageView>(v.second_row_icon, v.weather_icon)

Binary file not shown.

After

Width:  |  Height:  |  Size: 685 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -310,54 +310,75 @@
style="@style/AnotherWidget.Settings.Subtitle"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:text="@string/preferences_header"
android:textAlignment="viewStart"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:textSize="16sp"
android:textColor="@color/colorAccent"
android:textAppearance="@style/AnotherWidget.Settings.Header"
app:textAllCaps="false" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:clickable="true"
android:focusable="true"
android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical"
android:id="@+id/action_sort_glance_providers"
android:orientation="horizontal">
<ImageView
android:layout_width="48dp"
android:layout_height="48dp"
android:padding="12dp"
android:src="@drawable/round_flip_to_front"
android:tint="@color/colorPrimaryText"/>
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:text="@string/preferences_header"
android:textAlignment="viewStart"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:textSize="16sp"
android:textColor="@color/colorAccent"
android:textAppearance="@style/AnotherWidget.Settings.Header"
app:textAllCaps="false" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:clickable="true"
android:focusable="true"
android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical"
android:id="@+id/action_sort_glance_providers"
android:orientation="horizontal">
<ImageView
android:layout_width="48dp"
android:layout_height="48dp"
android:padding="12dp"
android:src="@drawable/round_flip_to_front"
android:tint="@color/colorPrimaryText"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/AnotherWidget.Settings.Title"
android:text="@string/settings_sort_glance_providers_title"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/settings_sort_glance_providers_subtitle"
style="@style/AnotherWidget.Settings.Subtitle"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/small_clock_warning"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/AnotherWidget.Settings.Title"
android:text="@string/settings_sort_glance_providers_title"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/settings_sort_glance_providers_subtitle"
style="@style/AnotherWidget.Settings.Subtitle"/>
android:paddingTop="16dp"
android:paddingLeft="24dp"
android:paddingRight="24dp"
android:paddingBottom="32dp"
android:duplicateParentState="true"
android:textSize="14sp"
android:text="@string/glance_info"
android:textColor="@color/colorPrimaryText"
android:letterSpacing="0"
android:fontFamily="@font/product_sans"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
app:textAllCaps="false" />
</LinearLayout>
</LinearLayout>
</LinearLayout>

View File

@ -327,6 +327,7 @@
android:layout_width="48dp"
android:layout_height="48dp"
android:padding="12dp"
android:id="@+id/weather_icon_pack"
android:src="@drawable/round_cloud_queue"
android:tint="@color/colorPrimaryText"/>
<LinearLayout

View File

@ -123,7 +123,7 @@
android:layout_height="20dp"
android:id="@+id/special_weather_icon"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"/>
android:layout_marginEnd="8dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -183,6 +183,8 @@
android:layout_width="18dp"
android:layout_height="18dp"
android:id="@+id/weather_icon"
android:layout_marginEnd="4dp"
android:layout_marginStart="4dp"
android:src="@drawable/clear_night"/>
<TextView
android:layout_width="wrap_content"

View File

@ -0,0 +1,209 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" translatable="false">Another Widget</string>
<string name="add_widget">Add</string>
<!-- Display -->
<string name="settings_general_title">Visning</string>
<string name="divider" translatable="false">|</string>
<string name="settings_font_color_title">Tekstfarve</string>
<string name="settings_secondary_font_color_title">Tekstfarve</string>
<string name="settings_background_color_title">Baggrundsfarve</string>
<string name="title_main_text_size">Tekststørrelse</string>
<string name="title_second_text_size">Tekststørrelse</string>
<string name="title_text_shadow">Tekstskygge</string>
<string name="settings_text_shadow_subtitle_none">Ingen</string>
<string name="settings_text_shadow_subtitle_low">Lav</string>
<string name="settings_text_shadow_subtitle_high">Høj</string>
<string name="settings_custom_font_title">Widget skrifttype</string>
<string name="custom_font_subtitle_0">Enhedsskrifttype</string>
<string name="custom_font_subtitle_1">Product Sans</string>
<string name="custom_date_format">Tilpasset datoformat</string>
<string name="alpha">Alpha</string>
<string name="transparent">Gennemsigtig</string>
<string name="settings_show_dividers_title">Vis tekstdelere</string>
<string name="first_row_header">Første række</string>
<string name="second_row_header">Anden række</string>
<string name="global_style_header">Widget</string>
<string name="action_capitalize_the_date">Skift mellem stort og småt begyndelsesbogstav</string>
<string name="settings_date_format_title">Datoformat</string>
<!-- Calendar -->
<string name="settings_calendar_title">Kalender</string>
<string name="title_permission_calendar">Vis dine begivenheder</string>
<string name="description_permission_calendar">Giv tilladelse til at din kalender\n kan vise begivenheder i din widget.</string>
<string name="settings_filter_calendar_title">Filtrer begivenheder</string>
<string name="settings_filter_calendar_subtitle">Ændr kalenderens synlighed</string>
<string name="settings_all_day_title">Heldagsbegivenheder</string>
<string name="main_calendar">Kontokalender</string>
<string name="calendar_settings_list_error">Fejl ved indlæsning af kalenderlisten</string>
<string name="all_day">Heldagsbegivenhed</string>
<string name="show_events_visible">Begivenheder er synlige</string>
<string name="show_events_not_visible">Begivenheder er skjulte</string>
<string name="settings_show_until_subtitle_6">30 minutter senere</string>
<string name="settings_show_until_subtitle_7">1 time senere</string>
<string name="settings_show_until_subtitle_0">3 timer senere</string>
<string name="settings_show_until_subtitle_1">6 timer senere</string>
<string name="settings_show_until_subtitle_2">12 timer senere</string>
<string name="settings_show_until_subtitle_3">24 timer senere</string>
<string name="settings_show_until_subtitle_4">3 dage senere</string>
<string name="settings_show_until_subtitle_5">7 dage senere</string>
<string name="settings_show_until_title">Vis begivenheder mindst</string>
<string name="day_char">d</string>
<string name="settings_calendar_app_title">Standard app til kalender</string>
<string name="error_no_calendar">Ingen kalendere fundet.</string>
<string name="tomorrow">i morgen</string>
<string name="today">i dag</string>
<string name="settings_event_app_title">Tryk på begivenhed åbner</string>
<string name="settings_second_row_info_title">Begivenhedsinformationer</string>
<string name="settings_second_row_info_subtitle_1">Adresse på begivenhed</string>
<string name="settings_second_row_info_subtitle_0">Begivenhedstid</string>
<string name="settings_show_diff_time_title">Tid tilbage til begivenheds start</string>
<string name="settings_show_declined_events_title">Afviste begivenheder</string>
<string name="default_event_app">Begivenhedsdetaljer</string>
<string name="default_calendar_app">Standard kalender app</string>
<string name="settings_show_multiple_events_title">Skift mellem flere begivenheder</string>
<string name="soon">snart</string>
<string name="now">nu</string>
<string name="settings_widget_update_frequency_title">Opdateringsfrekvens på resterende tid</string>
<string name="settings_widget_update_frequency_subtitle">Høj frekvens forårsager højere batteriforbrug</string>
<string name="settings_widget_update_frequency_low">Lav</string>
<string name="settings_widget_update_frequency_default">Standard</string>
<string name="settings_widget_update_frequency_high">Høj</string>
<string name="filters_header">Filtre</string>
<string name="event_detail_header">Begivenhedsdetaljer</string>
<!-- Weather -->
<string name="settings_weather_title">Vejr</string>
<string name="title_permission_location">Vis vejret</string>
<string name="description_permission_location">Giv tilladelse til din lokation\nfor at se vejret i din widget.</string>
<string name="settings_unit_title">Måleenhed</string>
<string name="fahrenheit" translatable="false">°F - Fahrenheit</string>
<string name="celsius" translatable="false">°C - Celsius</string>
<string name="settings_weather_refresh_period_title">Opdateringsfrekvens</string>
<string name="settings_weather_refresh_period_subtitle_0">30 minutter</string>
<string name="settings_weather_refresh_period_subtitle_1">1 time</string>
<string name="settings_weather_refresh_period_subtitle_2">3 timer</string>
<string name="settings_weather_refresh_period_subtitle_3">6 timer</string>
<string name="settings_weather_refresh_period_subtitle_4">12 timer</string>
<string name="settings_weather_refresh_period_subtitle_5">24 timer</string>
<string name="settings_custom_location_title">Lokation</string>
<string name="custom_location_gps">Brug geolocation</string>
<string name="show_weather_visible">Vejrinfo er synlig</string>
<string name="show_weather_not_visible">Vejrinfo er skjult</string>
<string name="settings_weather_app_title">Tryk på vejret åbner</string>
<string name="settings_weather_provider_api_key_title">Vejr API nøgle</string>
<string name="settings_weather_provider_api_key_subtitle_all_set">Vejrudbyderen er konfigureret korrekt</string>
<string name="settings_weather_provider_api_key_subtitle_not_set">Vejrudbyderen skal konfigureres</string>
<string name="api_key_hint">OpenWeather API nøgle</string>
<string name="default_weather_app">Google Weather</string>
<string name="weather_warning">Vejr fra Google Awareness er forældet. Der kræves nu en OpenWeather API nøgle for at vise vejret i widget\'en.</string>
<string name="api_key_title_1">Opret en OpenWeather konto</string>
<string name="api_key_subtitle_1">Opret en gratis konto hos OpenWeather. Det vil kun tage få minutter.</string>
<string name="api_key_title_2">Kopier din API nøgle</string>
<string name="api_key_subtitle_2">Find menuen API keys i dine kontoindstillinger, og kopier standardnøglen.</string>
<string name="api_key_title_3">Indtast nøglen i app\'en</string>
<string name="api_key_subtitle_3">Indsæt nøglen i feltet ovenfor og gem ændringen. Så snart nøglen er aktiveret, vil vejret blive synligt.</string>
<string name="action_open_provider">Gå til OpenWeatherMap.com</string>
<string name="api_key_info_all_set">Der kan gå op til 10 minutter inden din API nøgle er aktiveret. Vejret vil blive opdateret så snart det er tilgængeligt.</string>
<string name="settings_weather_icon_pack_title">Ikonpakke</string>
<string name="settings_weather_icon_pack_default">Ikonpakke %d</string>
<!-- Clock -->
<string name="settings_clock_title">Ur</string>
<string name="settings_clock_app_title">Tryk på ur åbner</string>
<string name="title_show_clock">Vis uret</string>
<string name="show_clock_visible">Uret vises</string>
<string name="show_clock_not_visible">Uret er skjult</string>
<string name="settings_clock_text_size_title">Tekststørrelse</string>
<string name="default_clock_app">Standard ur app</string>
<string name="settings_clock_bottom_margin_title">Nedre margen på ur</string>
<string name="settings_clock_bottom_margin_subtitle_none">Ingen</string>
<string name="settings_clock_bottom_margin_subtitle_small">Lille</string>
<string name="settings_clock_bottom_margin_subtitle_medium">Medium</string>
<string name="settings_clock_bottom_margin_subtitle_large">Stor</string>
<string name="clock_warning">Grundet teknologiske begrænsninger har uret ikke den tilpassede skrifttype og tekstskyggerne, som valgt under Typografi sektionen.</string>
<string name="settings_clock_text_color_title">Tekstfarve</string>
<string name="settings_ampm_indicator_title">Vis AM/PM indikator</string>
<string name="clock_text_header">Tekststil på ur</string>
<!-- Glance -->
<string name="settings_show_next_alarm_title">Vis næste alarm</string>
<string name="next_alarm_warning">Den næste alarm lader til at være forkert.\nDen er indstillet af %s.</string>
<string name="settings_at_a_glance_title">Overblik</string>
<string name="settings_show_music_title">Aktuel sang</string>
<string name="settings_request_notification_access">Vi har brug for tilladelse til aflæsning af notifikationer, for at vise den aktuelle sang.</string>
<string name="settings_request_fitness_access">Vi har brug for et par få tilladelser, til at vise dine daglige skridt fra Google Fit.</string>
<string name="title_show_glance">Vis overbliks-informationer</string>
<string name="description_show_glance_visible">Service aktiveret</string>
<string name="description_show_glance_not_visible">Service deaktiveret</string>
<string name="settings_sort_glance_providers_title">Datakildeprioritet</string>
<string name="settings_sort_glance_providers_subtitle">Skift datakilders prioritet</string>
<string name="settings_custom_notes_title">Brugerdefinerede noter</string>
<string name="settings_low_battery_level_title">Batteri</string>
<string name="settings_daily_steps_title">Daglige skridt</string>
<string name="battery_low_warning">Lavt batteriniveau</string>
<string name="daily_steps_counter">%d skridt indtil videre</string>
<string name="charging">Oplader</string>
<string name="providers">Kilder</string>
<string name="glance_info">Glance info will show up only when there are no events displayed and only when a few conditions are verified.</string>
<!-- Settings -->
<string name="action_share">Del</string>
<string name="action_rate">Bedøm app</string>
<string name="action_support">Støt mig</string>
<string name="action_feedback">Feedback</string>
<string name="action_about">Om</string>
<string name="action_refresh_widget">Genindlæs widget</string>
<string name="toolbar_transition_name" translatable="false">toolbar</string>
<string name="error_opening_uri">Fejl ved åbning af URL: Link kopieret til udklipsholder.</string>
<string name="loading_text">Indlæser data…</string>
<string name="error_opening_app">Fejl ved åbning af app.</string>
<string name="default_name">Standard app</string>
<string name="action_save">Gem</string>
<string name="settings_visible">Synlig</string>
<string name="settings_not_visible">Skjult</string>
<string name="support_translations_title">Hjælp med oversættelser</string>
<string name="support_translations_subtitle">Åbn en pull-anmodning på GitHub</string>
<string name="support_website_title">Se mine andre projekter</string>
<string name="support_website_subtitle">Samme udvikler, mange muligheder</string>
<string name="error">Ups, noget gik galt!</string>
<string name="settings_theme_title">Tema</string>
<string name="support_main_subtitle">Udviklere har altid brug for meget kaffe</string>
<string name="settings_subtitle_dark_theme_light">Lys</string>
<string name="settings_subtitle_dark_theme_dark">Mørk</string>
<string name="settings_subtitle_dark_theme_by_battery_saver">Angivet af batterisparefunktionen</string>
<string name="settings_subtitle_dark_theme_follow_system">Følg systemtemaet</string>
<string name="settings_subtitle_dark_theme_default">Standard</string>
<string name="search">Søg</string>
<string name="settings_app_version_title">App version</string>
<string name="settings_title_show_wallpaper">Vis baggrundsbillede</string>
<string name="support_refresh_widget_subtitle">Tving en genstart af widget-tjenesten</string>
<string name="settings_feedback_subtitle">Dette er et open-source projekt, du er velkommen til at hjælpe.</string>
<string name="settings_feedback_title">Feedback og feature requests</string>
<string name="xiaomi_manufacturer" translatable="false">xiaomi</string>
<string name="xiaomi_warning_title">Xiaomi Enheder</string>
<string name="xiaomi_warning_message">Aktiver tilladelsen til visning af popup-vinduer, når app\'en kører i baggrunden, som findes under "Andre tilladelser" i appindstillingerne. Ellers vil du ikke kunne åbne nogle applikationer ved tryk på widget\'en.</string>
<string name="action_ignore">Ignorér</string>
<string name="action_grant_permission">Giv tilladelse</string>
<string name="settings_title">Indstillinger</string>
<string name="style_header">Stil</string>
<string name="actions_header">Handlinger</string>
<string name="provider_header">Opsætning</string>
<string name="appearance_header">Udseende</string>
<string name="preferences_header">Præferencer</string>
<!-- Activities -->
<string name="action_choose_application">Vælg applikation</string>
<string name="support_main_title">Støt udvikleren</string>
<string name="thanks">Tak for støtten!</string>
<string name="donation_coffee">En italiensk kaffe</string>
<string name="donation_donuts">Nogle glaserede donuts</string>
<string name="donation_dinner">En dyr middag</string>
<string name="donation_breakfast">En english breakfast</string>
<string name="donation_lunch">En hurtig frokost</string>
<string name="action_show_widget_preview">Vis widget forhåndsvisning</string>
<string name="support_dev_subtitle">Dette er et projekt fra en enkelt udvikler,\nså tak for støtten!</string>
<string name="settings_title_integrations">Integrationer</string>
<string name="label_count_installed_integrations">%d installerede integrationer</string>
</resources>

View File

@ -0,0 +1,203 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="add_widget">Ajouter</string>
<!-- Display -->
<string name="settings_general_title">Affichage</string>
<string name="settings_font_color_title">Couleur du texte</string>
<string name="settings_secondary_font_color_title">Couleur du texte</string>
<string name="settings_background_color_title">Couleur de l\'arrière-plan</string>
<string name="title_main_text_size">Taille du texte</string>
<string name="title_second_text_size">Taille du texte</string>
<string name="title_text_shadow">Ombre du texte</string>
<string name="settings_text_shadow_subtitle_none">Aucune</string>
<string name="settings_text_shadow_subtitle_low">Faible</string>
<string name="settings_text_shadow_subtitle_high">Élevée</string>
<string name="settings_custom_font_title">Police du widget</string>
<string name="custom_font_subtitle_0">Police de l\'appareil</string>
<string name="custom_font_subtitle_1">Product Sans</string>
<string name="custom_date_format">Format personnalisé</string>
<string name="alpha">Opacité </string>
<string name="transparent">Transparent</string>
<string name="settings_show_dividers_title">Séparateur de texte</string>
<string name="first_row_header">Première ligne</string>
<string name="second_row_header">Seconde ligne</string>
<string name="global_style_header">Widget</string>
<string name="action_capitalize_the_date">Date en majuscules</string>
<string name="settings_date_format_title">Format de date</string>
<!-- Calendar -->
<string name="settings_calendar_title">Calendrier</string>
<string name="title_permission_calendar">Afficher vos événements</string>
<string name="description_permission_calendar">Accordez l\'accès à votre calendrier\npour afficher les événements dans votre widget</string>
<string name="settings_filter_calendar_title">Filtrer les événements</string>
<string name="settings_filter_calendar_subtitle">Modifier la visibilité du calendrier</string>
<string name="settings_all_day_title">Événements toute la journée</string>
<string name="main_calendar">Calendrier du compte</string>
<string name="calendar_settings_list_error">Erreur de chargement de la liste des calendriers</string>
<string name="all_day">Événement toute la journée</string>
<string name="show_events_visible">Événements visibles</string>
<string name="show_events_not_visible">Événements non visibles</string>
<string name="settings_show_until_subtitle_6">30 minutes avant</string>
<string name="settings_show_until_subtitle_7">1 heure avant</string>
<string name="settings_show_until_subtitle_0">3 heures avant</string>
<string name="settings_show_until_subtitle_1">6 heures avant</string>
<string name="settings_show_until_subtitle_2">12 heures avant</string>
<string name="settings_show_until_subtitle_3">24 heures avant</string>
<string name="settings_show_until_subtitle_4">3 jours avant</string>
<string name="settings_show_until_subtitle_5">7 jours avant</string>
<string name="settings_show_until_title">Afficher les événements au moins</string>
<string name="day_char">j</string>
<string name="settings_calendar_app_title">App calendrier par défaut</string>
<string name="error_no_calendar">Aucun calendrier trouvé</string>
<string name="tomorrow">demain</string>
<string name="today">aujourd\'hui</string>
<string name="settings_event_app_title">Taper sur l\'événement ouvre</string>
<string name="settings_second_row_info_title">Infos de l\'événement</string>
<string name="settings_second_row_info_subtitle_1">Adresse de l\'événement</string>
<string name="settings_second_row_info_subtitle_0">Heure de l\'événement</string>
<string name="settings_show_diff_time_title">Temps restant jusqu\'à l\'événement</string>
<string name="settings_show_declined_events_title">Événements refusés</string>
<string name="default_event_app">Détails de l\'événement</string>
<string name="default_calendar_app">App calendrier par défaut</string>
<string name="settings_show_multiple_events_title">Sélecteur d\'événements multiples</string>
<string name="soon">bientôt</string>
<string name="now">maintenant</string>
<string name="settings_widget_update_frequency_title">Fréquence de màj du temps restant</string>
<string name="settings_widget_update_frequency_subtitle">Une fréquence élevée consomme plus de batterie</string>
<string name="settings_widget_update_frequency_low">Faible</string>
<string name="settings_widget_update_frequency_default">Par défaut</string>
<string name="settings_widget_update_frequency_high">Élevée</string>
<string name="filters_header">Filtres</string>
<string name="event_detail_header">Détails</string>
<!-- Weather -->
<string name="settings_weather_title">Météo</string>
<string name="title_permission_location">Afficher la météo</string>
<string name="description_permission_location">Accordez l\'accès à votre localisation\npour voir la météo dans votre widget</string>
<string name="settings_unit_title">Unité de mesure</string>
<string name="settings_weather_refresh_period_title">Fréquence d\'actualisation</string>
<string name="settings_weather_refresh_period_subtitle_0">30 minutes</string>
<string name="settings_weather_refresh_period_subtitle_1">1 heure</string>
<string name="settings_weather_refresh_period_subtitle_2">3 heures</string>
<string name="settings_weather_refresh_period_subtitle_3">6 heures</string>
<string name="settings_weather_refresh_period_subtitle_4">12 heures</string>
<string name="settings_weather_refresh_period_subtitle_5">24 heures</string>
<string name="settings_custom_location_title">Localisation</string>
<string name="custom_location_gps">Utiliser le GPS</string>
<string name="show_weather_visible">Infos météo visibles</string>
<string name="show_weather_not_visible">Infos météo non visibles</string>
<string name="settings_weather_app_title">Taper sur la météo ouvre</string>
<string name="settings_weather_provider_api_key_title">Clé API pour la météo</string>
<string name="settings_weather_provider_api_key_subtitle_all_set">Fournisseur météo correctement configuré</string>
<string name="settings_weather_provider_api_key_subtitle_not_set">Le fournisseur météo doit être configuré</string>
<string name="api_key_hint">Clé API OpenWeather</string>
<string name="default_weather_app">Google Weather</string>
<string name="weather_warning">La météo de Google Awareness est obsolète. Il faut désormais une clé API OpenWeather pour afficher la météo dans le widget.</string>
<string name="api_key_title_1">Inscrivez-vous sur OpenWeather</string>
<string name="api_key_subtitle_1">Créez un compte gratuit sur OpenWeather. \nCela ne prendra que quelques minutes.</string>
<string name="api_key_title_2">Copiez votre clé API</string>
<string name="api_key_subtitle_2">Recherchez la clé API dans vos paramètres du compte et copiez la clé par défaut.</string>
<string name="api_key_title_3">Saisissez la clé API dans l\'app</string>
<string name="api_key_subtitle_3">Collez la clé dans le champ ci-dessus et enregistrez-la. Une fois la clé activée, la météo deviendra visible.</string>
<string name="action_open_provider">Aller sur OpenWeatherMap.com</string>
<string name="api_key_info_all_set">Cela peut prendre jusqu\'à 10 minutes avant que votre clé API soit activée. La météo sera mise à jour dès qu\'elle sera disponible !</string>
<string name="settings_weather_icon_pack_title">Pack d\'icônes</string>
<string name="settings_weather_icon_pack_default">Pack d\'icônes %d</string>
<!-- Clock -->
<string name="settings_clock_title">Horloge</string>
<string name="settings_clock_app_title">Taper sur l\'horloge ouvre</string>
<string name="title_show_clock">Afficher l\'horloge</string>
<string name="show_clock_visible">Horloge visible</string>
<string name="show_clock_not_visible">Horloge non visible</string>
<string name="settings_clock_text_size_title">Taille du texte</string>
<string name="default_clock_app">App horloge par défaut</string>
<string name="settings_clock_bottom_margin_title">Marge inférieure de l\'horloge</string>
<string name="settings_clock_bottom_margin_subtitle_none">Aucune</string>
<string name="settings_clock_bottom_margin_subtitle_small">Petite</string>
<string name="settings_clock_bottom_margin_subtitle_medium">Moyenne</string>
<string name="settings_clock_bottom_margin_subtitle_large">Grande</string>
<string name="clock_warning">En raison de limitations technologiques, l\'horloge n\'aura pas la police personnalisée et les ombres de texte sélectionnées dans la section Affichage.</string>
<string name="settings_clock_text_color_title">Couleur du texte</string>
<string name="settings_ampm_indicator_title">Afficher l\'indicateur AM/PM</string>
<string name="clock_text_header">Style du texte</string>
<!-- Glance -->
<string name="settings_show_next_alarm_title">Prochaine alarme</string>
<string name="next_alarm_warning">La prochaine alarme semble erronée.\nElle a été définie par %s.</string>
<string name="settings_at_a_glance_title">Coup d\'œil</string>
<string name="settings_show_music_title">Musique en cours de lecture</string>
<string name="settings_request_notification_access">Nous avons besoin d\'accéder aux notifications pour vérifier la musique en cours de lecture</string>
<string name="settings_request_fitness_access">Nous avons besoin de quelques autorisations pour obtenir vos nombres de pas quotidiens depuis Google Fit</string>
<string name="title_show_glance">Afficher les infos en un coup d\'œil</string>
<string name="description_show_glance_visible">Services activés</string>
<string name="description_show_glance_not_visible">Services désactivés</string>
<string name="settings_sort_glance_providers_title">Priorité des sources de données</string>
<string name="settings_sort_glance_providers_subtitle">Modifier l\'importance des fournisseurs</string>
<string name="settings_custom_notes_title">Notes personnalisées</string>
<string name="settings_low_battery_level_title">Batterie (en charge/faible)</string>
<string name="settings_daily_steps_title">Nombre de pas quotidiens</string>
<string name="battery_low_warning">Batterie faible</string>
<string name="daily_steps_counter">%d pas jusqu\à présent</string>
<string name="charging">En charge</string>
<string name="providers">Fournisseurs</string>
<string name="glance_info">Glance info will show up only when there are no events displayed and only when a few conditions are verified.</string>
<!-- Settings -->
<string name="action_share">Partager</string>
<string name="action_rate">Noter l\'app</string>
<string name="action_support">Soutenez-moi</string>
<string name="action_feedback">Commentaires</string>
<string name="action_about">À propos</string>
<string name="action_refresh_widget">Actualiser le widget</string>
<string name="error_opening_uri">Erreur d\'ouverture de l\'URL : lien copié dans le presse-papiers</string>
<string name="loading_text">Chargement des données…</string>
<string name="error_opening_app">Erreur d\'ouverture de l\'app</string>
<string name="default_name">App par défaut</string>
<string name="action_save">OK</string>
<string name="settings_visible">Visible</string>
<string name="settings_not_visible">Non visible</string>
<string name="support_translations_title">Aider à traduire</string>
<string name="support_translations_subtitle">Ouvrir une pull-request sur GitHub</string>
<string name="support_website_title">Consulter mes autres projets</string>
<string name="support_website_subtitle">Un seul développeur, plusieurs possibilités</string>
<string name="error">Oups, quelque chose s\'est mal passé !</string>
<string name="settings_theme_title">Thème</string>
<string name="support_main_subtitle">On a toujours besoin de beaucoup de café</string>
<string name="settings_subtitle_dark_theme_light">Clair</string>
<string name="settings_subtitle_dark_theme_dark">Sombre</string>
<string name="settings_subtitle_dark_theme_by_battery_saver">Défini par l\'économiseur de batterie</string>
<string name="settings_subtitle_dark_theme_follow_system">Selon le thème du système</string>
<string name="settings_subtitle_dark_theme_default">Par défaut</string>
<string name="search">Recherche</string>
<string name="settings_app_version_title">Version de l\'app</string>
<string name="settings_title_show_wallpaper">Afficher le fond d\'écran</string>
<string name="support_refresh_widget_subtitle">Forcer le redémarrage des services du widget</string>
<string name="settings_feedback_subtitle">Ce projet est open-source, n\'hésitez pas à aider</string>
<string name="settings_feedback_title">Commentaires et suggestions</string>
<string name="xiaomi_warning_title">Appareils Xiaomi</string>
<string name="xiaomi_warning_message">Veuillez activer l\'option "Afficher des fenêtres pop-up pendant que vous parcourez en arrière-plan" dans la section "Autres autorisations" des paramètres de l\'application. Sinon, vous ne pourrez ouvrir aucune application en tapant sur le widget.</string>
<string name="action_ignore">Ignorer</string>
<string name="action_grant_permission">Aller dans Paramètres</string>
<string name="settings_title">Paramètres</string>
<string name="style_header">Style</string>
<string name="actions_header">Actions</string>
<string name="provider_header">Configuration</string>
<string name="appearance_header">Apparence</string>
<string name="preferences_header">Préférences</string>
<!-- Activities -->
<string name="action_choose_application">Choisir l\'app</string>
<string name="support_main_title">Soutenir le développeur</string>
<string name="thanks">Merci de m\'avoir soutenu !</string>
<string name="donation_coffee">Un café italien</string>
<string name="donation_donuts">Quelques donuts glacés</string>
<string name="donation_dinner">Un dîner chic</string>
<string name="donation_breakfast">Un petit-déjeuner anglais</string>
<string name="donation_lunch">Un déjeuner rapide</string>
<string name="action_show_widget_preview">Afficher l\'aperçu du widget</string>
<string name="support_dev_subtitle">Ceci est le projet d\'un unique développeur,\ndonc merci pour le soutien !</string>
<string name="settings_title_integrations">Intégrations</string>
<string name="label_count_installed_integrations">%d intégrations installées</string>
</resources>

View File

@ -0,0 +1,205 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" translatable="false">Another Widget</string>
<string name="add_widget">Tambahkan</string>
<!-- Display -->
<string name="settings_general_title">Tampilan</string>
<string name="divider" translatable="false">|</string>
<string name="settings_font_color_title">Warna teks</string>
<string name="settings_secondary_font_color_title">Warna teks</string>
<string name="settings_background_color_title">Warna latar belakang</string>
<string name="title_main_text_size">Ukuran teks</string>
<string name="title_second_text_size">Ukuran teks</string>
<string name="title_text_shadow">Bayangan teks</string>
<string name="settings_text_shadow_subtitle_none">Tidak ada</string>
<string name="settings_text_shadow_subtitle_low">Rendah</string>
<string name="settings_text_shadow_subtitle_high">Tinggi</string>
<string name="settings_custom_font_title">Fon widget</string>
<string name="custom_font_subtitle_0">Fon Perangkat</string>
<string name="custom_font_subtitle_1">Product Sans</string>
<string name="custom_date_format">Format tanggal khusus</string>
<string name="alpha">Alpha</string>
<string name="transparent">Transparan</string>
<string name="settings_show_dividers_title">Tampilkan pemisah teks</string>
<string name="first_row_header">Baris pertama</string>
<string name="second_row_header">Baris kedua</string>
<string name="global_style_header">Widget</string>
<string name="action_capitalize_the_date">Tanggal huruf besar</string>
<string name="settings_date_format_title">Format tanggal</string>
<!-- Calendar -->
<string name="settings_calendar_title">Kalender</string>
<string name="title_permission_calendar">Tampilkan acara anda</string>
<string name="description_permission_calendar">Berikan izin untuk mengakses kalender anda\nuntuk menampilkan acara di widget.</string>
<string name="settings_filter_calendar_title">Saring acara</string>
<string name="settings_filter_calendar_subtitle">Ubah visibilitas kalender</string>
<string name="settings_all_day_title">Acara seharian</string>
<string name="main_calendar">Kalender akun</string>
<string name="calendar_settings_list_error">Terjadi kesalahan saat memuat daftar kalender</string>
<string name="all_day">Acara seharian</string>
<string name="show_events_visible">Acara ditampilkan</string>
<string name="show_events_not_visible">Acara disembunyikan</string>
<string name="settings_show_until_subtitle_6">30 menit kemudian</string>
<string name="settings_show_until_subtitle_7">1 jam kemudian</string>
<string name="settings_show_until_subtitle_0">3 jam kemudian</string>
<string name="settings_show_until_subtitle_1">6 jam kemudian</string>
<string name="settings_show_until_subtitle_2">12 jam kemudian</string>
<string name="settings_show_until_subtitle_3">24 jam kemudian</string>
<string name="settings_show_until_subtitle_4">3 hari kemudian</string>
<string name="settings_show_until_subtitle_5">7 hari kemudian</string>
<string name="settings_show_until_title">Tampilkan acara setidaknya</string>
<string name="day_char">h</string>
<string name="settings_calendar_app_title">Aplikasi kalender</string>
<string name="error_no_calendar">Tidak ada kalender yang ditemukan.</string>
<string name="tomorrow">besok</string>
<string name="today">hari ini</string>
<string name="settings_event_app_title">Ketuk pada acara membuka</string>
<string name="settings_second_row_info_title">Info acara</string>
<string name="settings_second_row_info_subtitle_1">Alamat acara</string>
<string name="settings_second_row_info_subtitle_0">Waktu acara</string>
<string name="settings_show_diff_time_title">Waktu tersisa sebelum acara</string>
<string name="settings_show_declined_events_title">Acara ditolak</string>
<string name="default_event_app">Detail acara</string>
<string name="default_calendar_app">Aplikasi kalender bawaan</string>
<string name="settings_show_multiple_events_title">Pengalih beberapa acara</string>
<string name="soon">segera</string>
<string name="now">sekarang</string>
<string name="settings_widget_update_frequency_title">Rentang waktu frekuensi pembaruan</string>
<string name="settings_widget_update_frequency_subtitle">Frekuensi tinggi akan menyebabkan penggunaan baterai menjadi lebih tinggi</string>
<string name="settings_widget_update_frequency_low">Rendah</string>
<string name="settings_widget_update_frequency_default">Bawaan</string>
<string name="settings_widget_update_frequency_high">Tinggi</string>
<string name="filters_header">Saring</string>
<string name="event_detail_header">Detail acara</string>
<!-- Weather -->
<string name="settings_weather_title">Cuaca</string>
<string name="title_permission_location">Tampilkan cuaca</string>
<string name="description_permission_location">Berikan izin akses ke lokasi anda\nuntuk menampilkan cuaca di widget.</string>
<string name="settings_unit_title">Unit pengukuran</string>
<string name="settings_weather_refresh_period_title">Frekuensi penyegaran</string>
<string name="settings_weather_refresh_period_subtitle_0">30 menit</string>
<string name="settings_weather_refresh_period_subtitle_1">1 jam</string>
<string name="settings_weather_refresh_period_subtitle_2">3 jam</string>
<string name="settings_weather_refresh_period_subtitle_3">6 jam</string>
<string name="settings_weather_refresh_period_subtitle_4">12 jam</string>
<string name="settings_weather_refresh_period_subtitle_5">24 jam</string>
<string name="settings_custom_location_title">Lokasi</string>
<string name="custom_location_gps">Gunakan geolokasi</string>
<string name="show_weather_visible">Info acara ditampilkan</string>
<string name="show_weather_not_visible">Info acara disembunyikan</string>
<string name="settings_weather_app_title">Ketuk pada cuaca membuka</string>
<string name="settings_weather_provider_api_key_title">Kunci API cuaca</string>
<string name="settings_weather_provider_api_key_subtitle_all_set">Penyedia layanan cuaca dikonfigurasi dengan benar</string>
<string name="settings_weather_provider_api_key_subtitle_not_set">Penyedia layanan cuaca harus dikonfigurasi</string>
<string name="api_key_hint">Kunci API OpenWeather</string>
<string name="default_weather_app">Google Weather</string>
<string name="weather_warning">Layanan cuaca Google Awareness telah ditutup. Sekarang membutuhkan Kunci API OpenWeather untuk menampilkan cuaca di widget.</string>
<string name="api_key_title_1">Daftar akun OpenWeather</string>
<string name="api_key_subtitle_1">Daftar akun gratis pada situs OpenWeather. Hanya akan membutuhkan waktu beberapa menit saja.</string>
<string name="api_key_title_2">Salin Kunci API anda</string>
<string name="api_key_subtitle_2">Temukan menu kunci API dari pengaturan akun anda dan salin kunci default.</string>
<string name="api_key_title_3">Masukkan kunci API ke aplikasi</string>
<string name="api_key_subtitle_3">Tempel kunci API ke dalam ruas di atas dan simpan. Setelah kunci diaktifkan, cuaca akan segera ditampilkan.</string>
<string name="action_open_provider">Kunjungi OpenWeatherMap.com</string>
<string name="api_key_info_all_set">Mungkin membutuhkan lebih kurang 10 menit sebelum kunci API anda diaktifkan. Cuaca akan diperbarui segera setelah data tersedia.</string>
<string name="settings_weather_icon_pack_title">Paket ikon</string>
<string name="settings_weather_icon_pack_default">Paket ikon %d</string>
<!-- Clock -->
<string name="settings_clock_title">Jam</string>
<string name="settings_clock_app_title">Ketuk pada jam membuka</string>
<string name="title_show_clock">Tampilkan Jam</string>
<string name="show_clock_visible">Jam ditampilkan</string>
<string name="show_clock_not_visible">Jam disembunyikan</string>
<string name="settings_clock_text_size_title">Ukuran teks</string>
<string name="default_clock_app">Aplikasi jam bawaan</string>
<string name="settings_clock_bottom_margin_title">Margin bawah jam</string>
<string name="settings_clock_bottom_margin_subtitle_none">Tidak ada</string>
<string name="settings_clock_bottom_margin_subtitle_small">Kecil</string>
<string name="settings_clock_bottom_margin_subtitle_medium">Sedang</string>
<string name="settings_clock_bottom_margin_subtitle_large">Besar</string>
<string name="clock_warning">Karena keterbatasan teknologi, jam tidak akan menerapkan fon khusus dan bayangan teks yang diatur dalam bagian pengaturan Tampilan.</string>
<string name="settings_clock_text_color_title">Warna teks</string>
<string name="settings_ampm_indicator_title">Tampilkan Indikator AM/PM</string>
<string name="clock_text_header">Gaya teks jam</string>
<!-- Glance -->
<string name="settings_show_next_alarm_title">Waktu alarm berikutnya</string>
<string name="next_alarm_warning">Waktu alarm berikutnya sepertinya salah.\nTelah disetel %s.</string>
<string name="settings_at_a_glance_title">Sekilas</string>
<string name="settings_show_music_title">Lagu yang diputar saat ini</string>
<string name="settings_request_notification_access">Membutuhkan izin akses notifikasi untuk menampilkan lagu yang saat ini diputar.</string>
<string name="settings_request_fitness_access">Membutuhkan beberapa izin untuk menampilkan jumlah langkah dari Google Fit.</string>
<string name="title_show_glance">Tampilkan di info sekilas</string>
<string name="description_show_glance_visible">Layanan diaktifkan</string>
<string name="description_show_glance_not_visible">Layanan dinonaktifkan</string>
<string name="settings_sort_glance_providers_title">Prioritas sumber data</string>
<string name="settings_sort_glance_providers_subtitle">Ubah prioritas penyedia data</string>
<string name="settings_custom_notes_title">Catatan khusus</string>
<string name="settings_low_battery_level_title">Baterai</string>
<string name="settings_daily_steps_title">Langkah harian</string>
<string name="battery_low_warning">Level baterai rendah</string>
<string name="daily_steps_counter">%d langkah sejauh ini</string>
<string name="charging">Mengisi daya</string>
<string name="providers">Penyedia</string>
<string name="glance_info">Glance info will show up only when there are no events displayed and only when a few conditions are verified.</string>
<!-- Settings -->
<string name="action_share">Bagikan</string>
<string name="action_rate">Nilai aplikasi</string>
<string name="action_support">Dukung saya</string>
<string name="action_feedback">Umpanbalik</string>
<string name="action_about">Tentang</string>
<string name="action_refresh_widget">Segarkan widget</string>
<string name="error_opening_uri">Terjadi kesalahan saat membuka URL: Tautan disalin ke papan klip.</string>
<string name="loading_text">Memuat Data…</string>
<string name="error_opening_app">Terjadi kesalahan saat membuka aplikasi.</string>
<string name="default_name">Aplikasi bawaan</string>
<string name="action_save">Simpan</string>
<string name="settings_visible">Ditampilkan</string>
<string name="settings_not_visible">Disembunyikan</string>
<string name="support_translations_title">Bantu menerjemahkan</string>
<string name="support_translations_subtitle">Buka pull request pada GitHub</string>
<string name="support_website_title">Lihat proyek saya lainnya</string>
<string name="support_website_subtitle">Pengembang yang sama, banyak kemungkinan</string>
<string name="error">Ups, telah terjadi kesalahan!</string>
<string name="settings_theme_title">Tema</string>
<string name="support_main_subtitle">Pengembang selalu membutuhkan banyak minum kopi</string>
<string name="settings_subtitle_dark_theme_light">Terang</string>
<string name="settings_subtitle_dark_theme_dark">Gelap</string>
<string name="settings_subtitle_dark_theme_by_battery_saver">Setel berdasarkan Penghemat Baterai</string>
<string name="settings_subtitle_dark_theme_follow_system">Mengikuti tema sistem</string>
<string name="settings_subtitle_dark_theme_default">Bawaan</string>
<string name="search">Cari</string>
<string name="settings_app_version_title">Versi aplikasi</string>
<string name="settings_title_show_wallpaper">Tampilkan wallpaper</string>
<string name="support_refresh_widget_subtitle">Paksa mulai ulang layanan widget</string>
<string name="settings_feedback_subtitle">Ini adalah proyek sumber terbuka, jangan sungkan untuk membantu.</string>
<string name="settings_feedback_title">Umpanbalik dan permintaan fitur</string>
<string name="xiaomi_warning_title">Perangkat Xiaomi</string>
<string name="xiaomi_warning_message">Berikan izin untuk menampilkan jendela pop-up saat berjalan di latar belakang di dalam bagian "Perizinan lainnya" di pengaturan aplikasi. Jika tidak, anda tidak akan bisa membuka aplikasi apapun saat mengetuk widget.</string>
<string name="action_ignore">Abaikan</string>
<string name="action_grant_permission">Berikan izin</string>
<string name="settings_title">Pengaturan</string>
<string name="style_header">Gaya</string>
<string name="actions_header">Tindakan</string>
<string name="provider_header">Setel</string>
<string name="appearance_header">Penampilan</string>
<string name="preferences_header">Preferensi</string>
<!-- Activities -->
<string name="action_choose_application">Pilih aplikasi</string>
<string name="support_main_title">Dukung pengembang</string>
<string name="thanks">Terima kasih telah mendukung saya!</string>
<string name="donation_coffee">Kopi italia</string>
<string name="donation_donuts">Donat yang nikmat</string>
<string name="donation_dinner">Makan malam yang mewah</string>
<string name="donation_breakfast">Sarapan yang bersemangat</string>
<string name="donation_lunch">Makan siang yang cepat</string>
<string name="action_show_widget_preview">Tampilkan pratinjau widget</string>
<string name="support_dev_subtitle">Ini adalah proyek pengembang tunggal,\nterima kasih banyak untuk dukungannya!</string>
<string name="settings_title_integrations">Integrasi</string>
<string name="label_count_installed_integrations">%d integrasi terpasang</string>
</resources>

View File

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" translatable="false">Another Widget</string>
<string name="add_widget">Aggiungi</string>
<!-- Display -->
<string name="settings_general_title">Display</string>
<string name="divider" translatable="false">|</string>
<string name="settings_font_color_title">Colore testo</string>
<string name="settings_secondary_font_color_title">Colore testo</string>
<string name="settings_background_color_title">Colore sfondo</string>
@ -103,9 +103,8 @@
<string name="api_key_subtitle_3">Copia qui la chiave API e salva la nuova configurazione.</string>
<string name="action_open_provider">Apri OpenWeatherMap.com</string>
<string name="api_key_info_all_set">La chiave API potrebbe aver bisogno di più di 20 minuti per diventare attiva, aggiorneremo il meteo non appena sarà possibile.</string>
<string name="settings_weather_icon_pack_title">Stile icone</string>
<string name="settings_weather_icon_pack_default">Default</string>
<string name="settings_weather_icon_pack_minimal">Minimal</string>
<string name="settings_weather_icon_pack_title">Icon pack</string>
<string name="settings_weather_icon_pack_default">Icon pack %d</string>
<!-- Clock -->
<string name="settings_clock_title">Orologio</string>
@ -144,6 +143,7 @@
<string name="daily_steps_counter">%d passi fatti finore</string>
<string name="charging">In carica</string>
<string name="providers">Providers</string>
<string name="glance_info">Glance info will show up only when there are no events displayed and only when a few conditions are verified.</string>
<!-- Settings -->
<string name="action_share">Condividi</string>

View File

@ -0,0 +1,204 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" translatable="false">Another Widget</string>
<string name="add_widget">Добавить виджет</string>
<!-- Display -->
<string name="settings_general_title">Отображение</string>
<string name="settings_font_color_title">Цвет текста</string>
<string name="settings_secondary_font_color_title">Цвет текста</string>
<string name="settings_background_color_title">Цвет фона</string>
<string name="title_main_text_size">Размер текста</string>
<string name="title_second_text_size">Размер текста</string>
<string name="title_text_shadow">Тень текста</string>
<string name="settings_text_shadow_subtitle_none">Нет</string>
<string name="settings_text_shadow_subtitle_low">Слабая</string>
<string name="settings_text_shadow_subtitle_high">Сильная</string>
<string name="settings_custom_font_title">Шрифт виджета</string>
<string name="custom_font_subtitle_0">Шрифт устройства</string>
<string name="custom_font_subtitle_1">Product Sans</string>
<string name="custom_date_format">Настраеваемый формат даты</string>
<string name="alpha">Непрозрачность</string>
<string name="transparent">Прозрачный</string>
<string name="settings_show_dividers_title">Отображение разделителей текста</string>
<string name="first_row_header">Первая строка</string>
<string name="second_row_header">Вторая строка</string>
<string name="global_style_header">Виджет</string>
<string name="action_capitalize_the_date">Дата заглавными буквами</string>
<string name="settings_date_format_title">Формат даты</string>
<!-- Calendar -->
<string name="settings_calendar_title">Календарь</string>
<string name="title_permission_calendar">Отображать события</string>
<string name="description_permission_calendar">Предоставить доступ к календарю\nдля отображения событий в виджете.</string>
<string name="settings_filter_calendar_title">Фильтрация событий</string>
<string name="settings_filter_calendar_subtitle">Выбрать календари для отображения</string>
<string name="settings_all_day_title">События на весь день</string>
<string name="main_calendar">Календарь аккаунта</string>
<string name="calendar_settings_list_error">Ошибка загрузки списка календарей</string>
<string name="all_day">Событие на весь день</string>
<string name="show_events_visible">События отображаются</string>
<string name="show_events_not_visible">События не отображаются</string>
<string name="settings_show_until_subtitle_6">30 минут после</string>
<string name="settings_show_until_subtitle_7">1 часа после</string>
<string name="settings_show_until_subtitle_0">3 часов после</string>
<string name="settings_show_until_subtitle_1">6 часов после</string>
<string name="settings_show_until_subtitle_2">12 часов после</string>
<string name="settings_show_until_subtitle_3">24 часов после</string>
<string name="settings_show_until_subtitle_4">3 дней после</string>
<string name="settings_show_until_subtitle_5">7 дней после</string>
<string name="settings_show_until_title">Показывать события в течение</string>
<string name="day_char">д</string>
<string name="settings_calendar_app_title">Стандартное приложение календаря</string>
<string name="error_no_calendar">Календарь не найден.</string>
<string name="tomorrow">завтра</string>
<string name="today">сегодня</string>
<string name="settings_event_app_title">По нажатию на событие открывать</string>
<string name="settings_second_row_info_title">Информация о событии</string>
<string name="settings_second_row_info_subtitle_1">Адрес события</string>
<string name="settings_second_row_info_subtitle_0">Время события</string>
<string name="settings_show_diff_time_title">Осталось времени до события</string>
<string name="settings_show_declined_events_title">Отклонённые события</string>
<string name="default_event_app">Детали события</string>
<string name="default_calendar_app">Стандартное приложение календаря</string>
<string name="settings_show_multiple_events_title">Переключение между событиями</string>
<string name="soon">скоро</string>
<string name="now">сейчас</string>
<string name="settings_widget_update_frequency_title">Частота обновления оставшегося времени</string>
<string name="settings_widget_update_frequency_subtitle">Высокая частота обновления может сказаться на времени автономной работы</string>
<string name="settings_widget_update_frequency_low">Редко</string>
<string name="settings_widget_update_frequency_default">По умолчанию</string>
<string name="settings_widget_update_frequency_high">Часто</string>
<string name="filters_header">Фильтры</string>
<string name="event_detail_header">Детали события</string>
<!-- Weather -->
<string name="settings_weather_title">Погода</string>
<string name="title_permission_location">Отображать погоду</string>
<string name="description_permission_location">Предоставить доступ к местоположению\nдля отображения погоды в виджете.</string>
<string name="settings_unit_title">Единица измерения</string>
<string name="settings_weather_refresh_period_title">Частота обновления</string>
<string name="settings_weather_refresh_period_subtitle_0">30 минут</string>
<string name="settings_weather_refresh_period_subtitle_1">1 час</string>
<string name="settings_weather_refresh_period_subtitle_2">3 часа</string>
<string name="settings_weather_refresh_period_subtitle_3">6 часов</string>
<string name="settings_weather_refresh_period_subtitle_4">12 часов</string>
<string name="settings_weather_refresh_period_subtitle_5">24 часов</string>
<string name="settings_custom_location_title">Местоположение</string>
<string name="custom_location_gps">Использовать геолокацию</string>
<string name="show_weather_visible">Погода отображается</string>
<string name="show_weather_not_visible">Погода не отображается</string>
<string name="settings_weather_app_title">По нажатию на погоду открывать</string>
<string name="settings_weather_provider_api_key_title">Ключ для API погоды</string>
<string name="settings_weather_provider_api_key_subtitle_all_set">Источник данных погоды указан верно</string>
<string name="settings_weather_provider_api_key_subtitle_not_set">Источник данных погоды не настроен</string>
<string name="api_key_hint">Ключ API OpenWeather</string>
<string name="default_weather_app">Google Погода</string>
<string name="weather_warning">Погода Google Awareness устарела. Для отображения погоды в виджете требуется API ключ OpenWeather.</string>
<string name="api_key_title_1">Создайте аккаунт OpenWeather</string>
<string name="api_key_subtitle_1">Создайте бесплатный аккаунт OpenWeather. Это займёт не более нескольких минут.</string>
<string name="api_key_title_2">Скопируйте ключ API</string>
<string name="api_key_subtitle_2">Найдие меню с ключами API в настройках аккаунта и скопируйте ключ.</string>
<string name="api_key_title_3">Введите ключ в приложении</string>
<string name="api_key_subtitle_3">Вставьте ключ в поле выше и сохраните. Как только ключ будет активирован, погода начнёт отображаться.</string>
<string name="action_open_provider">Перейти на OpenWeatherMap.com</string>
<string name="api_key_info_all_set">Активация ключа может занять до десяти минут. Погода обновится как только появится возможность.</string>
<string name="settings_weather_icon_pack_title">Набор иконок</string>
<string name="settings_weather_icon_pack_default">Набор иконок %d</string>
<!-- Clock -->
<string name="settings_clock_title">Часы</string>
<string name="settings_clock_app_title">По нажатию на часы открывать</string>
<string name="title_show_clock">Отображать часы</string>
<string name="show_clock_visible">Часы отображаются</string>
<string name="show_clock_not_visible">Часы не отображаются</string>
<string name="settings_clock_text_size_title">Размер текста</string>
<string name="default_clock_app">Стандартное приложение часов</string>
<string name="settings_clock_bottom_margin_title">Нижний отступ часов</string>
<string name="settings_clock_bottom_margin_subtitle_none">Нет</string>
<string name="settings_clock_bottom_margin_subtitle_small">Маленький</string>
<string name="settings_clock_bottom_margin_subtitle_medium">Средний</string>
<string name="settings_clock_bottom_margin_subtitle_large">Большой</string>
<string name="clock_warning">В связи с техническими ограничениями часы не могут использовать нестандартные шрифты и тени.</string>
<string name="settings_clock_text_color_title">Цвет текста</string>
<string name="settings_ampm_indicator_title">Показывать AM/PM индикатор</string>
<string name="clock_text_header">Стиль текста часов</string>
<!-- Glance -->
<string name="settings_show_next_alarm_title">Следующий будильник</string>
<string name="next_alarm_warning">Проверьте следующий будильник.\nОн был установлен %s</string>
<string name="settings_at_a_glance_title">Glance</string>
<string name="settings_show_music_title">Воспроизводимая песня</string>
<string name="settings_request_notification_access">Нам необходим доступ к уведомлениям для отображения информации песни.</string>
<string name="settings_request_fitness_access">Нам нужно несколько разрешений для отображения шагов за этот день из Google Fit.</string>
<string name="title_show_glance">Отображение дополнительной информации</string>
<string name="description_show_glance_visible">Сервис включён</string>
<string name="description_show_glance_not_visible">Сервис отключён</string>
<string name="settings_sort_glance_providers_title">Приоритет источников данных</string>
<string name="settings_sort_glance_providers_subtitle">Изменить важность источников данных</string>
<string name="settings_custom_notes_title">Настраеваемые заметки</string>
<string name="settings_low_battery_level_title">Уровень заряда аккумулятора</string>
<string name="settings_daily_steps_title">Шаги за сегодня</string>
<string name="battery_low_warning">Низкий уровень заряда аккумулятора</string>
<string name="daily_steps_counter">%d шагов</string>
<string name="charging">Зарядка</string>
<string name="providers">Операторы</string>
<string name="glance_info">Glance info will show up only when there are no events displayed and only when a few conditions are verified.</string>
<!-- Settings -->
<string name="action_share">Поделиться</string>
<string name="action_rate">Оценить приложение</string>
<string name="action_support">Поддержите меня</string>
<string name="action_feedback">Обратная связь</string>
<string name="action_about">О разработчике</string>
<string name="action_refresh_widget">Обновить виджет</string>
<string name="error_opening_uri">Ошибка открытия URL: Ссылка скопирована в буфер обмена.</string>
<string name="loading_text">Загрузка данных…</string>
<string name="error_opening_app">Ошибка открытия приложения.</string>
<string name="default_name">Приложение по умолчанию</string>
<string name="action_save">Сохранить</string>
<string name="settings_visible">Отображается</string>
<string name="settings_not_visible">Не отображается</string>
<string name="support_translations_title">Помочь с переводом</string>
<string name="support_translations_subtitle">Открыть GitHub</string>
<string name="support_website_title">Ознакомиться с моими другими проектами</string>
<string name="support_website_subtitle">Тот же разработчик, множество возможностей</string>
<string name="error">Упс, что-то пошло не так!</string>
<string name="settings_theme_title">Тема</string>
<string name="support_main_subtitle">Кофе — это топливо разработчиков</string>
<string name="settings_subtitle_dark_theme_light">Светлая</string>
<string name="settings_subtitle_dark_theme_dark">Тёмная</string>
<string name="settings_subtitle_dark_theme_by_battery_saver">Установлено энергосбережением</string>
<string name="settings_subtitle_dark_theme_follow_system">Следовать системной теме</string>
<string name="settings_subtitle_dark_theme_default">По умолчанию</string>
<string name="search">Поиск</string>
<string name="settings_app_version_title">Версия приложения</string>
<string name="settings_title_show_wallpaper">Показывать обои</string>
<string name="support_refresh_widget_subtitle">Принудительно перезагрузить виджет</string>
<string name="settings_feedback_subtitle">Это проект с открытым исходынм кодом, не ограничивайте себя, если хотите помочь.</string>
<string name="settings_feedback_title">Отзывы и запрос функций</string>
<string name="xiaomi_warning_title">Устройства Xiaomi</string>
<string name="xiaomi_warning_message">Предоставьте разрешение для отображения всплывающих уведомлений в фоновом режиме в разделе "Прочие разрешения" настроек. Иначе вы не сможете открывать приложения по нажатию на виджет.</string>
<string name="action_ignore">Проигнорировать</string>
<string name="action_grant_permission">Предоставьте разрешения</string>
<string name="settings_title">Настройки</string>
<string name="style_header">Стиль</string>
<string name="actions_header">Действия</string>
<string name="provider_header">Настроить</string>
<string name="appearance_header">Появление</string>
<string name="preferences_header">Настройки</string>
<!-- Activities -->
<string name="action_choose_application">Выберите приложение</string>
<string name="support_main_title">Поддержать разработчика</string>
<string name="thanks">Спасибо, что поддерживаете меня!</string>
<string name="donation_coffee">Капучино</string>
<string name="donation_donuts">Пара глазированных пончиков</string>
<string name="donation_dinner">Ужин в Ginza Project</string>
<string name="donation_breakfast">Скромный завтрак</string>
<string name="donation_lunch">Хороший обед</string>
<string name="action_show_widget_preview">Показать превью виджета</string>
<string name="support_dev_subtitle">Этот проект разрабатывает один человек,\nспасибо за поддержку</string>
<string name="settings_title_integrations">Интеграции</string>
<string name="label_count_installed_integrations">%d установленные интеграции</string>
</resources>

View File

@ -1,3 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" translatable="false">Another Widget</string>
<string name="add_widget">Add</string>
@ -57,15 +58,15 @@
<string name="settings_second_row_info_title">Event info</string>
<string name="settings_second_row_info_subtitle_1">Event address</string>
<string name="settings_second_row_info_subtitle_0">Event time</string>
<string name="settings_show_diff_time_title">Time left to the event</string>
<string name="settings_show_diff_time_title">Time until the event</string>
<string name="settings_show_declined_events_title">Declined events</string>
<string name="default_event_app">Event details</string>
<string name="default_calendar_app">Default calendar app</string>
<string name="settings_show_multiple_events_title">Multiple events switcher</string>
<string name="soon">soon</string>
<string name="now">now</string>
<string name="settings_widget_update_frequency_title">Time left update frequency</string>
<string name="settings_widget_update_frequency_subtitle">High frequency causes more battery consume</string>
<string name="settings_widget_update_frequency_title">Time until event update frequency</string>
<string name="settings_widget_update_frequency_subtitle">High frequency causes more battery consumption</string>
<string name="settings_widget_update_frequency_low">Low</string>
<string name="settings_widget_update_frequency_default">Default</string>
<string name="settings_widget_update_frequency_high">High</string>
@ -88,8 +89,8 @@
<string name="settings_weather_refresh_period_subtitle_5">24 hours</string>
<string name="settings_custom_location_title">Location</string>
<string name="custom_location_gps">Use geolocation</string>
<string name="show_weather_visible">Weather info are visible</string>
<string name="show_weather_not_visible">Weather info are hidden</string>
<string name="show_weather_visible">Weather info is visible</string>
<string name="show_weather_not_visible">Weather info is hidden</string>
<string name="settings_weather_app_title">Tap on weather opens</string>
<string name="settings_weather_provider_api_key_title">Weather API key</string>
<string name="settings_weather_provider_api_key_subtitle_all_set">The weather provider is configured correctly</string>
@ -106,8 +107,7 @@
<string name="action_open_provider">Go to OpenWeatherMap.com</string>
<string name="api_key_info_all_set">It may take up to ten minutes before your API key is activated. The weather will be updated as soon as it is available.</string>
<string name="settings_weather_icon_pack_title">Icon pack</string>
<string name="settings_weather_icon_pack_default">Default</string>
<string name="settings_weather_icon_pack_minimal">Minimal</string>
<string name="settings_weather_icon_pack_default">Icon pack %d</string>
<!-- Clock -->
<string name="settings_clock_title">Clock</string>
@ -146,6 +146,7 @@
<string name="daily_steps_counter">%d steps so far</string>
<string name="charging">Charging</string>
<string name="providers">Providers</string>
<string name="glance_info">Glance info will show up only when there are no events displayed and only when a few conditions are verified.</string>
<!-- Settings -->
<string name="action_share">Share</string>
@ -205,4 +206,4 @@
<string name="support_dev_subtitle">This is a single developer project,\nso thank you for the support!</string>
<string name="settings_title_integrations">Integrations</string>
<string name="label_count_installed_integrations">%d installed integrations</string>
</resources>
</resources>

View File

@ -1 +0,0 @@
/build

View File

@ -1,25 +0,0 @@
apply plugin: 'com.android.dynamic-feature'
android {
compileSdkVersion 29
defaultConfig {
minSdkVersion 23
targetSdkVersion 29
versionCode 1
versionName "1.0"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation project(':app')
// At a Glance
implementation 'com.google.android.gms:play-services-awareness:18.0.0'
}

View File

@ -1,16 +0,0 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:dist="http://schemas.android.com/apk/distribution"
package="com.tommasoberlose.googlefit">
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
<dist:module
dist:instant="false"
dist:title="@string/title_googlefit">
<dist:delivery>
<dist:on-demand />
</dist:delivery>
<dist:fusing dist:include="true" />
</dist:module>
</manifest>