Skip to content
This repository was archived by the owner on Jun 20, 2023. It is now read-only.

Commit 3666d63

Browse files
committed
CustomTabs: Fixes NavigationEvent
Also adds support for the missing ExtraCallback callback on the custom tabs session. This fixes #13
1 parent b5c9383 commit 3666d63

File tree

3 files changed

+44
-9
lines changed

3 files changed

+44
-9
lines changed

customtabs/samples/ChromeCustomTabsSample/MainActivity.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ protected override void OnCreate (Bundle bundle)
5656
customTabs.NavigationEvent += (navigationEvent, extras) => {
5757
Android.Util.Log.Debug (TAG, "Navigation: " + navigationEvent);
5858
};
59+
customTabs.ExtraCallback += (sender, args) => {
60+
Android.Util.Log.Debug (TAG, "Extra Callback: " + args.CallbackName);
61+
};
5962

6063

6164
simpleLaunch = FindViewById<Button> (Resource.Id.buttonSimpleLaunch);

customtabs/source/Additions/Additions.cs

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,45 @@ namespace Android.Support.CustomTabs
66
public partial class CustomTabsClient
77
{
88
public delegate void OnNavigationEventDelegate (int navigationEvent, Bundle extras);
9+
public delegate void ExtraCallbackDelegate (string callbackName, Bundle args);
910

10-
public CustomTabsSession NewSession (OnNavigationEventDelegate callback)
11+
public CustomTabsSession NewSession (OnNavigationEventDelegate onNavigationEventHandler)
1112
{
12-
return NewSession (new CustomTabsCallbackImpl (callback));
13+
return NewSession (new CustomTabsCallbackImpl (onNavigationEventHandler));
14+
}
15+
16+
public CustomTabsSession NewSession (OnNavigationEventDelegate onNavigationEventHandler, ExtraCallbackDelegate extraCallbackHandler)
17+
{
18+
return NewSession (new CustomTabsCallbackImpl (onNavigationEventHandler, extraCallbackHandler));
1319
}
1420

1521
internal class CustomTabsCallbackImpl : CustomTabsCallback
1622
{
17-
OnNavigationEventDelegate callback;
23+
OnNavigationEventDelegate onNavigationEventHandler;
24+
ExtraCallbackDelegate extraCallbackHandler;
25+
26+
27+
public CustomTabsCallbackImpl (OnNavigationEventDelegate onNavigationEventHandler)
28+
{
29+
this.onNavigationEventHandler = onNavigationEventHandler;
30+
}
31+
32+
public CustomTabsCallbackImpl (OnNavigationEventDelegate onNavigationEventHandler, ExtraCallbackDelegate extraCallbackHandler)
33+
{
34+
this.onNavigationEventHandler = onNavigationEventHandler;
35+
this.extraCallbackHandler = extraCallbackHandler;
36+
}
1837

19-
public CustomTabsCallbackImpl (OnNavigationEventDelegate callback)
38+
public override void OnNavigationEvent (int navigationEvent, Bundle extras)
2039
{
21-
this.callback = callback;
40+
if (onNavigationEventHandler != null)
41+
onNavigationEventHandler (navigationEvent, extras);
2242
}
2343

24-
public void OnNavigationEvent (int navigationEvent, Bundle extras)
44+
public override void ExtraCallback (string callbackName, Bundle args)
2545
{
26-
if (callback != null)
27-
callback (navigationEvent, extras);
46+
if (extraCallbackHandler != null)
47+
extraCallbackHandler (callbackName, args);
2848
}
2949
}
3050
}

customtabs/source/Additions/CustomTabsActivityManager.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ public CustomTabsSession Session {
3333
var evt = NavigationEvent;
3434
if (evt != null)
3535
evt (navEvent, extras);
36+
}, (callbackName, args) => {
37+
var evt = ExtraCallback;
38+
if (evt != null)
39+
evt (this, new ExtraCallbackEventArgs { CallbackName = callbackName, Args = args });
3640
});
3741
}
3842

@@ -43,13 +47,21 @@ public CustomTabsSession Session {
4347
CustomTabsServiceConnectionImpl connection;
4448

4549
public delegate void NavigationEventDelegate (int navigationEvent, Bundle extras);
50+
public delegate void ExtraCallbackDelegate (object sender, ExtraCallbackEventArgs e);
4651
public delegate void CustomTabsServiceConnectedDelegate (ComponentName name, CustomTabsClient client);
4752
public delegate void CustomTabsServiceDisconnectedDelegate (ComponentName name);
4853

4954
public event NavigationEventDelegate NavigationEvent;
55+
public event ExtraCallbackDelegate ExtraCallback;
5056
public event CustomTabsServiceConnectedDelegate CustomTabsServiceConnected;
5157
public event CustomTabsServiceDisconnectedDelegate CustomTabsServiceDisconnected;
5258

59+
public class ExtraCallbackEventArgs
60+
{
61+
public string CallbackName { get; set; }
62+
public Bundle Args { get; set; }
63+
}
64+
5365
public CustomTabsActivityManager (Activity parentActivity)
5466
{
5567
ParentActivity = parentActivity;
@@ -113,7 +125,7 @@ public void LaunchUrl (string url, CustomTabsIntent customTabsIntent = null)
113125
customTabsIntent = new CustomTabsIntent.Builder ()
114126
.Build ();
115127
}
116-
128+
117129
CustomTabsHelper.AddKeepAliveExtra (ParentActivity, customTabsIntent.Intent);
118130

119131
customTabsIntent.LaunchUrl (ParentActivity, Android.Net.Uri.Parse (url));

0 commit comments

Comments
 (0)