Skip to content

Commit

Permalink
xamarinGH-23: Added Tizen backend (xamarin#555)
Browse files Browse the repository at this point in the history
* Adding the initial work to get Tizen started. xamarin#23

* Adding the initial work to get Tizen started. xamarin#23

* Use the overloads properly.

* Use the overloads properly.

* Tizen needs to have a background explicitly set

* Added the Vibration API

* Added the Vibration API

* Refactoring a little bit

* Refactoring a little bit

* Added the Browser API and some basic permissions checking

* Added the Browser API and some basic permissions checking

* Added the Battery API

* Added the Battery API

* Added the Acceleromerter API

* Added the Acceleromerter API

* Added the Filesystem API

* Added the Filesystem API

* Update Accelerometer Initialize using GetDefaultSensor

* Update Accelerometer Initialize using GetDefaultSensor

* Added the Gyroscope API

* Added the Gyroscope API

* Added the Magnetometer API

* Added the Magnetometer API

* Added the Compass API

* Added the Compass API

* Added the Connectivity API

* Added the Connectivity API

* Added the Flashlight API

* Added the Flashlight API

* Added the SecureStorage API

* Added the SecureStorage API

* Added the Vibration API

* Added the Vibration API

* Fixed build break

* Fixed build break

* Added the OrientationSensor API

* Fixed build break

* Initialized Maps/Launcher for Tizen

* Added the Permissions API

* Added the Geolocation API

* Added the Geocoding API

* Fixed build break

* Initialize Barometer API

* Added the Barometer API

* Added the TextToSpeech API

* Added the Launcher APIs

* Fixed bugs

* Update Location property name

* Update several modules

- Update AppInfo, Browser, Clipboard, Compass, Connectivity,
  DisplayInfo, DeviceInfo, Geocoding, TextToSpeech modules
- Change module name DataTrasfer to Share, Maps to Map
- Integrated module Power to Battery, ScreenLock to DeviceDisplay

* Throw PlatformNotSupportedException for Tizen

* Change the exception for the power saver feature

* Add tizen privileges

* Add FileBase

* Add ShareFileRequest

* Change enum for Browser

* Change parameter for Permissions

* Add SensorSpeedExtensions

* Add Launcher for OpenFileRequest

* Fix .csproj for VS2019

* Fix sample for watch

* Fix Geolocation speed

* Fix TextToSpeech ptich

* Fixed missing using System;

This was needed for the Math calls
  • Loading branch information
sung-su authored and Redth committed Jul 2, 2019
1 parent a3beded commit 067f829
Show file tree
Hide file tree
Showing 42 changed files with 1,634 additions and 3 deletions.
18 changes: 18 additions & 0 deletions Samples/Samples.Tizen/CustomViewCellRenderer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using ElmSharp;
using Samples.Tizen;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Tizen;

[assembly: ExportCell(typeof(ViewCell), typeof(CustomViewCellRenderer))]
namespace Samples.Tizen
{
public sealed class CustomViewCellRenderer : ViewCellRenderer
{
protected override EvasObject OnGetContent(Cell cell, string part)
{
var view = base.OnGetContent(cell, part);
view.PropagateEvents = true;
return view;
}
}
}
25 changes: 25 additions & 0 deletions Samples/Samples.Tizen/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using Xamarin.Forms;
using Xamarin.Forms.Platform.Tizen;

namespace Samples.Tizen
{
class Program : FormsApplication
{
protected override void OnCreate()
{
base.OnCreate();

LoadApplication(new App());
}

static void Main(string[] args)
{
var app = new Program();
Forms.Init(app);
if (Device.Idiom == TargetIdiom.Watch)
global::Tizen.Wearable.CircularUI.Forms.Renderer.FormsCircularUI.Init();
Xamarin.Essentials.Platform.MapServiceToken = "MAP_SERVICE_KEY";
app.Run(args);
}
}
}
31 changes: 31 additions & 0 deletions Samples/Samples.Tizen/Samples.Tizen.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<Project Sdk="Tizen.NET.Sdk/1.0.3">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>tizen40</TargetFramework>
<TizenNetPackageVersion>4.0.0</TizenNetPackageVersion>
</PropertyGroup>

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugType>portable</DebugType>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>None</DebugType>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\..\Xamarin.Essentials\Xamarin.Essentials.csproj" />
<ProjectReference Include="..\Samples\Samples.csproj" />
</ItemGroup>

<ItemGroup>
<Folder Include="lib\" />
<Folder Include="res\" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="Tizen.Wearable.CircularUI" Version="1.3.0-pre1-00043" />
</ItemGroup>

<Import Project="$(MSBuildThisFileDirectory)..\..\CodeStyles.targets" />
</Project>
4 changes: 4 additions & 0 deletions Samples/Samples.Tizen/res/FileSystemTemplate.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
This file was loaded from the app package.

You can use this as a starting point for your comments...

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
27 changes: 27 additions & 0 deletions Samples/Samples.Tizen/tizen-manifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.xamarin.essentials" version="1.0.0" api-version="4" xmlns="http://tizen.org/ns/packages">
<profile name="common" />
<ui-application appid="com.xamarin.essentials" exec="Samples.Tizen.dll" multiple="false" nodisplay="false" taskmanage="true" splash-screen-display="true" type="dotnet" launch_mode="single">
<label>Xamarin.Essentials</label>
<icon>Samples.Tizen.png</icon>
<metadata key="http://tizen.org/metadata/prefer_dotnet_aot" value="true" />
</ui-application>
<privileges>
<privilege>http://tizen.org/privilege/appmanager.launch</privilege>
<privilege>http://tizen.org/privilege/externalstorage</privilege>
<privilege>http://tizen.org/privilege/haptic</privilege>
<privilege>http://tizen.org/privilege/internet</privilege>
<privilege>http://tizen.org/privilege/led</privilege>
<privilege>http://tizen.org/privilege/location</privilege>
<privilege>http://tizen.org/privilege/mapservice</privilege>
<privilege>http://tizen.org/privilege/mediastorage</privilege>
<privilege>http://tizen.org/privilege/message.read</privilege>
<privilege>http://tizen.org/privilege/network.get</privilege>
</privileges>
<provides-appdefined-privileges />
<feature name="http://tizen.org/feature/location">true</feature>
<feature name="http://tizen.org/feature/location.gps">true</feature>
<feature name="http://tizen.org/feature/location.wps">true</feature>
<feature name="http://tizen.org/feature/maps">true</feature>
<feature name="http://tizen.org/feature/speech.synthesis">true</feature>
</manifest>
2 changes: 2 additions & 0 deletions Samples/Samples/View/BasePage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ public class BasePage : ContentPage
public BasePage()
{
NavigationPage.SetBackButtonTitle(this, "Back");
if (Device.Idiom == TargetIdiom.Watch)
NavigationPage.SetHasNavigationBar(this, false);
}

protected override void OnAppearing()
Expand Down
39 changes: 39 additions & 0 deletions Xamarin.Essentials.sln
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DeviceTests.UWP", "DeviceTe
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DeviceTests.Shared", "DeviceTests\DeviceTests.Shared\DeviceTests.Shared.csproj", "{BE0DE9A3-D92C-47C5-9EC4-DFB546BBDF77}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples.Tizen", "Samples\Samples.Tizen\Samples.Tizen.csproj", "{4B1850CF-C568-4C16-8B42-3E9977DE5F56}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -614,6 +616,42 @@ Global
{BE0DE9A3-D92C-47C5-9EC4-DFB546BBDF77}.Samples|x64.Build.0 = Samples|Any CPU
{BE0DE9A3-D92C-47C5-9EC4-DFB546BBDF77}.Samples|x86.ActiveCfg = Samples|Any CPU
{BE0DE9A3-D92C-47C5-9EC4-DFB546BBDF77}.Samples|x86.Build.0 = Samples|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Debug|ARM.ActiveCfg = Debug|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Debug|ARM.Build.0 = Debug|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Debug|iPhone.Build.0 = Debug|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Debug|x64.ActiveCfg = Debug|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Debug|x64.Build.0 = Debug|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Debug|x86.ActiveCfg = Debug|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Debug|x86.Build.0 = Debug|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Release|Any CPU.Build.0 = Release|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Release|ARM.ActiveCfg = Release|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Release|ARM.Build.0 = Release|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Release|iPhone.ActiveCfg = Release|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Release|iPhone.Build.0 = Release|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Release|x64.ActiveCfg = Release|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Release|x64.Build.0 = Release|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Release|x86.ActiveCfg = Release|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Release|x86.Build.0 = Release|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Samples|Any CPU.ActiveCfg = Release|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Samples|Any CPU.Build.0 = Release|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Samples|ARM.ActiveCfg = Release|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Samples|ARM.Build.0 = Release|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Samples|iPhone.ActiveCfg = Release|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Samples|iPhone.Build.0 = Release|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Samples|iPhoneSimulator.ActiveCfg = Release|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Samples|iPhoneSimulator.Build.0 = Release|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Samples|x64.ActiveCfg = Release|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Samples|x64.Build.0 = Release|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Samples|x86.ActiveCfg = Release|Any CPU
{4B1850CF-C568-4C16-8B42-3E9977DE5F56}.Samples|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand All @@ -629,6 +667,7 @@ Global
{EE8FC716-27FC-405B-BD27-AF17E01A6671} = {EA9AC363-45BC-4959-BD17-FE3A1B724529}
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B} = {EA9AC363-45BC-4959-BD17-FE3A1B724529}
{BE0DE9A3-D92C-47C5-9EC4-DFB546BBDF77} = {EA9AC363-45BC-4959-BD17-FE3A1B724529}
{4B1850CF-C568-4C16-8B42-3E9977DE5F56} = {706C0487-6930-4E55-8720-C17D9FE6CA91}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {105B0052-C7EA-44D0-8697-37A45E1392AF}
Expand Down
32 changes: 32 additions & 0 deletions Xamarin.Essentials/Accelerometer/Accelerometer.tizen.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using Tizen.Sensor;
using TizenAccelerometer = Tizen.Sensor.Accelerometer;

