Browse Source

[ANDROID] Make ToplevelImpl._view nullable. (#21270)

* mark ToplevelImpl._view as nullable.

* Update src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs

Co-authored-by: Max Katz <maxkatz6@outlook.com>

* return 1 as default scaling in android TopLevelImpl

---------

Co-authored-by: Max Katz <maxkatz6@outlook.com>
release/latest
Emmanuel Hansen 3 months ago
committed by Julien Lebosquain
parent
commit
650b30ca03
  1. 6
      src/Android/Avalonia.Android/AvaloniaView.cs
  2. 2
      src/Android/Avalonia.Android/Platform/AndroidScreens.cs
  3. 36
      src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs

6
src/Android/Avalonia.Android/AvaloniaView.cs

@ -35,10 +35,10 @@ namespace Avalonia.Android
_root = new EmbeddableControlRoot(_view);
_root.Prepare();
this.SetBackgroundColor(global::Android.Graphics.Color.Transparent);
SetBackgroundColor(global::Android.Graphics.Color.Transparent);
OnConfigurationChanged();
_view.InternalView.SurfaceWindowCreated += InternalView_SurfaceWindowCreated;
_view.InternalView!.SurfaceWindowCreated += InternalView_SurfaceWindowCreated;
_view.InternalView.SurfaceWindowDestroyed += InternalView_SurfaceWindowDestroyed;
_accessHelper = new AvaloniaAccessHelper(this);
@ -141,7 +141,7 @@ namespace Avalonia.Android
{
public ViewImpl(AvaloniaView avaloniaView) : base(avaloniaView)
{
View.FocusChange += ViewImpl_FocusChange;
View!.FocusChange += ViewImpl_FocusChange;
}
private void ViewImpl_FocusChange(object? sender, FocusChangeEventArgs e)

2
src/Android/Avalonia.Android/Platform/AndroidScreens.cs

@ -125,7 +125,7 @@ internal sealed class AndroidScreens : ScreensBase<Display, AndroidScreen>, IDis
protected override Screen? ScreenFromTopLevelCore(ITopLevelImpl topLevel)
{
var display = ((TopLevelImpl)topLevel).View.Display;
var display = ((TopLevelImpl)topLevel).View?.Display;
return display is not null && TryGetScreen(display, out var screen) ? screen : null;
}

36
src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs

@ -19,8 +19,8 @@ using Avalonia.Input.Raw;
using Avalonia.Input.TextInput;
using Avalonia.OpenGL.Egl;
using Avalonia.Platform;
using Avalonia.Platform.Surfaces;
using Avalonia.Platform.Storage;
using Avalonia.Platform.Surfaces;
using Avalonia.Rendering.Composition;
using Java.Lang;
using ClipboardManager = Android.Content.ClipboardManager;
@ -39,7 +39,7 @@ namespace Avalonia.Android.Platform.SkiaPlatform
private readonly Clipboard _clipboard;
private readonly AndroidLauncher? _launcher;
private readonly AndroidScreens? _screens;
private SurfaceViewImpl _view;
private SurfaceViewImpl? _view;
private WindowTransparencyLevel _transparencyLevel;
public TopLevelImpl(AvaloniaView avaloniaView, bool placeOnTop = false)
@ -78,8 +78,8 @@ namespace Avalonia.Android.Platform.SkiaPlatform
public IInputRoot? InputRoot { get; private set; }
public Size ClientSize => _view.Size.ToSize(RenderScaling);
public double RenderScaling => _view.Scaling;
public Size ClientSize => _view?.Size.ToSize(RenderScaling) ?? default;
public double RenderScaling => _view?.Scaling ?? 1;
public Action? Closed { get; set; }
@ -91,9 +91,9 @@ namespace Avalonia.Android.Platform.SkiaPlatform
public Action<double>? ScalingChanged { get; set; }
public View View => _view;
public View? View => _view;
internal InvalidationAwareSurfaceView InternalView => _view;
internal InvalidationAwareSurfaceView? InternalView => _view;
public double DesktopScaling => RenderScaling;
public IPlatformHandle Handle { get; }
@ -126,8 +126,8 @@ namespace Avalonia.Android.Platform.SkiaPlatform
public virtual void Dispose()
{
_systemNavigationManager.Dispose();
_view.Dispose();
_view = null!;
_view?.Dispose();
_view = null;
}
protected void OnResized(Size size)
@ -193,7 +193,7 @@ namespace Avalonia.Android.Platform.SkiaPlatform
// ReSharper disable once CompareOfFloatsByEqualityOperator
if (newScaling != _oldScaling)
{
_oldScaling = newScaling;
_oldScaling = newScaling;
_tl.ScalingChanged?.Invoke(newScaling);
}
}
@ -232,7 +232,7 @@ namespace Avalonia.Android.Platform.SkiaPlatform
public void SetFrameThemeVariant(PlatformThemeVariant themeVariant)
{
if(_insetsManager != null)
if (_insetsManager != null)
{
_insetsManager.SystemBarTheme = themeVariant switch
{
@ -245,12 +245,12 @@ namespace Avalonia.Android.Platform.SkiaPlatform
AppCompatDelegate.DefaultNightMode = themeVariant == PlatformThemeVariant.Light ? AppCompatDelegate.ModeNightNo : AppCompatDelegate.ModeNightYes;
}
public AcrylicPlatformCompensationLevels AcrylicCompensationLevels => new AcrylicPlatformCompensationLevels(1, 1, 1);
public AcrylicPlatformCompensationLevels AcrylicCompensationLevels => new(1, 1, 1);
IntPtr EglGlPlatformSurface.IEglWindowGlPlatformSurfaceInfo.Handle => ((IPlatformHandle)_view).Handle;
IntPtr EglGlPlatformSurface.IEglWindowGlPlatformSurfaceInfo.Handle => (_view as IPlatformHandle)?.Handle ?? default;
bool EglGlPlatformSurface.IEglWindowGlPlatformSurfaceInfoWithWaitPolicy.SkipWaits => true;
PixelSize EglGlPlatformSurface.IEglWindowGlPlatformSurfaceInfo.Size => _view.Size;
double EglGlPlatformSurface.IEglWindowGlPlatformSurfaceInfo.Scaling => _view.Scaling;
PixelSize EglGlPlatformSurface.IEglWindowGlPlatformSurfaceInfo.Size => _view?.Size ?? default;
double EglGlPlatformSurface.IEglWindowGlPlatformSurfaceInfo.Scaling => _view?.Scaling ?? default;
internal AndroidKeyboardEventsHelper<TopLevelImpl> KeyboardHelper => _keyboardHelper;
@ -258,7 +258,7 @@ namespace Avalonia.Android.Platform.SkiaPlatform
public void SetTransparencyLevelHint(IReadOnlyList<WindowTransparencyLevel> transparencyLevels)
{
if (_view.Context is not AvaloniaActivity activity)
if (_view?.Context is not AvaloniaActivity activity)
return;
foreach (var level in transparencyLevels)
@ -341,7 +341,7 @@ namespace Avalonia.Android.Platform.SkiaPlatform
return _insetsManager;
}
if(featureType == typeof(IClipboard))
if (featureType == typeof(IClipboard))
{
return _clipboard;
}
@ -355,7 +355,7 @@ namespace Avalonia.Android.Platform.SkiaPlatform
{
return _screens;
}
return null;
}
@ -386,7 +386,7 @@ namespace Avalonia.Android.Platform.SkiaPlatform
internal void TextInput(string text)
{
if(Input != null)
if (Input != null)
{
var args = new RawTextInputEventArgs(AndroidKeyboardDevice.Instance!, (ulong)SystemClock.UptimeMillis(), InputRoot!, text);

Loading…
Cancel
Save