Răsfoiți Sursa

drop splash screen activity

Emmanuel Hansen 2 ani în urmă
părinte
comite
112648c1a8

+ 9 - 0
samples/ControlCatalog.Android/ControlCatalog.Android.csproj

@@ -10,6 +10,11 @@
     <AndroidPackageFormat>apk</AndroidPackageFormat>
     <MSBuildEnableWorkloadResolver>true</MSBuildEnableWorkloadResolver>
   </PropertyGroup>
+  <ItemGroup>
+    <None Remove="Resources\drawable-night-v31\avalonia_anim.xml" />
+    <None Remove="Resources\drawable-v31\avalonia_anim.xml" />
+    <None Remove="Resources\values-v31\styles.xml" />
+  </ItemGroup>
   <ItemGroup>
     <AndroidResource Include="..\..\build\Assets\Icon.png">
       <Link>Resources\drawable\Icon.png</Link>
@@ -37,6 +42,10 @@
     <AndroidEnvironment Condition="'$(IsEmulator)'!='True'" Include="environment.device.txt" />
   </ItemGroup>
 
+  <ItemGroup>
+    <PackageReference Include="Xamarin.AndroidX.Core.SplashScreen" Version="1.0.1" />
+  </ItemGroup>
+
   <ItemGroup>
     <ProjectReference Include="..\..\src\Android\Avalonia.Android\Avalonia.Android.csproj" />
     <ProjectReference Include="..\ControlCatalog\ControlCatalog.csproj" />

+ 10 - 2
samples/ControlCatalog.Android/MainActivity.cs

@@ -5,8 +5,16 @@ using Avalonia.Android;
 
 namespace ControlCatalog.Android
 {
-    [Activity(Label = "ControlCatalog.Android", Theme = "@style/MyTheme.Main", Icon = "@drawable/icon", LaunchMode = LaunchMode.SingleTop, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize | ConfigChanges.UiMode)]
-    public class MainActivity : AvaloniaMainActivity
+    [Activity(Label = "ControlCatalog.Android", Theme = "@style/MyTheme.NoActionBar", Icon = "@drawable/icon", MainLauncher = true, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize | ConfigChanges.UiMode)]
+    public class MainActivity : AvaloniaMainActivity<App>
     {
+        protected override Avalonia.AppBuilder CustomizeAppBuilder(Avalonia.AppBuilder builder)
+        {
+            return base.CustomizeAppBuilder(builder)
+                 .AfterSetup(_ =>
+                 {
+                     Pages.EmbedSample.Implementation = new EmbedSampleAndroid();
+                 });
+        }
     }
 }

+ 0 - 35
samples/ControlCatalog.Android/SplashActivity.cs

@@ -1,35 +0,0 @@
-using Android.App;
-using Android.Content;
-using Android.Content.PM;
-using Android.OS;
-using Avalonia.Android;
-
-namespace ControlCatalog.Android
-{
-    [Activity(Theme = "@style/MyTheme.Splash", MainLauncher = true, NoHistory = true)]
-    public class SplashActivity : AvaloniaSplashActivity<App>
-    {
-        protected override Avalonia.AppBuilder CustomizeAppBuilder(Avalonia.AppBuilder builder)
-        {
-            return base.CustomizeAppBuilder(builder)
-                 .AfterSetup(_ =>
-                 {
-                     Pages.EmbedSample.Implementation = new EmbedSampleAndroid();
-                 });
-        }
-
-        protected override void OnCreate(Bundle? savedInstanceState)
-        {
-            base.OnCreate(savedInstanceState);
-        }
-
-        protected override void OnResume()
-        {
-            base.OnResume();
-
-            StartActivity(new Intent(Application.Context, typeof(MainActivity)));
-
-            Finish();
-        }
-    }
-}

+ 2 - 3
samples/MobileSandbox.Android/MainActivity.cs

@@ -1,12 +1,11 @@
 using Android.App;
 using Android.Content.PM;
-using Avalonia;
 using Avalonia.Android;
 
 namespace MobileSandbox.Android
 {
-    [Activity(Label = "MobileSandbox.Android", Theme = "@style/MyTheme.NoActionBar", Icon = "@drawable/icon", LaunchMode = LaunchMode.SingleTop, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize)]
-    public class MainActivity : AvaloniaMainActivity
+    [Activity(Label = "MobileSandbox.Android", Theme = "@style/MyTheme.NoActionBar", Icon = "@drawable/icon", MainLauncher = true, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize)]
+    public class MainActivity : AvaloniaMainActivity<App>
     {
     }
 }