namespace Xamarin.Essentials
{
public static partial class Accelerometer
{
internal static TizenAccelerometer DefaultSensor =>
(TizenAccelerometer)Platform.GetDefaultSensor(SensorType.Accelerometer);

internal static bool IsSupported =>
TizenAccelerometer.IsSupported;

static void PlatformStart(SensorSpeed sensorSpeed)
{
DefaultSensor.Interval = sensorSpeed.ToPlatform();
DefaultSensor.DataUpdated += DataUpdated;
DefaultSensor.Start();
}

static void PlatformStop()
{
DefaultSensor.DataUpdated -= DataUpdated;
DefaultSensor.Stop();
}

static void DataUpdated(object sender, AccelerometerDataUpdatedEventArgs e)
{
OnChanged(new AccelerometerData(e.X, e.Y, e.Z));
}
}
}
26 changes: 26 additions & 0 deletions Xamarin.Essentials/AppInfo/AppInfo.tizen.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
using System.Globalization;
using Tizen.Applications;

namespace Xamarin.Essentials
{
public static partial class AppInfo
{
static string PlatformGetPackageName()
=> Application.Current.ApplicationInfo.PackageId;

static string PlatformGetName()
=> Application.Current.ApplicationInfo.Label;

static string PlatformGetVersionString()
=> Platform.CurrentPackage.Version;

static string PlatformGetBuild()
=> Version.Build.ToString(CultureInfo.InvariantCulture);

static void PlatformShowSettingsUI()
{
Permissions.EnsureDeclared(PermissionType.LaunchApp);
AppControl.SendLaunchRequest(new AppControl() { Operation = AppControlOperations.Setting });
}
}
}
32 changes: 32 additions & 0 deletions Xamarin.Essentials/Barometer/Barometer.tizen.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using Tizen.Sensor;
using TizenBarometerSensor = Tizen.Sensor.PressureSensor;

