Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -398,6 +398,61 @@ public CustomComponentDialog(Context context, int themeResId) : base(context, th
this.OnBackPressedDispatcher.AddCallback(new CallBack(true, this));
}

public override bool OnKeyDown(Keycode keyCode, KeyEvent e)
{
var handled = false;
IPlatformApplication.Current?.Services?.InvokeLifecycleEvents<AndroidLifecycle.OnKeyDown>(del =>
{
handled = del(this, keyCode, e) || handled;
});

return handled || base.OnKeyDown(keyCode, e);
}

public override bool OnKeyLongPress(Keycode keyCode, KeyEvent e)
{
var handled = false;
IPlatformApplication.Current?.Services?.InvokeLifecycleEvents<AndroidLifecycle.OnKeyLongPress>(del =>
{
handled = del(this, keyCode, e) || handled;
});

return handled || base.OnKeyLongPress(keyCode, e);
}

public override bool OnKeyMultiple(Keycode keyCode, int repeatCount, KeyEvent e)
{
var handled = false;
IPlatformApplication.Current?.Services?.InvokeLifecycleEvents<AndroidLifecycle.OnKeyMultiple>(del =>
{
handled = del(this, keyCode, repeatCount, e) || handled;
});

return handled || base.OnKeyMultiple(keyCode, repeatCount, e);
}

public override bool OnKeyShortcut(Keycode keyCode, KeyEvent e)
{
var handled = false;
IPlatformApplication.Current?.Services?.InvokeLifecycleEvents<AndroidLifecycle.OnKeyShortcut>(del =>
{
handled = del(this, keyCode, e) || handled;
});

return handled || base.OnKeyShortcut(keyCode, e);
}

public override bool OnKeyUp(Keycode keyCode, KeyEvent e)
{
var handled = false;
IPlatformApplication.Current?.Services?.InvokeLifecycleEvents<AndroidLifecycle.OnKeyUp>(del =>
{
handled = del(this, keyCode, e) || handled;
});

return handled || base.OnKeyUp(keyCode, e);
}

