├── .gitignore ├── DualSplash.Android ├── Activities │ ├── MainActivity.cs │ └── SplashActivity.cs ├── Assets │ └── AboutAssets.txt ├── DualSplash.Android.csproj ├── DualSplash.Android.csproj.user ├── Ioc │ └── Locator │ │ └── ViewModelLocator.cs ├── Properties │ ├── AndroidManifest.xml │ └── AssemblyInfo.cs └── Resources │ ├── AboutResources.txt │ ├── Resource.Designer.cs │ ├── drawable-hdpi │ ├── Icon.png │ ├── first_screen.png │ └── splash_logo.png │ ├── drawable-mdpi │ ├── Icon.png │ ├── first_screen.png │ └── splash_logo.png │ ├── drawable-tvdpi │ └── first_screen.png │ ├── drawable-xhdpi │ ├── Icon.png │ ├── first_screen.png │ └── splash_logo.png │ ├── drawable-xxhdpi │ ├── Icon.png │ ├── first_screen.png │ └── splash_logo.png │ ├── drawable-xxxhdpi │ ├── Icon.png │ ├── first_screen.png │ └── splash_logo.png │ ├── drawable │ ├── Icon.png │ ├── first_screen_xml.xml │ └── splash_screen_xml.xml │ ├── layout │ ├── Main.axml │ ├── Tabbar.axml │ └── Toolbar.axml │ ├── values-v21 │ └── styles.xml │ └── values │ ├── Strings.xml │ ├── colors.xml │ └── styles.xml ├── DualSplash.Core ├── DualSplash.Core.csproj ├── DualSplashApp.cs ├── Ioc │ └── AppContainer.cs ├── SingleSplashApp.cs ├── Utils │ └── Constants.cs ├── ViewModels │ └── SlowPageViewModel.cs └── Views │ ├── FastPage.cs │ ├── SlowPage.xaml │ └── SlowPage.xaml.cs ├── DualSplash.sln ├── README.md ├── SingleSplash.Android ├── Assets │ └── AboutAssets.txt ├── FodyWeavers.xml.hide ├── Ioc │ └── Locator │ │ └── ViewModelLocator.cs ├── MainActivity.cs ├── MainActivity.orig.cs ├── Properties │ ├── AndroidManifest.xml │ └── AssemblyInfo.cs ├── Resources │ ├── AboutResources.txt │ ├── Resource.Designer.cs │ ├── drawable-hdpi │ │ ├── icon.png │ │ └── splash_logo.png │ ├── drawable-mdpi │ │ ├── Icon.png │ │ └── splash_logo.png │ ├── drawable-xhdpi │ │ ├── icon.png │ │ └── splash_logo.png │ ├── drawable-xxhdpi │ │ ├── icon.png │ │ └── splash_logo.png │ ├── drawable-xxxhdpi │ │ ├── Icon.png │ │ └── splash_logo.png │ ├── drawable │ │ ├── Icon.png │ │ └── splash_screen_xml.xml │ ├── layout │ │ ├── Main.axml │ │ ├── Tabbar.axml │ │ └── Toolbar.axml │ ├── values-v21 │ │ └── styles.xml │ └── values │ │ ├── Strings.xml │ │ ├── colors.xml │ │ └── styles.xml ├── SingleSplash.Android.csproj └── SingleSplash.Android.csproj.user └── WhichIsFaster.png /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | #Ignore thumbnails created by Windows 3 | Thumbs.db 4 | #Ignore files built by Visual Studio 5 | *.obj 6 | *.exe 7 | *.pdb 8 | *.user 9 | *.aps 10 | *.pch 11 | *.vspscc 12 | *_i.c 13 | *_p.c 14 | *.ncb 15 | *.suo 16 | *.tlb 17 | *.tlh 18 | *.bak 19 | *.cache 20 | *.ilk 21 | *.log 22 | [Bb]in 23 | [Dd]ebug*/ 24 | *.lib 25 | *.sbr 26 | obj/ 27 | [Rr]elease*/ 28 | _ReSharper*/ 29 | [Tt]est[Rr]esult* 30 | .vs/ 31 | #Nuget packages folder 32 | packages/ 33 | /DualSplash.Android/obj 34 | /DualSplash/.vs 35 | /DualSplash.Android/DualSplash.Android.csproj.user 36 | /DualSplash/.vs/DualSplash/v15/.suo 37 | /DualSplash.Android/DualSplash.Android.csproj.user 38 | /DualSplash.Android/DualSplash.Android.csproj.user 39 | /DualSplash/.vs/DualSplash/v15/.suo 40 | /SingleSplash.Android/SingleSplash.Android.csproj.user 41 | /DualSplash.Android/DualSplash.Android.csproj.user 42 | /~$Notes.docx 43 | /~WRL0961.tmp 44 | /Notes.docx 45 | /Notes.md 46 | /~$Notes.md 47 | -------------------------------------------------------------------------------- /DualSplash.Android/Activities/MainActivity.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading; 3 | using System.Threading.Tasks; 4 | using Android.App; 5 | using Android.Content.PM; 6 | using Android.OS; 7 | using Android.Runtime; 8 | using Android.Views; 9 | using DualSplash.Core; 10 | using Xamarin; 11 | 12 | 13 | namespace DualSplash.Android 14 | { 15 | 16 | [Activity(Label = "@string/ApplicationTitle", 17 | Icon = "@drawable/icon", 18 | Theme = "@style/FirstScreen.Before", 19 | MainLauncher = false, 20 | ScreenOrientation = ScreenOrientation.SensorPortrait, 21 | LaunchMode = LaunchMode.SingleInstance, 22 | NoHistory = false, 23 | 24 | ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] 25 | [Preserve(AllMembers = true)] 26 | public class MainActivity : Xamarin.Forms.Platform.Android.FormsAppCompatActivity //AppCompatActivity // global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity 27 | { 28 | public MainActivity() 29 | { 30 | #if TRACE 31 | 32 | DualSplashApp.stopWatch.Stop(); 33 | System.Diagnostics.Trace.WriteLine($"\n ---------------------------------------------------------------------------------" + 34 | $"\n ---------------------------------------------------------------------------------"); 35 | System.Diagnostics.Trace.WriteLine($"\n ---------------------------Starting MainActivity Constructor: {DualSplashApp.stopWatch.Elapsed.TotalSeconds}"); 36 | DualSplashApp.stopWatch.Start(); 37 | 38 | #endif 39 | } 40 | private static int Frame_CONTENT_VIEW_ID = 10101010; 41 | protected override async void OnCreate(Bundle bundle) 42 | { 43 | 44 | #if TRACE 45 | DualSplashApp.stopWatch.Stop(); 46 | System.Diagnostics.Trace.WriteLine( 47 | $"\n ---------------------------MainActivity ----- OnCreate: {DualSplashApp.stopWatch.Elapsed.TotalSeconds}"); 48 | DualSplashApp.stopWatch.Start(); 49 | #endif 50 | 51 | TabLayoutResource = Resource.Layout.Tabbar; 52 | ToolbarResource = Resource.Layout.Toolbar; 53 | 54 | //set Splash screen and back normal Theme 55 | base.Window.RequestFeature(WindowFeatures.ActionBar); 56 | 57 | // Name of the MainActivity theme you had there before. 58 | // Or you can use global::Android.Resource.Style.ThemeHoloLight 59 | 60 | 61 | base.SetTheme(Resource.Style.FirstScreen_After); 62 | base.OnCreate(bundle); 63 | 64 | 65 | /* 66 | // this if if you don't want to use UserDialogs.ShowLoading/HideLoading and want to use Native ProgressBar 67 | 68 | MainActivity activity = this; 69 | 70 | FrameLayout.LayoutParams fLParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.MatchParent);//ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent); 71 | fLParams.Gravity = GravityFlags.Center; 72 | 73 | ProgressBar progressBar = new ProgressBar(activity, null, Android.Resource.Attribute.ProgressBarStyleLarge); 74 | progressBar.Indeterminate = true; //.setIndeterminate(true); 75 | progressBar.Visibility = ViewStates.Visible; //setVisibility(View.VISIBLE); 76 | 77 | 78 | FrameLayout frame = new FrameLayout(this); 79 | frame.Id = Frame_CONTENT_VIEW_ID; 80 | this.AddContentView(frame, fLParams); 81 | 82 | 83 | 84 | frame.AddView(progressBar); 85 | */ 86 | 87 | 88 | 89 | 90 | 91 | 92 | //Activating UserDialogs 93 | //Acr.UserDialogs.UserDialogs.Init((Activity)Forms.Context); 94 | Acr.UserDialogs.UserDialogs.Instance.ShowLoading(); 95 | 96 | #if TRACE 97 | DualSplashApp.stopWatch.Stop(); 98 | System.Diagnostics.Trace.WriteLine( 99 | $"\n ---------------------------MainActivity -- OnCreate --After ShowLoading: {DualSplashApp.stopWatch.Elapsed.TotalSeconds}"); 100 | DualSplashApp.stopWatch.Start(); 101 | #endif 102 | 103 | 104 | try 105 | { 106 | 107 | 108 | await Task.Run(() => 109 | { 110 | 111 | 112 | /* 113 | // Init Code that moved to SplashActivity 114 | 115 | //init Google Analytics for mobile 116 | GATracking_Android.GetGASInstance() 117 | .Initialize_NativeGAS("Stam", this); //"UA-40001613-3", this); //TrackingID first parameter 118 | 119 | etc........ 120 | 121 | */ 122 | 123 | //init Insights 124 | if (bundle == null && !Insights.IsInitialized) 125 | { 126 | Xamarin.Insights.Initialize("AppID", 127 | ApplicationContext); //"b7015d6e120008cb54e81254b603f354855b059b", ApplicationContext); 128 | //Insights.Initialize("apikey", ApplicationContext); 129 | Insights.DisableCollection = false; 130 | Insights.DisableDataTransmission = false; 131 | Insights.DisableExceptionCatching = false; 132 | } 133 | 134 | 135 | 136 | //await Task.Delay(500); // slow analytics init 137 | Thread.Sleep(500); // 1 138 | 139 | 140 | 141 | 142 | 143 | }); 144 | 145 | 146 | 147 | 148 | 149 | 150 | await Task.Run(() => 151 | { 152 | RunOnUiThread(() => 153 | { 154 | #if TRACE 155 | DualSplashApp.stopWatch.Stop(); 156 | System.Diagnostics.Trace.WriteLine($"\n ---------------------------MainActivity -Reach BEFORE LoadApplication( DualSplashApp.......) -----: {DualSplashApp.stopWatch.Elapsed.TotalSeconds}"); 157 | DualSplashApp.stopWatch.Start(); 158 | #endif 159 | 160 | 161 | 162 | 163 | LoadApplication(new DualSplashApp()); 164 | #if TRACE 165 | DualSplashApp.stopWatch.Stop(); 166 | System.Diagnostics.Trace.WriteLine($"\n ---------------------------MainActivity - AFTER LoadApplication( DualSplashApp.......) -----: {DualSplashApp.stopWatch.Elapsed.TotalSeconds}"); 167 | DualSplashApp.stopWatch.Start(); 168 | #endif 169 | 170 | 171 | }); 172 | }); 173 | 174 | #if TRACE 175 | DualSplashApp.stopWatch.Stop(); 176 | System.Diagnostics.Trace.WriteLine($"\n ---------------------------MainActivity -finish OnCreate -----: {DualSplashApp.stopWatch.Elapsed.TotalSeconds}"); 177 | DualSplashApp.stopWatch.Start(); 178 | #endif 179 | 180 | 181 | 182 | 183 | } 184 | catch (Exception ex) 185 | { 186 | Insights.Report(ex, Insights.Severity.Error); 187 | // TrackService.Track_App_Exception(String.Format("GA Exception Message: \n {0} \n GA Exception StackTrace: \n {1}", ex.Message, ex.StackTrace), false); 188 | 189 | 190 | } 191 | } 192 | 193 | } 194 | } 195 | 196 | -------------------------------------------------------------------------------- /DualSplash.Android/Activities/SplashActivity.cs: -------------------------------------------------------------------------------- 1 | using System.Diagnostics; 2 | using System.Threading; 3 | using System.Threading.Tasks; 4 | using Android.App; 5 | using Android.Content; 6 | using Android.Content.PM; 7 | using Android.OS; 8 | using Android.Runtime; 9 | using Android.Support.V7.App; 10 | using DualSplash.Android.Ioc.Locator; 11 | using DualSplash.Core; 12 | using DualSplash.Core.Ioc; 13 | using Xamarin; 14 | using Xamarin.Forms; 15 | using XLabs.Ioc; 16 | using XLabs.Ioc.Autofac; 17 | using Application = Android.App.Application; 18 | 19 | namespace DualSplash.Android 20 | { 21 | [Activity(Label = "@string/ApplicationTitle", 22 | Icon = "@drawable/icon", 23 | Theme = "@style/splashscreen", 24 | MainLauncher = true, 25 | ScreenOrientation = ScreenOrientation.SensorPortrait, 26 | LaunchMode = LaunchMode.SingleTop, 27 | NoHistory = true, 28 | ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] 29 | [Preserve(AllMembers = true)] 30 | public class SplashActivity : AppCompatActivity 31 | 32 | { 33 | 34 | public static bool IsInitialized = false; 35 | 36 | static readonly string TAG = "X:" + typeof(SplashActivity).Name; 37 | public IResolver AutofacResolver; 38 | 39 | 40 | public SplashActivity() 41 | { 42 | #if TRACE 43 | 44 | 45 | 46 | DualSplashApp.stopWatch = new Stopwatch(); 47 | System.Diagnostics.Trace.WriteLine($"\n ---------------------------------------------------------------------------------" + 48 | $"\n ---------------------------------------------------------------------------------"); 49 | System.Diagnostics.Trace.WriteLine($"\n ---------------------------Starting SplashActivity Constructor: {DualSplashApp.stopWatch.Elapsed.TotalSeconds}"); 50 | DualSplashApp.stopWatch.Start(); 51 | #endif 52 | } 53 | 54 | protected override void OnCreate(Bundle savedInstanceState)// ,PersistableBundle persistantState) 55 | { 56 | 57 | #if TRACE 58 | DualSplashApp.stopWatch.Stop(); 59 | System.Diagnostics.Trace.WriteLine($"\n ---------------------------SplashActivity Starting From OnCreate: {DualSplashApp.stopWatch.Elapsed.TotalSeconds}"); 60 | DualSplashApp.stopWatch.Start(); 61 | #endif 62 | 63 | base.OnCreate(savedInstanceState); //,persistantState); 64 | System.Diagnostics.Debug.WriteLine(TAG, "SplashActivity.OnCreate"); 65 | 66 | 67 | //init Xamarin Forms 68 | global::Xamarin.Forms.Forms.Init(this, savedInstanceState); 69 | 70 | //Activating UserDialogs 71 | Acr.UserDialogs.UserDialogs.Init((Activity)Forms.Context); 72 | 73 | // Slow Init Code only needed at start -- moved to MainActivity on final tweak 74 | if (!IsInitialized) 75 | { 76 | //await Task.Delay(500); // slow analytics init 77 | // Thread.Sleep(500); // 1 78 | 79 | 80 | 81 | } 82 | IsInitialized = true; 83 | 84 | 85 | 86 | #if TRACE 87 | DualSplashApp.stopWatch.Stop(); 88 | System.Diagnostics.Trace.WriteLine($"\n ---------------------------SplashActivity OnCreate AFTER FORMS.init and UserDialogs.Init : {DualSplashApp.stopWatch.Elapsed.TotalSeconds}"); 89 | DualSplashApp.stopWatch.Start(); 90 | #endif 91 | 92 | 93 | } 94 | 95 | 96 | 97 | // Launches the startup task 98 | protected override void OnResume() 99 | { 100 | base.OnResume(); 101 | Task startupWork = new Task(() => { SimulateStartup(); }); 102 | 103 | #if TRACE 104 | DualSplashApp.stopWatch.Stop(); 105 | System.Diagnostics.Trace.WriteLine($"\n ---------------------------SplashActivity OnResume Before UserDialogs.ShowLoading : {DualSplashApp.stopWatch.Elapsed.TotalSeconds}"); 106 | DualSplashApp.stopWatch.Start(); 107 | #endif 108 | Acr.UserDialogs.UserDialogs.Instance.ShowLoading(); 109 | startupWork.Start(); 110 | } 111 | 112 | // Simulates background work that happens behind the splash screen 113 | void SimulateStartup() 114 | { 115 | #if TRACE 116 | DualSplashApp.stopWatch.Stop(); 117 | System.Diagnostics.Trace.WriteLine($"\n ---------------------------SplashActivity SimulateStartup Before Slow Init Code : {DualSplashApp.stopWatch.Elapsed.TotalSeconds}"); 118 | DualSplashApp.stopWatch.Start(); 119 | #endif 120 | System.Diagnostics.Debug.WriteLine(TAG, "Performing some startup work that takes a bit of time."); 121 | // await Task.Delay(1000); // Simulate a bit of startup work. 122 | 123 | //Starting all kind of Initialization methods that make delays 124 | //init AutoFac container for DI 125 | if(AppContainer.Container==null) 126 | AppContainer.Container = ViewModelLocator.RegisterDependencies(false); 127 | 128 | 129 | //for XLabs Init 130 | if (AutofacResolver == null) 131 | AutofacResolver = new AutofacResolver(AppContainer.Container); 132 | if (!Resolver.IsSet) 133 | Resolver.SetResolver(AutofacResolver); 134 | 135 | //init Google Analytics for mobile 136 | //GATracking_Android.GetGASInstance() 137 | // .Initialize_NativeGAS("Stam", this); //"UA-XXXXXXXXX-X", this); //TrackingID first parameter 138 | 139 | //init Insights -- moved to MainActivity on Final tweak 140 | // if (bundle == null && !Insights.IsInitialized) 141 | /* if (!Insights.IsInitialized) 142 | { 143 | Xamarin.Insights.Initialize("AppID", 144 | ApplicationContext); //"b7015d6e120008cb54e81254b603f354855b059b", ApplicationContext); 145 | //Insights.Initialize("apikey", ApplicationContext); 146 | Insights.DisableCollection = false; 147 | Insights.DisableDataTransmission = false; 148 | Insights.DisableExceptionCatching = false; 149 | } 150 | 151 | */ 152 | //Init Code for Ads of Admob , Facebook , Leadbolt etc. 153 | //init interstitial ad by leadbolt 154 | string LeadBoltInterStitial_API_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXX"; 155 | // InterStitial_Android_LeadBolt.Get_ServiceInstance().Init_InterStitial(LeadBoltInterStitial_API_KEY, this); 156 | 157 | 158 | //init interstitial ad by AdMob 159 | string Admob_Interstit_Ad_UnitID = 160 | "ca-app-pub-XXXXXXXXXXXXXXXXXXXXXXXX"; 161 | //InterStitial_Android_AdMob.Get_ServiceInstance().Init_InterStitial(Admob_Interstit_Ad_UnitID, this); 162 | 163 | 164 | 165 | //init interstitial ad by Facebook 166 | string Fb_PlacementID = "XXXXXXXXXXXXXXXXXXXXXXXXXX"; 167 | //InterStitial_Android_Facebook.Get_ServiceInstance().Init_InterStitial(Fb_PlacementID, this); 168 | 169 | 170 | //init interstitial ad Mock 171 | // string Stam_PlacementID = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX"; 172 | // InterStitial_Android_Mock.Get_ServiceInstance().Init_InterStitial("Stam"); 173 | 174 | 175 | 176 | 177 | System.Diagnostics.Debug.WriteLine(TAG, "Startup work is finished - starting MainActivity."); 178 | #if TRACE 179 | DualSplashApp.stopWatch.Stop(); 180 | System.Diagnostics.Trace.WriteLine($"\n ---------------------------SplashActivity SimulateStartup AFTER Slow Init Code : {DualSplashApp.stopWatch.Elapsed.TotalSeconds}"); 181 | System.Diagnostics.Trace.WriteLine($"\n --------------------------- BEFORE StartActivity MainActivity : {DualSplashApp.stopWatch.Elapsed.TotalSeconds}"); 182 | DualSplashApp.stopWatch.Start(); 183 | #endif 184 | 185 | 186 | StartActivity(new Intent(Application.Context, typeof(MainActivity))); 187 | Finish(); 188 | } 189 | 190 | protected override void OnPause() 191 | { 192 | base.OnPause(); 193 | Acr.UserDialogs.UserDialogs.Instance.HideLoading(); 194 | } 195 | } 196 | } -------------------------------------------------------------------------------- /DualSplash.Android/Assets/AboutAssets.txt: -------------------------------------------------------------------------------- 1 | Any raw assets you want to be deployed with your application can be placed in 2 | this directory (and child directories) and given a Build Action of "AndroidAsset". 3 | 4 | These files will be deployed with you package and will be accessible using Android's 5 | AssetManager, like this: 6 | 7 | public class ReadAsset : Activity 8 | { 9 | protected override void OnCreate (Bundle bundle) 10 | { 11 | base.OnCreate (bundle); 12 | 13 | InputStream input = Assets.Open ("my_asset.txt"); 14 | } 15 | } 16 | 17 | Additionally, some Android functions will automatically load asset files: 18 | 19 | Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); -------------------------------------------------------------------------------- /DualSplash.Android/DualSplash.Android.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Debug 5 | AnyCPU 6 | 8.0.30703 7 | 2.0 8 | {33772F00-8EFD-48A3-A4CB-19A438A7680A} 9 | {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 10 | Library 11 | Properties 12 | DualSplash.Android 13 | ExDollar.Test.Vanilla.Android 14 | 512 15 | True 16 | Resources\Resource.Designer.cs 17 | Off 18 | false 19 | v7.1 20 | Properties\AndroidManifest.xml 21 | true 22 | PackageReference 23 | 24 | 25 | True 26 | Full 27 | False 28 | bin\Debug\ 29 | DEBUG;TRACE 30 | prompt 31 | 4 32 | True 33 | SdkOnly 34 | False 35 | 36 | false 37 | false 38 | 39 | 40 | PdbOnly 41 | True 42 | True 43 | bin\Release\ 44 | TRACE 45 | prompt 46 | 4 47 | False 48 | SdkOnly 49 | True 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | Designer 71 | 72 | 73 | Designer 74 | 75 | 76 | 77 | 78 | Designer 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 25.1.1 96 | 97 | 98 | 25.1.1 99 | 100 | 101 | 25.1.1 102 | 103 | 104 | 25.1.1 105 | 106 | 107 | 25.1.1 108 | 109 | 110 | 25.1.1 111 | 112 | 113 | 32.940.0-beta3 114 | 115 | 116 | 1.12.3 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | {7fb7ac69-309f-4684-8d07-96d4aba0f1f2} 158 | DualSplash.Core 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 193 | -------------------------------------------------------------------------------- /DualSplash.Android/DualSplash.Android.csproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | LGE Nexus 4 5 | ShowAllFiles 6 | AVD_GalaxyNexus_ToolsForApacheCordova 7 | 8 | -------------------------------------------------------------------------------- /DualSplash.Android/Ioc/Locator/ViewModelLocator.cs: -------------------------------------------------------------------------------- 1 | using Acr.UserDialogs; 2 | using Android.App; 3 | using Autofac; 4 | using DualSplash.Core.ViewModels; 5 | using DualSplash.Core.Views; 6 | using XLabs.Platform.Device; 7 | using IContainer = Autofac.IContainer; 8 | using Thread = System.Threading.Thread; 9 | 10 | 11 | namespace DualSplash.Android.Ioc.Locator 12 | { 13 | public static class ViewModelLocator 14 | { 15 | private static IContainer _container; 16 | 17 | 18 | public static T Resolve() 19 | { 20 | return _container.Resolve(); 21 | } 22 | 23 | public static IContainer RegisterDependencies(bool useMockServices,Application application=null) 24 | { 25 | var builder = new ContainerBuilder(); 26 | 27 | //moq 28 | /* Mock moqDialogs = new Mock(); 29 | Mock moqDevice =new Mock(); 30 | Mock moqDisplay =new Mock(); 31 | Mock moqFontManager =new Mock();*/ 32 | 33 | 34 | 35 | 36 | 37 | 38 | // Register ViewModels 39 | builder.RegisterType().SingleInstance(); 40 | 41 | // Register Views 42 | builder.RegisterType().SingleInstance(); 43 | builder.RegisterType().SingleInstance(); 44 | 45 | 46 | 47 | /* 48 | builder.RegisterType(); 49 | builder.RegisterType(); 50 | builder.RegisterType(); 51 | builder.RegisterType(); 52 | builder.RegisterType(); 53 | builder.RegisterType(); 54 | builder.RegisterType(); 55 | builder.RegisterType(); 56 | */ 57 | 58 | //Register Services 59 | /* builder.RegisterType() 60 | .As() 61 | .SingleInstance();*/ 62 | 63 | //await Task.Delay(500); // Slow init code 64 | Thread.Sleep(500); // 2 65 | 66 | 67 | // Services 68 | //////////////////////////////////////////////////////////////////////////////////////////// 69 | /* 70 | builder.RegisterType().As() 71 | .SingleInstance(); 72 | */ 73 | 74 | // Register Base Services 75 | //////----------------------------------Navigation-------------------------- 76 | 77 | /* 78 | builder.RegisterType() 79 | .As() 80 | .SingleInstance(); 81 | */ 82 | 83 | 84 | ////////////////---------------------Ads ----------------------------------------- 85 | /* 86 | builder.RegisterType() 87 | .As() 88 | .SingleInstance(); 89 | */ 90 | 91 | //////----------------------------------Aggregate Services-------------------------- 92 | /* 93 | builder.RegisterAggregateService(); 94 | */ 95 | 96 | 97 | 98 | 99 | 100 | /////////////////////// android services 101 | 102 | builder.Register(t => AndroidDevice.CurrentDevice) 103 | .As() 104 | .SingleInstance(); 105 | 106 | builder.Register(t => AndroidDevice.CurrentDevice.Display) 107 | .As() 108 | .SingleInstance(); 109 | 110 | builder.RegisterType() 111 | .As() 112 | .SingleInstance(); 113 | 114 | 115 | // UserDialogs.Init(application); 116 | builder.RegisterInstance(UserDialogs.Instance) 117 | .As() 118 | .SingleInstance(); 119 | 120 | 121 | 122 | /* 123 | builder.RegisterType().As().SingleInstance(); 124 | builder.RegisterType().As(); 125 | builder.RegisterType().As(); 126 | builder.RegisterType().As(); 127 | builder.RegisterType().As(); 128 | builder.RegisterType().As().SingleInstance(); 129 | 130 | */ 131 | if (useMockServices) 132 | { 133 | /* builder.RegisterInstance(new CatalogMockService()).As(); 134 | builder.RegisterInstance(new BasketMockService()).As(); 135 | builder.RegisterInstance(new OrderMockService()).As(); 136 | builder.RegisterInstance(new UserMockService()).As(); 137 | */ 138 | //UseMockService = true; 139 | } 140 | else 141 | { 142 | /* 143 | builder.RegisterType().As().SingleInstance(); 144 | builder.RegisterType().As().SingleInstance(); 145 | builder.RegisterType().As().SingleInstance(); 146 | builder.RegisterType().As().SingleInstance(); 147 | 148 | UseMockService = false; 149 | */ 150 | } 151 | 152 | if (_container != null) 153 | { 154 | _container.Dispose(); 155 | } 156 | _container = builder.Build(); 157 | 158 | return _container; 159 | } 160 | } 161 | } -------------------------------------------------------------------------------- /DualSplash.Android/Properties/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /DualSplash.Android/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | using Android.App; 5 | 6 | // General Information about an assembly is controlled through the following 7 | // set of attributes. Change these attribute values to modify the information 8 | // associated with an assembly. 9 | [assembly: AssemblyTitle("ExDollar.Test.Vanilla.Android")] 10 | [assembly: AssemblyDescription("")] 11 | [assembly: AssemblyConfiguration("")] 12 | [assembly: AssemblyCompany("")] 13 | [assembly: AssemblyProduct("ExDollar.Test.Vanilla.Android")] 14 | [assembly: AssemblyCopyright("Copyright © 2017")] 15 | [assembly: AssemblyTrademark("")] 16 | [assembly: AssemblyCulture("")] 17 | [assembly: ComVisible(false)] 18 | 19 | // Version information for an assembly consists of the following four values: 20 | // 21 | // Major Version 22 | // Minor Version 23 | // Build Number 24 | // Revision 25 | // 26 | // You can specify all the values or you can default the Build and Revision Numbers 27 | // by using the '*' as shown below: 28 | // [assembly: AssemblyVersion("1.0.*")] 29 | [assembly: AssemblyVersion("1.0.0.0")] 30 | [assembly: AssemblyFileVersion("1.0.0.0")] 31 | -------------------------------------------------------------------------------- /DualSplash.Android/Resources/AboutResources.txt: -------------------------------------------------------------------------------- 1 | Images, layout descriptions, binary blobs and string dictionaries can be included 2 | in your application as resource files. Various Android APIs are designed to 3 | operate on the resource IDs instead of dealing with images, strings or binary blobs 4 | directly. 5 | 6 | For example, a sample Android app that contains a user interface layout (main.axml), 7 | an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) 8 | would keep its resources in the "Resources" directory of the application: 9 | 10 | Resources/ 11 | drawable/ 12 | icon.png 13 | 14 | layout/ 15 | main.axml 16 | 17 | values/ 18 | strings.xml 19 | 20 | In order to get the build system to recognize Android resources, set the build action to 21 | "AndroidResource". The native Android APIs do not operate directly with filenames, but 22 | instead operate on resource IDs. When you compile an Android application that uses resources, 23 | the build system will package the resources for distribution and generate a class called "R" 24 | (this is an Android convention) that contains the tokens for each one of the resources 25 | included. For example, for the above Resources layout, this is what the R class would expose: 26 | 27 | public class R { 28 | public class drawable { 29 | public const int icon = 0x123; 30 | } 31 | 32 | public class layout { 33 | public const int main = 0x456; 34 | } 35 | 36 | public class strings { 37 | public const int first_string = 0xabc; 38 | public const int second_string = 0xbcd; 39 | } 40 | } 41 | 42 | You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main 43 | to reference the layout/main.axml file, or R.strings.first_string to reference the first 44 | string in the dictionary file values/strings.xml. -------------------------------------------------------------------------------- /DualSplash.Android/Resources/drawable-hdpi/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IssacKramer/Xamarin-forms-Android-Startup-Dual-Splash-Screen/b2b005e8c1318bb4e6cd57d415a5d44e15f1ecea/DualSplash.Android/Resources/drawable-hdpi/Icon.png -------------------------------------------------------------------------------- /DualSplash.Android/Resources/drawable-hdpi/first_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IssacKramer/Xamarin-forms-Android-Startup-Dual-Splash-Screen/b2b005e8c1318bb4e6cd57d415a5d44e15f1ecea/DualSplash.Android/Resources/drawable-hdpi/first_screen.png -------------------------------------------------------------------------------- /DualSplash.Android/Resources/drawable-hdpi/splash_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IssacKramer/Xamarin-forms-Android-Startup-Dual-Splash-Screen/b2b005e8c1318bb4e6cd57d415a5d44e15f1ecea/DualSplash.Android/Resources/drawable-hdpi/splash_logo.png -------------------------------------------------------------------------------- /DualSplash.Android/Resources/drawable-mdpi/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IssacKramer/Xamarin-forms-Android-Startup-Dual-Splash-Screen/b2b005e8c1318bb4e6cd57d415a5d44e15f1ecea/DualSplash.Android/Resources/drawable-mdpi/Icon.png -------------------------------------------------------------------------------- /DualSplash.Android/Resources/drawable-mdpi/first_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IssacKramer/Xamarin-forms-Android-Startup-Dual-Splash-Screen/b2b005e8c1318bb4e6cd57d415a5d44e15f1ecea/DualSplash.Android/Resources/drawable-mdpi/first_screen.png -------------------------------------------------------------------------------- /DualSplash.Android/Resources/drawable-mdpi/splash_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IssacKramer/Xamarin-forms-Android-Startup-Dual-Splash-Screen/b2b005e8c1318bb4e6cd57d415a5d44e15f1ecea/DualSplash.Android/Resources/drawable-mdpi/splash_logo.png -------------------------------------------------------------------------------- /DualSplash.Android/Resources/drawable-tvdpi/first_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IssacKramer/Xamarin-forms-Android-Startup-Dual-Splash-Screen/b2b005e8c1318bb4e6cd57d415a5d44e15f1ecea/DualSplash.Android/Resources/drawable-tvdpi/first_screen.png -------------------------------------------------------------------------------- /DualSplash.Android/Resources/drawable-xhdpi/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IssacKramer/Xamarin-forms-Android-Startup-Dual-Splash-Screen/b2b005e8c1318bb4e6cd57d415a5d44e15f1ecea/DualSplash.Android/Resources/drawable-xhdpi/Icon.png -------------------------------------------------------------------------------- /DualSplash.Android/Resources/drawable-xhdpi/first_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IssacKramer/Xamarin-forms-Android-Startup-Dual-Splash-Screen/b2b005e8c1318bb4e6cd57d415a5d44e15f1ecea/DualSplash.Android/Resources/drawable-xhdpi/first_screen.png -------------------------------------------------------------------------------- /DualSplash.Android/Resources/drawable-xhdpi/splash_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IssacKramer/Xamarin-forms-Android-Startup-Dual-Splash-Screen/b2b005e8c1318bb4e6cd57d415a5d44e15f1ecea/DualSplash.Android/Resources/drawable-xhdpi/splash_logo.png -------------------------------------------------------------------------------- /DualSplash.Android/Resources/drawable-xxhdpi/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IssacKramer/Xamarin-forms-Android-Startup-Dual-Splash-Screen/b2b005e8c1318bb4e6cd57d415a5d44e15f1ecea/DualSplash.Android/Resources/drawable-xxhdpi/Icon.png -------------------------------------------------------------------------------- /DualSplash.Android/Resources/drawable-xxhdpi/first_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IssacKramer/Xamarin-forms-Android-Startup-Dual-Splash-Screen/b2b005e8c1318bb4e6cd57d415a5d44e15f1ecea/DualSplash.Android/Resources/drawable-xxhdpi/first_screen.png -------------------------------------------------------------------------------- /DualSplash.Android/Resources/drawable-xxhdpi/splash_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IssacKramer/Xamarin-forms-Android-Startup-Dual-Splash-Screen/b2b005e8c1318bb4e6cd57d415a5d44e15f1ecea/DualSplash.Android/Resources/drawable-xxhdpi/splash_logo.png -------------------------------------------------------------------------------- /DualSplash.Android/Resources/drawable-xxxhdpi/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IssacKramer/Xamarin-forms-Android-Startup-Dual-Splash-Screen/b2b005e8c1318bb4e6cd57d415a5d44e15f1ecea/DualSplash.Android/Resources/drawable-xxxhdpi/Icon.png -------------------------------------------------------------------------------- /DualSplash.Android/Resources/drawable-xxxhdpi/first_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IssacKramer/Xamarin-forms-Android-Startup-Dual-Splash-Screen/b2b005e8c1318bb4e6cd57d415a5d44e15f1ecea/DualSplash.Android/Resources/drawable-xxxhdpi/first_screen.png -------------------------------------------------------------------------------- /DualSplash.Android/Resources/drawable-xxxhdpi/splash_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IssacKramer/Xamarin-forms-Android-Startup-Dual-Splash-Screen/b2b005e8c1318bb4e6cd57d415a5d44e15f1ecea/DualSplash.Android/Resources/drawable-xxxhdpi/splash_logo.png -------------------------------------------------------------------------------- /DualSplash.Android/Resources/drawable/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IssacKramer/Xamarin-forms-Android-Startup-Dual-Splash-Screen/b2b005e8c1318bb4e6cd57d415a5d44e15f1ecea/DualSplash.Android/Resources/drawable/Icon.png -------------------------------------------------------------------------------- /DualSplash.Android/Resources/drawable/first_screen_xml.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /DualSplash.Android/Resources/drawable/splash_screen_xml.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /DualSplash.Android/Resources/layout/Main.axml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /DualSplash.Android/Resources/layout/Tabbar.axml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /DualSplash.Android/Resources/layout/Toolbar.axml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /DualSplash.Android/Resources/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 8 | -------------------------------------------------------------------------------- /DualSplash.Android/Resources/values/Strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Hello World, Click Me! 4 | DualSplash.Android 5 | 6 | -------------------------------------------------------------------------------- /DualSplash.Android/Resources/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | #FFFFFF 3 | #03A9F4 4 | #1976D2 5 | #FFC107 6 | #F5F5F5 7 | #FFFFFF 8 | -------------------------------------------------------------------------------- /DualSplash.Android/Resources/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 29 | 30 | 35 | 36 | 42 | 43 | 46 | 50 | 51 | 52 | 55 | 56 | -------------------------------------------------------------------------------- /DualSplash.Core/DualSplash.Core.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | netstandard1.4 5 | $(PackageTargetFallback);portable45-net45+win8+wpa81; 6 | full 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | SlowPage.xaml 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /DualSplash.Core/DualSplashApp.cs: -------------------------------------------------------------------------------- 1 | using System.Diagnostics; 2 | using Autofac; 3 | using DualSplash.Core.Ioc; 4 | using DualSplash.Core.ViewModels; 5 | using DualSplash.Core.Views; 6 | using Xamarin.Forms; 7 | 8 | namespace DualSplash.Core 9 | { 10 | 11 | [Xamarin.Forms.Internals.Preserve(AllMembers = true)] 12 | public class DualSplashApp : Application 13 | { 14 | public static NavigationPage RootNavigation; 15 | public static Stopwatch stopWatch; 16 | 17 | public DualSplashApp() 18 | { 19 | 20 | 21 | 22 | 23 | 24 | 25 | #if TRACE 26 | 27 | DualSplashApp.stopWatch.Stop(); 28 | System.Diagnostics.Trace.WriteLine($"\n ---------------------------DualSplashApp.cs - Start DualSplashApp Constructor before SlowPage created---------: {DualSplashApp.stopWatch.Elapsed.TotalSeconds}"); 29 | DualSplashApp.stopWatch.Start(); 30 | 31 | #endif 32 | 33 | 34 | //var container = AppContainer.Container; 35 | FastPage fastPage = null; 36 | if (AppContainer.Container != null) 37 | { 38 | 39 | using (var scope = AppContainer.Container.BeginLifetimeScope()) 40 | { 41 | fastPage = scope.Resolve(); 42 | } 43 | } 44 | //var dollarPage = container.Resolve(); 45 | RootNavigation = new NavigationPage(fastPage); 46 | #if TRACE 47 | DualSplashApp.stopWatch.Stop(); 48 | System.Diagnostics.Trace.WriteLine($"\n ---------------------------DualSplashApp.cs - After SlowPage Created---------: {DualSplashApp.stopWatch.Elapsed.TotalSeconds}"); 49 | DualSplashApp.stopWatch.Start(); 50 | #endif 51 | 52 | MainPage = RootNavigation; 53 | #if TRACE 54 | DualSplashApp.stopWatch.Stop(); 55 | System.Diagnostics.Trace.WriteLine($"\n ---------------------------DualSplashApp.cs - After Set Navigation SlowPage---------: {DualSplashApp.stopWatch.Elapsed.TotalSeconds}"); 56 | DualSplashApp.stopWatch.Start(); 57 | #endif 58 | 59 | #if TRACE 60 | DualSplashApp.stopWatch.Stop(); 61 | 62 | System.Diagnostics.Trace.WriteLine($"\n ---------------------------Reach End DualSplashApp Constructor MainPage=mainNav...... {DualSplashApp.stopWatch.Elapsed.TotalSeconds}"); 63 | DualSplashApp.stopWatch.Start(); 64 | #endif 65 | 66 | 67 | 68 | } 69 | 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /DualSplash.Core/Ioc/AppContainer.cs: -------------------------------------------------------------------------------- 1 | using Autofac; 2 | 3 | namespace DualSplash.Core.Ioc 4 | { 5 | public static class AppContainer 6 | { 7 | public static IContainer Container { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /DualSplash.Core/SingleSplashApp.cs: -------------------------------------------------------------------------------- 1 | using System.Diagnostics; 2 | using DualSplash.Core.Views; 3 | using Xamarin.Forms; 4 | 5 | namespace DualSplash.Core 6 | { 7 | 8 | [Xamarin.Forms.Internals.Preserve(AllMembers = true)] 9 | public class SingleSplashApp : Application 10 | { 11 | public static NavigationPage RootNavigation; 12 | public static Stopwatch stopWatch; 13 | 14 | public SingleSplashApp() 15 | { 16 | 17 | 18 | 19 | 20 | 21 | 22 | #if TRACE 23 | 24 | SingleSplashApp.stopWatch.Stop(); 25 | System.Diagnostics.Trace.WriteLine($"\n ---------------------------SingleSplashApp.cs - Start SingleSplashApp Constructor before SlowPage created---------: {SingleSplashApp.stopWatch.Elapsed.TotalSeconds}"); 26 | SingleSplashApp.stopWatch.Start(); 27 | 28 | #endif 29 | 30 | 31 | //var container = AppContainer.Container; 32 | var slowPage = new SlowPage(); 33 | //var dollarPage = container.Resolve(); 34 | RootNavigation = new NavigationPage(slowPage); 35 | #if TRACE 36 | SingleSplashApp.stopWatch.Stop(); 37 | System.Diagnostics.Trace.WriteLine($"\n ---------------------------SingleSplashApp.cs - After SlowPage Created---------: {SingleSplashApp.stopWatch.Elapsed.TotalSeconds}"); 38 | SingleSplashApp.stopWatch.Start(); 39 | #endif 40 | 41 | MainPage = RootNavigation; 42 | #if TRACE 43 | SingleSplashApp.stopWatch.Stop(); 44 | System.Diagnostics.Trace.WriteLine($"\n ---------------------------SingleSplashApp.cs - After Set Navigation SlowPage---------: {SingleSplashApp.stopWatch.Elapsed.TotalSeconds}"); 45 | SingleSplashApp.stopWatch.Start(); 46 | #endif 47 | 48 | #if TRACE 49 | SingleSplashApp.stopWatch.Stop(); 50 | 51 | System.Diagnostics.Trace.WriteLine($"\n ---------------------------Reach End SingleSplashApp Constructor MainPage=mainNav...... {SingleSplashApp.stopWatch.Elapsed.TotalSeconds}"); 52 | SingleSplashApp.stopWatch.Start(); 53 | #endif 54 | 55 | 56 | 57 | } 58 | 59 | 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /DualSplash.Core/Utils/Constants.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace ExDollar.Mobile.Core.Services.Utils 8 | { 9 | public class Constants 10 | { 11 | public const string WindowBackgroundColorDefault = "#F5F5F5"; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /DualSplash.Core/ViewModels/SlowPageViewModel.cs: -------------------------------------------------------------------------------- 1 | using Acr.UserDialogs; 2 | 3 | namespace DualSplash.Core.ViewModels 4 | { 5 | public class SlowPageViewModel :MvvmHelpers.BaseViewModel 6 | { 7 | private bool _toggglePageLoadSwitch; 8 | public IUserDialogs _userDialogs; 9 | public SlowPageViewModel(IUserDialogs userDialogs) 10 | { 11 | _userDialogs = userDialogs; 12 | } 13 | 14 | public bool ToggglePageLoadSwitch 15 | { 16 | get { return _toggglePageLoadSwitch; } 17 | set => SetProperty(ref _toggglePageLoadSwitch, value); 18 | } 19 | 20 | 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /DualSplash.Core/Views/FastPage.cs: -------------------------------------------------------------------------------- 1 | using System.Diagnostics; 2 | using System.Threading.Tasks; 3 | using ExDollar.Mobile.Core.Services.Utils; 4 | using Xamarin.Forms; 5 | using XLabs.Forms.Mvvm; 6 | 7 | namespace DualSplash.Core.Views 8 | { 9 | public class FastPage : SlowPage 10 | { 11 | public FastPage():base() 12 | { 13 | 14 | } 15 | 16 | protected override void OnAppearing() 17 | { 18 | 19 | #if TRACE 20 | if (DualSplashApp.stopWatch == null) DualSplashApp.stopWatch = new Stopwatch(); 21 | DualSplashApp.stopWatch.Stop(); 22 | 23 | System.Diagnostics.Trace.WriteLine($"\n ---------------------------FastPage --Reach OnAppearing() !!! .... {DualSplashApp.stopWatch.Elapsed.TotalSeconds}"); 24 | DualSplashApp.stopWatch.Start(); 25 | 26 | #endif 27 | } 28 | 29 | 30 | 31 | 32 | public override async void Switch_OnToggled(object sender, ToggledEventArgs e) 33 | { 34 | #if TRACE 35 | DualSplashApp.stopWatch.Stop(); 36 | 37 | System.Diagnostics.Trace.WriteLine($"\n ---------------------------FastPage Reach After Page Load - Switch_OnToggled() !!! .... {DualSplashApp.stopWatch.Elapsed.TotalSeconds}"); 38 | DualSplashApp.stopWatch.Start(); 39 | 40 | #endif 41 | 42 | await Task.Yield(); 43 | 44 | this.BackgroundColor = Color.FromHex(Constants.WindowBackgroundColorDefault); 45 | vm._userDialogs.HideLoading(); 46 | 47 | } 48 | } 49 | } -------------------------------------------------------------------------------- /DualSplash.Core/Views/SlowPage.xaml: -------------------------------------------------------------------------------- 1 |  2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |