Skip to content

Commit

Permalink
More cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
Redth committed Jun 13, 2022
1 parent 1e1ef8a commit fbf64fb
Show file tree
Hide file tree
Showing 9 changed files with 116 additions and 106 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>

<PropertyGroup Condition="'$(TargetFramework)' == 'net6.0-android'">
<SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>
</PropertyGroup>

<ItemGroup>
<None Remove="Controls\" />
</ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
using Microsoft.Maui.Handlers;
using Microsoft.PlatformChannels;
using AndroidViewChannel = Microsoft.PlatformChannels.Platform.ViewChannel;
using PChannel = Microsoft.PlatformChannels.Channel;
using AViewGroup = Android.Widget.LinearLayout;

namespace Microsoft.Maui.PlatformChannels;
Expand Down Expand Up @@ -96,11 +95,11 @@ void EnsureChannelCreated()

internal object SendToPlatformImpl(string messageId, object[] args)
{
var platformObjs = PChannel.ToPlatformObjects(args);
var platformObjs = args.ToPlatformObjects();

var platformResp = platformViewChannel?.HandleMessageFromDotNet(messageId, platformObjs);

var result = PChannel.ToDotNetObject(platformResp);
var result = platformResp.ToDotNetObject();

return result;
}
Expand All @@ -116,7 +115,7 @@ public PlatformManagedHandler(Func<string, object[], object> callback)
protected readonly Func<string, object[], object> Callback;

public PlatformObject OnChannelMessage(string id, PlatformObject[] parameters)
=> PChannel.ToPlatformObject(Callback?.Invoke(id, PChannel.ToDotNetObjects(parameters)));
=> Callback?.Invoke(id, parameters.ToDotNetObjects()).ToPlatformObject();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
<EnableDefaultCompileItems>False</EnableDefaultCompileItems>
<RootNamespace>Microsoft.PlatformChannels.Platform</RootNamespace>
</PropertyGroup>
<!--<PropertyGroup Condition="'$(TargetFramework)' == 'net6.0-android'">
<PropertyGroup Condition="'$(TargetFramework)' == 'net6.0-android'">
<SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>
</PropertyGroup>-->
</PropertyGroup>

<PropertyGroup Condition="'$(TargetFramework)' == 'net6.0-ios' OR '$(TargetFramework)' == 'net6.0-maccatalyst' ">
<IsBindingProject>True</IsBindingProject>
Expand Down
26 changes: 2 additions & 24 deletions Microsoft.PlatformChannels/Channel.shared.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,33 +14,11 @@ internal Channel(PlatformChannel platformChannel)
internal PlatformChannel PlatformChannel { get; set; }

public PlatformObject OnChannelMessage(string messageId, params PlatformObject[] parameters)
=> ToPlatformObject(ReceiveFromPlatform(messageId, ToDotNetObjects(parameters)));
=> ReceiveFromPlatform(messageId, parameters.ToDotNetObjects()).ToPlatformObject();

public virtual object ReceiveFromPlatform(string messageId, params object[] parameters)
=> OnReceiveFromPlatform?.Invoke(messageId, parameters);

public object SendToPlatform(string messageId, params object[] parameters)
=> ToDotNetObject(PlatformChannel.HandleMessageFromDotNet(messageId, ToPlatformObjects(parameters)));
=> PlatformChannel.HandleMessageFromDotNet(messageId, parameters.ToPlatformObjects()).ToDotNetObject();
}

public partial class ViewChannel : PlatformObject, IPlatformChannelMessageHandler
{
internal ViewChannel(PlatformViewChannel platformChannel)
{
PlatformViewChannel = platformChannel;
PlatformViewChannel.SetManagedHandler(this);
}

public event ChannelMessageDelegate OnReceiveFromPlatform;

internal PlatformViewChannel PlatformViewChannel { get; set; }

public PlatformObject OnChannelMessage(string messageId, params PlatformObject[] parameters)
=> Channel.ToPlatformObject(ReceiveFromPlatform(messageId, Channel.ToDotNetObjects(parameters)));

public virtual object ReceiveFromPlatform(string messageId, params object[] parameters)
=> OnReceiveFromPlatform?.Invoke(messageId, parameters);

public object SendToPlatform(string messageId, params object[] parameters)
=> Channel.ToDotNetObject(PlatformViewChannel.HandleMessageFromDotNet(messageId, Channel.ToPlatformObjects(parameters)));
}
4 changes: 4 additions & 0 deletions Microsoft.PlatformChannels/Microsoft.PlatformChannels.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@
<!--<EnableDefaultCompileItems>False</EnableDefaultCompileItems>-->
</PropertyGroup>

<PropertyGroup Condition="'$(TargetFramework)' == 'net6.0-android'">
<SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\Microsoft.PlatformChannels.Binding\Microsoft.PlatformChannels.Binding.csproj" />

Expand Down
75 changes: 0 additions & 75 deletions Microsoft.PlatformChannels/Platforms/Android/Channel.android.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,78 +10,3 @@ public partial class ViewChannel
public virtual PlatformView GetPlatformView()
=> PlatformViewChannel?.GetPlatformView(Context);
}

