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

Commit f612e6a

Browse files
committed
Fix Leanback v17 regressions with click/selected listeners
1 parent 8cfd630 commit f612e6a

File tree

6 files changed

+104
-56
lines changed

6 files changed

+104
-56
lines changed

v17-leanback/samples/AndroidSupportSample/MainFragment.cs

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Android.Content;
55
using Android.Support.V17.Leanback.Widget;
66
using Java.Lang;
7+
using Java.Interop;
78

89
namespace AndroidLeanbackSample
910
{
@@ -15,23 +16,29 @@ public override void OnActivityCreated (Android.OS.Bundle savedInstanceState)
1516

1617
buildAdapter ();
1718

18-
//base.OnItemViewClickedListener = this;
19+
20+
this.ItemViewClicked += (sender, e) => {
21+
var video = (Video)e.Item;
22+
23+
var intent = new Intent (Intent.ActionView, Android.Net.Uri.Parse ("http://www.youtube.com/watch?v=" + video.Id));
24+
StartActivity (intent);
25+
};
26+
27+
this.ItemViewSelected += (sender, e) => {
28+
if (e.Item == null)
29+
return;
30+
31+
var video = (Video)e.Item;
32+
33+
Console.WriteLine ("Selected: " + video.Title);
34+
};
1935

2036
HeadersState = BrowseFragment.HeadersEnabled;
2137
Title = "Xamarin Webinars";
2238
BadgeDrawable = Resources.GetDrawable (Resource.Drawable.icon);
2339
HeadersTransitionOnBackEnabled = true;
2440
}
2541

