Compare commits

...

19 Commits

Author SHA1 Message Date
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
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
20 changed files with 783 additions and 130 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 94
versionCode 96
versionName "2.0.9"
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

@ -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)
@ -127,8 +128,10 @@ object IntentHelper {
putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, e.startDate + start.timeZone.getOffset(start.timeInMillis))
putExtra(CalendarContract.EXTRA_EVENT_END_TIME, e.endDate + end.timeZone.getOffset(end.timeInMillis))
putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, 1)
// putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, 1)
}
Log.d("ciao", "intent: ${this} - extras: ${this.extras}")
}
} else {
getCalendarIntent(context).apply {
@ -182,7 +185,7 @@ object IntentHelper {
}
}
fun getBatteryIntent(context: Context): Intent {
fun getBatteryIntent(): Intent {
return Intent(Intent.ACTION_POWER_USAGE_SUMMARY)
}

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

@ -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

@ -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
}
}

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,208 @@
<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">Standard</string>
<string name="settings_weather_icon_pack_minimal">Minimal</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>
<!-- 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,204 @@
<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">Bawaan</string>
<string name="settings_weather_icon_pack_minimal">Minimal</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>
<!-- 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

@ -4,7 +4,6 @@
<!-- 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>

View File

@ -0,0 +1,203 @@
<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">По умолчанию</string>
<string name="settings_weather_icon_pack_minimal">Минималистичный</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>
<!-- 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

@ -65,7 +65,7 @@
<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_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>

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>