namespace Xamarin.Essentials
{
public static partial class Barometer
{
static TizenBarometerSensor DefaultSensor
=> (TizenBarometerSensor)Platform.GetDefaultSensor(SensorType.Barometer);

internal static bool IsSupported
=> TizenBarometerSensor.IsSupported;

internal static void PlatformStart(SensorSpeed sensorSpeed)
{
DefaultSensor.Interval = sensorSpeed.ToPlatform();
DefaultSensor.DataUpdated += DataUpdated;
DefaultSensor.Start();
}

internal static void PlatformStop()
{
DefaultSensor.DataUpdated -= DataUpdated;
DefaultSensor.Stop();
}

static void DataUpdated(object sender, PressureSensorDataUpdatedEventArgs e)
{
OnChanged(new BarometerData(e.Pressure));
}
}
}
62 changes: 62 additions & 0 deletions Xamarin.Essentials/Battery/Battery.tizen.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
using System;
using TizenBattery = Tizen.System.Battery;

namespace Xamarin.Essentials
{
public static partial class Battery
{
static void OnChanged(object sender, object e)
=> MainThread.BeginInvokeOnMainThread(OnBatteryInfoChanged);

static void StartBatteryListeners()
{
TizenBattery.PercentChanged += OnChanged;
TizenBattery.ChargingStateChanged += OnChanged;
TizenBattery.LevelChanged += OnChanged;
}

static void StopBatteryListeners()
{
TizenBattery.PercentChanged -= OnChanged;
TizenBattery.ChargingStateChanged -= OnChanged;
TizenBattery.LevelChanged -= OnChanged;
}

static double PlatformChargeLevel
{
get
{
return (double)TizenBattery.Percent / 100;
}
}

static BatteryState PlatformState
{
get
{
if (TizenBattery.IsCharging)
return BatteryState.Charging;
return BatteryState.Discharging;
}
}

static BatteryPowerSource PlatformPowerSource
{
get
{
if (TizenBattery.IsCharging)
return BatteryPowerSource.Usb;
return BatteryPowerSource.Battery;
}
}

static void StartEnergySaverListeners()
=> throw new FeatureNotSupportedException("This API is not currently supported on Tizen.");

static void StopEnergySaverListeners()
=> throw new FeatureNotSupportedException("This API is not currently supported on Tizen.");

static EnergySaverStatus PlatformEnergySaverStatus
=> throw new FeatureNotSupportedException("This API is not currently supported on Tizen.");
}
}
31 changes: 31 additions & 0 deletions Xamarin.Essentials/Browser/Browser.tizen.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
using System;
using System.Linq;
using System.Threading.Tasks;
using Tizen.Applications;

