Add AppUpdatedBanner

first_day_of_week
Alex Baker 9 months ago
parent 07f1677d1a
commit a90b4b510f

@ -67,6 +67,7 @@ class Debug : InjectingPreferenceFragment() {
preferences.warnMicrosoft = true preferences.warnMicrosoft = true
preferences.warnGoogleTasks = true preferences.warnGoogleTasks = true
preferences.warnQuietHoursDisabled = true preferences.warnQuietHoursDisabled = true
preferences.setBoolean(R.string.p_just_updated, true)
true true
} }
} }

@ -88,7 +88,6 @@ import org.tasks.data.entity.Place
import org.tasks.data.entity.Task import org.tasks.data.entity.Task
import org.tasks.data.listSettingsClass import org.tasks.data.listSettingsClass
import org.tasks.dialogs.NewFilterDialog import org.tasks.dialogs.NewFilterDialog
import org.tasks.dialogs.WhatsNewDialog
import org.tasks.extensions.Context.nightMode import org.tasks.extensions.Context.nightMode
import org.tasks.extensions.Context.openUri import org.tasks.extensions.Context.openUri
import org.tasks.filters.Filter import org.tasks.filters.Filter
@ -516,15 +515,6 @@ class MainActivity : AppCompatActivity() {
restartActivity() restartActivity()
return 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) { override fun onSupportActionModeStarted(mode: ActionMode) {
@ -552,7 +542,6 @@ class MainActivity : AppCompatActivity() {
const val OPEN_TASK = "open_new_task" // $NON-NLS-1$ const val OPEN_TASK = "open_new_task" // $NON-NLS-1$
const val REMOVE_TASK = "remove_task" const val REMOVE_TASK = "remove_task"
const val FINISH_AFFINITY = "finish_affinity" const val FINISH_AFFINITY = "finish_affinity"
private const val FRAG_TAG_WHATS_NEW = "frag_tag_whats_new"
private const val FLAG_FROM_HISTORY private const val FLAG_FROM_HISTORY
= Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY

@ -87,6 +87,7 @@ import org.tasks.analytics.Firebase
import org.tasks.billing.PurchaseActivity import org.tasks.billing.PurchaseActivity
import org.tasks.caldav.BaseCaldavCalendarSettingsActivity import org.tasks.caldav.BaseCaldavCalendarSettingsActivity
import org.tasks.compose.AlarmsDisabledBanner import org.tasks.compose.AlarmsDisabledBanner
import org.tasks.compose.AppUpdatedBanner
import org.tasks.compose.FilterSelectionActivity.Companion.launch import org.tasks.compose.FilterSelectionActivity.Companion.launch
import org.tasks.compose.FilterSelectionActivity.Companion.registerForListPickerResult import org.tasks.compose.FilterSelectionActivity.Companion.registerForListPickerResult
import org.tasks.compose.NotificationsDisabledBanner 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.DialogBuilder
import org.tasks.dialogs.PriorityPicker.Companion.newPriorityPicker import org.tasks.dialogs.PriorityPicker.Companion.newPriorityPicker
import org.tasks.dialogs.SortSettingsActivity import org.tasks.dialogs.SortSettingsActivity
import org.tasks.dialogs.WhatsNewDialog
import org.tasks.extensions.Context.is24HourFormat import org.tasks.extensions.Context.is24HourFormat
import org.tasks.extensions.Context.openAppNotificationSettings import org.tasks.extensions.Context.openAppNotificationSettings
import org.tasks.extensions.Context.openReminderSettings import org.tasks.extensions.Context.openReminderSettings
@ -473,6 +475,18 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
dismiss = { listViewModel.dismissBanner() }, 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 -> {} null -> {}
} }
} }
@ -1155,6 +1169,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
const val EXTRA_FILTER = "extra_filter" const val EXTRA_FILTER = "extra_filter"
private const val FRAG_TAG_DATE_TIME_PICKER = "frag_tag_date_time_picker" 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_PRIORITY_PICKER = "frag_tag_priority_picker"
private const val FRAG_TAG_WHATS_NEW = "frag_tag_whats_new"
private const val REQUEST_TAG_TASKS = 10106 private const val REQUEST_TAG_TASKS = 10106
} }
} }

