Skip to content

Instantly share code, notes, and snippets.

View rdelrosario's full-sized avatar

Rendy Del Rosario rdelrosario

View GitHub Profile
public class StartupTaskBuilder
{
...
private class StartupTaskSequencer : IStartupTaskSequencer
{
public StartupTaskSequencer(Queue<IStartupTask> tasks) => _tasks = tasks;
public async Task StartAsync(IStartupTask task)
{
foreach (var next in _tasks.SkipWhile(x => x != task))
public interface IStartupTaskSequencer
{
Task StartAsync();
Task StartAsync(IStartupTask task);
}
public partial class SplashPage : ContentPage
{
IStartupTaskSequencer sequencer;
public SplashPage()
{
InitializeComponent();
sequencer = new StartupTaskBuilder()
.Add(new SimulateDownloadDataStartupTask())
.Add(new UpdateVersionStartupTask())
public class StartupTaskBuilder
{
public StartupTaskBuilder() => _tasks = new Queue<IStartupTask>();
public StartupTaskBuilder Add(IStartupTask task)
{
QueueTask(task);
return this;
}
public interface IStartupTaskSequencer
{
Task StartAsync();
}
public abstract class StartupPage : ContentPage, IStartupTask
{
protected virtual Task<bool> CanRunAsync() => Task.FromResult(true);
protected async Task CompleteAsync()
{
await Navigation.PopModalAsync(false);
_tcs?.SetResult(true);
public partial class OnboardingPage : StartupPage
{
public ICommand NextCommand { get; }
public OnboardingPage()
{
InitializeComponent();
NextCommand = new Command(async() =>
{
await CompleteAsync();
});
<?xml version="1.0" encoding="UTF-8" ?>
<ContentPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="StartupTaskSequenceSample.Views.SplashPage"
BackgroundColor="{StaticResource AppPrimaryColor}">
<ContentPage.Content>
<StackLayout VerticalOptions="CenterAndExpand"
Spacing="30">
<Label Text="♜"
public class UpdateVersionStartupTask : IStartupTask
{
public Task<bool> CanRunAsync() => Task.FromResult(true);
public Task RunAsync()
{
//TODO: Do Store version code here, can't do it since this app is not in the store
return App.Current.MainPage.DisplayAlert("New Version", "There is a new version of this app available. Would you like to update now?", "Yes", "No");
}
}
public class SimulateDownloadDataStartupTask : IStartupTask
{
public Task<bool> CanRunAsync() => Task.FromResult(true);
public Task RunAsync() => Task.Delay(5000);
}