sealed class CallBack : OnBackPressedCallback
{
WeakReference<CustomComponentDialog> _customComponentDialog;
Expand Down
6 changes: 6 additions & 0 deletions src/Core/src/LifecycleEvents/Android/AndroidLifecycle.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using Android.Content.PM;
using Android.Content.Res;
using Android.OS;
using Android.Views;

namespace Microsoft.Maui.LifecycleEvents
{
Expand Down Expand Up @@ -33,6 +34,11 @@ public static class AndroidLifecycle
public delegate void OnActivityResult(Activity activity, int requestCode, Result resultCode, Intent? data);
public delegate bool OnBackPressed(Activity activity);
public delegate void OnConfigurationChanged(Activity activity, Configuration newConfig);
public delegate bool OnKeyDown(object context, Keycode keyCode, KeyEvent? e);
public delegate bool OnKeyLongPress(object context, Keycode keyCode, KeyEvent? e);
public delegate bool OnKeyMultiple(object context, Keycode keyCode, int repeatCount, KeyEvent? e);
public delegate bool OnKeyShortcut(object context, Keycode keyCode, KeyEvent? e);
public delegate bool OnKeyUp(object context, Keycode keyCode, KeyEvent? e);
public delegate void OnNewIntent(Activity activity, Intent? intent);
public delegate void OnRequestPermissionsResult(Activity activity, int requestCode, string[] permissions, Permission[] grantResults);
public delegate void OnRestoreInstanceState(Activity activity, Bundle savedInstanceState);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@ public static class AndroidLifecycleBuilderExtensions
public static IAndroidLifecycleBuilder OnConfigurationChanged(this IAndroidLifecycleBuilder lifecycle, AndroidLifecycle.OnConfigurationChanged del) => lifecycle.OnEvent(del);
public static IAndroidLifecycleBuilder OnCreate(this IAndroidLifecycleBuilder lifecycle, AndroidLifecycle.OnCreate del) => lifecycle.OnEvent(del);
public static IAndroidLifecycleBuilder OnDestroy(this IAndroidLifecycleBuilder lifecycle, AndroidLifecycle.OnDestroy del) => lifecycle.OnEvent(del);
public static IAndroidLifecycleBuilder OnKeyDown(this IAndroidLifecycleBuilder lifecycle, AndroidLifecycle.OnKeyDown del) => lifecycle.OnEvent(del);
public static IAndroidLifecycleBuilder OnKeyLongPress(this IAndroidLifecycleBuilder lifecycle, AndroidLifecycle.OnKeyLongPress del) => lifecycle.OnEvent(del);
public static IAndroidLifecycleBuilder OnKeyMultiple(this IAndroidLifecycleBuilder lifecycle, AndroidLifecycle.OnKeyMultiple del) => lifecycle.OnEvent(del);
public static IAndroidLifecycleBuilder OnKeyShortcut(this IAndroidLifecycleBuilder lifecycle, AndroidLifecycle.OnKeyShortcut del) => lifecycle.OnEvent(del);
public static IAndroidLifecycleBuilder OnKeyUp(this IAndroidLifecycleBuilder lifecycle, AndroidLifecycle.OnKeyUp del) => lifecycle.OnEvent(del);
public static IAndroidLifecycleBuilder OnNewIntent(this IAndroidLifecycleBuilder lifecycle, AndroidLifecycle.OnNewIntent del) => lifecycle.OnEvent(del);
public static IAndroidLifecycleBuilder OnPause(this IAndroidLifecycleBuilder lifecycle, AndroidLifecycle.OnPause del) => lifecycle.OnEvent(del);
public static IAndroidLifecycleBuilder OnPostCreate(this IAndroidLifecycleBuilder lifecycle, AndroidLifecycle.OnPostCreate del) => lifecycle.OnEvent(del);
Expand Down
56 changes: 56 additions & 0 deletions src/Core/src/Platform/Android/MauiAppCompatActivity.Lifecycle.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using Android.Content.PM;
using Android.Content.Res;
using Android.OS;
using Android.Views;
using Microsoft.Maui.Devices;
using Microsoft.Maui.LifecycleEvents;

Expand Down Expand Up @@ -89,5 +90,60 @@ protected override void OnRestoreInstanceState(Bundle savedInstanceState)

IPlatformApplication.Current?.Services?.InvokeLifecycleEvents<AndroidLifecycle.OnRestoreInstanceState>(del => del(this, savedInstanceState));
}

public override bool OnKeyDown(Keycode keyCode, KeyEvent? e)
{
var handled = false;
IPlatformApplication.Current?.Services?.InvokeLifecycleEvents<AndroidLifecycle.OnKeyDown>(del =>
{
handled = del(this, keyCode, e) || handled;
});

return handled || base.OnKeyDown(keyCode, e);
}

public override bool OnKeyLongPress(Keycode keyCode, KeyEvent? e)
{
var handled = false;
IPlatformApplication.Current?.Services?.InvokeLifecycleEvents<AndroidLifecycle.OnKeyLongPress>(del =>
{
handled = del(this, keyCode, e) || handled;
});

return handled || base.OnKeyLongPress(keyCode, e);
}

public override bool OnKeyMultiple(Keycode keyCode, int repeatCount, KeyEvent? e)
{
var handled = false;
IPlatformApplication.Current?.Services?.InvokeLifecycleEvents<AndroidLifecycle.OnKeyMultiple>(del =>
{
handled = del(this, keyCode, repeatCount, e) || handled;
});

return handled || base.OnKeyMultiple(keyCode, repeatCount, e);
}

public override bool OnKeyShortcut(Keycode keyCode, KeyEvent? e)
{
var handled = false;
IPlatformApplication.Current?.Services?.InvokeLifecycleEvents<AndroidLifecycle.OnKeyShortcut>(del =>
{
handled = del(this, keyCode, e) || handled;
});

return handled || base.OnKeyShortcut(keyCode, e);
}

public override bool OnKeyUp(Keycode keyCode, KeyEvent? e)
{
var handled = false;
IPlatformApplication.Current?.Services?.InvokeLifecycleEvents<AndroidLifecycle.OnKeyUp>(del =>
{
handled = del(this, keyCode, e) || handled;
});

return handled || base.OnKeyUp(keyCode, e);
}
}
}
20 changes: 20 additions & 0 deletions src/Core/src/PublicAPI/net-android/PublicAPI.Unshipped.txt
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,11 @@ Microsoft.Maui.ITimePicker.IsOpen.set -> void
Microsoft.Maui.ITimePicker.Time.get -> System.TimeSpan?
Microsoft.Maui.IWebRequestInterceptingWebView
Microsoft.Maui.IWebRequestInterceptingWebView.WebResourceRequested(Microsoft.Maui.WebResourceRequestedEventArgs! args) -> bool
Microsoft.Maui.LifecycleEvents.AndroidLifecycle.OnKeyDown
Microsoft.Maui.LifecycleEvents.AndroidLifecycle.OnKeyLongPress
Microsoft.Maui.LifecycleEvents.AndroidLifecycle.OnKeyMultiple
Microsoft.Maui.LifecycleEvents.AndroidLifecycle.OnKeyShortcut
Microsoft.Maui.LifecycleEvents.AndroidLifecycle.OnKeyUp
Microsoft.Maui.Platform.MauiHorizontalScrollView
Microsoft.Maui.Platform.MauiHorizontalScrollView.MauiHorizontalScrollView(Android.Content.Context? context, Android.Util.IAttributeSet? attrs) -> void
Microsoft.Maui.Platform.MauiHorizontalScrollView.MauiHorizontalScrollView(Android.Content.Context? context, Android.Util.IAttributeSet? attrs, int defStyleAttr) -> void
Expand Down Expand Up @@ -191,6 +196,11 @@ override Microsoft.Maui.Handlers.OpenWindowRequest.GetHashCode() -> int
override Microsoft.Maui.Handlers.OpenWindowRequest.ToString() -> string!
override Microsoft.Maui.Handlers.RefreshViewHandler.SetVirtualView(Microsoft.Maui.IView! view) -> void
override Microsoft.Maui.Handlers.TimePickerHandler.ConnectHandler(Microsoft.Maui.Platform.MauiTimePicker! platformView) -> void
override Microsoft.Maui.MauiAppCompatActivity.OnKeyDown(Android.Views.Keycode keyCode, Android.Views.KeyEvent? e) -> bool
override Microsoft.Maui.MauiAppCompatActivity.OnKeyLongPress(Android.Views.Keycode keyCode, Android.Views.KeyEvent? e) -> bool
override Microsoft.Maui.MauiAppCompatActivity.OnKeyMultiple(Android.Views.Keycode keyCode, int repeatCount, Android.Views.KeyEvent? e) -> bool
override Microsoft.Maui.MauiAppCompatActivity.OnKeyShortcut(Android.Views.Keycode keyCode, Android.Views.KeyEvent? e) -> bool
override Microsoft.Maui.MauiAppCompatActivity.OnKeyUp(Android.Views.Keycode keyCode, Android.Views.KeyEvent? e) -> bool
override Microsoft.Maui.Platform.MauiDatePicker.DefaultMovementMethod.get -> Android.Text.Method.IMovementMethod?
override Microsoft.Maui.Platform.MauiHorizontalScrollView.Draw(Android.Graphics.Canvas? canvas) -> void
override Microsoft.Maui.Platform.MauiHorizontalScrollView.HorizontalScrollBarEnabled.get -> bool
Expand Down Expand Up @@ -246,6 +256,11 @@ static Microsoft.Maui.Handlers.OpenWindowRequest.operator ==(Microsoft.Maui.Hand
static Microsoft.Maui.Handlers.RefreshViewHandler.MapIsEnabled(Microsoft.Maui.Handlers.IRefreshViewHandler! handler, Microsoft.Maui.IRefreshView! refreshView) -> void
static Microsoft.Maui.Handlers.SearchBarHandler.MapReturnType(Microsoft.Maui.Handlers.ISearchBarHandler! handler, Microsoft.Maui.ISearchBar! searchBar) -> void
static Microsoft.Maui.Hosting.AppHostBuilderExtensions.ConfigureEnvironmentVariables(this Microsoft.Maui.Hosting.MauiAppBuilder! builder) -> Microsoft.Maui.Hosting.MauiAppBuilder!
static Microsoft.Maui.LifecycleEvents.AndroidLifecycleBuilderExtensions.OnKeyDown(this Microsoft.Maui.LifecycleEvents.IAndroidLifecycleBuilder! lifecycle, Microsoft.Maui.LifecycleEvents.AndroidLifecycle.OnKeyDown! del) -> Microsoft.Maui.LifecycleEvents.IAndroidLifecycleBuilder!
static Microsoft.Maui.LifecycleEvents.AndroidLifecycleBuilderExtensions.OnKeyLongPress(this Microsoft.Maui.LifecycleEvents.IAndroidLifecycleBuilder! lifecycle, Microsoft.Maui.LifecycleEvents.AndroidLifecycle.OnKeyLongPress! del) -> Microsoft.Maui.LifecycleEvents.IAndroidLifecycleBuilder!
static Microsoft.Maui.LifecycleEvents.AndroidLifecycleBuilderExtensions.OnKeyMultiple(this Microsoft.Maui.LifecycleEvents.IAndroidLifecycleBuilder! lifecycle, Microsoft.Maui.LifecycleEvents.AndroidLifecycle.OnKeyMultiple! del) -> Microsoft.Maui.LifecycleEvents.IAndroidLifecycleBuilder!
static Microsoft.Maui.LifecycleEvents.AndroidLifecycleBuilderExtensions.OnKeyShortcut(this Microsoft.Maui.LifecycleEvents.IAndroidLifecycleBuilder! lifecycle, Microsoft.Maui.LifecycleEvents.AndroidLifecycle.OnKeyShortcut! del) -> Microsoft.Maui.LifecycleEvents.IAndroidLifecycleBuilder!
static Microsoft.Maui.LifecycleEvents.AndroidLifecycleBuilderExtensions.OnKeyUp(this Microsoft.Maui.LifecycleEvents.IAndroidLifecycleBuilder! lifecycle, Microsoft.Maui.LifecycleEvents.AndroidLifecycle.OnKeyUp! del) -> Microsoft.Maui.LifecycleEvents.IAndroidLifecycleBuilder!
static Microsoft.Maui.Platform.ButtonExtensions.UpdateRippleColor(this Google.Android.Material.Button.MaterialButton! platformView, Microsoft.Maui.Graphics.Color? rippleColor) -> void
static Microsoft.Maui.Platform.EditTextExtensions.GetCursorPosition(this Android.Widget.EditText! editText, int cursorOffset = 0) -> int
static Microsoft.Maui.Platform.EditTextExtensions.GetSelectedTextLength(this Android.Widget.EditText! editText) -> int
Expand Down Expand Up @@ -309,6 +324,11 @@ virtual Microsoft.Maui.LifecycleEvents.AndroidLifecycle.OnBackPressed.Invoke(And
virtual Microsoft.Maui.LifecycleEvents.AndroidLifecycle.OnConfigurationChanged.Invoke(Android.App.Activity! activity, Android.Content.Res.Configuration! newConfig) -> void
virtual Microsoft.Maui.LifecycleEvents.AndroidLifecycle.OnCreate.Invoke(Android.App.Activity! activity, Android.OS.Bundle? savedInstanceState) -> void
virtual Microsoft.Maui.LifecycleEvents.AndroidLifecycle.OnDestroy.Invoke(Android.App.Activity! activity) -> void
virtual Microsoft.Maui.LifecycleEvents.AndroidLifecycle.OnKeyDown.Invoke(object! context, Android.Views.Keycode keyCode, Android.Views.KeyEvent? e) -> bool
virtual Microsoft.Maui.LifecycleEvents.AndroidLifecycle.OnKeyLongPress.Invoke(object! context, Android.Views.Keycode keyCode, Android.Views.KeyEvent? e) -> bool
virtual Microsoft.Maui.LifecycleEvents.AndroidLifecycle.OnKeyMultiple.Invoke(object! context, Android.Views.Keycode keyCode, int repeatCount, Android.Views.KeyEvent? e) -> bool
virtual Microsoft.Maui.LifecycleEvents.AndroidLifecycle.OnKeyShortcut.Invoke(object! context, Android.Views.Keycode keyCode, Android.Views.KeyEvent? e) -> bool
virtual Microsoft.Maui.LifecycleEvents.AndroidLifecycle.OnKeyUp.Invoke(object! context, Android.Views.Keycode keyCode, Android.Views.KeyEvent? e) -> bool
virtual Microsoft.Maui.LifecycleEvents.AndroidLifecycle.OnNewIntent.Invoke(Android.App.Activity! activity, Android.Content.Intent? intent) -> void
virtual Microsoft.Maui.LifecycleEvents.AndroidLifecycle.OnPause.Invoke(Android.App.Activity! activity) -> void
virtual Microsoft.Maui.LifecycleEvents.AndroidLifecycle.OnPostCreate.Invoke(Android.App.Activity! activity, Android.OS.Bundle? savedInstanceState) -> void
Expand Down
Loading