diff --git a/app/src/main/java/to/bitkit/appwidget/config/AppWidgetConfigActivity.kt b/app/src/main/java/to/bitkit/appwidget/config/AppWidgetConfigActivity.kt index fe322b914..976a32c9e 100644 --- a/app/src/main/java/to/bitkit/appwidget/config/AppWidgetConfigActivity.kt +++ b/app/src/main/java/to/bitkit/appwidget/config/AppWidgetConfigActivity.kt @@ -85,8 +85,8 @@ class AppWidgetConfigActivity : ComponentActivity() { val providerClass = AppWidgetManager.getInstance(this) .getAppWidgetInfo(appWidgetId)?.provider?.className return when (providerClass) { - HeadlinesGlanceReceiver::class.java.name -> AppWidgetType.HEADLINES PriceGlanceReceiver::class.java.name -> AppWidgetType.PRICE + HeadlinesGlanceReceiver::class.java.name -> AppWidgetType.HEADLINES BlocksGlanceReceiver::class.java.name -> AppWidgetType.BLOCKS WeatherGlanceReceiver::class.java.name -> AppWidgetType.WEATHER else -> { diff --git a/app/src/main/java/to/bitkit/appwidget/config/BlocksConfigContent.kt b/app/src/main/java/to/bitkit/appwidget/config/BlocksConfigContent.kt index 70a257e02..97b687f31 100644 --- a/app/src/main/java/to/bitkit/appwidget/config/BlocksConfigContent.kt +++ b/app/src/main/java/to/bitkit/appwidget/config/BlocksConfigContent.kt @@ -198,7 +198,7 @@ private fun BlockToggleRow( Icon( painter = painterResource(R.drawable.ic_checkmark), contentDescription = null, - tint = if (isEnabled) Colors.Brand else Colors.White50, + tint = if (isEnabled) Colors.Brand else Colors.Gray3, modifier = Modifier.size(32.dp) ) } diff --git a/app/src/main/java/to/bitkit/appwidget/config/HeadlinesConfigContent.kt b/app/src/main/java/to/bitkit/appwidget/config/HeadlinesConfigContent.kt index 2138c9770..9d389993e 100644 --- a/app/src/main/java/to/bitkit/appwidget/config/HeadlinesConfigContent.kt +++ b/app/src/main/java/to/bitkit/appwidget/config/HeadlinesConfigContent.kt @@ -154,7 +154,7 @@ private fun ToggleRow( Icon( painter = painterResource(R.drawable.ic_checkmark), contentDescription = null, - tint = if (isEnabled) Colors.Brand else Colors.White50, + tint = if (isEnabled) Colors.Brand else Colors.Gray3, modifier = Modifier.size(32.dp) ) } diff --git a/app/src/main/java/to/bitkit/appwidget/config/PriceConfigContent.kt b/app/src/main/java/to/bitkit/appwidget/config/PriceConfigContent.kt index 9fe1fd458..9d4cd3037 100644 --- a/app/src/main/java/to/bitkit/appwidget/config/PriceConfigContent.kt +++ b/app/src/main/java/to/bitkit/appwidget/config/PriceConfigContent.kt @@ -136,14 +136,12 @@ private fun SelectableRow( color = if (isSelected) Colors.White else Colors.White64, modifier = Modifier.weight(1f) ) - if (isSelected) { - Icon( - painter = painterResource(R.drawable.ic_checkmark), - contentDescription = null, - tint = Colors.Brand, - modifier = Modifier.size(32.dp) - ) - } + Icon( + painter = painterResource(R.drawable.ic_checkmark), + contentDescription = null, + tint = if (isSelected) Colors.Brand else Colors.Gray3, + modifier = Modifier.size(32.dp) + ) } HorizontalDivider() } diff --git a/app/src/main/java/to/bitkit/appwidget/config/WeatherConfigContent.kt b/app/src/main/java/to/bitkit/appwidget/config/WeatherConfigContent.kt index 85b9b3c0b..bb74d87e3 100644 --- a/app/src/main/java/to/bitkit/appwidget/config/WeatherConfigContent.kt +++ b/app/src/main/java/to/bitkit/appwidget/config/WeatherConfigContent.kt @@ -147,7 +147,7 @@ private fun WeatherOptionRow( Icon( painter = painterResource(R.drawable.ic_checkmark), contentDescription = null, - tint = if (isSelected) Colors.Brand else Colors.White50, + tint = if (isSelected) Colors.Brand else Colors.Gray3, modifier = Modifier.size(32.dp) ) } diff --git a/app/src/main/java/to/bitkit/appwidget/ui/blocks/BlocksGlanceReceiver.kt b/app/src/main/java/to/bitkit/appwidget/ui/blocks/BlocksGlanceReceiver.kt index 02299e182..35d2406fc 100644 --- a/app/src/main/java/to/bitkit/appwidget/ui/blocks/BlocksGlanceReceiver.kt +++ b/app/src/main/java/to/bitkit/appwidget/ui/blocks/BlocksGlanceReceiver.kt @@ -3,11 +3,6 @@ package to.bitkit.appwidget.ui.blocks import android.content.Context import androidx.glance.appwidget.GlanceAppWidget import androidx.glance.appwidget.GlanceAppWidgetReceiver -import dagger.hilt.android.EntryPointAccessors -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import to.bitkit.appwidget.AppWidgetEntryPoint import to.bitkit.appwidget.AppWidgetRefreshWorker class BlocksGlanceReceiver : GlanceAppWidgetReceiver() { @@ -18,21 +13,6 @@ class BlocksGlanceReceiver : GlanceAppWidgetReceiver() { AppWidgetRefreshWorker.enqueue(context) } - override fun onDeleted(context: Context, appWidgetIds: IntArray) { - super.onDeleted(context, appWidgetIds) - val pendingResult = goAsync() - val store = EntryPointAccessors - .fromApplication(context, AppWidgetEntryPoint::class.java) - .appWidgetPreferencesStore() - CoroutineScope(Dispatchers.IO).launch { - try { - appWidgetIds.forEach { store.unregisterWidget(it) } - } finally { - pendingResult.finish() - } - } - } - override fun onDisabled(context: Context) { super.onDisabled(context) AppWidgetRefreshWorker.cancelIfNoWidgets(context) diff --git a/app/src/main/java/to/bitkit/appwidget/ui/blocks/BlocksGlanceWidget.kt b/app/src/main/java/to/bitkit/appwidget/ui/blocks/BlocksGlanceWidget.kt index cc2442e05..27da60c35 100644 --- a/app/src/main/java/to/bitkit/appwidget/ui/blocks/BlocksGlanceWidget.kt +++ b/app/src/main/java/to/bitkit/appwidget/ui/blocks/BlocksGlanceWidget.kt @@ -37,4 +37,12 @@ class BlocksGlanceWidget : GlanceAppWidget() { ) } } + + override suspend fun onDelete(context: Context, glanceId: GlanceId) { + val appWidgetId = GlanceAppWidgetManager(context).getAppWidgetId(glanceId) + EntryPointAccessors + .fromApplication(context, AppWidgetEntryPoint::class.java) + .appWidgetPreferencesStore() + .unregisterWidget(appWidgetId) + } } diff --git a/app/src/main/java/to/bitkit/appwidget/ui/facts/FactsGlanceReceiver.kt b/app/src/main/java/to/bitkit/appwidget/ui/facts/FactsGlanceReceiver.kt index de3d6863b..304fb0f1b 100644 --- a/app/src/main/java/to/bitkit/appwidget/ui/facts/FactsGlanceReceiver.kt +++ b/app/src/main/java/to/bitkit/appwidget/ui/facts/FactsGlanceReceiver.kt @@ -3,11 +3,6 @@ package to.bitkit.appwidget.ui.facts import android.content.Context import androidx.glance.appwidget.GlanceAppWidget import androidx.glance.appwidget.GlanceAppWidgetReceiver -import dagger.hilt.android.EntryPointAccessors -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import to.bitkit.appwidget.AppWidgetEntryPoint import to.bitkit.appwidget.AppWidgetRefreshWorker class FactsGlanceReceiver : GlanceAppWidgetReceiver() { @@ -18,21 +13,6 @@ class FactsGlanceReceiver : GlanceAppWidgetReceiver() { AppWidgetRefreshWorker.enqueue(context) } - override fun onDeleted(context: Context, appWidgetIds: IntArray) { - super.onDeleted(context, appWidgetIds) - val pendingResult = goAsync() - val store = EntryPointAccessors - .fromApplication(context, AppWidgetEntryPoint::class.java) - .appWidgetPreferencesStore() - CoroutineScope(Dispatchers.IO).launch { - try { - appWidgetIds.forEach { store.unregisterWidget(it) } - } finally { - pendingResult.finish() - } - } - } - override fun onDisabled(context: Context) { super.onDisabled(context) AppWidgetRefreshWorker.cancelIfNoWidgets(context) diff --git a/app/src/main/java/to/bitkit/appwidget/ui/facts/FactsGlanceWidget.kt b/app/src/main/java/to/bitkit/appwidget/ui/facts/FactsGlanceWidget.kt index 7fd0a634f..73417e860 100644 --- a/app/src/main/java/to/bitkit/appwidget/ui/facts/FactsGlanceWidget.kt +++ b/app/src/main/java/to/bitkit/appwidget/ui/facts/FactsGlanceWidget.kt @@ -48,4 +48,12 @@ class FactsGlanceWidget : GlanceAppWidget() { FactsGlanceContent(fact = fact) } } + + override suspend fun onDelete(context: Context, glanceId: GlanceId) { + val appWidgetId = GlanceAppWidgetManager(context).getAppWidgetId(glanceId) + EntryPointAccessors + .fromApplication(context, AppWidgetEntryPoint::class.java) + .appWidgetPreferencesStore() + .unregisterWidget(appWidgetId) + } } diff --git a/app/src/main/java/to/bitkit/appwidget/ui/headlines/HeadlinesGlanceReceiver.kt b/app/src/main/java/to/bitkit/appwidget/ui/headlines/HeadlinesGlanceReceiver.kt index 7f75e3871..4c4c0327c 100644 --- a/app/src/main/java/to/bitkit/appwidget/ui/headlines/HeadlinesGlanceReceiver.kt +++ b/app/src/main/java/to/bitkit/appwidget/ui/headlines/HeadlinesGlanceReceiver.kt @@ -3,11 +3,6 @@ package to.bitkit.appwidget.ui.headlines import android.content.Context import androidx.glance.appwidget.GlanceAppWidget import androidx.glance.appwidget.GlanceAppWidgetReceiver -import dagger.hilt.android.EntryPointAccessors -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import to.bitkit.appwidget.AppWidgetEntryPoint import to.bitkit.appwidget.AppWidgetRefreshWorker class HeadlinesGlanceReceiver : GlanceAppWidgetReceiver() { @@ -18,21 +13,6 @@ class HeadlinesGlanceReceiver : GlanceAppWidgetReceiver() { AppWidgetRefreshWorker.enqueue(context) } - override fun onDeleted(context: Context, appWidgetIds: IntArray) { - super.onDeleted(context, appWidgetIds) - val pendingResult = goAsync() - CoroutineScope(Dispatchers.IO).launch { - try { - val store = EntryPointAccessors - .fromApplication(context, AppWidgetEntryPoint::class.java) - .appWidgetPreferencesStore() - appWidgetIds.forEach { store.unregisterWidget(it) } - } finally { - pendingResult.finish() - } - } - } - override fun onDisabled(context: Context) { super.onDisabled(context) AppWidgetRefreshWorker.cancelIfNoWidgets(context) diff --git a/app/src/main/java/to/bitkit/appwidget/ui/headlines/HeadlinesGlanceWidget.kt b/app/src/main/java/to/bitkit/appwidget/ui/headlines/HeadlinesGlanceWidget.kt index 6d28e08c5..9429a4931 100644 --- a/app/src/main/java/to/bitkit/appwidget/ui/headlines/HeadlinesGlanceWidget.kt +++ b/app/src/main/java/to/bitkit/appwidget/ui/headlines/HeadlinesGlanceWidget.kt @@ -50,4 +50,12 @@ class HeadlinesGlanceWidget : GlanceAppWidget() { ) } } + + override suspend fun onDelete(context: Context, glanceId: GlanceId) { + val appWidgetId = GlanceAppWidgetManager(context).getAppWidgetId(glanceId) + EntryPointAccessors + .fromApplication(context, AppWidgetEntryPoint::class.java) + .appWidgetPreferencesStore() + .unregisterWidget(appWidgetId) + } } diff --git a/app/src/main/java/to/bitkit/appwidget/ui/price/PriceGlanceReceiver.kt b/app/src/main/java/to/bitkit/appwidget/ui/price/PriceGlanceReceiver.kt index 9763cb3e0..7b810c228 100644 --- a/app/src/main/java/to/bitkit/appwidget/ui/price/PriceGlanceReceiver.kt +++ b/app/src/main/java/to/bitkit/appwidget/ui/price/PriceGlanceReceiver.kt @@ -3,11 +3,6 @@ package to.bitkit.appwidget.ui.price import android.content.Context import androidx.glance.appwidget.GlanceAppWidget import androidx.glance.appwidget.GlanceAppWidgetReceiver -import dagger.hilt.android.EntryPointAccessors -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import to.bitkit.appwidget.AppWidgetEntryPoint import to.bitkit.appwidget.AppWidgetRefreshWorker class PriceGlanceReceiver : GlanceAppWidgetReceiver() { @@ -18,21 +13,6 @@ class PriceGlanceReceiver : GlanceAppWidgetReceiver() { AppWidgetRefreshWorker.enqueue(context) } - override fun onDeleted(context: Context, appWidgetIds: IntArray) { - super.onDeleted(context, appWidgetIds) - val pendingResult = goAsync() - CoroutineScope(Dispatchers.IO).launch { - try { - val store = EntryPointAccessors - .fromApplication(context, AppWidgetEntryPoint::class.java) - .appWidgetPreferencesStore() - appWidgetIds.forEach { store.unregisterWidget(it) } - } finally { - pendingResult.finish() - } - } - } - override fun onDisabled(context: Context) { super.onDisabled(context) AppWidgetRefreshWorker.cancelIfNoWidgets(context) diff --git a/app/src/main/java/to/bitkit/appwidget/ui/price/PriceGlanceWidget.kt b/app/src/main/java/to/bitkit/appwidget/ui/price/PriceGlanceWidget.kt index 1d1dbb58a..4fcb5c2c4 100644 --- a/app/src/main/java/to/bitkit/appwidget/ui/price/PriceGlanceWidget.kt +++ b/app/src/main/java/to/bitkit/appwidget/ui/price/PriceGlanceWidget.kt @@ -58,6 +58,14 @@ class PriceGlanceWidget : GlanceAppWidget() { } } + override suspend fun onDelete(context: Context, glanceId: GlanceId) { + val appWidgetId = GlanceAppWidgetManager(context).getAppWidgetId(glanceId) + EntryPointAccessors + .fromApplication(context, AppWidgetEntryPoint::class.java) + .appWidgetPreferencesStore() + .unregisterWidget(appWidgetId) + } + private fun resolveWidget(price: PriceDTO?, entry: AppWidgetEntry): PriceWidgetData? { val widgets = price?.widgets ?: return null val enabledPairs = entry.pricePreferences.enabledPairs diff --git a/app/src/main/java/to/bitkit/appwidget/ui/weather/WeatherGlanceReceiver.kt b/app/src/main/java/to/bitkit/appwidget/ui/weather/WeatherGlanceReceiver.kt index 210522f49..66e6dc069 100644 --- a/app/src/main/java/to/bitkit/appwidget/ui/weather/WeatherGlanceReceiver.kt +++ b/app/src/main/java/to/bitkit/appwidget/ui/weather/WeatherGlanceReceiver.kt @@ -3,11 +3,6 @@ package to.bitkit.appwidget.ui.weather import android.content.Context import androidx.glance.appwidget.GlanceAppWidget import androidx.glance.appwidget.GlanceAppWidgetReceiver -import dagger.hilt.android.EntryPointAccessors -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import to.bitkit.appwidget.AppWidgetEntryPoint import to.bitkit.appwidget.AppWidgetRefreshWorker class WeatherGlanceReceiver : GlanceAppWidgetReceiver() { @@ -18,21 +13,6 @@ class WeatherGlanceReceiver : GlanceAppWidgetReceiver() { AppWidgetRefreshWorker.enqueue(context) } - override fun onDeleted(context: Context, appWidgetIds: IntArray) { - super.onDeleted(context, appWidgetIds) - val pendingResult = goAsync() - CoroutineScope(Dispatchers.IO).launch { - try { - val store = EntryPointAccessors - .fromApplication(context, AppWidgetEntryPoint::class.java) - .appWidgetPreferencesStore() - appWidgetIds.forEach { store.unregisterWidget(it) } - } finally { - pendingResult.finish() - } - } - } - override fun onDisabled(context: Context) { super.onDisabled(context) AppWidgetRefreshWorker.cancelIfNoWidgets(context) diff --git a/app/src/main/java/to/bitkit/appwidget/ui/weather/WeatherGlanceWidget.kt b/app/src/main/java/to/bitkit/appwidget/ui/weather/WeatherGlanceWidget.kt index 793e563d9..fd2564d6c 100644 --- a/app/src/main/java/to/bitkit/appwidget/ui/weather/WeatherGlanceWidget.kt +++ b/app/src/main/java/to/bitkit/appwidget/ui/weather/WeatherGlanceWidget.kt @@ -40,4 +40,12 @@ class WeatherGlanceWidget : GlanceAppWidget() { ) } } + + override suspend fun onDelete(context: Context, glanceId: GlanceId) { + val appWidgetId = GlanceAppWidgetManager(context).getAppWidgetId(glanceId) + EntryPointAccessors + .fromApplication(context, AppWidgetEntryPoint::class.java) + .appWidgetPreferencesStore() + .unregisterWidget(appWidgetId) + } } diff --git a/app/src/main/java/to/bitkit/ui/screens/widgets/blocks/BlocksEditScreen.kt b/app/src/main/java/to/bitkit/ui/screens/widgets/blocks/BlocksEditScreen.kt index cbf57f1d8..c7ffc0af4 100644 --- a/app/src/main/java/to/bitkit/ui/screens/widgets/blocks/BlocksEditScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/widgets/blocks/BlocksEditScreen.kt @@ -258,7 +258,7 @@ private fun BlockEditOptionRow( Icon( painter = painterResource(R.drawable.ic_checkmark), contentDescription = null, - tint = if (isEnabled) Colors.Brand else Colors.White50, + tint = if (isEnabled) Colors.Brand else Colors.Gray3, modifier = Modifier .size(32.dp) .testTag("${testTagPrefix}_toggle_icon") diff --git a/app/src/main/java/to/bitkit/ui/screens/widgets/headlines/HeadlinesEditScreen.kt b/app/src/main/java/to/bitkit/ui/screens/widgets/headlines/HeadlinesEditScreen.kt index 712a6658a..f8faed4e6 100644 --- a/app/src/main/java/to/bitkit/ui/screens/widgets/headlines/HeadlinesEditScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/widgets/headlines/HeadlinesEditScreen.kt @@ -157,7 +157,7 @@ fun HeadlinesEditContent( Icon( painter = painterResource(R.drawable.ic_checkmark), contentDescription = null, - tint = if (headlinePreferences.showSource) Colors.Brand else Colors.White50, + tint = if (headlinePreferences.showSource) Colors.Brand else Colors.Gray3, modifier = Modifier .size(32.dp) .testTag("source_toggle_icon") @@ -192,7 +192,7 @@ fun HeadlinesEditContent( Icon( painter = painterResource(R.drawable.ic_checkmark), contentDescription = null, - tint = if (headlinePreferences.showTime) Colors.Brand else Colors.White50, + tint = if (headlinePreferences.showTime) Colors.Brand else Colors.Gray3, modifier = Modifier .size(32.dp) .testTag("time_toggle_icon") diff --git a/app/src/main/java/to/bitkit/ui/screens/widgets/price/PriceEditScreen.kt b/app/src/main/java/to/bitkit/ui/screens/widgets/price/PriceEditScreen.kt index fa52e9e21..6728b79c3 100644 --- a/app/src/main/java/to/bitkit/ui/screens/widgets/price/PriceEditScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/widgets/price/PriceEditScreen.kt @@ -199,16 +199,14 @@ private fun SelectableRow( .weight(1f) .testTag("${testTagPrefix}_label") ) - if (isSelected) { - Icon( - painter = painterResource(R.drawable.ic_checkmark), - contentDescription = null, - tint = Colors.Brand, - modifier = Modifier - .size(32.dp) - .testTag("${testTagPrefix}_toggle_icon") - ) - } + Icon( + painter = painterResource(R.drawable.ic_checkmark), + contentDescription = null, + tint = if (isSelected) Colors.Brand else Colors.Gray3, + modifier = Modifier + .size(32.dp) + .testTag("${testTagPrefix}_toggle_icon") + ) } HorizontalDivider( diff --git a/app/src/main/java/to/bitkit/ui/screens/widgets/weather/WeatherEditScreen.kt b/app/src/main/java/to/bitkit/ui/screens/widgets/weather/WeatherEditScreen.kt index f9e9cd4be..4790bc2a0 100644 --- a/app/src/main/java/to/bitkit/ui/screens/widgets/weather/WeatherEditScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/widgets/weather/WeatherEditScreen.kt @@ -212,7 +212,7 @@ private fun WeatherEditOptionRow( Icon( painter = painterResource(R.drawable.ic_checkmark), contentDescription = null, - tint = if (isSelected) Colors.Brand else Colors.White50, + tint = if (isSelected) Colors.Brand else Colors.Gray3, modifier = Modifier .size(32.dp) .testTag("${testTagPrefix}_toggle_icon") diff --git a/changelog.d/next/935.fixed.md b/changelog.d/next/935.fixed.md new file mode 100644 index 000000000..0eb37af4c --- /dev/null +++ b/changelog.d/next/935.fixed.md @@ -0,0 +1 @@ +Fix several OS widget issues including an intermittent crash when removing or cancelling a home screen widget, ordering of widget options, and the color of disabled checkboxes in widget configuration screens.