From a90b4b510f9075e8143c366f8f365108dcf729eb Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Fri, 21 Mar 2025 00:42:37 -0500 Subject: [PATCH] Add AppUpdatedBanner --- .../org/tasks/preferences/fragments/Debug.kt | 1 + .../todoroo/astrid/activity/MainActivity.kt | 11 --------- .../astrid/activity/TaskListFragment.kt | 15 ++++++++++++ app/src/main/java/org/tasks/compose/Banner.kt | 23 +++++++++++++++++++ .../java/org/tasks/ui/TaskListViewModel.kt | 4 ++++ app/src/main/res/values/keys.xml | 1 - app/src/main/res/values/strings.xml | 2 ++ 7 files changed, 45 insertions(+), 12 deletions(-) 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