namespace Xamarin.Essentials
{
public static partial class Browser
{
static Task<bool> PlatformOpenAsync(Uri uri, BrowserLaunchOptions launchMode)
{
if (uri == null)
throw new ArgumentNullException(nameof(uri));

Permissions.EnsureDeclared(PermissionType.LaunchApp);

var appControl = new AppControl
{
Operation = AppControlOperations.View,
Uri = uri.AbsoluteUri
};

var hasMatches = AppControl.GetMatchedApplicationIds(appControl).Any();

if (hasMatches)
AppControl.SendLaunchRequest(appControl);

return Task.FromResult(hasMatches);
}
}
}
17 changes: 17 additions & 0 deletions Xamarin.Essentials/Clipboard/Clipboard.tizen.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using System;
using System.Threading.Tasks;

namespace Xamarin.Essentials
{
public static partial class Clipboard
{
static Task PlatformSetTextAsync(string text)
=> throw new PlatformNotSupportedException("This API is not currently supported on Tizen.");

static bool PlatformHasText
=> throw new PlatformNotSupportedException("This API is not currently supported on Tizen.");

static Task<string> PlatformGetTextAsync()
=> throw new PlatformNotSupportedException("This API is not currently supported on Tizen.");
}
}
Loading

0 comments on commit 067f829

Please sign in to comment.