+ 10 - 0
samples/MobileSandbox.Android/MobileSandbox.Android.csproj

@@ -10,6 +10,12 @@
     <AndroidPackageFormat>apk</AndroidPackageFormat>
     <MSBuildEnableWorkloadResolver>true</MSBuildEnableWorkloadResolver>
   </PropertyGroup>
+  <ItemGroup>
+    <None Remove="Resources\drawable-night-v31\avalonia_anim.xml" />
+    <None Remove="Resources\drawable-v31\avalonia_anim.xml" />
+    <None Remove="Resources\values-v31\styles.xml" />
+    <None Remove="Resources\values-night\colors.xml" />
+  </ItemGroup>
   <ItemGroup>
     <AndroidResource Include="..\..\build\Assets\Icon.png">
       <Link>Resources\drawable\Icon.png</Link>
@@ -37,6 +43,10 @@
     <AndroidEnvironment Condition="'$(IsEmulator)'!='True'" Include="environment.device.txt" />
   </ItemGroup>
 
+  <ItemGroup>
+    <PackageReference Include="Xamarin.AndroidX.Core.SplashScreen" Version="1.0.1" />
+  </ItemGroup>
+
   <ItemGroup>
     <ProjectReference Include="..\..\src\Android\Avalonia.Android\Avalonia.Android.csproj" />
     <ProjectReference Include="..\MobileSandbox\MobileSandbox.csproj" />

+ 0 - 17
samples/MobileSandbox.Android/SplashActivity.cs

@@ -1,17 +0,0 @@
-using Android.App;
-using Android.Content;
-using Avalonia.Android;
-
-namespace MobileSandbox.Android
-{
-    [Activity(Theme = "@style/MyTheme.Splash", MainLauncher = true, NoHistory = true)]
-    public class SplashActivity : AvaloniaSplashActivity<App>
-    {
-        protected override void OnResume()
-        {
-            base.OnResume();
-
-            StartActivity(new Intent(Application.Context, typeof(MainActivity)));
-        }
-    }
-}

+ 60 - 0
src/Android/Avalonia.Android/AvaloniaMainActivity.App.cs

@@ -0,0 +1,60 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Avalonia.Android
+{
+    partial class AvaloniaMainActivity<TApp> where TApp : Application, new()
+    {
+        protected virtual AppBuilder CustomizeAppBuilder(AppBuilder builder) => builder.UseAndroid();
+
+        private static AppBuilder? s_appBuilder;
+        internal static object ViewContent;
+
+        public object Content
+        {
+            get
+            {
+                return ViewContent;
+            }
+            set
+            {
+                ViewContent = value;
+                if (View != null)
+                    View.Content = value;
+            }
+        }
+
+        protected AppBuilder CreateAppBuilder()
+        {
+            var builder = AppBuilder.Configure<TApp>();
+
+            return CustomizeAppBuilder(builder);
+        }
+
+        private void InitializeApp()
+        {
+            if (s_appBuilder == null)
+            {
+                var builder = CreateAppBuilder();
+
+                builder.SetupWithLifetime(new SingleViewLifetime());
+
+                s_appBuilder = builder;
+            }
+
+            View = new AvaloniaView(this);
+            if (ViewContent != null)
+            {
+                View.Content = ViewContent;
+            }
+
+            if (Avalonia.Application.Current.ApplicationLifetime is SingleViewLifetime lifetime)
+            {
+                lifetime.View = View;
+            }
+        }
+    }
+}

+ 34 - 54
src/Android/Avalonia.Android/AvaloniaMainActivity.cs

