Skip to content

Commit

Permalink
Balloon
Browse files Browse the repository at this point in the history
  • Loading branch information
VladislavAntonyuk committed Jun 11, 2024
1 parent 0beec87 commit 449804f
Show file tree
Hide file tree
Showing 40 changed files with 1,203 additions and 1 deletion.
48 changes: 48 additions & 0 deletions AndroidBindableLibraries/Balloon/Additions/AboutAdditions.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
Additions allow you to add arbitrary C# to the generated classes
before they are compiled. This can be helpful for providing convenience
methods or adding pure C# classes.

== Adding Methods to Generated Classes ==

Let's say the library being bound has a Rectangle class with a constructor
that takes an x and y position, and a width and length size. It will look like
this:

public partial class Rectangle
{
public Rectangle (int x, int y, int width, int height)
{
// JNI bindings
}
}

Imagine we want to add a constructor to this class that takes a Point and
Size structure instead of 4 ints. We can add a new file called Rectangle.cs
with a partial class containing our new method:

public partial class Rectangle
{
public Rectangle (Point location, Size size) :
this (location.X, location.Y, size.Width, size.Height)
{
}
}

At compile time, the additions class will be added to the generated class
and the final assembly will a Rectangle class with both constructors.


== Adding C# Classes ==

Another thing that can be done is adding fully C# managed classes to the
generated library. In the above example, let's assume that there isn't a
Point class available in Java or our library. The one we create doesn't need
to interact with Java, so we'll create it like a normal class in C#.

By adding a Point.cs file with this class, it will end up in the binding library:

public class Point
{
public int X { get; set; }
public int Y { get; set; }
}
45 changes: 45 additions & 0 deletions AndroidBindableLibraries/Balloon/Balloon.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<SupportedOSPlatformVersion>23</SupportedOSPlatformVersion>
<PackageId>VladislavAntonyuk.$(AssemblyName)</PackageId>
<Version>1.6.4</Version>
<PackageReadmeFile>ReadMe.md</PackageReadmeFile>
<PackageOutputPath>..\..\LocalPackages\</PackageOutputPath>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="XamPrototype.Android.MavenBinding.Tasks" Version="0.0.11" />
</ItemGroup>

<ItemGroup>
<!-- Include format is {GroupId}:{ArtifactId} -->
<AndroidMavenLibrary Include="com.github.skydoves:balloon" Version="1.6.4" />
<PackageReference Include="Xamarin.AndroidX.DataBinding.ViewBinding">
<Version>8.4.0</Version>
</PackageReference>
<PackageReference Include="Xamarin.AndroidX.Lifecycle.Runtime.Ktx">
<Version>2.7.0.2</Version>
</PackageReference>
<PackageReference Include="Xamarin.AndroidX.Annotation">
<Version>1.7.1.2</Version>
</PackageReference>
<PackageReference Include="Xamarin.Kotlin.StdLib">
<Version>1.9.23.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.AndroidX.AppCompat">
<Version>1.6.1.8</Version>
</PackageReference>
<PackageReference Include="Xamarin.AndroidX.Core.Core.Ktx">
<Version>1.13.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.AndroidX.Fragment.Ktx">
<Version>1.7.0</Version>
</PackageReference>
</ItemGroup>
<ItemGroup>
<None Update="ReadMe.md">
<Pack>True</Pack>
<PackagePath>\</PackagePath>
</None>
</ItemGroup>
</Project>
24 changes: 24 additions & 0 deletions AndroidBindableLibraries/Balloon/BalloonLayoutBodyBinding.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
namespace Com.Skydoves.Balloon.Databinding;

using Android.Runtime;

public sealed partial class BalloonLayoutBodyBinding : global::Java.Lang.Object, global::AndroidX.ViewBinding.IViewBinding
{
public unsafe global::Android.Views.View Root
{
// Metadata.xml XPath method reference: path="/api/package[@name='com.skydoves.balloon.databinding']/class[@name='BalloonLayoutOverlayBinding']/method[@name='getRoot' and count(parameter)=0]"
[Register("getRoot", "()Lcom/skydoves/balloon/overlay/BalloonAnchorOverlayView;", "")]
get
{
const string __id = "getRoot.()Lcom/skydoves/balloon/overlay/BalloonAnchorOverlayView;";
try
{
var __rm = _members.InstanceMethods.InvokeAbstractObjectMethod(__id, this, null);
return global::Java.Lang.Object.GetObject<global::Com.Skydoves.Balloon.Overlay.BalloonAnchorOverlayView>(__rm.Handle, JniHandleOwnership.TransferLocalRef)!;
}
finally
{
}
}
}
}
24 changes: 24 additions & 0 deletions AndroidBindableLibraries/Balloon/BalloonLayoutOverlayBinding.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
namespace Com.Skydoves.Balloon.Databinding;

using Android.Runtime;

public sealed partial class BalloonLayoutOverlayBinding : global::Java.Lang.Object, global::AndroidX.ViewBinding.IViewBinding
{
public unsafe global::Android.Views.View Root
{
// Metadata.xml XPath method reference: path="/api/package[@name='com.skydoves.balloon.databinding']/class[@name='BalloonLayoutOverlayBinding']/method[@name='getRoot' and count(parameter)=0]"
[Register("getRoot", "()Lcom/skydoves/balloon/overlay/BalloonAnchorOverlayView;", "")]
get
{
const string __id = "getRoot.()Lcom/skydoves/balloon/overlay/BalloonAnchorOverlayView;";
try
{
var __rm = _members.InstanceMethods.InvokeAbstractObjectMethod(__id, this, null);
return global::Java.Lang.Object.GetObject<global::Com.Skydoves.Balloon.Overlay.BalloonAnchorOverlayView>(__rm.Handle, JniHandleOwnership.TransferLocalRef)!;
}
finally
{
}
}
}
}
3 changes: 3 additions & 0 deletions AndroidBindableLibraries/Balloon/ReadMe.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Android Balloon

