diff --git a/app/build.gradle b/app/build.gradle
index 54e7b2b..42f0a2b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -23,8 +23,8 @@ android {
minSdkVersion 21
targetSdkVersion 35
compileSdk 35
- versionCode 47
- versionName "0.2.2"
+ versionCode 46
+ versionName "0.2.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
diff --git a/app/src/main/java/de/jrpie/android/launcher/preferences/Preferences.kt b/app/src/main/java/de/jrpie/android/launcher/preferences/Preferences.kt
index e5877f5..8936675 100644
--- a/app/src/main/java/de/jrpie/android/launcher/preferences/Preferences.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/preferences/Preferences.kt
@@ -10,7 +10,6 @@ import de.jrpie.android.launcher.apps.AbstractAppInfo.Companion.INVALID_USER
import de.jrpie.android.launcher.apps.AppInfo
import de.jrpie.android.launcher.apps.DetailedAppInfo
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.migratePreferencesFromVersion3
import de.jrpie.android.launcher.preferences.legacy.migratePreferencesFromVersion4
@@ -22,13 +21,12 @@ import de.jrpie.android.launcher.widgets.DebugInfoWidget
import de.jrpie.android.launcher.widgets.WidgetPanel
import de.jrpie.android.launcher.widgets.WidgetPosition
import de.jrpie.android.launcher.widgets.deleteAllWidgets
-import de.jrpie.android.launcher.widgets.generateInternalId
/* Current version of the structure of preferences.
* Increase when breaking changes are introduced and write an appropriate case in
* `migratePreferencesToNewVersion`
*/
-const val PREFERENCE_VERSION = 101
+const val PREFERENCE_VERSION = 100
const val UNKNOWN_PREFERENCE_VERSION = -1
private const val TAG = "Launcher - Preferences"
@@ -67,10 +65,6 @@ fun migratePreferencesToNewVersion(context: Context) {
migratePreferencesFromVersion4(context)
Log.i(TAG, "migration of preferences complete (4 -> ${PREFERENCE_VERSION}).")
}
- 100 -> {
- migratePreferencesFromVersion100(context)
- Log.i(TAG, "migration of preferences complete (100 -> ${PREFERENCE_VERSION}).")
- }
else -> {
Log.w(
@@ -97,7 +91,7 @@ fun resetPreferences(context: Context) {
LauncherPreferences.widgets().widgets(
setOf(
ClockWidget(
- generateInternalId(),
+ (context.applicationContext as Application).appWidgetHost.allocateAppWidgetId(),
WidgetPosition(1, 3, 10, 4),
WidgetPanel.HOME.id
)
@@ -109,7 +103,7 @@ fun resetPreferences(context: Context) {
LauncherPreferences.widgets().widgets().also {
it.add(
DebugInfoWidget(
- generateInternalId(),
+ (context.applicationContext as Application).appWidgetHost.allocateAppWidgetId(),
WidgetPosition(1, 1, 10, 4),
WidgetPanel.HOME.id
)
diff --git a/app/src/main/java/de/jrpie/android/launcher/preferences/legacy/Version100.kt b/app/src/main/java/de/jrpie/android/launcher/preferences/legacy/Version100.kt
deleted file mode 100644
index 43e4bc7..0000000
--- a/app/src/main/java/de/jrpie/android/launcher/preferences/legacy/Version100.kt
+++ /dev/null
@@ -1,39 +0,0 @@
-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)
-}
\ No newline at end of file
diff --git a/app/src/main/java/de/jrpie/android/launcher/preferences/legacy/Version4.kt b/app/src/main/java/de/jrpie/android/launcher/preferences/legacy/Version4.kt
index b13978b..a9ab3a1 100644
--- a/app/src/main/java/de/jrpie/android/launcher/preferences/legacy/Version4.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/preferences/legacy/Version4.kt
@@ -7,20 +7,19 @@ import de.jrpie.android.launcher.preferences.PREFERENCE_VERSION
import de.jrpie.android.launcher.widgets.ClockWidget
import de.jrpie.android.launcher.widgets.WidgetPanel
import de.jrpie.android.launcher.widgets.WidgetPosition
-import de.jrpie.android.launcher.widgets.generateInternalId
fun migratePreferencesFromVersion4(context: Context) {
+ assert(PREFERENCE_VERSION == 100)
assert(LauncherPreferences.internal().versionCode() < 100)
LauncherPreferences.widgets().widgets(
setOf(
ClockWidget(
- generateInternalId(),
+ (context.applicationContext as Application).appWidgetHost.allocateAppWidgetId(),
WidgetPosition(1, 3, 10, 4),
WidgetPanel.HOME.id
)
)
)
LauncherPreferences.internal().versionCode(100)
- migratePreferencesFromVersion100(context)
}
\ No newline at end of file
diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt
index f3cde9a..03c55fc 100644
--- a/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt
@@ -122,12 +122,7 @@ class HomeActivity : UIObject, Activity() {
}
override fun onPause() {
- try {
- (application as Application).appWidgetHost.stopListening()
- } catch (e: Exception) {
- // Throws a NullPointerException on Android 12 an earlier, see #172
- e.printStackTrace()
- }
+ (application as Application).appWidgetHost.stopListening()
super.onPause()
}
diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/WidgetPanelActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/WidgetPanelActivity.kt
index 3c884db..ef7bf25 100644
--- a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/WidgetPanelActivity.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/WidgetPanelActivity.kt
@@ -62,12 +62,7 @@ class WidgetPanelActivity : Activity(), UIObject {
}
override fun onPause() {
- try {
- (application as Application).appWidgetHost.stopListening()
- } catch (e: Exception) {
- // Throws a NullPointerException on Android 12 an earlier, see #172
- e.printStackTrace()
- }
+ (application as Application).appWidgetHost.stopListening()
super.onPause()
}
diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/ManageWidgetsActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/ManageWidgetsActivity.kt
index 953fc28..58b47be 100644
--- a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/ManageWidgetsActivity.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/ManageWidgetsActivity.kt
@@ -93,12 +93,7 @@ class ManageWidgetsActivity : UIObject, Activity() {
}
override fun onPause() {
- try {
- (application as Application).appWidgetHost.stopListening()
- } catch (e: Exception) {
- // Throws a NullPointerException on Android 12 an earlier, see #172
- e.printStackTrace()
- }
+ (application as Application).appWidgetHost.stopListening()
super.onPause()
}
@@ -135,6 +130,10 @@ class ManageWidgetsActivity : UIObject, Activity() {
val appWidgetHost = (application as Application).appWidgetHost
startActivityForResult(
Intent(this, SelectWidgetActivity::class.java).also {
+ it.putExtra(
+ AppWidgetManager.EXTRA_APPWIDGET_ID,
+ appWidgetHost.allocateAppWidgetId()
+ )
it.putExtra(
EXTRA_PANEL_ID,
panelId
diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/SelectWidgetActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/SelectWidgetActivity.kt
index eeb98df..0efdb43 100644
--- a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/SelectWidgetActivity.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/SelectWidgetActivity.kt
@@ -14,7 +14,6 @@ import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
-import de.jrpie.android.launcher.Application
import de.jrpie.android.launcher.R
import de.jrpie.android.launcher.databinding.ActivitySelectWidgetBinding
import de.jrpie.android.launcher.ui.UIObject
@@ -25,7 +24,7 @@ import de.jrpie.android.launcher.widgets.LauncherWidgetProvider
import de.jrpie.android.launcher.widgets.WidgetPanel
import de.jrpie.android.launcher.widgets.WidgetPosition
import de.jrpie.android.launcher.widgets.bindAppWidgetOrRequestPermission
-import de.jrpie.android.launcher.widgets.generateInternalId
+import de.jrpie.android.launcher.widgets.getAppWidgetHost
import de.jrpie.android.launcher.widgets.getAppWidgetProviders
import de.jrpie.android.launcher.widgets.updateWidget
@@ -39,13 +38,12 @@ private const val REQUEST_WIDGET_PERMISSION = 29
*/
class SelectWidgetActivity : AppCompatActivity(), UIObject {
lateinit var binding: ActivitySelectWidgetBinding
+ var widgetId: Int = -1
var widgetPanelId: Int = WidgetPanel.HOME.id
private fun tryBindWidget(info: LauncherWidgetProvider) {
when (info) {
is LauncherAppWidgetProvider -> {
- val widgetId =
- (applicationContext as Application).appWidgetHost.allocateAppWidgetId()
if (bindAppWidgetOrRequestPermission(
this,
info.info,
@@ -64,7 +62,7 @@ class SelectWidgetActivity : AppCompatActivity(), UIObject {
}
}
is LauncherClockWidgetProvider -> {
- updateWidget(ClockWidget(generateInternalId(), WidgetPosition(0, 4, 12, 3), widgetPanelId))
+ updateWidget(ClockWidget(widgetId, WidgetPosition(0, 4, 12, 3), widgetPanelId))
finish()
}
}
@@ -83,7 +81,11 @@ class SelectWidgetActivity : AppCompatActivity(), UIObject {
setContentView(binding.root)
+ widgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1)
widgetPanelId = intent.getIntExtra(EXTRA_PANEL_ID, WidgetPanel.HOME.id)
+ if (widgetId == -1) {
+ widgetId = getAppWidgetHost().allocateAppWidgetId()
+ }
val viewManager = LinearLayoutManager(this)
val viewAdapter = SelectWidgetRecyclerAdapter()
diff --git a/app/src/main/java/de/jrpie/android/launcher/widgets/ClockWidget.kt b/app/src/main/java/de/jrpie/android/launcher/widgets/ClockWidget.kt
index f864ee8..d0d1c0e 100644
--- a/app/src/main/java/de/jrpie/android/launcher/widgets/ClockWidget.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/widgets/ClockWidget.kt
@@ -12,7 +12,7 @@ import kotlinx.serialization.Serializable
@Serializable
@SerialName("widget:clock")
class ClockWidget(
- override var id: Int,
+ override val id: Int,
override var position: WidgetPosition,
override val panelId: Int,
override var allowInteraction: Boolean = true
diff --git a/app/src/main/java/de/jrpie/android/launcher/widgets/DebugInfoWidget.kt b/app/src/main/java/de/jrpie/android/launcher/widgets/DebugInfoWidget.kt
index 75ae6d0..01ecddc 100644
--- a/app/src/main/java/de/jrpie/android/launcher/widgets/DebugInfoWidget.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/widgets/DebugInfoWidget.kt
@@ -12,7 +12,7 @@ import kotlinx.serialization.Serializable
@Serializable
@SerialName("widget:debuginfo")
class DebugInfoWidget(
- override var id: Int,
+ override val id: Int,
override var position: WidgetPosition,
override val panelId: Int,
override var allowInteraction: Boolean = true
diff --git a/app/src/main/java/de/jrpie/android/launcher/widgets/Widget.kt b/app/src/main/java/de/jrpie/android/launcher/widgets/Widget.kt
index fd96f14..28539a2 100644
--- a/app/src/main/java/de/jrpie/android/launcher/widgets/Widget.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/widgets/Widget.kt
@@ -27,9 +27,7 @@ sealed class Widget {
abstract fun configure(activity: Activity, requestCode: Int)
fun delete(context: Context) {
- if (id >= 0) {
- context.getAppWidgetHost().deleteAppWidgetId(id)
- }
+ context.getAppWidgetHost().deleteAppWidgetId(id)
LauncherPreferences.widgets().widgets(
LauncherPreferences.widgets().widgets()?.also {
diff --git a/app/src/main/java/de/jrpie/android/launcher/widgets/Widgets.kt b/app/src/main/java/de/jrpie/android/launcher/widgets/Widgets.kt
index 593f3b3..cded50c 100644
--- a/app/src/main/java/de/jrpie/android/launcher/widgets/Widgets.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/widgets/Widgets.kt
@@ -13,7 +13,6 @@ import android.os.UserManager
import android.util.Log
import de.jrpie.android.launcher.Application
import de.jrpie.android.launcher.preferences.LauncherPreferences
-import kotlin.math.min
fun deleteAllWidgets(context: Context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
@@ -30,9 +29,12 @@ fun deleteAllWidgets(context: Context) {
*
* @return true iff the app widget was bound successfully.
*/
-fun bindAppWidgetOrRequestPermission(activity: Activity, providerInfo: AppWidgetProviderInfo, appWidgetId: Int, requestCode: Int? = null): Boolean {
+fun bindAppWidgetOrRequestPermission(activity: Activity, providerInfo: AppWidgetProviderInfo, id: 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(
appWidgetId,
providerInfo.provider
@@ -77,13 +79,6 @@ 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) {
LauncherPreferences.widgets().customPanels(
(LauncherPreferences.widgets().customPanels() ?: setOf())
@@ -97,4 +92,4 @@ fun Context.getAppWidgetHost(): AppWidgetHost {
}
fun Context.getAppWidgetManager(): AppWidgetManager {
return (this.applicationContext as Application).appWidgetManager
-}
\ No newline at end of file
+}
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index bca9108..10362a0 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -302,9 +302,9 @@
Ok
Pannelli widget
- - Contiene %1$d widget.
- - Contiene %1$d widget.
- - Contiene %1$d widget.
+ - Contiene %d widget.
+ - Contiene %d widget.
+ - Contiene %d widget.
Crea nuovo pannello widget
Apri pannello widget
diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml
index d5c9ecf..0a45d57 100644
--- a/app/src/main/res/values-lt/strings.xml
+++ b/app/src/main/res/values-lt/strings.xml
@@ -1,136 +1,16 @@
-
- Nepavyksta paleisti programėlės
Norite pakeisti nustatymus?
-
- Atidarykite nustatymus norėdami pasirinkti šio gesto veiksmą
-
-
Nustatymai
-
Veiksmai
Paleidimo programėlė
Apie
-
-
Atgal
Grįžimo mygtukas / grįžimo gestas
- Aukštyn
Perbraukimas aukštyn
Bakstelėkite + aukštyn
+ Nepavyksta paleisti programėlės
+ Atidarykite nustatymus norėdami pasirinkti šio gesto veiksmą
+ Aukštyn
Bakstelėjimas ir perbraukimas aukštyn
- Dvigubai aukštyn
- Perbraukite aukštyn dviem pirštais
- Žemyn
- Perbraukite žemyn
- Bakstelėkite + žemyn
- Bakstelėkite ir perbraukite žemyn
- Dvigubai žemyn
- Perbraukite dviem pirštais
- Kairėje
- Perbraukite į kairę
- Bakstelėkite + kairę
- Bakstelėkite ir perbraukite į kairę
- Dvigubai kairėje
- Du pirštais perbraukite kairėn
- Dešinė
- Perbraukite į dešinę
- Bakstelėkite + dešinė
- Bakstelėkite ir perbraukite į dešinę
- Dviguba dešinė
- Perbraukite į dešinę dviem pirštais
- Dešinė (viršuje)
- Perbraukite tiesiai ekrano viršuje
- Dešinė (apačia)
- Perbraukite tiesiai ekrano apačioje
- Kairė (apačia)
- Perbraukite į kairę ekrano apačioje
- Kairė (viršuje)
- Perbraukite kairėn ekrano viršuje
- Aukštyn (kairysis kraštas)
- Perbraukite aukštyn kairiajame ekrano krašte
- Aukštyn (dešinysis kraštas)
- Perbraukite aukštyn dešiniajame ekrano krašte
- Žemyn (kairysis kraštas)
- Perbraukite žemyn kairiajame ekrano krašte
- Žemyn (dešinysis kraštas)
- Žemyn (dešinysis kraštas)
-
- Garsumo didinimo klavišas
- Paspauskite mygtuką „Volume Up“
- Volume žemyn klavišas
- Paspauskite mygtuką „Volume Down“
- Dukart spustelėkite
- Dukart spustelėkite tuščią sritį
- Ilgas spustelėjimas
- Ilgai spustelėkite tuščią sritį
- Data
- Spustelėkite datą
- Laikas
- Spustelėkite laiką
-
- Tvarkykite valdiklius
- Tvarkykite valdiklio skydelius
-
-
- Pasirinkite programą
-
- Įdiekite programas
- Parduotuvėje nerasta
-
-
- Išvaizda
-
-
- Spalvos tema
- Numatytasis
- Tamsu
- Šviesa
- Dinaminis
-
- Teksto šešėlis
- Fonas (programų sąrašas ir nustatymas)
- Skaidrus
- Dim
- Blur
- Solidus
-
-
- Šriftas
-
-
- Sistemos numatytasis
- Be serifo
- Serifas
- Monoerdvė
- Serifo monospace
- Vienspalvių programų piktogramos
-
-
- Spalva
- Rodyti laiką
- Rodyti datą
- Naudoti lokalizuotą datos formatą
- Rodyti sekundes
- Apversti datą ir laiką
-
- Pasirinkite ekrano foną
- Ekranas
diff --git a/fastlane/metadata/android/en-US/changelogs/47.txt b/fastlane/metadata/android/en-US/changelogs/47.txt
deleted file mode 100644
index 33899dd..0000000
--- a/fastlane/metadata/android/en-US/changelogs/47.txt
+++ /dev/null
@@ -1,10 +0,0 @@
- * 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!)