public partial class Channel
{
public static PlatformObject[] ToPlatformObjects(object[] objs)
{
PlatformObject[] r = null;

if (objs is not null && objs.Length >= 1)
r = objs.ToArray().Select(a => ToPlatformObject(a)).ToArray();
return r;
}

public static PlatformObject ToPlatformObject(object obj)
{
if (obj is null)
return null;

var objType = obj.GetType();

try {
if (obj is PlatformObject pobj)
return pobj;
} catch { }

if (objType == typeof(string))
return new Java.Lang.String((string)obj);
else if (objType == typeof(int))
return new Java.Lang.Integer((int)obj);
else if (objType == typeof(double))
return new Java.Lang.Double((double)obj);
else if (objType == typeof(float))
return new Java.Lang.Float((float)obj);
else if (objType == typeof(bool))
return new Java.Lang.Boolean((bool)obj);
else if (objType == typeof(long))
return new Java.Lang.Long((long)obj);
else if (objType == typeof(short))
#pragma warning disable CS0618 // Type or member is obsolete
return new Java.Lang.Short((short)obj);
#pragma warning restore CS0618 // Type or member is obsolete

throw new NotSupportedException();
}

public static object[] ToDotNetObjects(PlatformObject[] objs)
{
object[] r = null;

if (objs is not null && objs.Length >= 1)
r = objs.ToArray().Select(a => ToDotNetObject(a)).ToArray();
return r;
}

public static object ToDotNetObject(PlatformObject obj)
{
if (obj is Java.Lang.String jstr)
return jstr.ToString();
else if (obj is Java.Lang.Double jdbl)
return jdbl.DoubleValue();
else if (obj is Java.Lang.Integer jint)
return jint.IntValue();
else if (obj is Java.Lang.Float jflt)
return jflt.FloatValue();
else if (obj is Java.Lang.Boolean jbl)
return jbl.BooleanValue();
else if (obj is Java.Lang.Long jlng)
return jlng.LongValue();
else if (obj is Java.Lang.Short jsht)
return jsht.ShortValue();
else if (obj is Java.Lang.Number jnum)
return jnum.DoubleValue();

return obj;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
namespace Microsoft.PlatformChannels;

public static class PlatformConversionExtensions
{
public static PlatformObject[] ToPlatformObjects(this object[] objs)
{
PlatformObject[] r = null;

if (objs is not null && objs.Length >= 1)
r = objs.ToArray().Select(a => ToPlatformObject(a)).ToArray();
return r;
}

public static PlatformObject ToPlatformObject(this object obj)
{
if (obj is null)
return null;

var objType = obj.GetType();

try {
if (obj is PlatformObject pobj)
return pobj;
} catch { }

if (objType == typeof(string))
return new Java.Lang.String((string)obj);
else if (objType == typeof(int))
return new Java.Lang.Integer((int)obj);
else if (objType == typeof(double))
return new Java.Lang.Double((double)obj);
else if (objType == typeof(float))
return new Java.Lang.Float((float)obj);
else if (objType == typeof(bool))
return new Java.Lang.Boolean((bool)obj);
else if (objType == typeof(long))
return new Java.Lang.Long((long)obj);
else if (objType == typeof(short))
#pragma warning disable CS0618 // Type or member is obsolete
return new Java.Lang.Short((short)obj);
#pragma warning restore CS0618 // Type or member is obsolete

throw new NotSupportedException();
}

public static object[] ToDotNetObjects(this PlatformObject[] objs)
{
object[] r = null;

if (objs is not null && objs.Length >= 1)
r = objs.ToArray().Select(a => ToDotNetObject(a)).ToArray();
return r;
}

public static object ToDotNetObject(this PlatformObject obj)
{
if (obj is Java.Lang.String jstr)
return jstr.ToString();
else if (obj is Java.Lang.Double jdbl)
return jdbl.DoubleValue();
else if (obj is Java.Lang.Integer jint)
return jint.IntValue();
else if (obj is Java.Lang.Float jflt)
return jflt.FloatValue();
else if (obj is Java.Lang.Boolean jbl)
return jbl.BooleanValue();
else if (obj is Java.Lang.Long jlng)
return jlng.LongValue();
else if (obj is Java.Lang.Short jsht)
return jsht.ShortValue();
else if (obj is Java.Lang.Number jnum)
return jnum.DoubleValue();

return obj;
}
}
24 changes: 24 additions & 0 deletions Microsoft.PlatformChannels/ViewChannel.shared.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@

namespace Microsoft.PlatformChannels;

public partial class ViewChannel : PlatformObject, IPlatformChannelMessageHandler
{
internal ViewChannel(PlatformViewChannel platformChannel)
{
PlatformViewChannel = platformChannel;
PlatformViewChannel.SetManagedHandler(this);
}

public event ChannelMessageDelegate OnReceiveFromPlatform;

internal PlatformViewChannel PlatformViewChannel { get; set; }

public PlatformObject OnChannelMessage(string messageId, params PlatformObject[] parameters)
=> ReceiveFromPlatform(messageId, parameters.ToDotNetObjects()).ToPlatformObject();

public virtual object ReceiveFromPlatform(string messageId, params object[] parameters)
=> OnReceiveFromPlatform?.Invoke(messageId, parameters);

public object SendToPlatform(string messageId, params object[] parameters)
=> PlatformViewChannel.HandleMessageFromDotNet(messageId, parameters.ToPlatformObjects()).ToDotNetObject();
}
2 changes: 1 addition & 1 deletion SamplePlatformChannels/MauiProgram.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
ChannelServiceConfiguration? config = null;
ChannelServiceConfiguration config = null;
#if ANDROID
config = new ChannelServiceConfiguration("com.microsoft.dotnet.platformchannels.sample", "SampleChannels", "init");
#elif IOS || MACCATALYST
Expand Down

0 comments on commit fbf64fb

Please sign in to comment.