Android Java Library Binding for [Balloon](https://github.com/skydoves/Balloon)
14 changes: 14 additions & 0 deletions AndroidBindableLibraries/Balloon/Transforms/EnumFields.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<enum-field-mappings>
<!--
This example converts the constants Fragment_id, Fragment_name,
and Fragment_tag from android.support.v4.app.FragmentActivity.FragmentTag
to an enum called Android.Support.V4.App.FragmentTagType with values
Id, Name, and Tag.
<mapping jni-class="android/support/v4/app/FragmentActivity$FragmentTag" clr-enum-type="Android.Support.V4.App.FragmentTagType">
<field jni-name="Fragment_name" clr-name="Name" value="0" />
<field jni-name="Fragment_id" clr-name="Id" value="1" />
<field jni-name="Fragment_tag" clr-name="Tag" value="2" />
</mapping>
-->
</enum-field-mappings>
13 changes: 13 additions & 0 deletions AndroidBindableLibraries/Balloon/Transforms/EnumMethods.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<enum-method-mappings>
<!--
This example changes the Java method:
android.support.v4.app.Fragment.SavedState.writeToParcel (int flags)
to be:
android.support.v4.app.Fragment.SavedState.writeToParcel (Android.OS.ParcelableWriteFlags flags)
when bound in C#.
<mapping jni-class="android/support/v4/app/Fragment.SavedState">
<method jni-name="writeToParcel" parameter="flags" clr-enum-type="Android.OS.ParcelableWriteFlags" />
</mapping>
-->
</enum-method-mappings>
17 changes: 17 additions & 0 deletions AndroidBindableLibraries/Balloon/Transforms/Metadata.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<metadata>
<!--
This sample removes the class: android.support.v4.content.AsyncTaskLoader.LoadTask:
<remove-node path="/api/package[@name='android.support.v4.content']/class[@name='AsyncTaskLoader.LoadTask']" />
This sample removes the method: android.support.v4.content.CursorLoader.loadInBackground:
<remove-node path="/api/package[@name='android.support.v4.content']/class[@name='CursorLoader']/method[@name='loadInBackground']" />
-->
<remove-node path="/api/package[@name='com.skydoves.balloon.databinding']/class[@name='BalloonLayoutBodyBinding']/method[@name='getRoot' and count(parameter)=0]" />
<remove-node path="/api/package[@name='com.skydoves.balloon.databinding']/class[@name='BalloonLayoutOverlayBinding']/method[@name='getRoot' and count(parameter)=0]" />
<!--<add-node path="/api/package[@name='com.skydoves.balloon.databinding']/class[@name='BalloonLayoutBodyBinding']/method[@name='getRoot' and count(parameter)=0]">
</add-node>
<add-node path="/api/package[@name='com.skydoves.balloon.databinding']/class[@name='BalloonLayoutOverlayBinding']/method[@name='getRoot' and count(parameter)=0]">
</add-node>-->
</metadata>
14 changes: 14 additions & 0 deletions AndroidBindableLibraries/Sample/App.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version = "1.0" encoding = "UTF-8" ?>
<Application xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:Sample"
x:Class="Sample.App">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Resources/Styles/Colors.xaml" />
<ResourceDictionary Source="Resources/Styles/Styles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
12 changes: 12 additions & 0 deletions AndroidBindableLibraries/Sample/App.xaml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
namespace Sample
{
public partial class App : Application
{
public App()
{
InitializeComponent();

MainPage = new AppShell();
}
}
}
15 changes: 15 additions & 0 deletions AndroidBindableLibraries/Sample/AppShell.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Shell
x:Class="Sample.AppShell"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:Sample"
Shell.FlyoutBehavior="Disabled"
Title="Sample">

<ShellContent
Title="Home"
ContentTemplate="{DataTemplate local:MainPage}"
Route="MainPage" />

</Shell>
10 changes: 10 additions & 0 deletions AndroidBindableLibraries/Sample/AppShell.xaml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace Sample
{
public partial class AppShell : Shell
{
public AppShell()
{
InitializeComponent();
}
}
}
23 changes: 23 additions & 0 deletions AndroidBindableLibraries/Sample/BallonContent.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>

<ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:calendar="clr-namespace:Sample.Calendar"
x:Class="Sample.BallonContent">
<ScrollView>
<VerticalStackLayout>
<Grid ColumnDefinitions="20, *"
RowDefinitions="Auto, Auto">

<Label Grid.Column="0" Grid.Row="0" Text="&#x2022;"/>
<Label Grid.Column="1" Grid.Row="0" Text="Long text long text long text long text long text long text long text"/>

<Label Grid.Column="0" Grid.Row="1" Text="&#x2022;"/>
<Label Grid.Column="1" Grid.Row="1" Text="Some text"/>
</Grid>
<Button Text="Show Toast" Clicked="Button_OnClicked"/>
<calendar:CalendarView MinimumHeightRequest="200"/>
</VerticalStackLayout>
</ScrollView>

</ContentView>
16 changes: 16 additions & 0 deletions AndroidBindableLibraries/Sample/BallonContent.xaml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
namespace Sample;

using Android.Widget;

public partial class BallonContent : ContentView
{
public BallonContent()
{
InitializeComponent();
}

private void Button_OnClicked(object? sender, EventArgs e)
{
Toast.MakeText(Platform.AppContext, "ButtonClicked", ToastLength.Long).Show();
}
}
Loading

0 comments on commit 449804f

Please sign in to comment.