@ -4,6 +4,7 @@ import android.content.res.Configuration
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import org.tasks.BuildConfig
import org.tasks.R import org.tasks.R
import org.tasks.TasksApplication import org.tasks.TasksApplication
import org.tasks.compose.components.AnimatedBanner 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 @Composable
fun BeastModeBanner( fun BeastModeBanner(
visible: Boolean, visible: Boolean,
@ -167,3 +183,10 @@ private fun MicrosoftWarningPreview() = TasksTheme {
private fun GoogleTasksWarningPreview() = TasksTheme { private fun GoogleTasksWarningPreview() = TasksTheme {
SyncWarningGoogleTasks(moreInfo = {}, dismiss = {}) 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 = {})
}

@ -54,6 +54,7 @@ sealed class Banner {
data object BegForMoney : Banner() data object BegForMoney : Banner()
data object WarnMicrosoft : Banner() data object WarnMicrosoft : Banner()
data object WarnGoogleTasks : Banner() data object WarnGoogleTasks : Banner()
data object AppUpdated : Banner()
} }
@HiltViewModel @HiltViewModel
@ -194,6 +195,8 @@ class TaskListViewModel @Inject constructor(
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {
val accounts = caldavDao.getAccounts() val accounts = caldavDao.getAccounts()
val banner = when { val banner = when {
preferences.getBoolean(R.string.p_just_updated, false) ->
Banner.AppUpdated
preferences.warnNotificationsDisabled && !permissionChecker.hasNotificationPermission() -> preferences.warnNotificationsDisabled && !permissionChecker.hasNotificationPermission() ->
Banner.NotificationsDisabled Banner.NotificationsDisabled
preferences.warnAlarmsDisabled && !applicationContext.canScheduleExactAlarms() -> preferences.warnAlarmsDisabled && !applicationContext.canScheduleExactAlarms() ->
@ -225,6 +228,7 @@ class TaskListViewModel @Inject constructor(
} }
Banner.WarnGoogleTasks -> preferences.warnGoogleTasks = false Banner.WarnGoogleTasks -> preferences.warnGoogleTasks = false
Banner.WarnMicrosoft -> preferences.warnMicrosoft = false Banner.WarnMicrosoft -> preferences.warnMicrosoft = false
Banner.AppUpdated -> preferences.setBoolean(R.string.p_just_updated, false)
null -> {} null -> {}
} }

@ -392,7 +392,6 @@
<string name="p_auto_dismiss_datetime_edit_screen">auto_dismiss_datetime_edit_screen</string> <string name="p_auto_dismiss_datetime_edit_screen">auto_dismiss_datetime_edit_screen</string>
<string name="p_auto_dismiss_datetime_list_screen">auto_dismiss_datetime_list_screen</string> <string name="p_auto_dismiss_datetime_list_screen">auto_dismiss_datetime_list_screen</string>
<string name="p_auto_dismiss_datetime_widget">auto_dismiss_datetime_widget</string> <string name="p_auto_dismiss_datetime_widget">auto_dismiss_datetime_widget</string>
<string name="p_show_whats_new">show_whats_new</string>
<string name="p_just_updated">just_updated</string> <string name="p_just_updated">just_updated</string>
<string name="p_last_review_request">last_review_request</string> <string name="p_last_review_request">last_review_request</string>
<string name="p_last_subscribe_request">last_subscribe_request</string> <string name="p_last_subscribe_request">last_subscribe_request</string>

@ -508,6 +508,8 @@ File %1$s contained %2$s.\n\n
<string name="open_map">Open map</string> <string name="open_map">Open map</string>
<string name="choose_new_location">Choose new location</string> <string name="choose_new_location">Choose new location</string>
<string name="third_party_licenses">Third-party licenses</string> <string name="third_party_licenses">Third-party licenses</string>
<string name="banner_app_updated_title">App updated</string>
<string name="banner_app_updated_description">Tasks was just updated to %s. Would you like to see the release notes?</string>
<string name="whats_new">What\'s New</string> <string name="whats_new">What\'s New</string>
<string name="version_string">Version %s</string> <string name="version_string">Version %s</string>
<string name="invalid_backup_file">Invalid backup file</string> <string name="invalid_backup_file">Invalid backup file</string>

Loading…
Cancel
Save