26-
27-
public void OnItemClicked (Presenter.ViewHolder itemViewHolder, Java.Lang.Object item, RowPresenter.ViewHolder rowViewHolder, Row row)
28-
{
29-
var video = (Video)item;
30-
31-
var intent = new Intent (Intent.ActionView, Android.Net.Uri.Parse ("http://www.youtube.com/watch?v=" + video.Id));
32-
StartActivity (intent);
33-
}
34-
3542
void buildAdapter()
3643
{
3744
var adapter = new ArrayObjectAdapter (new ListRowPresenter ());

v17-leanback/source/Additions/Additions.cs

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,6 @@
44

55
namespace Android.Support.V17.Leanback.Widget
66
{
7-
//[Register ("android/support/v17/leanback/widget/BaseOnItemViewClickedListener", "", "Android.Support.V17.Leanback.Widget.IBaseOnItemViewClickedListenerInvoker"), JavaTypeParameters (new string [] {
8-
// "T"
9-
//})]
10-
//public interface IBaseOnItemViewClickedListener<T> : IJavaObject, IDisposable where T : Java.Lang.Object
11-
//{
12-
// //
13-
// // Methods
14-
// //
15-
// [Register ("onItemClicked", "(Landroid/support/v17/leanback/widget/Presenter$ViewHolder;Ljava/lang/Object;Landroid/support/v17/leanback/widget/RowPresenter$ViewHolder;Ljava/lang/Object;)V", "GetOnItemClicked_Landroid_support_v17_leanback_widget_Presenter_ViewHolder_Ljava_lang_Object_Landroid_support_v17_leanback_widget_RowPresenter_ViewHolder_Ljava_lang_Object_Handler:Android.Support.V17.Leanback.Widget.IBaseOnItemViewClickedListenerInvoker, Xamarin.Android.Support.v17.Leanback")]
16-
// void OnItemClicked (Presenter.ViewHolder itemViewHolder, Java.Lang.Object item, RowPresenter.ViewHolder rowViewHolder, T row);
17-
//}
18-
19-
20-
//[Register ("android/support/v17/leanback/widget/OnItemViewClickedListener", "", "Android.Support.V17.Leanback.Widget.IOnItemViewClickedListenerInvoker"), JavaTypeParameters (new string [] {
21-
// "T"
22-
//})]
23-
//public interface IOnItemViewClickedListener : IBaseOnItemViewClickedListener<Row>
24-
//{
25-
//}
26-
27-
28-
29-
30-
//public interface IBaseOnItemViewClickedListener : IBaseOnItemViewClickedListener<Java.Lang.Object>
31-
//{
32-
//}
33-
347
public partial class BaseCardView
358
{
369
public override bool Selected {

v17-leanback/source/Additions/BrowseFragment.cs

Lines changed: 0 additions & 8 deletions
This file was deleted.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
<metadata>
3+
<attr path="/api/package[@name='android.support.v17.leanback.widget']/interface[@name='BaseOnItemViewClickedListener']/method[@name='onItemClicked' and count(parameter)=4 and parameter[1][@type='android.support.v17.leanback.widget.Presenter.ViewHolder'] and parameter[2][@type='java.lang.Object'] and parameter[3][@type='android.support.v17.leanback.widget.RowPresenter.ViewHolder']]/parameter[1]" name="managedName">itemViewHolder</attr>
4+
<attr path="/api/package[@name='android.support.v17.leanback.widget']/interface[@name='BaseOnItemViewClickedListener']/method[@name='onItemClicked' and count(parameter)=4 and parameter[1][@type='android.support.v17.leanback.widget.Presenter.ViewHolder'] and parameter[2][@type='java.lang.Object'] and parameter[3][@type='android.support.v17.leanback.widget.RowPresenter.ViewHolder']]/parameter[2]" name="managedName">item</attr>
5+
<attr path="/api/package[@name='android.support.v17.leanback.widget']/interface[@name='BaseOnItemViewClickedListener']/method[@name='onItemClicked' and count(parameter)=4 and parameter[1][@type='android.support.v17.leanback.widget.Presenter.ViewHolder'] and parameter[2][@type='java.lang.Object'] and parameter[3][@type='android.support.v17.leanback.widget.RowPresenter.ViewHolder']]/parameter[3]" name="managedName">rowViewHolder</attr>
6+
<attr path="/api/package[@name='android.support.v17.leanback.widget']/interface[@name='BaseOnItemViewClickedListener']/method[@name='onItemClicked' and count(parameter)=4 and parameter[1][@type='android.support.v17.leanback.widget.Presenter.ViewHolder'] and parameter[2][@type='java.lang.Object'] and parameter[3][@type='android.support.v17.leanback.widget.RowPresenter.ViewHolder']]/parameter[4]" name="managedName">row</attr>
7+
8+
<attr path="/api/package[@name='android.support.v17.leanback.widget']/interface[@name='BaseOnItemViewSelectedListener']/method[@name='onItemSelected' and count(parameter)=4 and parameter[1][@type='android.support.v17.leanback.widget.Presenter.ViewHolder'] and parameter[2][@type='java.lang.Object'] and parameter[3][@type='android.support.v17.leanback.widget.RowPresenter.ViewHolder']]/parameter[1]" name="managedName">itemViewHolder</attr>
9+
<attr path="/api/package[@name='android.support.v17.leanback.widget']/interface[@name='BaseOnItemViewSelectedListener']/method[@name='onItemSelected' and count(parameter)=4 and parameter[1][@type='android.support.v17.leanback.widget.Presenter.ViewHolder'] and parameter[2][@type='java.lang.Object'] and parameter[3][@type='android.support.v17.leanback.widget.RowPresenter.ViewHolder']]/parameter[2]" name="managedName">item</attr>
10+
<attr path="/api/package[@name='android.support.v17.leanback.widget']/interface[@name='BaseOnItemViewSelectedListener']/method[@name='onItemSelected' and count(parameter)=4 and parameter[1][@type='android.support.v17.leanback.widget.Presenter.ViewHolder'] and parameter[2][@type='java.lang.Object'] and parameter[3][@type='android.support.v17.leanback.widget.RowPresenter.ViewHolder']]/parameter[3]" name="managedName">rowViewHolder</attr>
11+
<attr path="/api/package[@name='android.support.v17.leanback.widget']/interface[@name='BaseOnItemViewSelectedListener']/method[@name='onItemSelected' and count(parameter)=4 and parameter[1][@type='android.support.v17.leanback.widget.Presenter.ViewHolder'] and parameter[2][@type='java.lang.Object'] and parameter[3][@type='android.support.v17.leanback.widget.RowPresenter.ViewHolder']]/parameter[4]" name="managedName">row</attr>
12+
</metadata>

v17-leanback/source/Transforms/Metadata.xml

Lines changed: 74 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<metadata>
22
<attr path="/api/package[@name='android.support.v17.leanback.app']/class[@name='BaseFragment']" name="visibility">public</attr>
3-
<attr path="/api/package[@name='android.support.v17.leanback.app']/class[@name='BaseSupportFragment']" name="visibility">public</attr>
3+
<attr path="/api/package[@name='android.support.v17.leanback.app']/class[@name='BaseSupportFragment']" name="visibility">public</attr>
44
<attr path="/api/package[@name='android.support.v17.leanback.app']/class[@name='BaseRowFragment']" name="visibility">public</attr>
55
<attr path="/api/package[@name='android.support.v17.leanback.app']/class[@name='BaseRowSupportFragment']" name="visibility">public</attr>
66
<attr path="/api/package[@name='android.support.v17.leanback.app']/interface[@name='HeadersFragment.OnHeaderClickedListener']" name="visibility">internal</attr>
@@ -28,9 +28,7 @@
2828

2929
<remove-node path="/api/package[@name='android.support.v17.leanback.widget']/interface[@name='PlaybackControlsRow.OnPlaybackStateChangedListener']" />
3030

31-
<!-- <remove-node path="/api/package[@name='android.support.v17.leanback.widget']/class[@name='StreamingTextView']" />-->
3231
<attr path="/api/package[@name='android.support.v17.leanback.widget']/class[@name='StreamingTextView']" name="visibility">public</attr>
33-
<!-- <attr path="/api/package[@name='android.support.v17.leanback.widget']/class[@name='SearchEditText']" name="extends">java.lang.Object</attr>-->
3432
<remove-node path="/api/package[@name='android.support.v17.leanback.widget']/class[@name='SearchEditText']/method[@name='updateRecognizedText' and count(parameter)=2 and parameter[1][@type='java.lang.String'] and parameter[2][@type='java.util.List']]" />
3533

3634

@@ -95,13 +93,79 @@
9593

9694
<remove-node path="/api/package[@name='android.support.v17.leanback.widget']/class[@name='BaseGridView']/method[@name='setHasOverlappingRendering' and count(parameter)=1 and parameter[1][@type='boolean']]" />
9795

98-
<attr path="/api/package[@name='android.support.v17.leanback.app']/class[@name='BrowseFragment.MainFragmentItemViewSelectedListener']/method[@name='onItemSelected' and count(parameter)=4 and parameter[1][@type='android.support.v17.leanback.widget.Presenter.ViewHolder'] and parameter[2][@type='java.lang.Object'] and parameter[3][@type='android.support.v17.leanback.widget.RowPresenter.ViewHolder'] and parameter[4][@type='android.support.v17.leanback.widget.Row']]/parameter[4]" name="managedType">Java.Lang.Object</attr>
99-
<attr path="/api/package[@name='android.support.v17.leanback.app']/class[@name='BrowseSupportFragment.MainFragmentItemViewSelectedListener']/method[@name='onItemSelected' and count(parameter)=4 and parameter[1][@type='android.support.v17.leanback.widget.Presenter.ViewHolder'] and parameter[2][@type='java.lang.Object'] and parameter[3][@type='android.support.v17.leanback.widget.RowPresenter.ViewHolder'] and parameter[4][@type='android.support.v17.leanback.widget.Row']]/parameter[4]" name="managedType">Java.Lang.Object</attr>
96+
<!-- The generator can't handle OnItemViewClickedListener implementing BaseOnItemViewClickedListener<Row> in java when it emits the ACW's when you implement the inteface in a c# class -->
97+
<!-- This will remove the implementation and then fake it on the OnItemViewClickedListener interface by adding the method as if it existed there instead of the base interface -->
98+
<remove-node path="/api/package[@name='android.support.v17.leanback.widget']/interface[@name='OnItemViewClickedListener']/implements[1]" />
99+
<add-node path="/api/package[@name='android.support.v17.leanback.widget']/interface[@name='OnItemViewClickedListener']">
100+
<method
101+
abstract="true"
102+
deprecated="not deprecated"
103+
final="false"
104+
name="onItemClicked"
105+
native="false"
106+
return="void"
107+
jni-return="V"
108+
static="false"
109+
synchronized="false"
110+
visibility="public"
111+
bridge="false"
112+
synthetic="false"
113+
jni-signature="(Landroid/support/v17/leanback/widget/Presenter$ViewHolder;Ljava/lang/Object;Landroid/support/v17/leanback/widget/RowPresenter$ViewHolder;Landroid/support/v17/leanback/widget/Row;)V">
114+
<parameter
115+
name="itemViewHolder"
116+
type="android.support.v17.leanback.widget.Presenter.ViewHolder"
117+
jni-type="Landroid/support/v17/leanback/widget/Presenter$ViewHolder;" />
118+
<parameter
119+
name="item"
120+
type="java.lang.Object"
121+
jni-type="Ljava/lang/Object;" />
122+
<parameter
123+
name="rowViewHolder"
124+
type="android.support.v17.leanback.widget.RowPresenter.ViewHolder"
125+
jni-type="Landroid/support/v17/leanback/widget/RowPresenter$ViewHolder;" />
126+
<parameter
127+
name="row"
128+
type="android.support.v17.leanback.widget.Row"
129+
jni-type="Landroid/support/v17/leanback/widget/Row;" />
130+
</method>
131+
</add-node>
132+
133+
<!-- The generator can't handle OnItemViewClickedListener implementing BaseOnItemViewClickedListener<Row> in java when it emits the ACW's when you implement the inteface in a c# class -->
134+
<!-- This will remove the implementation and then fake it on the OnItemViewClickedListener interface by adding the method as if it existed there instead of the base interface -->
135+
<remove-node path="/api/package[@name='android.support.v17.leanback.widget']/interface[@name='OnItemViewSelectedListener']/implements[1]" />
136+
<add-node path="/api/package[@name='android.support.v17.leanback.widget']/interface[@name='OnItemViewSelectedListener']">
137+
<method
138+
abstract="true"
139+
deprecated="not deprecated"
140+
final="false"
141+
name="onItemSelected"
142+
native="false"
143+
return="void"
144+
jni-return="V"
145+
static="false"
146+
synchronized="false"
147+
visibility="public"
148+
bridge="false"
149+
synthetic="false"
150+
jni-signature="(Landroid/support/v17/leanback/widget/Presenter$ViewHolder;Ljava/lang/Object;Landroid/support/v17/leanback/widget/RowPresenter$ViewHolder;Landroid/support/v17/leanback/widget/Row;)V">
151+
<parameter
152+
name="itemViewHolder"
153+
type="android.support.v17.leanback.widget.Presenter.ViewHolder"
154+
jni-type="Landroid/support/v17/leanback/widget/Presenter$ViewHolder;" />
155+
<parameter
156+
name="item"
157+
type="java.lang.Object"
158+
jni-type="Ljava/lang/Object;" />
159+
<parameter
160+
name="rowViewHolder"
161+
type="android.support.v17.leanback.widget.RowPresenter.ViewHolder"
162+
jni-type="Landroid/support/v17/leanback/widget/RowPresenter$ViewHolder;" />
163+
<parameter
164+
name="row"
165+
type="android.support.v17.leanback.widget.Row"
166+
jni-type="Landroid/support/v17/leanback/widget/Row;" />
167+
</method>
168+
</add-node>
100169

101-
<attr path="/api/package[@name='android.support.v17.leanback.widget']/interface[@name='OnItemViewClickedListener']/method[@name='onItemClicked']" name="eventName">ItemViewClicked</attr>
102-
<!--<attr path="/api/package[@name='android.support.v17.leanback.app']/class[@name='BrowseFragment']/method[@name='setOnItemViewClickedListener']" name="managedType">Android.Support.</attr>-->
103-
104-
105-
<!-- <remove-node path="/api/package[@name='android.support.v17.leanback.widget']/interface[@name='BaseOnItemViewClickedListener']" />-->
106170
</metadata>
107171

v17-leanback/source/V17-Leanback.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,12 @@
5555
<Link>Properties\SupportConsts.cs</Link>
5656
</Compile>
5757
<Compile Include="Additions\Additions.cs" />
58-
<Compile Include="Additions\BrowseFragment.cs" />
5958
</ItemGroup>
6059
<ItemGroup>
6160
<TransformFile Include="Transforms\EnumFields.xml" />
6261
<TransformFile Include="Transforms\EnumMethods.xml" />
6362
<TransformFile Include="Transforms\Metadata.xml" />
63+
<TransformFile Include="Transforms\Metadata.ParameterNames.xml" />
6464
</ItemGroup>
6565
<ItemGroup>
6666
<Folder Include="Jars\" />

0 commit comments

Comments
 (0)