diff --git a/app/src/debug/java/org/tasks/preferences/fragments/Debug.kt b/app/src/debug/java/org/tasks/preferences/fragments/Debug.kt
index 836fbacae..2fd1d2963 100644
--- a/app/src/debug/java/org/tasks/preferences/fragments/Debug.kt
+++ b/app/src/debug/java/org/tasks/preferences/fragments/Debug.kt
@@ -67,6 +67,7 @@ class Debug : InjectingPreferenceFragment() {
preferences.warnMicrosoft = true
preferences.warnGoogleTasks = true
preferences.warnQuietHoursDisabled = true
+ preferences.setBoolean(R.string.p_just_updated, true)
true
}
}
diff --git a/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt b/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt
index f5333d460..82a177f53 100644
--- a/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt
+++ b/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt
@@ -88,7 +88,6 @@ import org.tasks.data.entity.Place
import org.tasks.data.entity.Task
import org.tasks.data.listSettingsClass
import org.tasks.dialogs.NewFilterDialog
-import org.tasks.dialogs.WhatsNewDialog
import org.tasks.extensions.Context.nightMode
import org.tasks.extensions.Context.openUri
import org.tasks.filters.Filter
@@ -516,15 +515,6 @@ class MainActivity : AppCompatActivity() {
restartActivity()
return
}
- if (preferences.getBoolean(R.string.p_just_updated, false)) {
- if (preferences.getBoolean(R.string.p_show_whats_new, true)) {
- val fragmentManager = supportFragmentManager
- if (fragmentManager.findFragmentByTag(FRAG_TAG_WHATS_NEW) == null) {
- WhatsNewDialog().show(fragmentManager, FRAG_TAG_WHATS_NEW)
- }
- }
- preferences.setBoolean(R.string.p_just_updated, false)
- }
}
override fun onSupportActionModeStarted(mode: ActionMode) {
@@ -552,7 +542,6 @@ class MainActivity : AppCompatActivity() {
const val OPEN_TASK = "open_new_task" // $NON-NLS-1$
const val REMOVE_TASK = "remove_task"
const val FINISH_AFFINITY = "finish_affinity"
- private const val FRAG_TAG_WHATS_NEW = "frag_tag_whats_new"
private const val FLAG_FROM_HISTORY
= Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
diff --git a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt
index 5d883878b..dfb3c8516 100644
--- a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt
+++ b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt
@@ -87,6 +87,7 @@ import org.tasks.analytics.Firebase
import org.tasks.billing.PurchaseActivity
import org.tasks.caldav.BaseCaldavCalendarSettingsActivity
import org.tasks.compose.AlarmsDisabledBanner
+import org.tasks.compose.AppUpdatedBanner
import org.tasks.compose.FilterSelectionActivity.Companion.launch
import org.tasks.compose.FilterSelectionActivity.Companion.registerForListPickerResult
import org.tasks.compose.NotificationsDisabledBanner
@@ -108,6 +109,7 @@ import org.tasks.dialogs.DateTimePicker.Companion.newDateTimePicker
import org.tasks.dialogs.DialogBuilder
import org.tasks.dialogs.PriorityPicker.Companion.newPriorityPicker
import org.tasks.dialogs.SortSettingsActivity
+import org.tasks.dialogs.WhatsNewDialog
import org.tasks.extensions.Context.is24HourFormat
import org.tasks.extensions.Context.openAppNotificationSettings
import org.tasks.extensions.Context.openReminderSettings
@@ -473,6 +475,18 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
dismiss = { listViewModel.dismissBanner() },
)
+ Banner.AppUpdated ->
+ AppUpdatedBanner(
+ whatsNew = {
+ val fragmentManager = parentFragmentManager
+ if (fragmentManager.findFragmentByTag(FRAG_TAG_WHATS_NEW) == null) {
+ WhatsNewDialog().show(parentFragmentManager, FRAG_TAG_WHATS_NEW)
+ }
+ listViewModel.dismissBanner()
+ },
+ dismiss = { listViewModel.dismissBanner() },
+ )
+
null -> {}
}
}
@@ -1155,6 +1169,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
const val EXTRA_FILTER = "extra_filter"
private const val FRAG_TAG_DATE_TIME_PICKER = "frag_tag_date_time_picker"
private const val FRAG_TAG_PRIORITY_PICKER = "frag_tag_priority_picker"
+ private const val FRAG_TAG_WHATS_NEW = "frag_tag_whats_new"
private const val REQUEST_TAG_TASKS = 10106
}
}
diff --git a/app/src/main/java/org/tasks/compose/Banner.kt b/app/src/main/java/org/tasks/compose/Banner.kt
index 30d7a5222..898c2f999 100644
--- a/app/src/main/java/org/tasks/compose/Banner.kt
+++ b/app/src/main/java/org/tasks/compose/Banner.kt
@@ -4,6 +4,7 @@ import android.content.res.Configuration
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
+import org.tasks.BuildConfig
import org.tasks.R
import org.tasks.TasksApplication
import org.tasks.compose.components.AnimatedBanner
@@ -109,6 +110,21 @@ fun SyncWarningMicrosoft(
)
}
+@Composable
+fun AppUpdatedBanner(
+ whatsNew: () -> Unit,
+ dismiss: () -> Unit,
+) {
+ Banner(
+ title = stringResource(id = R.string.banner_app_updated_title),
+ body = stringResource(id = R.string.banner_app_updated_description, BuildConfig.VERSION_NAME),
+ dismissText = stringResource(id = R.string.dismiss),
+ onDismiss = dismiss,
+ action = stringResource(id = R.string.whats_new),
+ onAction = whatsNew
+ )
+}
+
@Composable
fun BeastModeBanner(
visible: Boolean,
@@ -167,3 +183,10 @@ private fun MicrosoftWarningPreview() = TasksTheme {
private fun GoogleTasksWarningPreview() = TasksTheme {
SyncWarningGoogleTasks(moreInfo = {}, dismiss = {})
}
+
+@Preview(showBackground = true)
+@Preview(showBackground = true, backgroundColor = 0x202124, uiMode = Configuration.UI_MODE_NIGHT_YES)
+@Composable
+private fun AppUpdatedBannerPreview() = TasksTheme {
+ AppUpdatedBanner(whatsNew = {}, dismiss = {})
+}
diff --git a/app/src/main/java/org/tasks/ui/TaskListViewModel.kt b/app/src/main/java/org/tasks/ui/TaskListViewModel.kt
index b1a831868..f0d4b243d 100644
--- a/app/src/main/java/org/tasks/ui/TaskListViewModel.kt
+++ b/app/src/main/java/org/tasks/ui/TaskListViewModel.kt
@@ -54,6 +54,7 @@ sealed class Banner {
data object BegForMoney : Banner()
data object WarnMicrosoft : Banner()
data object WarnGoogleTasks : Banner()
+ data object AppUpdated : Banner()
}
@HiltViewModel
@@ -194,6 +195,8 @@ class TaskListViewModel @Inject constructor(
viewModelScope.launch(Dispatchers.IO) {
val accounts = caldavDao.getAccounts()
val banner = when {
+ preferences.getBoolean(R.string.p_just_updated, false) ->
+ Banner.AppUpdated
preferences.warnNotificationsDisabled && !permissionChecker.hasNotificationPermission() ->
Banner.NotificationsDisabled
preferences.warnAlarmsDisabled && !applicationContext.canScheduleExactAlarms() ->
@@ -225,6 +228,7 @@ class TaskListViewModel @Inject constructor(
}
Banner.WarnGoogleTasks -> preferences.warnGoogleTasks = false
Banner.WarnMicrosoft -> preferences.warnMicrosoft = false
+ Banner.AppUpdated -> preferences.setBoolean(R.string.p_just_updated, false)
null -> {}
}
diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml
index 3210fe186..161f7505d 100644
--- a/app/src/main/res/values/keys.xml
+++ b/app/src/main/res/values/keys.xml
@@ -392,7 +392,6 @@
auto_dismiss_datetime_edit_screen
auto_dismiss_datetime_list_screen
auto_dismiss_datetime_widget
- show_whats_new
just_updated
last_review_request
last_subscribe_request
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 843dbdba8..0651b026e 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -508,6 +508,8 @@ File %1$s contained %2$s.\n\n
Open map
Choose new location
Third-party licenses
+ App updated
+ Tasks was just updated to %s. Would you like to see the release notes?
What\'s New
Version %s
Invalid backup file