@@ -11,27 +11,49 @@ using AndroidX.AppCompat.App;
 
 namespace Avalonia.Android
 {
-    public abstract class AvaloniaMainActivity : AppCompatActivity, IActivityResultHandler, IActivityNavigationService
+    public class AvaloniaMainActivity : AppCompatActivity, IActivityResultHandler, IActivityNavigationService
     {
-        internal static object ViewContent;
-
         public Action<int, Result, Intent> ActivityResult { get; set; }
         public Action<int, string[], Permission[]> RequestPermissionsResult { get; set; }
+
+        public event EventHandler<AndroidBackRequestedEventArgs> BackRequested;
+
+        public override void OnBackPressed()
+        {
+            var eventArgs = new AndroidBackRequestedEventArgs();
+
+            BackRequested?.Invoke(this, eventArgs);
+
+            if (!eventArgs.Handled)
+            {
+                base.OnBackPressed();
+            }
+        }
+
+        protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)
+        {
+            base.OnActivityResult(requestCode, resultCode, data);
+
+            ActivityResult?.Invoke(requestCode, resultCode, data);
+        }
+
+        public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
+        {
+            base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
+
+            RequestPermissionsResult?.Invoke(requestCode, permissions, grantResults);
+        }
+    }
+
+    public abstract partial class AvaloniaMainActivity<TApp> : AvaloniaMainActivity  where TApp : Application, new()
+    {
         internal AvaloniaView View;
         private GlobalLayoutListener _listener;
 
         protected override void OnCreate(Bundle savedInstanceState)
         {
-            View = new AvaloniaView(this);
-            if (ViewContent != null)
-            {
-                View.Content = ViewContent;
-            }
+            InitializeApp();
 
-            if (Avalonia.Application.Current.ApplicationLifetime is SingleViewLifetime lifetime)
-            {
-                lifetime.View = View;
-            }
             base.OnCreate(savedInstanceState);
 
             SetContentView(View);
@@ -41,20 +63,6 @@ namespace Avalonia.Android
             View.ViewTreeObserver?.AddOnGlobalLayoutListener(_listener);
         }
 
-        public object Content
-        {
-            get
-            {
-                return ViewContent;
-            }
-            set
-            {
-                ViewContent = value;
-                if (View != null)
-                    View.Content = value;
-            }
-        }
-
         protected override void OnResume()
         {
             base.OnResume();
@@ -66,20 +74,6 @@ namespace Avalonia.Android
             }
         }
 
-        public event EventHandler<AndroidBackRequestedEventArgs> BackRequested;
-
-        public override void OnBackPressed()
-        {
-            var eventArgs = new AndroidBackRequestedEventArgs();
-
-            BackRequested?.Invoke(this, eventArgs);
-
-            if (!eventArgs.Handled)
-            {
-                base.OnBackPressed();
-            }
-        }
-
         protected override void OnDestroy()
         {
             View.Content = null;
@@ -89,20 +83,6 @@ namespace Avalonia.Android
             base.OnDestroy();
         }
 
-        protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)
-        {
-            base.OnActivityResult(requestCode, resultCode, data);
-
-            ActivityResult?.Invoke(requestCode, resultCode, data);
-        }
-
-        public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
-        {
-            base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
-            
-            RequestPermissionsResult?.Invoke(requestCode, permissions, grantResults);
-        }
-
         class GlobalLayoutListener : Java.Lang.Object, ViewTreeObserver.IOnGlobalLayoutListener
         {
             private AvaloniaView _view;

+ 0 - 40
src/Android/Avalonia.Android/AvaloniaSplashActivity.cs

@@ -1,40 +0,0 @@
-using Android.OS;
-using AndroidX.AppCompat.App;
-
-namespace Avalonia.Android
-{
-    public abstract class AvaloniaSplashActivity : AppCompatActivity
-    {
-        protected abstract AppBuilder CreateAppBuilder();
-
-        private static AppBuilder s_appBuilder;
-
-        protected override void OnCreate(Bundle? savedInstanceState)
-        {
-            base.OnCreate(savedInstanceState);
-
-            if (s_appBuilder == null)
-            {
-                var builder = CreateAppBuilder();
-
-                var lifetime = new SingleViewLifetime();
-
-                builder.SetupWithLifetime(lifetime);
-
-                s_appBuilder = builder;
-            }
-        }
-    }
-
-    public abstract class AvaloniaSplashActivity<TApp> : AvaloniaSplashActivity where TApp : Application, new()
-    {
-        protected virtual AppBuilder CustomizeAppBuilder(AppBuilder builder) => builder.UseAndroid();
-
-        protected override AppBuilder CreateAppBuilder()
-        {
-            var builder = AppBuilder.Configure<TApp>();
-
-            return CustomizeAppBuilder(builder);
-        }
-    }
-}