Compare commits

...

7 commits

Author SHA1 Message Date
dd3a2e91bd
0.2.2
Some checks failed
Android CI / build (push) Has been cancelled
2025-05-17 13:00:16 +02:00
118efd0b62
Merge pull request #166 from toolatebot/weblate-jrpie-launcher-launcher
Translations update from Toolate
2025-05-17 10:54:51 +00:00
3cfd403b94
Merge pull request #171 from wassupluke/translate-lt
more translations
2025-05-17 10:54:28 +00:00
bd7df4f6a0
(try to) fix #172 2025-05-17 12:39:18 +02:00
31a9049861
try to mitigate #172 2025-05-17 11:42:21 +02:00
Luke Wass
013b835ed8 more translations 2025-05-16 02:53:31 -05:00
renar
271850f75a Translated using Weblate (Italian)
Currently translated at 100.0% (280 of 280 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/it/
2025-05-16 00:07:19 +00:00
15 changed files with 228 additions and 36 deletions

View file

@ -23,8 +23,8 @@ android {
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 35 targetSdkVersion 35
compileSdk 35 compileSdk 35
versionCode 46 versionCode 47
versionName "0.2.1" versionName "0.2.2"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
} }

View file

@ -10,6 +10,7 @@ import de.jrpie.android.launcher.apps.AbstractAppInfo.Companion.INVALID_USER
import de.jrpie.android.launcher.apps.AppInfo import de.jrpie.android.launcher.apps.AppInfo
import de.jrpie.android.launcher.apps.DetailedAppInfo import de.jrpie.android.launcher.apps.DetailedAppInfo
import de.jrpie.android.launcher.preferences.legacy.migratePreferencesFromVersion1 import de.jrpie.android.launcher.preferences.legacy.migratePreferencesFromVersion1
import de.jrpie.android.launcher.preferences.legacy.migratePreferencesFromVersion100
import de.jrpie.android.launcher.preferences.legacy.migratePreferencesFromVersion2 import de.jrpie.android.launcher.preferences.legacy.migratePreferencesFromVersion2
import de.jrpie.android.launcher.preferences.legacy.migratePreferencesFromVersion3 import de.jrpie.android.launcher.preferences.legacy.migratePreferencesFromVersion3
import de.jrpie.android.launcher.preferences.legacy.migratePreferencesFromVersion4 import de.jrpie.android.launcher.preferences.legacy.migratePreferencesFromVersion4
@ -21,12 +22,13 @@ import de.jrpie.android.launcher.widgets.DebugInfoWidget
import de.jrpie.android.launcher.widgets.WidgetPanel import de.jrpie.android.launcher.widgets.WidgetPanel
import de.jrpie.android.launcher.widgets.WidgetPosition import de.jrpie.android.launcher.widgets.WidgetPosition
import de.jrpie.android.launcher.widgets.deleteAllWidgets import de.jrpie.android.launcher.widgets.deleteAllWidgets
import de.jrpie.android.launcher.widgets.generateInternalId
/* Current version of the structure of preferences. /* Current version of the structure of preferences.
* Increase when breaking changes are introduced and write an appropriate case in * Increase when breaking changes are introduced and write an appropriate case in
* `migratePreferencesToNewVersion` * `migratePreferencesToNewVersion`
*/ */
const val PREFERENCE_VERSION = 100 const val PREFERENCE_VERSION = 101
const val UNKNOWN_PREFERENCE_VERSION = -1 const val UNKNOWN_PREFERENCE_VERSION = -1
private const val TAG = "Launcher - Preferences" private const val TAG = "Launcher - Preferences"
@ -65,6 +67,10 @@ fun migratePreferencesToNewVersion(context: Context) {
migratePreferencesFromVersion4(context) migratePreferencesFromVersion4(context)
Log.i(TAG, "migration of preferences complete (4 -> ${PREFERENCE_VERSION}).") Log.i(TAG, "migration of preferences complete (4 -> ${PREFERENCE_VERSION}).")
} }
100 -> {
migratePreferencesFromVersion100(context)
Log.i(TAG, "migration of preferences complete (100 -> ${PREFERENCE_VERSION}).")
}
else -> { else -> {
Log.w( Log.w(
@ -91,7 +97,7 @@ fun resetPreferences(context: Context) {
LauncherPreferences.widgets().widgets( LauncherPreferences.widgets().widgets(
setOf( setOf(
ClockWidget( ClockWidget(
(context.applicationContext as Application).appWidgetHost.allocateAppWidgetId(), generateInternalId(),
WidgetPosition(1, 3, 10, 4), WidgetPosition(1, 3, 10, 4),
WidgetPanel.HOME.id WidgetPanel.HOME.id
) )
@ -103,7 +109,7 @@ fun resetPreferences(context: Context) {
LauncherPreferences.widgets().widgets().also { LauncherPreferences.widgets().widgets().also {
it.add( it.add(
DebugInfoWidget( DebugInfoWidget(
(context.applicationContext as Application).appWidgetHost.allocateAppWidgetId(), generateInternalId(),
WidgetPosition(1, 1, 10, 4), WidgetPosition(1, 1, 10, 4),
WidgetPanel.HOME.id WidgetPanel.HOME.id
) )

View file

@ -0,0 +1,39 @@
package de.jrpie.android.launcher.preferences.legacy
import android.content.Context
import de.jrpie.android.launcher.Application
import de.jrpie.android.launcher.preferences.LauncherPreferences
import de.jrpie.android.launcher.preferences.PREFERENCE_VERSION
import de.jrpie.android.launcher.widgets.ClockWidget
import de.jrpie.android.launcher.widgets.DebugInfoWidget
import de.jrpie.android.launcher.widgets.generateInternalId
import de.jrpie.android.launcher.widgets.updateWidget
fun migratePreferencesFromVersion100(context: Context) {
assert(PREFERENCE_VERSION == 101)
assert(LauncherPreferences.internal().versionCode() == 100)
val widgets = LauncherPreferences.widgets().widgets() ?: setOf()
widgets.forEach { widget ->
when (widget) {
is ClockWidget -> {
val id = widget.id
val newId = generateInternalId()
(context.applicationContext as Application).appWidgetHost.deleteAppWidgetId(id)
widget.delete(context)
widget.id = newId
updateWidget(widget)
}
is DebugInfoWidget -> {
val id = widget.id
val newId = generateInternalId()
(context.applicationContext as Application).appWidgetHost.deleteAppWidgetId(id)
widget.delete(context)
widget.id = newId
updateWidget(widget)
}
else -> {}
}
}
LauncherPreferences.internal().versionCode(101)
}

View file

@ -7,19 +7,20 @@ import de.jrpie.android.launcher.preferences.PREFERENCE_VERSION
import de.jrpie.android.launcher.widgets.ClockWidget import de.jrpie.android.launcher.widgets.ClockWidget
import de.jrpie.android.launcher.widgets.WidgetPanel import de.jrpie.android.launcher.widgets.WidgetPanel
import de.jrpie.android.launcher.widgets.WidgetPosition import de.jrpie.android.launcher.widgets.WidgetPosition
import de.jrpie.android.launcher.widgets.generateInternalId
fun migratePreferencesFromVersion4(context: Context) { fun migratePreferencesFromVersion4(context: Context) {
assert(PREFERENCE_VERSION == 100)
assert(LauncherPreferences.internal().versionCode() < 100) assert(LauncherPreferences.internal().versionCode() < 100)
LauncherPreferences.widgets().widgets( LauncherPreferences.widgets().widgets(
setOf( setOf(
ClockWidget( ClockWidget(
(context.applicationContext as Application).appWidgetHost.allocateAppWidgetId(), generateInternalId(),
WidgetPosition(1, 3, 10, 4), WidgetPosition(1, 3, 10, 4),
WidgetPanel.HOME.id WidgetPanel.HOME.id
) )
) )
) )
LauncherPreferences.internal().versionCode(100) LauncherPreferences.internal().versionCode(100)
migratePreferencesFromVersion100(context)
} }

View file

@ -122,7 +122,12 @@ class HomeActivity : UIObject, Activity() {
} }
override fun onPause() { override fun onPause() {
(application as Application).appWidgetHost.stopListening() try {
(application as Application).appWidgetHost.stopListening()
} catch (e: Exception) {
// Throws a NullPointerException on Android 12 an earlier, see #172
e.printStackTrace()
}
super.onPause() super.onPause()
} }

View file

@ -62,7 +62,12 @@ class WidgetPanelActivity : Activity(), UIObject {
} }
override fun onPause() { override fun onPause() {
(application as Application).appWidgetHost.stopListening() try {
(application as Application).appWidgetHost.stopListening()
} catch (e: Exception) {
// Throws a NullPointerException on Android 12 an earlier, see #172
e.printStackTrace()
}
super.onPause() super.onPause()
} }

View file

@ -93,7 +93,12 @@ class ManageWidgetsActivity : UIObject, Activity() {
} }
override fun onPause() { override fun onPause() {
(application as Application).appWidgetHost.stopListening() try {
(application as Application).appWidgetHost.stopListening()
} catch (e: Exception) {
// Throws a NullPointerException on Android 12 an earlier, see #172
e.printStackTrace()
}
super.onPause() super.onPause()
} }
@ -130,10 +135,6 @@ class ManageWidgetsActivity : UIObject, Activity() {
val appWidgetHost = (application as Application).appWidgetHost val appWidgetHost = (application as Application).appWidgetHost
startActivityForResult( startActivityForResult(
Intent(this, SelectWidgetActivity::class.java).also { Intent(this, SelectWidgetActivity::class.java).also {
it.putExtra(
AppWidgetManager.EXTRA_APPWIDGET_ID,
appWidgetHost.allocateAppWidgetId()
)
it.putExtra( it.putExtra(
EXTRA_PANEL_ID, EXTRA_PANEL_ID,
panelId panelId

View file

@ -14,6 +14,7 @@ import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import de.jrpie.android.launcher.Application
import de.jrpie.android.launcher.R import de.jrpie.android.launcher.R
import de.jrpie.android.launcher.databinding.ActivitySelectWidgetBinding import de.jrpie.android.launcher.databinding.ActivitySelectWidgetBinding
import de.jrpie.android.launcher.ui.UIObject import de.jrpie.android.launcher.ui.UIObject
@ -24,7 +25,7 @@ import de.jrpie.android.launcher.widgets.LauncherWidgetProvider
import de.jrpie.android.launcher.widgets.WidgetPanel import de.jrpie.android.launcher.widgets.WidgetPanel
import de.jrpie.android.launcher.widgets.WidgetPosition import de.jrpie.android.launcher.widgets.WidgetPosition
import de.jrpie.android.launcher.widgets.bindAppWidgetOrRequestPermission import de.jrpie.android.launcher.widgets.bindAppWidgetOrRequestPermission
import de.jrpie.android.launcher.widgets.getAppWidgetHost import de.jrpie.android.launcher.widgets.generateInternalId
import de.jrpie.android.launcher.widgets.getAppWidgetProviders import de.jrpie.android.launcher.widgets.getAppWidgetProviders
import de.jrpie.android.launcher.widgets.updateWidget import de.jrpie.android.launcher.widgets.updateWidget
@ -38,12 +39,13 @@ private const val REQUEST_WIDGET_PERMISSION = 29
*/ */
class SelectWidgetActivity : AppCompatActivity(), UIObject { class SelectWidgetActivity : AppCompatActivity(), UIObject {
lateinit var binding: ActivitySelectWidgetBinding lateinit var binding: ActivitySelectWidgetBinding
var widgetId: Int = -1
var widgetPanelId: Int = WidgetPanel.HOME.id var widgetPanelId: Int = WidgetPanel.HOME.id
private fun tryBindWidget(info: LauncherWidgetProvider) { private fun tryBindWidget(info: LauncherWidgetProvider) {
when (info) { when (info) {
is LauncherAppWidgetProvider -> { is LauncherAppWidgetProvider -> {
val widgetId =
(applicationContext as Application).appWidgetHost.allocateAppWidgetId()
if (bindAppWidgetOrRequestPermission( if (bindAppWidgetOrRequestPermission(
this, this,
info.info, info.info,
@ -62,7 +64,7 @@ class SelectWidgetActivity : AppCompatActivity(), UIObject {
} }
} }
is LauncherClockWidgetProvider -> { is LauncherClockWidgetProvider -> {
updateWidget(ClockWidget(widgetId, WidgetPosition(0, 4, 12, 3), widgetPanelId)) updateWidget(ClockWidget(generateInternalId(), WidgetPosition(0, 4, 12, 3), widgetPanelId))
finish() finish()
} }
} }
@ -81,11 +83,7 @@ class SelectWidgetActivity : AppCompatActivity(), UIObject {
setContentView(binding.root) setContentView(binding.root)
widgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1)
widgetPanelId = intent.getIntExtra(EXTRA_PANEL_ID, WidgetPanel.HOME.id) widgetPanelId = intent.getIntExtra(EXTRA_PANEL_ID, WidgetPanel.HOME.id)
if (widgetId == -1) {
widgetId = getAppWidgetHost().allocateAppWidgetId()
}
val viewManager = LinearLayoutManager(this) val viewManager = LinearLayoutManager(this)
val viewAdapter = SelectWidgetRecyclerAdapter() val viewAdapter = SelectWidgetRecyclerAdapter()

View file

@ -12,7 +12,7 @@ import kotlinx.serialization.Serializable
@Serializable @Serializable
@SerialName("widget:clock") @SerialName("widget:clock")
class ClockWidget( class ClockWidget(
override val id: Int, override var id: Int,
override var position: WidgetPosition, override var position: WidgetPosition,
override val panelId: Int, override val panelId: Int,
override var allowInteraction: Boolean = true override var allowInteraction: Boolean = true

View file

@ -12,7 +12,7 @@ import kotlinx.serialization.Serializable
@Serializable @Serializable
@SerialName("widget:debuginfo") @SerialName("widget:debuginfo")
class DebugInfoWidget( class DebugInfoWidget(
override val id: Int, override var id: Int,
override var position: WidgetPosition, override var position: WidgetPosition,
override val panelId: Int, override val panelId: Int,
override var allowInteraction: Boolean = true override var allowInteraction: Boolean = true

View file

@ -27,7 +27,9 @@ sealed class Widget {
abstract fun configure(activity: Activity, requestCode: Int) abstract fun configure(activity: Activity, requestCode: Int)
fun delete(context: Context) { fun delete(context: Context) {
context.getAppWidgetHost().deleteAppWidgetId(id) if (id >= 0) {
context.getAppWidgetHost().deleteAppWidgetId(id)
}
LauncherPreferences.widgets().widgets( LauncherPreferences.widgets().widgets(
LauncherPreferences.widgets().widgets()?.also { LauncherPreferences.widgets().widgets()?.also {

View file

@ -13,6 +13,7 @@ import android.os.UserManager
import android.util.Log import android.util.Log
import de.jrpie.android.launcher.Application import de.jrpie.android.launcher.Application
import de.jrpie.android.launcher.preferences.LauncherPreferences import de.jrpie.android.launcher.preferences.LauncherPreferences
import kotlin.math.min
fun deleteAllWidgets(context: Context) { fun deleteAllWidgets(context: Context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
@ -29,12 +30,9 @@ fun deleteAllWidgets(context: Context) {
* *
* @return true iff the app widget was bound successfully. * @return true iff the app widget was bound successfully.
*/ */
fun bindAppWidgetOrRequestPermission(activity: Activity, providerInfo: AppWidgetProviderInfo, id: Int, requestCode: Int? = null): Boolean { fun bindAppWidgetOrRequestPermission(activity: Activity, providerInfo: AppWidgetProviderInfo, appWidgetId: Int, requestCode: Int? = null): Boolean {
val appWidgetId = if(id == -1) {
activity.getAppWidgetHost().allocateAppWidgetId()
} else { id }
Log.i("Launcher", "Binding new widget ${appWidgetId}") Log.i("Launcher", "Binding new widget $appWidgetId")
if (!activity.getAppWidgetManager().bindAppWidgetIdIfAllowed( if (!activity.getAppWidgetManager().bindAppWidgetIdIfAllowed(
appWidgetId, appWidgetId,
providerInfo.provider providerInfo.provider
@ -79,6 +77,13 @@ fun updateWidget(widget: Widget) {
) )
} }
// TODO: this needs to be improved
fun generateInternalId(): Int {
val minId = min(-5,(LauncherPreferences.widgets().widgets() ?: setOf()).minOfOrNull { it.id } ?: 0)
return minId -1
}
fun updateWidgetPanel(widgetPanel: WidgetPanel) { fun updateWidgetPanel(widgetPanel: WidgetPanel) {
LauncherPreferences.widgets().customPanels( LauncherPreferences.widgets().customPanels(
(LauncherPreferences.widgets().customPanels() ?: setOf()) (LauncherPreferences.widgets().customPanels() ?: setOf())

View file

@ -302,9 +302,9 @@
<string name="dialog_ok">Ok</string> <string name="dialog_ok">Ok</string>
<string name="widget_panels_title">Pannelli widget</string> <string name="widget_panels_title">Pannelli widget</string>
<plurals name="widget_panel_number_of_widgets"> <plurals name="widget_panel_number_of_widgets">
<item quantity="one">Contiene %d widget.</item> <item quantity="one">Contiene %1$d widget.</item>
<item quantity="many">Contiene %d widget.</item> <item quantity="many">Contiene %1$d widget.</item>
<item quantity="other">Contiene %d widget.</item> <item quantity="other">Contiene %1$d widget.</item>
</plurals> </plurals>
<string name="dialog_create_widget_panel_title">Crea nuovo pannello widget</string> <string name="dialog_create_widget_panel_title">Crea nuovo pannello widget</string>
<string name="list_other_open_widget_panel">Apri pannello widget</string> <string name="list_other_open_widget_panel">Apri pannello widget</string>

View file

@ -1,16 +1,136 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<!--
-
- Home - Pradžia
-
-->
<string name="alert_cant_open_title">Nepavyksta paleisti programėlės</string>
<string name="alert_cant_open_message">Norite pakeisti nustatymus?</string> <string name="alert_cant_open_message">Norite pakeisti nustatymus?</string>
<string name="toast_cant_open_message">Atidarykite nustatymus norėdami pasirinkti šio gesto veiksmą</string>
<!--
-
- Settings
-
-->
<string name="settings_title">Nustatymai</string> <string name="settings_title">Nustatymai</string>
<string name="settings_tab_actions">Veiksmai</string> <string name="settings_tab_actions">Veiksmai</string>
<string name="settings_tab_launcher">Paleidimo programėlė</string> <string name="settings_tab_launcher">Paleidimo programėlė</string>
<string name="settings_tab_meta">Apie</string> <string name="settings_tab_meta">Apie</string>
<!--
-
- Settings : Apps
-
-->
<string name="settings_gesture_back">Atgal</string> <string name="settings_gesture_back">Atgal</string>
<string name="settings_gesture_description_back">Grįžimo mygtukas / grįžimo gestas</string> <string name="settings_gesture_description_back">Grįžimo mygtukas / grįžimo gestas</string>
<string name="settings_gesture_up">Aukštyn</string>
<string name="settings_gesture_description_up">Perbraukimas aukštyn</string> <string name="settings_gesture_description_up">Perbraukimas aukštyn</string>
<string name="settings_gesture_tap_up">Bakstelėkite + aukštyn</string> <string name="settings_gesture_tap_up">Bakstelėkite + aukštyn</string>
<string name="alert_cant_open_title">Nepavyksta paleisti programėlės</string>
<string name="toast_cant_open_message">Atidarykite nustatymus norėdami pasirinkti šio gesto veiksmą</string>
<string name="settings_gesture_up">Aukštyn</string>
<string name="settings_gesture_description_tap_up">Bakstelėjimas ir perbraukimas aukštyn</string> <string name="settings_gesture_description_tap_up">Bakstelėjimas ir perbraukimas aukštyn</string>
<string name="settings_gesture_double_up">Dvigubai aukštyn</string>
<string name="settings_gesture_description_double_up">Perbraukite aukštyn dviem pirštais</string>
<string name="settings_gesture_down">Žemyn</string>
<string name="settings_gesture_description_down">Perbraukite žemyn</string>
<string name="settings_gesture_tap_down">Bakstelėkite + žemyn</string>
<string name="settings_gesture_description_tap_down">Bakstelėkite ir perbraukite žemyn</string>
<string name="settings_gesture_double_down">Dvigubai žemyn</string>
<string name="settings_gesture_description_double_down">Perbraukite dviem pirštais</string>
<string name="settings_gesture_left">Kairėje</string>
<string name="settings_gesture_description_left">Perbraukite į kairę</string>
<string name="settings_gesture_tap_left">Bakstelėkite + kairę</string>
<string name="settings_gesture_description_tap_left">Bakstelėkite ir perbraukite į kairę</string>
<string name="settings_gesture_double_left">Dvigubai kairėje</string>
<string name="settings_gesture_description_double_left">Du pirštais perbraukite kairėn</string>
<string name="settings_gesture_right">Dešinė</string>
<string name="settings_gesture_description_right">Perbraukite į dešinę</string>
<string name="settings_gesture_tap_right">Bakstelėkite + dešinė</string>
<string name="settings_gesture_description_tap_right">Bakstelėkite ir perbraukite į dešinę</string>
<string name="settings_gesture_double_right">Dviguba dešinė</string>
<string name="settings_gesture_description_double_right">Perbraukite į dešinę dviem pirštais</string>
<string name="settings_gesture_right_top_edge">Dešinė (viršuje)</string>
<string name="settings_gesture_description_right_top_edge">Perbraukite tiesiai ekrano viršuje</string>
<string name="settings_gesture_right_bottom_edge">Dešinė (apačia)</string>
<string name="settings_gesture_description_right_bottom_edge">Perbraukite tiesiai ekrano apačioje</string>
<string name="settings_gesture_left_bottom_edge">Kairė (apačia)</string>
<string name="settings_gesture_description_left_bottom_edge">Perbraukite į kairę ekrano apačioje</string>
<string name="settings_gesture_left_top_edge">Kairė (viršuje)</string>
<string name="settings_gesture_description_left_top_edge">Perbraukite kairėn ekrano viršuje</string>
<string name="settings_gesture_up_left_edge">Aukštyn (kairysis kraštas)</string>
<string name="settings_gesture_description_up_left_edge">Perbraukite aukštyn kairiajame ekrano krašte</string>
<string name="settings_gesture_up_right_edge">Aukštyn (dešinysis kraštas)</string>
<string name="settings_gesture_description_up_right_edge">Perbraukite aukštyn dešiniajame ekrano krašte</string>
<string name="settings_gesture_down_left_edge">Žemyn (kairysis kraštas)</string>
<string name="settings_gesture_description_down_left_edge">Perbraukite žemyn kairiajame ekrano krašte</string>
<string name="settings_gesture_down_right_edge">Žemyn (dešinysis kraštas)</string>
<string name="settings_gesture_description_down_right_edge">Žemyn (dešinysis kraštas)</string>
<string name="settings_gesture_vol_up">Garsumo didinimo klavišas</string>
<string name="settings_gesture_description_vol_up">Paspauskite mygtuką „Volume Up“</string>
<string name="settings_gesture_vol_down">Volume žemyn klavišas</string>
<string name="settings_gesture_description_vol_down">Paspauskite mygtuką „Volume Down“</string>
<string name="settings_gesture_double_click">Dukart spustelėkite</string>
<string name="settings_gesture_description_double_click">Dukart spustelėkite tuščią sritį</string>
<string name="settings_gesture_long_click">Ilgas spustelėjimas</string>
<string name="settings_gesture_description_long_click">Ilgai spustelėkite tuščią sritį</string>
<string name="settings_gesture_date">Data</string>
<string name="settings_gesture_description_date">Spustelėkite datą</string>
<string name="settings_gesture_time">Laikas</string>
<string name="settings_gesture_description_time">Spustelėkite laiką</string>
<string name="settings_widgets_widgets">Tvarkykite valdiklius</string>
<string name="settings_widgets_custom_panels">Tvarkykite valdiklio skydelius</string>
<string name="settings_apps_choose">Pasirinkite programą</string>
<string name="settings_apps_install">Įdiekite programas</string>
<string name="settings_apps_toast_store_not_found">Parduotuvėje nerasta</string>
<!--
-
- Settings : Launcher
-
-->
<string name="settings_launcher_section_appearance">Išvaizda</string>
<string name="settings_theme_color_theme">Spalvos tema</string>
<string name="settings_theme_color_theme_item_default">Numatytasis</string>
<string name="settings_theme_color_theme_item_dark">Tamsu</string>
<string name="settings_theme_color_theme_item_light">Šviesa</string>
<string name="settings_theme_color_theme_item_dynamic">Dinaminis</string>
<string name="settings_theme_text_shadow">Teksto šešėlis</string>
<string name="settings_theme_background">Fonas (programų sąrašas ir nustatymas)</string>
<string name="settings_theme_background_item_transparent">Skaidrus</string>
<string name="settings_theme_background_item_dim">Dim</string>
<string name="settings_theme_background_item_blur">Blur</string>
<string name="settings_theme_background_item_solid">Solidus</string>
<string name="settings_theme_font">Šriftas</string>
<!-- names for @array/settings_theme_font_values -->
<string name="settings_theme_font_item_system_default">Sistemos numatytasis</string>
<string name="settings_theme_font_item_sans_serif">Be serifo</string>
<string name="settings_theme_font_item_serif">Serifas</string>
<string name="settings_theme_font_item_monospace">Monoerdvė</string>
<string name="settings_theme_font_item_serif_monospace">Serifo monospace</string>
<string name="settings_theme_monochrome_icons">Vienspalvių programų piktogramos</string>
<string name="settings_launcher_section_date_time"><![CDATA[Date & time]]></string>
<string name="settings_clock_color">Spalva</string>
<string name="settings_clock_time_visible">Rodyti laiką</string>
<string name="settings_clock_date_visible">Rodyti datą</string>
<string name="settings_clock_localized">Naudoti lokalizuotą datos formatą</string>
<string name="settings_clock_show_seconds">Rodyti sekundes</string>
<string name="settings_clock_flip_date_time">Apversti datą ir laiką</string>
<string name="settings_theme_wallpaper">Pasirinkite ekrano foną</string>
<string name="settings_launcher_section_display">Ekranas</string>
</resources> </resources>

View file

@ -0,0 +1,10 @@
* Fixed a bug related to widget causing crashes on Android 12 and earlier making the app unusable
* Fixed some additional bugs related to widgets
* Improved Lithuanian translation (thank you, wassupluke!)
* Improved Arabic translation (thank you, anonymous contributor!)
* Improved Chinese translation (thank you, class0068!)
* Improved Dutch translation (thank you, renar!)
* Improved German translation (thank you, renar!)
* Improved Italian translation (thank you, renar!)
* Improved Portuguese translation (thank you, anonymous contributor!)