From 22679aa31a8234a610d458ef8543f0a16708fab2 Mon Sep 17 00:00:00 2001 From: Inhong Han Date: Fri, 15 Sep 2023 17:05:25 +0900 Subject: [PATCH] Add NUI Gadget for Inputmethod Change-Id: I23bb45b3ccd93f6f20907868af620f9e9d8428fc --- SettingInputmethod/.gitattributes | 7 + SettingInputmethod/.gitignore | 9 + SettingInputmethod/.gn | 6 + SettingInputmethod/SettingInputmethod.sln | 27 + .../SettingInputmethod/DefaultKeyboardMenu.cs | 115 + .../Directory.Build.targets | 21 + .../Interop/Interop.IsfControl.cs | 79 + .../Interop/Interop.Libraries.cs | 27 + .../SettingInputmethod/MenuProvider.cs | 35 + .../Resource/Resources.Designer.cs | 181 + .../Resource/Resources.ar.resx | 42 + .../Resource/Resources.as.resx | 42 + .../Resource/Resources.az.resx | 42 + .../Resource/Resources.be_BY.resx | 42 + .../Resource/Resources.bg.resx | 42 + .../Resource/Resources.bn.resx | 42 + .../Resource/Resources.bn_BD.resx | 42 + .../Resource/Resources.ca.resx | 42 + .../Resource/Resources.cs.resx | 42 + .../Resource/Resources.da.resx | 42 + .../Resource/Resources.de.resx | 42 + .../Resource/Resources.el_GR.resx | 42 + .../Resource/Resources.en.resx | 162 + .../Resource/Resources.en_PH.resx | 162 + .../Resource/Resources.en_US.resx | 162 + .../Resource/Resources.es_ES.resx | 159 + .../Resource/Resources.es_US.resx | 159 + .../Resource/Resources.et.resx | 42 + .../Resource/Resources.eu.resx | 42 + .../Resource/Resources.fa.resx | 42 + .../Resource/Resources.fi.resx | 42 + .../Resource/Resources.fr.resx | 42 + .../Resource/Resources.fr_CA.resx | 42 + .../Resource/Resources.ga.resx | 42 + .../Resource/Resources.gl.resx | 42 + .../Resource/Resources.gu.resx | 42 + .../Resource/Resources.he.resx | 42 + .../Resource/Resources.hi.resx | 42 + .../Resource/Resources.hr.resx | 42 + .../Resource/Resources.hu.resx | 42 + .../Resource/Resources.hy.resx | 42 + .../Resource/Resources.id.resx | 42 + .../Resource/Resources.is.resx | 42 + .../Resource/Resources.it_IT.resx | 42 + .../Resource/Resources.ja_JP.resx | 42 + .../Resource/Resources.ka.resx | 42 + .../Resource/Resources.kk.resx | 42 + .../Resource/Resources.km.resx | 42 + .../Resource/Resources.kn.resx | 42 + .../Resource/Resources.ko-KR.resx | 162 + .../Resource/Resources.ky_KG.resx | 42 + .../Resource/Resources.lo.resx | 42 + .../Resource/Resources.lt.resx | 42 + .../Resource/Resources.lv.resx | 42 + .../Resource/Resources.mk.resx | 42 + .../Resource/Resources.ml.resx | 42 + .../Resource/Resources.mn_MN.resx | 42 + .../Resource/Resources.mr.resx | 42 + .../Resource/Resources.ms.resx | 42 + .../Resource/Resources.my_MM.resx | 42 + .../Resource/Resources.my_ZG.Designer.cs | 172 + .../Resource/Resources.my_ZG.resx | 42 + .../Resource/Resources.nb.resx | 42 + .../Resource/Resources.ne.resx | 42 + .../Resource/Resources.nl.resx | 42 + .../Resource/Resources.or.resx | 42 + .../Resource/Resources.pa.resx | 42 + .../Resource/Resources.pl.resx | 42 + .../Resource/Resources.pl_SP.Designer.cs | 172 + .../Resource/Resources.pl_SP.resx | 42 + .../Resource/Resources.pt_BR.resx | 42 + .../Resource/Resources.pt_PT.resx | 42 + .../Resource/Resources.resx | 159 + .../Resource/Resources.ro.resx | 42 + .../Resource/Resources.ru_RU.resx | 42 + .../Resource/Resources.si.resx | 42 + .../Resource/Resources.sk.resx | 42 + .../Resource/Resources.sl.resx | 42 + .../Resource/Resources.sq.resx | 42 + .../Resource/Resources.sr.resx | 42 + .../Resource/Resources.sv.resx | 42 + .../Resource/Resources.ta.resx | 42 + .../Resource/Resources.te.resx | 42 + .../Resource/Resources.tg_TJ.resx | 42 + .../Resource/Resources.th.resx | 42 + .../Resource/Resources.tk_TM.resx | 42 + .../Resource/Resources.tl.resx | 42 + .../Resource/Resources.tr_TR.resx | 42 + .../Resource/Resources.uk.resx | 42 + .../Resource/Resources.ur.resx | 42 + .../Resource/Resources.uz.resx | 42 + .../Resource/Resources.vi.resx | 42 + .../Resource/Resources.zh_CN.resx | 42 + .../Resource/Resources.zh_HK.resx | 42 + .../Resource/Resources.zh_TW.resx | 42 + .../SettingInputmethod/SettingInputmethod.cs | 200 + .../SettingInputmethod.csproj | 297 + .../res/allowed/SettingInputmethod.dll | Bin 0 -> 66560 bytes .../SettingInputmethod/tizen-manifest.xml | 11 + .../tizen_dotnet_project.yaml | 15 + SettingInputmethod/index.d.ts | 11438 ++++++++++++++++ SettingInputmethod/jsconfig.json | 0 SettingInputmethod/tizen_workspace.yaml | 88 + .../org.tizen.cssetting-inputmethod-1.0.0.tpk | Bin 169849 -> 0 bytes .../org.tizen.cssetting-inputmethod-1.1.0.rpk | Bin 0 -> 22107 bytes .../org.tizen.cssetting-inputmethod.spec | 15 +- 106 files changed, 17224 insertions(+), 8 deletions(-) create mode 100644 SettingInputmethod/.gitattributes create mode 100644 SettingInputmethod/.gitignore create mode 100644 SettingInputmethod/.gn create mode 100644 SettingInputmethod/SettingInputmethod.sln create mode 100644 SettingInputmethod/SettingInputmethod/DefaultKeyboardMenu.cs create mode 100644 SettingInputmethod/SettingInputmethod/Directory.Build.targets create mode 100644 SettingInputmethod/SettingInputmethod/Interop/Interop.IsfControl.cs create mode 100644 SettingInputmethod/SettingInputmethod/Interop/Interop.Libraries.cs create mode 100644 SettingInputmethod/SettingInputmethod/MenuProvider.cs create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.Designer.cs create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.ar.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.as.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.az.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.be_BY.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.bg.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.bn.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.bn_BD.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.ca.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.cs.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.da.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.de.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.el_GR.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.en.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.en_PH.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.en_US.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.es_ES.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.es_US.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.et.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.eu.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.fa.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.fi.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.fr.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.fr_CA.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.ga.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.gl.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.gu.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.he.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.hi.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.hr.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.hu.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.hy.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.id.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.is.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.it_IT.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.ja_JP.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.ka.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.kk.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.km.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.kn.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.ko-KR.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.ky_KG.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.lo.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.lt.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.lv.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.mk.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.ml.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.mn_MN.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.mr.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.ms.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.my_MM.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.my_ZG.Designer.cs create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.my_ZG.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.nb.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.ne.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.nl.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.or.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.pa.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.pl.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.pl_SP.Designer.cs create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.pl_SP.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.pt_BR.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.pt_PT.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.ro.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.ru_RU.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.si.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.sk.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.sl.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.sq.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.sr.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.sv.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.ta.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.te.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.tg_TJ.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.th.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.tk_TM.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.tl.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.tr_TR.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.uk.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.ur.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.uz.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.vi.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.zh_CN.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.zh_HK.resx create mode 100644 SettingInputmethod/SettingInputmethod/Resource/Resources.zh_TW.resx create mode 100644 SettingInputmethod/SettingInputmethod/SettingInputmethod.cs create mode 100644 SettingInputmethod/SettingInputmethod/SettingInputmethod.csproj create mode 100644 SettingInputmethod/SettingInputmethod/res/allowed/SettingInputmethod.dll create mode 100644 SettingInputmethod/SettingInputmethod/tizen-manifest.xml create mode 100644 SettingInputmethod/SettingInputmethod/tizen_dotnet_project.yaml create mode 100644 SettingInputmethod/index.d.ts create mode 100644 SettingInputmethod/jsconfig.json create mode 100644 SettingInputmethod/tizen_workspace.yaml delete mode 100644 packaging/org.tizen.cssetting-inputmethod-1.0.0.tpk create mode 100644 packaging/org.tizen.cssetting-inputmethod-1.1.0.rpk diff --git a/SettingInputmethod/.gitattributes b/SettingInputmethod/.gitattributes new file mode 100644 index 0000000..81d23e1 --- /dev/null +++ b/SettingInputmethod/.gitattributes @@ -0,0 +1,7 @@ +* text=auto +*.cs eol=lf +*.csproj eol=lf +*.sln eol=lf +*.xml eol=lf +*.svg eol=lf +*.xaml eol=lf diff --git a/SettingInputmethod/.gitignore b/SettingInputmethod/.gitignore new file mode 100644 index 0000000..881c36d --- /dev/null +++ b/SettingInputmethod/.gitignore @@ -0,0 +1,9 @@ +**/.vs/ +**/.vscode/ +**/[Oo]bj/ +**/[Bb]in/ +**/[Dd]ebug/ +**/[Rr]elease/ +**/.gn +**/[Bb]uild/ +**/res/allowed/*.dll diff --git a/SettingInputmethod/.gn b/SettingInputmethod/.gn new file mode 100644 index 0000000..8d7c1c5 --- /dev/null +++ b/SettingInputmethod/.gn @@ -0,0 +1,6 @@ + +arg_file_template = "" +buildconfig = "//build/BUILDCONFIG.gn" +root = "//build:" +script_executable = "" +secondary_source = "//build" \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod.sln b/SettingInputmethod/SettingInputmethod.sln new file mode 100644 index 0000000..a88e33b --- /dev/null +++ b/SettingInputmethod/SettingInputmethod.sln @@ -0,0 +1,27 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31005.135 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SettingInputmethod", "SettingInputmethod\SettingInputmethod.csproj", "{e3e4b807-eb5b-4ebb-9078-968c852640a7}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{f95ba813-baec-4eaf-b930-b88a794ea91e}" + ProjectSection(SolutionItems) = preProject + tizen_workspace.yaml = tizen_workspace.yaml + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {e3e4b807-eb5b-4ebb-9078-968c852640a7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {e3e4b807-eb5b-4ebb-9078-968c852640a7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {e3e4b807-eb5b-4ebb-9078-968c852640a7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {e3e4b807-eb5b-4ebb-9078-968c852640a7}.Release|Any CPU.Build.0 = Release|Any CPU + + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/SettingInputmethod/SettingInputmethod/DefaultKeyboardMenu.cs b/SettingInputmethod/SettingInputmethod/DefaultKeyboardMenu.cs new file mode 100644 index 0000000..70d4457 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/DefaultKeyboardMenu.cs @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2023 Samsung Electronics Co., Ltd. All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System; +using System.Collections.Generic; +using static Interop.IsfControl; +using Tizen.NUI; +using Tizen.NUI.BaseComponents; +using Tizen.NUI.Components; +using System.Runtime.InteropServices; +using System.Collections.ObjectModel; +using Tizen; + +namespace SettingInputmethod +{ + public class DefaultKeyboardMenu : SettingCore.MenuGadget + { + public override string ProvideTitle() => Resource.Resources.IDS_ST_HEADER_DEFAULT_KEYBOARD_ABB; + + private static List imeList; + private static List labelList; + private int currentIndex = -1; + private int pickerIndex = 0; + + protected override View OnCreate() + { + base.OnCreate(); + + var scrollableContent = new ScrollableBase() + { + WidthSpecification = LayoutParamPolicies.MatchParent, + HeightSpecification = LayoutParamPolicies.MatchParent, + ScrollingDirection = ScrollableBase.Direction.Vertical, + HideScrollbar = false, + Layout = new LinearLayout() + { + LinearOrientation = LinearLayout.Orientation.Vertical, + VerticalAlignment = VerticalAlignment.Center, + HorizontalAlignment = HorizontalAlignment.Center, + }, + }; + + imeList = new List(); + labelList = new List(); + IntPtr activeIsePtr; + IsfControlGetActiveIse(out activeIsePtr); + string defaultIse = Marshal.PtrToStringAnsi(activeIsePtr); + int count = IsfControlGetIseCount((uint)IseType.SoftwareKeyboard); + for (int i = 0; i < count; i++) + { + IntPtr ptr = IntPtr.Zero; + IsfControlGetImeInfo(i, ref ptr); + var ImeInfo = Marshal.PtrToStructure(ptr); + if (ImeInfo.enabled) + { + imeList.Add(ImeInfo); + labelList.Add(ImeInfo.label); + + if (string.Compare(defaultIse, ImeInfo.appId, false) == 0) + pickerIndex = i + 1; + } + } + + var picker = new Picker() + { + SizeWidth = (float)(NUIApplication.GetDefaultWindow().Size.Width * 0.7), + SizeHeight = (float)(NUIApplication.GetDefaultWindow().Size.Height * 0.54), + MinValue = 1, + MaxValue = imeList.Count, + CurrentValue = pickerIndex, + DisplayedValues = new ReadOnlyCollection(labelList), + }; + + picker.ValueChanged += (sender, e) => + { + Log.Debug(LogTag, "current index : " + e.Value.ToString()); + currentIndex = e.Value - 1; + }; + + var button = new Button() + { + Text = Resource.Resources.IDS_COM_SK_OK_ABB, + }; + + button.Clicked += (sender, e) => + { + if (currentIndex > -1 && String.Compare(defaultIse, imeList[currentIndex].appId) != 0) + { + Log.Debug(LogTag, "new keyboard : " + labelList[currentIndex]); + IsfControlSetActiveIme(imeList[currentIndex].appId); + } + + NavigateBack(); + }; + + scrollableContent.Add(picker); + scrollableContent.Add(button); + + return scrollableContent; + } + } +} diff --git a/SettingInputmethod/SettingInputmethod/Directory.Build.targets b/SettingInputmethod/SettingInputmethod/Directory.Build.targets new file mode 100644 index 0000000..8d54dc2 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Directory.Build.targets @@ -0,0 +1,21 @@ + + + + + + + + $([System.IO.Path]::GetDirectoryName($(MSBuildProjectDirectory))) + + + + + + diff --git a/SettingInputmethod/SettingInputmethod/Interop/Interop.IsfControl.cs b/SettingInputmethod/SettingInputmethod/Interop/Interop.IsfControl.cs new file mode 100644 index 0000000..43a2e56 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Interop/Interop.IsfControl.cs @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2023 Samsung Electronics Co., Ltd. All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using Tizen; +using Tizen.Internals; + +internal static partial class Interop +{ + internal static class IsfControl + { + internal static string LogTag = "SettingInputmethod"; + + internal enum IseType + { + HardwareKeyboard = 0, + SoftwareKeyboard + } + + [NativeStruct("ime_info_s", Include = "isf_control.h", PkgConfig = "isf-control")] + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + internal struct ImeInformationStruct + { + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] + internal string appId; + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] + internal string label; + + [MarshalAsAttribute(UnmanagedType.I1)] + internal bool enabled; + + [MarshalAsAttribute(UnmanagedType.I1)] + internal bool preinstalled; + + internal int hasOption; + } + + [DllImport(Libraries.IsfControl, EntryPoint = "isf_control_get_ise_count")] + internal static extern int IsfControlGetIseCount(UInt32 type); + + [DllImport(Libraries.IsfControl, EntryPoint = "isf_control_get_active_ise")] + internal static extern void IsfControlGetActiveIse(out IntPtr uuid); + + [DllImport(Libraries.IsfControl, EntryPoint = "isf_control_set_active_ime")] + internal static extern void IsfControlSetActiveIme(string appId); + + [DllImport(Libraries.IsfControl, EntryPoint = "isf_control_set_active_ise_by_uuid")] + internal static extern void IsfControlSetActiveIseByUuid(string uuid); + + [DllImport(Libraries.IsfControl, EntryPoint = "isf_control_get_ise_info")] + internal static extern void IsfControlGetIseInfo(string uuid, out IntPtr name, out IntPtr launguage, out uint type, out int option); + + [DllImport(Libraries.IsfControl, EntryPoint = "isf_control_get_ime_info")] + internal static extern int IsfControlGetImeInfo(int index, ref IntPtr info); + + [DllImport(Libraries.IsfControl, EntryPoint = "isf_control_set_enable_ime")] + internal static extern void IsfControlSetEnableIme(string appId, bool enabled); + + [DllImport(Libraries.IsfControl, EntryPoint = "isf_control_open_ime_option_window_with_single_mode")] + internal static extern void IsfControlOpenImeOptionWindow(); + } +} + diff --git a/SettingInputmethod/SettingInputmethod/Interop/Interop.Libraries.cs b/SettingInputmethod/SettingInputmethod/Interop/Interop.Libraries.cs new file mode 100644 index 0000000..8f5945f --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Interop/Interop.Libraries.cs @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2023 Samsung Electronics Co., Ltd. All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System; +using System.Collections.Generic; +using System.Text; + +internal static partial class Interop +{ + internal static partial class Libraries + { + public const string IsfControl = "libisf-control.so.8"; + } +} \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/MenuProvider.cs b/SettingInputmethod/SettingInputmethod/MenuProvider.cs new file mode 100644 index 0000000..a9a0e51 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/MenuProvider.cs @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2023 Samsung Electronics Co., Ltd. All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using SettingCore; + +namespace SettingInputmethod +{ + public class MenuProvider : SettingMenuProvider + { + public static string Keyboard = "Language.InputMethod"; + public static string Keyboard_Default = "Language.InputMethod.Default"; + + public override SettingMenu[] Provide() + { + return new SettingMenu[] + { + new SettingMenu(path: Keyboard, defaultOrder: 63, type: typeof(SettingInputmethod)), + new SettingMenu(path: Keyboard_Default, defaultOrder: 20, type: typeof(DefaultKeyboardMenu)), + }; + } + } +} diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.Designer.cs b/SettingInputmethod/SettingInputmethod/Resource/Resources.Designer.cs new file mode 100644 index 0000000..65ad91b --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.Designer.cs @@ -0,0 +1,181 @@ +//------------------------------------------------------------------------------ +// +// 이 코드는 도구를 사용하여 생성되었습니다. +// 런타임 버전:4.0.30319.42000 +// +// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면 +// 이러한 변경 내용이 손실됩니다. +// +//------------------------------------------------------------------------------ + +namespace SettingInputmethod.Resource { + using System; + + + /// + /// 지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다. + /// + // 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder + // 클래스에서 자동으로 생성되었습니다. + // 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여 ResGen을 + // 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SettingInputmethod.Resource.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대해 현재 스레드의 CurrentUICulture 속성을 + /// 재정의합니다. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Backê³¼(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_COM_SK_BACK_ABB { + get { + return ResourceManager.GetString("IDS_COM_SK_BACK_ABB", resourceCulture); + } + } + + /// + /// Cancelê³¼(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_COM_SK_CANCEL_ABB { + get { + return ResourceManager.GetString("IDS_COM_SK_CANCEL_ABB", resourceCulture); + } + } + + /// + /// Okê³¼(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_COM_SK_OK_ABB { + get { + return ResourceManager.GetString("IDS_COM_SK_OK_ABB", resourceCulture); + } + } + + /// + /// Keyboardê³¼(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_IME_BODY_KEYBOARD { + get { + return ResourceManager.GetString("IDS_IME_BODY_KEYBOARD", resourceCulture); + } + } + + /// + /// Select keyboardê³¼(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_IME_BODY_SELECT_KEYBOARD { + get { + return ResourceManager.GetString("IDS_IME_BODY_SELECT_KEYBOARD", resourceCulture); + } + } + + /// + /// Keyboard settingsê³¼(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_IME_HEADER_KEYBOARD_SETTINGS_ABB { + get { + return ResourceManager.GetString("IDS_IME_HEADER_KEYBOARD_SETTINGS_ABB", resourceCulture); + } + } + + /// + /// Attentionê³¼(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_ST_BODY_ATTENTION { + get { + return ResourceManager.GetString("IDS_ST_BODY_ATTENTION", resourceCulture); + } + } + + /// + /// Enableê³¼(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_ST_BUTTON_ENABLE { + get { + return ResourceManager.GetString("IDS_ST_BUTTON_ENABLE", resourceCulture); + } + } + + /// + /// Turn on keyboardê³¼(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_ST_BUTTON_TURN_ON_KEYBOARD_ABB { + get { + return ResourceManager.GetString("IDS_ST_BUTTON_TURN_ON_KEYBOARD_ABB", resourceCulture); + } + } + + /// + /// Default keyboardê³¼(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_ST_HEADER_DEFAULT_KEYBOARD_ABB { + get { + return ResourceManager.GetString("IDS_ST_HEADER_DEFAULT_KEYBOARD_ABB", resourceCulture); + } + } + + /// + /// Keyboardsê³¼(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_ST_HEADER_KEYBOARDS { + get { + return ResourceManager.GetString("IDS_ST_HEADER_KEYBOARDS", resourceCulture); + } + } + + /// + /// Virtual keyboardê³¼(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_ST_HEADER_VIRTUAL_KEYBOARD { + get { + return ResourceManager.GetString("IDS_ST_HEADER_VIRTUAL_KEYBOARD", resourceCulture); + } + } + + /// + /// This input method may be able to collect all the text you type, including personal data like passwords and credit card numbers. It comes from the %s application. Tap Turn on to turn on this input method.ê³¼(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_ST_POP_THIS_INPUT_METHOD_MAY_BE_ABLE_TO_COLLECT_ALL_THE_TEXT_YOU_TYPE_INCLUDING_PERSONAL_DATA_LIKE_PASSWORDS_AND_CREDIT_CARD_NUMBERS_MSG { + get { + return ResourceManager.GetString("IDS_ST_POP_THIS_INPUT_METHOD_MAY_BE_ABLE_TO_COLLECT_ALL_THE_TEXT_YOU_TYPE_INCLUDI" + + "NG_PERSONAL_DATA_LIKE_PASSWORDS_AND_CREDIT_CARD_NUMBERS_MSG", resourceCulture); + } + } + } +} diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.ar.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.ar.resx new file mode 100644 index 0000000..bf70e64 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.ar.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullتشغيل لوحة المفاتيح + لوحة المفاتيح + لوحة المفاتيح الافتراضية + تشغيل + إلغاء + يمكن لطريقة الإدخال هذه جمع كل النصوص التي تطبعها، بما في ذلك البيانات الشخصية مثل كلمات المرور وأرقام بطاقات الائتمان. مصدرها تطبيق %s. انقر فوق تفعيل لتفعيل طريقة الإدخال هذه. + تحديد لوحة المفاتيح + تفعيل + انتباه + لوحة المفاتيح الظاهرية + لوحات المفاتيح + ضبط لوحة المفاتيح + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.as.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.as.resx new file mode 100644 index 0000000..b103655 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.as.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullঅন কৰক + কীব'ৰ্ড + ডিফ'ল্ট কীব'ৰ্ড + বাতিল + কীব'ৰ্ড অন কৰক + পাছৱৰ্ডৰ নিচিনা ব্যক্তিগত ডাটা আৰু ক্ৰেডিট কাৰ্ড নম্বৰ অন্তৰ্ভুক্ত কৰি আপুনি টাইপ কৰা সকলো পাঠ সংগ্ৰহ কৰিবলৈ এই ইনপুট পদ্ধতি সক্ষম হ'ব পাৰে৷ এইটো %s এপ্লিকেশ্বনৰ পৰা আহে৷ এই ইনপুট পদ্ধতি সক্ষম কৰিবলৈ সক্ষম কৰক টিপক৷ + কীবোর্ড নির্বাচন করুন + সক্ষম + মনোযোগ + ভাৰ্ছুৱেল কীব'ৰ্ড + কীব'ৰ্ড + কীব'ৰ্ড ছেটিংছ + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.az.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.az.resx new file mode 100644 index 0000000..9dcf9ce --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.az.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullYandır + Klaviatura + Defolt klaviatura + Ləğv et + Klaviaturanı yandırın + Bu daxiletmə üsulu parollar və kredit kartı nömrələri kimi şəxsi məlumatlar da daxil olmaqla sizin yazdığının bütün mətni əldə edə bilər. Bu, %s proqramından gəlir. Bu daxiletmə rejimini aktiv etmək üçün Aktivləşdir vurun. + Klaviaturanı seç + Qoş + Diqqət + Virtual klaviatura + Klaviaturalar + Klaviatura parametrləri + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.be_BY.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.be_BY.resx new file mode 100644 index 0000000..4b35a91 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.be_BY.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullTurn on + Клавіятура + Стандартная клавіятура + Скас. + Turn on keyboard + Гэты спосаб уводу можа збіраць увесь тэкст, які ўводзіцца, у тым ліку персанальныя даныя, напрыклад, паролі і нумары крэдытных карт. Яго забяспечвае праграма %s. Націсніце «Уключыць», каб уключыць спосаб уводу. + Выбраць клавіятуру + Уключыць + Увага + Віртуальная клавіятура + Клавіятуры + Keyboard settings + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.bg.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.bg.resx new file mode 100644 index 0000000..66d033a --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.bg.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullВключване + Клавиатура + Клавиатура по подразбиране + Отказ + Включване клавиатура + Този метод за въвеждане вероятно може да събере всичкия написан от вас текст, включително лични данни, като пароли и номера на кредитни карти. Това идва от приложението %s. Докоснете „Активиране“, за да активирате този метод на въвеждане. + Изберете клавиатура + Разрешаване + Внимание + Виртуална клавиатура + Клавиатури + Настройки на клавиатурата + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.bn.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.bn.resx new file mode 100644 index 0000000..f89356d --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.bn.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullচালু করুন + কীবোর্ড + ডিফল্ট কীবোর্ড + বাতিল + কীবোর্ড চালু করা + এই ইনপুট পদ্ধতিটি ব্যক্তিগত তথ্য যেমন পাসওয়ার্ডগুলি ও ক্রেডিট কার্ড নম্বরগুলি সহ আপনার লেখা সমস্ত পাঠ্য সংগ্রহ করতে সমর্থ হতে পারে। এটি %s অ্যাপ্লিকেশন থেকে আসে। এই ইনপুট পদ্ধতি সক্ষম করতে সক্ষম করুন ট্যাপ করুন। + কীবোর্ড নির্বাচন করুন + সক্ষম + সজাগ হন + ভার্চুয়াল কীবোর্ড + কীবোর্ডগুলি + কীবোর্ড সেটিংস + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.bn_BD.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.bn_BD.resx new file mode 100644 index 0000000..f898abe --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.bn_BD.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullচালু করুন + কিবোর্ড + ডিফল্ট কিবোর্ড + বাতিল + কীবোর্ড চালু করুন + এই ইনপুট পদ্ধতি ব্যক্তিগত তথ্য যেমন পাসওয়ার্ড ও ক্রেডিট কার্ডের নম্বরসহ আপনার লেখা সব টেক্সট হয়তো সংগ্রহ করতে পারে৷ এটি %s অ্যাপ্লিকেশন থেকে এসেছে৷ এই ইনপুট পদ্ধতি সক্রিয় করতে ‘সক্রিয় করুন’ অপশনে ট্যাপ করুন৷ + Select keyboard + সক্রিয় + মনোযোগ দিন + ভার্চুয়াল কিবোর্ড + কীবোর্ডসমূহ + কিবোর্ড সেটিংস + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.ca.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.ca.resx new file mode 100644 index 0000000..7b0fb6c --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.ca.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullActivar + Teclat + Teclat predeterminat + Canc + Activar teclat + Aquest mètode d'entrada pot recopilar tots els textos que escrigui, incloent-hi les dades personals com ara les contrasenyes i els números de la targeta de crèdit. Ve de l'aplicació %s. Toqui Activar per activar aquest mètode d'entrada. + Seleccionar teclat + Activar + Atenció + Teclat virtual + Teclats + Ajustaments del teclat + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.cs.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.cs.resx new file mode 100644 index 0000000..032a76a --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.cs.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullZapnout + Klávesnice + Výchozí klávesnice + ZruÅ¡. + Zapnout klávesnici + Tato metoda zadávání může ukládat veÅ¡kerý zadávaný text včetně osobních dat, např. hesel a čísel kreditních karet. Pochází z aplikace %s. Tuto metodu zadávání zapnete klepnutím na tlačítko Zapnout. + Vybrat klávesnici + Povolit + Pozor + Virtuální klávesnice + Klávesnice + Nastavení klávesnice + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.da.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.da.resx new file mode 100644 index 0000000..8a846a4 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.da.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullAktiver + Tastatur + Standardtastatur + Afbr. + Aktiver tastatur + Denne indtastningsmetode kan være i stand til at indsamle al tekst, du skriver, inklusive personlige data sÃ¥som adgangskoder og kreditkortnumre. Den kommer fra applikationen %s. Tryk pÃ¥ Aktiver for at aktivere denne indtastningsmetode. + Vælg tastatur + Aktivér + Bemærk! + Virtuelt tastatur + Tastaturer + Tastaturindstillinger + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.de.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.de.resx new file mode 100644 index 0000000..fe1ffa7 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.de.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullEinschalten + Tastatur + Standardtastatur + Abbr. + Einschalten der Tastatur + Die Eingabemethode kann den von Ihnen eingegebenen Text, einschließlich persönliche Daten, wie Passwörter und Kreditkartennummern, sammeln. Sie stammt von der Anwendung %s. Auf „Aktivieren“ tippen, um diese Eingabemethode zu aktivieren. + Tastatur auswählen + Aktivieren + Achtung + Virtuelle Tastatur + Tastaturen + Tastatureinstellungen + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.el_GR.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.el_GR.resx new file mode 100644 index 0000000..26ced69 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.el_GR.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullΕνεργοποίηση + Πληκτρολόγιο + Προεπιλεγμένο πληκτρολόγιο + Άκυρο + Ενεργ. πληκτρολογίου + Η μέθοδος εισαγωγής μπορεί να συλλέγει όλα όσα πληκτρολογείτε, συμπεριλαμβανομένων προσωπικών δεδομένων, όπως κωδικοί πρόσβασης και αριθμοί πιστωτικών καρτών. Προέρχεται από την εφαρμογή του %s. Πατήστε «Ενεργοποίηση» για να ενεργοποιηθεί αυτή η μέθοδος εισαγωγής. + Επιλογή πληκτρολογίου + Ενεργό + Προσοχή + Εικονικό πληκτρολόγιο + Πληκτρολόγια + Ρυθμίσεις πληκτρολογίου + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.en.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.en.resx new file mode 100644 index 0000000..d4f3f25 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.en.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Turn on + + + Keyboard + + + Default keyboard + + + Cancel + + + Turn on keyboard + + + This input method may be able to collect all the text you type, including personal data like passwords and credit card numbers. It comes from the %s application. Tap Enable to enable this input method. + + + Select keyboard + + + Enable + + + Attention + + + Virtual keyboard + + + Keyboards + + + Keyboard settings + + + Ok + + + Back + + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.en_PH.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.en_PH.resx new file mode 100644 index 0000000..d4f3f25 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.en_PH.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Turn on + + + Keyboard + + + Default keyboard + + + Cancel + + + Turn on keyboard + + + This input method may be able to collect all the text you type, including personal data like passwords and credit card numbers. It comes from the %s application. Tap Enable to enable this input method. + + + Select keyboard + + + Enable + + + Attention + + + Virtual keyboard + + + Keyboards + + + Keyboard settings + + + Ok + + + Back + + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.en_US.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.en_US.resx new file mode 100644 index 0000000..2870aea --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.en_US.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Turn on + + + Keyboard + + + Default keyboard + + + Cancel + + + Turn on keyboard + + + This input method may be able to collect all the text you type, including personal data like passwords and credit card numbers. It comes from the %s application. Tap Turn on to turn on this input method. + + + Select keyboard + + + Enable + + + Attention + + + Virtual keyboard + + + Keyboards + + + Keyboard settings + + + Ok + + + Back + + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.es_ES.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.es_ES.resx new file mode 100644 index 0000000..df8566c --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.es_ES.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Activar + + + Teclado + + + Teclado predeterminado + + + Canc. + + + Activar teclado + + + Este método de entrada puede recopilar todo el texto que escriba, incluidos datos personales como contraseñas o números de tarjeta de crédito. Viene con la aplicación %s. Pulse Activar para activar este método de entrada. + + + Seleccionar teclado + + + Habilitar + + + Atención + + + Teclado virtual + + + Teclados + + + Ajustes del teclado + + + Ok + + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.es_US.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.es_US.resx new file mode 100644 index 0000000..19ae348 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.es_US.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Activar + + + Teclado + + + Teclado predeterminado + + + Canc. + + + Activar teclado + + + Es posible que este método de introducción almacene el contenido introducido, que incluye información personal como las contraseñas y números de tarjetas de crédito. La función proviene de la aplicación %s. Pulse Activar para activar este método de introducción. + + + Seleccionar teclado + + + Activar + + + Atención + + + Teclado virtual + + + Teclados + + + Ajustes del teclado + + + Ok + + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.et.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.et.resx new file mode 100644 index 0000000..0b411de --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.et.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullLülita sisse + Klahvistik + Vaikeklaviatuur + Tühis. + Klaviatuuri sisselül. + See sisestusmeetod võib koguda teie sisestatud teksti, sealhulgas isiklikke andmeid nagu paroolid ja krediitkaardi numbrid. See tuleb rakendusest %s. Toksake käsku Aktiveeri, et aktiveerida see sisestusviis. + Vali klaviatuur + Luba + Tähelepanu! + Virtuaalne klaviatuur + Klaviatuurid + Klaviatuuri seaded + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.eu.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.eu.resx new file mode 100644 index 0000000..8bfa883 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.eu.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullAktibatu + Teklatua + Lehenetsitako teklatua + Ezez. + Aktibatu teklatua + Baliteke sarrera metodo honek idazten duzun testua biltzeko gai izatea, pasahitzak eta kreditu txartelen zenbakiak bezalako datu pertsonalak barne. %s aplikaziotik dator. Ukitu Gaitu sarrera metodo hau gaitzea. + Hautatu teklatua + Gaitu + Oharra + Teklatu birtuala + Teklatuak + Teklatuaren ezarpenak + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.fa.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.fa.resx new file mode 100644 index 0000000..9992f74 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.fa.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullروشن کردن + صفحه کلید + صفحه‌کلید پیش‌فرض + لغو + روشن کردن صفحه کلید + این روش ورودی می‌تواند کل متنی که تایپ می‌کنید، شامل داده‌های شخصی مانند رمزهای ورود و شماره‌های کارت اعتباری را جمع‌آوری نماید. این اطلاعات از برنامه ‎%s می‌آیند. برای فعال کردن این روش ورودی، روی فعال کردن ضربه بزنید. + انتخاب صفحه کلید + فعال + توجه + صفحه کلید مجازی + صفحه کلیدها + تنظیمات صفحه کلید + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.fi.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.fi.resx new file mode 100644 index 0000000..72c9286 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.fi.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullKäynnistä + Näppäimistö + Oletusnäppäimistö + Per. + Ota näppäimistö käytt. + Tämä syöttötapa pystyy mahdollisesti keräämään kaikki kirjoittamasi tiedot, myös henkilökohtaiset tiedot, kuten salasanat ja luottokorttinumerot. Se kuuluu sovellukseen %s. Ota tämä syöttötapa käyttöön napauttamalla Ota käyttöön. + Valitse näppäimistö + Päälle + Huomio + Virtuaalinen näppäimistö + Näppäimistöt + Näppäimistön asetukset + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.fr.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.fr.resx new file mode 100644 index 0000000..1ef8f02 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.fr.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullActiver + Clavier + Clavier par défaut + Annul. + Activation du clavier + Ce mode de saisie peut collecter tout le texte saisi, notamment les données personnelles telles que les mots de passe et les numéros de carte de crédit. Cela vient de l'application %s. Appuyez sur Activer pour activer ce mode de saisie. + Sélectionner un clavier + Activer + Attention + Clavier virtuel + Claviers + Paramètres du clavier + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.fr_CA.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.fr_CA.resx new file mode 100644 index 0000000..7bf62ef --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.fr_CA.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullActiver + Clavier + Clavier par défaut + Annuler + Activation du clavier + Ce mode de saisie peut collecter tout le texte saisi, notamment les données personnelles telles que les mots de passe et les numéros de carte de crédit. Cela vient de l'application %s. Touchez Activer pour activer ce mode de saisie. + Sélectionner un clavier + Activer + Attention + Clavier tactile + Claviers + Paramètres du clavier + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.ga.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.ga.resx new file mode 100644 index 0000000..264dc6b --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.ga.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullCas air + Eochairchlár + Eochairchlár réamhshocraithe + Cealú + Cas air eochairchlár + Is féidir go mbeidh an modh ionchuir seo in ann an téacs uile a chlóscríobhfaidh tú a bhailiú, lena n-áirítear sonraí pearsanta amhail pasfhocail agus uimhreacha cárta creidmheasa. Is as an bhfeidhmchlár %s é. Tapáil Cumasaigh leis an modh ionchuir seo a chumasú. + Roghnaigh eochairchlár + Cumasaigh + Aire + Eochairchlár fíorúil + Eochairchláir + Socruithe eochairchláir + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.gl.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.gl.resx new file mode 100644 index 0000000..b7fedbb --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.gl.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullActivar + Teclado + Teclado predeterminado + Canc. + Activar teclado + É posible que este método de introdución recompile todo o texto que escribas, incluídos os datos persoais como os contrasinais e os números das tarxetas de crédito. Procede da aplicación %s. Toca Activar para activar este método de introdución. + Seleccionar teclado + Activar + Atención + Teclado virtual + Teclados + Axustes do teclado + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.gu.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.gu.resx new file mode 100644 index 0000000..678aedd --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.gu.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullચાલુ કરો + કીબોર્ડ + મૂળભૂત કીબોર્ડ + રદ કરો + કીબોર્ડ ચાલુ કરો + આ ઇનપુટ પદ્ધતિ પાસવર્ડ્સ અને ક્રેડિટ કાર્ડ નંબરો જેવી વ્યક્તિગત માહિતી સહિત તમે ટાઇપ કરો તે બધા ટેક્સ્ટને એકત્ર કરવા માટે સમર્થ હોઈ શકે છે. તે %s એપ્લિકેશનમાંથી આવે છે. આ ઇનપુટ પદ્ધતિને સક્ષમ કરવા માટે સક્ષમ કરો ટેપ કરો. + કીબોર્ડ પસંદ કરો + સક્ષમ કરો + સાવધાન + આભાસી કીબોર્ડ + કીબોર્ડ્સ + કિબોર્ડ સેટિંગ્સ + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.he.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.he.resx new file mode 100644 index 0000000..caa843b --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.he.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullהפעל + מקלדת + מקלדת ברירת מחדל + ביטול + הפעלת המקלדת + ייתכן ששיטת הזנה זו תוכל לאסוף את כל הטקסט שאתה מקליד, כולל נתונים אישיים כמו סיסמאות ומספרי כרטיסי אשראי. מגיע מהיישום %s. הקש על 'הפעל' כדי להפעיל שיטת הזנה זו. + בחר מקלדת + הפעל + שים לב + מקלדת וירטואלית + מקלדות + הגדרות מקלדת + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.hi.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.hi.resx new file mode 100644 index 0000000..549adc0 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.hi.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullचालू करें + कीबोर्ड + डिफॉल्ट कीबोर्ड + रद्द + कीबोर्ड चालू करें + हो सकता है, य‍ह इनपुट पद्धति आपके द्वारा लिखे गए सभी टेक्स्ट को एकत्रित करने में समर्थ है, जिसमें व्यक्तिगत डाटा जैसे कि पासवर्ड्स और क्रेडिट कार्ड नंबर्स शामिल हैं। यह %s एप्लीकेशन से आते हैं। इस इनपुट पद्धति को सक्षम करने के लिए सक्षम करें पर टैप करें। + कीबोर्ड चुनें + सक्षम + ध्यान दें + वर्चुअल कीबोर्ड + कीबोर्ड्स + कीबोर्ड सेटिंग्स + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.hr.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.hr.resx new file mode 100644 index 0000000..73a9012 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.hr.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullUključi + Tipkovnica + Zadana tipkovnica + Prekid + Uključiv. tipkovnice + Ovaj način unosa može skupljati sav uneseni tekst, uključujući osobne podatke kao npr. Å¡ifre i brojeve kreditnih kartica. Pripada aplikaciji %s. Dodirnite Omogući da biste omogućili ovaj način unosa. + Odaberite tipkovnicu + Uključi + Pozor + Virtualna tipkovnica + Tipkovnice + Postavke tipkovnice + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.hu.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.hu.resx new file mode 100644 index 0000000..e5fe7ba --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.hu.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullBekapcsolás + Billentyűzet + Alapértelmezett billentyűzet + Mégse + Billentyűzet bekapcs. + Ez a beviteli mód képes lehet minden bevitt szöveg begyűjtésére, beleértve a személyes adatokat, például a jelszavakat és a bankkártyaszámokat is. A funkciót a(z) %s alkalmazás biztosítja. A beviteli mód bekapcsolásához érintse meg a Bekapcsolás gombot. + Billentyűzet kiválasztása + Engedélyezés + Figyelem + Virtuális billentyűzet + Billentyűzetek + Billentyűzet beállításai + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.hy.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.hy.resx new file mode 100644 index 0000000..c6dfeff --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.hy.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullՄիացնել + Ստեղնաշար + Կանխադրված ստեղնաշար + Չեղկլ + Միացնել ստեղնաշարը + Ô±ÕµÕ½ ներածման Õ¥Õ²Õ¡Õ¶Õ¡Õ¯Õ¨ կկարողանա հավաքել Ձեր մուտքագրած Õ¡Õ´Õ¢Õ¸Õ²Õ» տեքստը, ներառյալ Õ¡Õ¶Õ±Õ¶Õ¡Õ¯Õ¡Õ¶ տվյալները, ինչպիսիք Õ¥Õ¶ գաղտնաբառերը և վարկային քարտի համարները: Ô´Õ¡ արդյունք Õ§ %s ծրագրի: Թակեք «Ընձեռել»՝ Õ¡ÕµÕ½ ներածման Õ¥Õ²Õ¡Õ¶Õ¡Õ¯Õ¶ ընձեռելու համար: + Ընտրել ստեղնաշար + Ակտիվացնլ + Ուշադրություն + Վիրտուալ ստեղնաշար + Ստեղնաշարեր + Ստեղնաշարի դրվածքներ + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.id.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.id.resx new file mode 100644 index 0000000..bac8874 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.id.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullHidupkan + Papan tombol + Keyboard default + Batal + Hidupkan keyboard + Metode input ini mungkin dapat mengumpulkan semua teks yang Anda ketik, termasuk data pribadi seperti kata sandi dan nomor kartu kredit. Metode ini datang dari aplikasi %s. Ketuk Aktifkan untuk mengaktifkan metode input ini. + Pilih keyboard + Aktif + Perhatian + Keyboard virtual + Keyboard + Pengaturan keyboard + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.is.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.is.resx new file mode 100644 index 0000000..a58676f --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.is.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullKveikja + Lyklaborð + Sjálfgefið lyklaborð + Hætta við + Kveikja á lyklaborði + Þessi innsláttaraðferð getur hugsanlega safnað öllum texta sem þú slærð inn, þar á meðal persónulegum gögnum á borð við lykilorð og kreditkortanúmer. Hún fylgir forritinu „%s“. Pikkaðu á „Kveikja“ til að kveikja á þessari innsláttaraðferð. + Velja lyklaborð + Gera virkt + Athuga + Sýndarlyklaborð + Lyklaborð + Stillingar lyklaborðs + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.it_IT.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.it_IT.resx new file mode 100644 index 0000000..8d13a02 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.it_IT.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullAttiva + Tastiera + Tastiera predefinita + Ann. + Attiva tastiera + Questo metodo di inserimento può raccogliere tutto il testo digitato, inclusi dati personali come password e numeri di carte di credito. Deriva dall'applicazione %s. Toccate Attiva per attivare questo metodo di inserimento. + Seleziona tastiera + Attiva + Attenzione + Tastiera virtuale + Tastiere + Impostazioni tastiera + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.ja_JP.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.ja_JP.resx new file mode 100644 index 0000000..5fe5fb0 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.ja_JP.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullON + キーボード + 標準キーボード + キャンセル + キーボードをON + この入力方法は、パスワードやクレジットカード番号などの個人データを含め、入力された全てのテキストが収集される場合があります。これは%sアプリケーションが原因です。この入力方法を有効にするには、[有効]をタップします。 + キーボードを選択 + 有効 + 注意 + 仮想キーボード + キーボード + キーボード設定 + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.ka.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.ka.resx new file mode 100644 index 0000000..801e711 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.ka.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullჩართვა + კლავიატურა + ნაგულისხმევი კლავიატურა + გაუქმ. + კლავიატურის ჩართვა + ტექსტის შედგენის ამ მეთოდით შეგიძლიათ, შეაგროვოთ თქვენ მიერ აკრეფილი ყველა ტექსტი, პერსონალური მონაცემების ჩათვლით, როგორიცაა პაროლები და საკრედიტო ბარათების ნომრები. ეს მოდის %s აპლიკაციიდან. ინფორმაციის შეყვანის მეთოდის ჩასართავად, შეეხეთ ჩართვის ნიშანს. + აირჩიეთ კლავიატურა + ჩართვა + ყურადღება + ვირტუალური კლავიატურა + კლავიატურები + კლავიატურის პარამეტრები + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.kk.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.kk.resx new file mode 100644 index 0000000..330785d --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.kk.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullҚосу + Пернетақта + Әдепкі пернетақта + Тоқт + Пернетақтаны қосу + Бұл енгізу әдісі арқылы құпия сөздер мен несие карта нөмірлері сияқты жеке деректерді қамтитын енгізілген барлық мәтінді жинауға болады. Ол %s қолданбасынан алынады. Осы енгізу әдісін қосу үшін, “Қосу” түймесін түртіңіз. + Пернетақта таңдау + Қосу + Назар аударыңыз + Виртуалды пернетақта + Пернетақталар + Пернетақта параметрлері + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.km.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.km.resx new file mode 100644 index 0000000..f896bd7 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.km.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullបើក + ក្ដារចុច + ក្ដារចុច​លំនាំដើម + បោះបង់ + បើក​ក្ដារចុច + វិធី​បញ្ចូល​នេះ​អាច​ប្រមូល​អត្ថបទ​ទាំងអស់​ដែល​អ្នក​វាយ រួម​ទាំង​ទិន្នន័យ​ផ្ទាល់ខ្លួន ដូចជា​ពាក្យសម្ងាត់ និង លេខ​បណ្ណ​ឥណទាន។ វា​បាន​មក​ពី​កម្មវិធី %s។ ប៉ះ បើកប្រើ ដើម្បី​បើកប្រើ​វិធី​បញ្ចូល​នេះ។ + ជ្រើស​ក្ដារចុច + បើក + ប្រុងប្រយ័ត្ន + ក្ដារចុច​និម្មិត + ក្ដារចុច + ការកំណត់​ក្ដារចុច + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.kn.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.kn.resx new file mode 100644 index 0000000..1d53613 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.kn.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullಆನ್ ಮಾಡಿ + ಕೀಬೋರ್ಡ್ + ಡೀಫಾಲ್ಟ್ ಕೀಬೋರ್ಡ್ + ರದ್ದು + ಕೀಬೋರ್ಡ್ ಆನ್ ಮಾಡಿ + ಪಾಸ್‌ವರ್ಡ್‌ಗಳು ಮತ್ತು ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್ ಸಂಖ್ಯೆಗಳ ರೀತಿಯ ವೈಯಕ್ತಿಕ ಡೇಟಾ ಸೇರಿದಂತೆ, ನೀವು ಟೈಪ್ ಮಾಡುವ ಎಲ್ಲಾ ಪಠ್ಯವನ್ನು ಸಂಗ್ರಹಿಸಿಕೊಳ್ಳಲು ಈ ಇನ್‌ಪುಟ್ ವಿಧಾನಕ್ಕೆ ಸಾಧ್ಯವಾಗಬಹುದು. ಇದು %s ಅನ್ವಯಿಸುವಿಕೆಯಿಂದ ಬರುತ್ತದೆ. ಈ ಇನ್‌ಪುಟ್ ವಿಧಾನವನ್ನು ಶಕ್ತಗೊಳಿಸಲು ಶಕ್ತಗೊಳಿಸಿ ಅನ್ನು ತಟ್ಟಿ. + ಕೀಬೋರ್ಡ್ ಆಯ್ಕೆಮಾಡಿ + ಶಕ್ತಗೊಳಿಸು + ಗಮನಿಸಿ + ವರ್ಚುವಲ್ ಕೀಬೋರ್ಡ್ + ಕೀಬೋರ್ಡ್‌‌ಗಳು + ಕೀಬೋರ್ಡ್ ಸಂಯೋಜನೆಗಳು + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.ko-KR.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.ko-KR.resx new file mode 100644 index 0000000..10b7a25 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.ko-KR.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 실행 + + + 키보드 + + + 기본 키보드 + + + 취소 + + + 키보드 실행 + + + %s 앱의 입력 방식은 비밀번호 또는 신용카드 번호와 같은 개인정보를 포함하여 입력한 내용을 모두 수집할 수 있습니다. 이 입력 방식을 실행하려면 [실행]을 누르세요. + + + 키보드 선택 + + + 실행 + + + 주의 + + + 가상 키보드 + + + 키보드 + + + 키보드 설정 + + + 확인 + + + 뒤로 + + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.ky_KG.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.ky_KG.resx new file mode 100644 index 0000000..4b1b29a --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.ky_KG.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullTurn on + Ариптакта + Баштапкы клавиатура + Артка + Turn on keyboard + Бул жазуу ыкмасы сиз жазган бардык текстти чогулта алат, сызсөздөр жана насыя карта номерлери сыяктуу жеке маалыматтарды дагы. Бул %s колдонмодон келет. Бул жазуу ыкмасын Иштетүүгө, иштетүүнү басыңыз. + Клавиатураны тандаңыз + Иштетүү + Көңүл буруңуз + Виртуалдык клавиатура + Клавиатуралар + Клавиатура орнотуулары + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.lo.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.lo.resx new file mode 100644 index 0000000..da02ae9 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.lo.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullເປີດ + ຄີບອດ + ຄີບອດມາດຕະຖານ + ຍົກເລີກ + ເປີດຄີບອດ + ວິທີປ້ອນຂໍ້ມູນນີ້ອາດສາມາດເກັບກຳຂໍ້ຄວາມທັງໝົດທີ່ພິມດີດ, ລວມທັງ ຂໍ້ມູນສ່ວນຕົວ ເຊັ່ນ ລະຫັດຜ່ານແລະເລກບັດຄຣິດິດ. ມັນມາຈາກ ແອພລິເຄຊັນ %s. ແຕະເປີດໃຊ້ງານເພື່ອເປີດໃຊ້ງານ ວິທີການປ້ອນຂໍ້ມູນນີ້. + ເລືອກຄີບອດ + ເປີດໃຫ້ໃຊ້ງານໄດ້ + ຂໍ້ຄວນຄຳນຶງ + ຄີບອດສະເໝືອນ + ບັນດາຄີບອດ + ຕັ້ງຄ່າຄີບອດ + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.lt.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.lt.resx new file mode 100644 index 0000000..3684838 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.lt.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullÄ®jungti + KlaviatÅ«ra + Numatytoji klaviatÅ«ra + AtÅ¡. + Ä®jungti klaviatÅ«rą + Gali bÅ«ti, kad Å¡iuo įvesties bÅ«du galima surinkti informaciją apie visą jÅ«sų įvestą tekstą, taip pat asmeninius duomenis, pvz., slaptažodžius ir kredito kortelių numerius. Tai programos %s sudedamoji dalis. Bakstelėkite „Įjungti“ ir įjunkite šį įvesties metodą. + Pasirinkite klaviatÅ«rą + Ä®jungti + Dėmesio + Virtualioji klaviatÅ«ra + KlaviatÅ«ros + KlaviatÅ«ros nustatymai + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.lv.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.lv.resx new file mode 100644 index 0000000..190da8e --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.lv.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullIeslēgt + TastatÅ«ra + Noklusējuma tastatÅ«ra + Atcelt + Ieslēgt tastatÅ«ru + Å Ä« ievades metode var apkopot visu jÅ«su ievadÄ«to tekstu, tostarp personiskos datus, piemēram, paroles un kredÄ«tkarÅ¡u numurus. Å is pakalpojums ir iekļauts programmā %s. Pieskarieties pie Aktivizēt, lai aktivizētu Å¡o ievades metodi. + Izvēlieties tastatÅ«ru + Aktivizēt + UzmanÄ«bu + Virtuālā tastatÅ«ra + TastatÅ«ras + TastatÅ«ras iestatÄ«jumi + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.mk.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.mk.resx new file mode 100644 index 0000000..12bd92b --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.mk.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullВклучи + Тастатура + Основна тастатура + Откажи + Вклуч. ја тастатурата + Овој начин на внесување може да регистрира сѐ што внесувате, вклучувајќи и лични податоци како лозинки и броеви на кредитни картички. Потекнува од апликацијата %s. Допрете Вклучи за да го вклучите овој начин на внесување. + Изберете тастатура + Вклучи + Внимание + Виртуелна тастатура + Тастатури + Поставки за тастатурата + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.ml.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.ml.resx new file mode 100644 index 0000000..309bf61 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.ml.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullഓൺ ചെയ്യുക + കീബോര്‍ഡ് + ഡിഫോൾട്ട് കീബോർഡ് + റദ്ദാ. + കീബോർഡ് ഓൺ ചെയ്യുക + പാസ്‌വേഡുകളും ക്രെഡിറ്റ് കാർഡ് നമ്പറുകളും പോലുള്ള വ്യക്തിഗത ഡാറ്റ ഉൾപ്പെടെ, നിങ്ങൾ ടൈപ്പ് ചെയ്യുന്ന എല്ലാ ടെക്സ്റ്റും ശേഖരിക്കാൻ ഈ ഇൻപുട്ട് രീതിക്ക് സാധിച്ചേക്കും. ഇത് ലഭ്യമാക്കുന്നത് %s ആപ്ലിക്കേഷനാണ്. ഈ ഇൻപുട്ട് രീതി പ്രാപ്തമാക്കുന്നതിന് പ്രാപ്തമാക്കുക എന്നതിൽ സ്പർശിക്കുക. + കീബോര്‍ഡ് തിരഞ്ഞെടുക്കുക + പ്രാപ്‌തം + ശ്രദ്ധിക്കുക + വെര്‍ച്വല്‍ കീ‌ബോര്‍ഡ് + കീബോര്‍ഡുകള്‍ + കീബോർഡ് ക്രമീകരണങ്ങൾ + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.mn_MN.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.mn_MN.resx new file mode 100644 index 0000000..d727a23 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.mn_MN.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullTurn on + Гар товчлуур + Өгөгдмөл гар товчлуур + Цуцлах + Turn on keyboard + Энэ бичих арга нь таны бичсэн бүх бичвэр, эдгээрийн дотор нууц үг, картны дугаар зэрэг хувийн өгөгдлийг цуглуулж чадна. Энэ нь %s хэрэглүүрээс гарна. Идэвхжүүл дээр товшиж энэ бичих аргыг идэвхжүүл. + Товчлуурт гар сонго + Идэвхжүүл + Хэнд + Хийсвэр товчлуурт гар + Гар + Гар товчлуурын тохиргоо + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.mr.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.mr.resx new file mode 100644 index 0000000..3979ccf --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.mr.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullचालू करा + कीबोर्ड + डिफॉल्‍ट कीबोर्ड + रद्द + कीबोर्ड चालू करा + ही निविष्‍ट पद्धत कदाचित, पासवर्ड्स आणि क्रेडिट कार्ड क्रमांकांसारखा व्‍यक्तिगत डेटा मिळून आपण टाइप केलेला सर्व मजकूर गोळा करण्‍यात सक्षम असेल. हे %s अनुप्रयोगावरून मिळते. ही निविष्‍ट पद्धत सक्षम करण्‍यासाठी सक्षम करा टॅप करा. + कीबोर्ड निवडा + सक्रिय + लक्ष द्या + आभासी कीबोर्ड + कीबोर्ड्स + कीबोर्ड सेटिंग्स + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.ms.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.ms.resx new file mode 100644 index 0000000..6372fb7 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.ms.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullHidupkan + Papan kekunci + Papan kekunci lalai + Batal + Hidupkan papan kekunci + Kaedah input ini boleh mengumpul semua teks yang anda taip, termasuklah data peribadi seperti kata laluan dan nombor kad kredit. Ia datang daripada aplikasi %s. Ketik Aktifkan untuk mengaktfikan kaedah input ini. + Pilih papan kekunci + Aktif + Perhatian + Papan kekunci maya + Papan kekunci + Aturan papan kekunci + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.my_MM.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.my_MM.resx new file mode 100644 index 0000000..68a6631 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.my_MM.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullဖြင့္ပါ + ကီးဘုတ် + မူရင်းပါပုံစံ ကီးဘုတ် + ပယ်ဖျက် + ကီးဘုတ္ဖြင့္ပါ + ဤဖြည့်စရာ နည်းလမ်းသည် စကားဝှက်များနှင့် အကြွေးဝယ်ကဒ် နံပါတ်များကဲ့သို့ ကိုယ်ရေးသီးသန့် ဒေတာများအပါအဝင် သင်ရိုက်ထည့်သည့် စာသားအားလုံးကို ကောက်ယူသွားနိုင်သည်။ ၄င်းသည် %s အပလီကေးရှင်းမှ ပေါ်လာသည်။ ဤဖြည့်စရာ နည်းလမ်းကိုဖွင့်ရန် ဖွင့်ပါကို နှိပ်ပါ။ + ကီးဘုတ် ရွေးပါ + စတင်လုပ်ဆောင်ပါ + သတိ + Virtual keyboard + ကီးဘုတ်များ + Keyboard settings + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.my_ZG.Designer.cs b/SettingInputmethod/SettingInputmethod/Resource/Resources.my_ZG.Designer.cs new file mode 100644 index 0000000..c7cc11b --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.my_ZG.Designer.cs @@ -0,0 +1,172 @@ +//------------------------------------------------------------------------------ +// +// 이 코드는 도구를 사용하여 생성되었습니다. +// 런타임 버전:4.0.30319.42000 +// +// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면 +// 이러한 변경 내용이 손실됩니다. +// +//------------------------------------------------------------------------------ + +namespace SettingInputmethod.Resource { + using System; + + + /// + /// 지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다. + /// + // 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder + // 클래스에서 자동으로 생성되었습니다. + // 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여 ResGen을 + // 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class Resources_my_ZG { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources_my_ZG() { + } + + /// + /// 이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SettingInputmethod.Resource.Resources.my_ZG", typeof(Resources_my_ZG).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대해 현재 스레드의 CurrentUICulture 속성을 + /// 재정의합니다. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// ပယ္ဖ်က္과(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_COM_SK_CANCEL_ABB { + get { + return ResourceManager.GetString("IDS_COM_SK_CANCEL_ABB", resourceCulture); + } + } + + /// + /// ကီးဘုတ္과(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_IME_BODY_KEYBOARD { + get { + return ResourceManager.GetString("IDS_IME_BODY_KEYBOARD", resourceCulture); + } + } + + /// + /// ကီးဘုတ္ ေရြးပါ과(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_IME_BODY_SELECT_KEYBOARD { + get { + return ResourceManager.GetString("IDS_IME_BODY_SELECT_KEYBOARD", resourceCulture); + } + } + + /// + /// ကီးဘုတ္ သတ္မွတ္ခ်က္မ်ား과(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_IME_HEADER_KEYBOARD_SETTINGS_ABB { + get { + return ResourceManager.GetString("IDS_IME_HEADER_KEYBOARD_SETTINGS_ABB", resourceCulture); + } + } + + /// + /// သတိ과(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_ST_BODY_ATTENTION { + get { + return ResourceManager.GetString("IDS_ST_BODY_ATTENTION", resourceCulture); + } + } + + /// + /// စတင္လုပ္ေဆာင္ပါ과(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_ST_BUTTON_ENABLE { + get { + return ResourceManager.GetString("IDS_ST_BUTTON_ENABLE", resourceCulture); + } + } + + /// + /// Turn onê³¼(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_ST_BUTTON_TURN_ON_ABB3 { + get { + return ResourceManager.GetString("IDS_ST_BUTTON_TURN_ON_ABB3", resourceCulture); + } + } + + /// + /// Turn on keyboardê³¼(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_ST_BUTTON_TURN_ON_KEYBOARD_ABB { + get { + return ResourceManager.GetString("IDS_ST_BUTTON_TURN_ON_KEYBOARD_ABB", resourceCulture); + } + } + + /// + /// မူရင္းပါပုံစံ ကီးဘုတ္과(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_ST_HEADER_DEFAULT_KEYBOARD_ABB { + get { + return ResourceManager.GetString("IDS_ST_HEADER_DEFAULT_KEYBOARD_ABB", resourceCulture); + } + } + + /// + /// ကီးဘုတ္မ်ား과(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_ST_HEADER_KEYBOARDS { + get { + return ResourceManager.GetString("IDS_ST_HEADER_KEYBOARDS", resourceCulture); + } + } + + /// + /// ပုံရိပ္ေယာင္ ကီးဘုတ္과(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_ST_HEADER_VIRTUAL_KEYBOARD { + get { + return ResourceManager.GetString("IDS_ST_HEADER_VIRTUAL_KEYBOARD", resourceCulture); + } + } + + /// + /// ဤျဖည့္စရာ နည္းလမ္းသည္ စကားဝွက္မ်ားႏွင့္ အေႂကြးဝယ္ကဒ္ နံပါတ္မ်ားကဲ့သို႔ ကိုယ္ေရးသီးသန္႔ ေဒတာမ်ားအပါအဝင္ သင္႐ိုက္ထည့္သည့္ စာသားအားလုံးကို ေကာက္ယူသြားႏိုင္သည္။ ၄င္းသည္ %s အပလီေကးရွင္းမွ ေပၚလာသည္။ ဤျဖည့္စရာ နည္းလမ္းကိုဖြင့္ရန္ ဖြင့္ပါကို ႏွိပ္ပါ။과(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_ST_POP_THIS_INPUT_METHOD_MAY_BE_ABLE_TO_COLLECT_ALL_THE_TEXT_YOU_TYPE_INCLUDING_PERSONAL_DATA_LIKE_PASSWORDS_AND_CREDIT_CARD_NUMBERS_MSG { + get { + return ResourceManager.GetString("IDS_ST_POP_THIS_INPUT_METHOD_MAY_BE_ABLE_TO_COLLECT_ALL_THE_TEXT_YOU_TYPE_INCLUDI" + + "NG_PERSONAL_DATA_LIKE_PASSWORDS_AND_CREDIT_CARD_NUMBERS_MSG", resourceCulture); + } + } + } +} diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.my_ZG.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.my_ZG.resx new file mode 100644 index 0000000..4ab333f --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.my_ZG.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullTurn on + ကီးဘုတ္ + မူရင္းပါပုံစံ ကီးဘုတ္ + ပယ္ဖ်က္ + Turn on keyboard + ဤျဖည့္စရာ နည္းလမ္းသည္ စကားဝွက္မ်ားႏွင့္ အေႂကြးဝယ္ကဒ္ နံပါတ္မ်ားကဲ့သို႔ ကိုယ္ေရးသီးသန္႔ ေဒတာမ်ားအပါအဝင္ သင္႐ိုက္ထည့္သည့္ စာသားအားလုံးကို ေကာက္ယူသြားႏိုင္သည္။ ၄င္းသည္ %s အပလီေကးရွင္းမွ ေပၚလာသည္။ ဤျဖည့္စရာ နည္းလမ္းကိုဖြင့္ရန္ ဖြင့္ပါကို ႏွိပ္ပါ။ + ကီးဘုတ္ ေရြးပါ + စတင္လုပ္ေဆာင္ပါ + သတိ + ပုံရိပ္ေယာင္ ကီးဘုတ္ + ကီးဘုတ္မ်ား + ကီးဘုတ္ သတ္မွတ္ခ်က္မ်ား + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.nb.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.nb.resx new file mode 100644 index 0000000..c806eaf --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.nb.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSlÃ¥ påअन गर्नुहोस् + Tastatur + Standardtastatur + Avbryt + SlÃ¥ pÃ¥ tastatur + Det kan hende at denne inndatametoden kan klare Ã¥ innhente all teksten du skriver inn, inkludert personlige data som passord og kredittkortnumre. Den kommer fra %s-appen. Trykk pÃ¥ Aktiver for Ã¥ aktivere denne inndatametoden. + Velg tastatur + Aktiver + OBS! + Virtuelt tastatur + Tastaturer + Tastaturinnstillinger + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.ne.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.ne.resx new file mode 100644 index 0000000..27076de --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.ne.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullअन गर्नुहोस् + कीबोर्ड + पूर्वनिर्धारित कीबोर्ड + रद्द + कीबोर्डलाई अन गर्नु + यो इन्पुट पद्धति पासवर्ड र क्रेडिट कार्ड नम्बरहरू जस्ता व्यक्तिगत डाटा लगायत तपाईले टाइप गरेको सबै पाठ सङ्कलन गर्न सक्षम हुन सक्छ। यो %s अनुप्रयोगबाट आउँछ। यो इन्पुट पद्धति सक्षम गर्न सक्षम गर्नुहोस् ट्याप गर्नुहोस्। + कीबोर्ड चयन गर्नुहोस् + सक्षम पार्नुहोस् + ध्‍यान दिनुहोस् + भर्चुअल कीबोर्ड + कीबोर्डहरू + कीबोड सेटिङहरू + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.nl.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.nl.resx new file mode 100644 index 0000000..ebae837 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.nl.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullInschakelen + Toetsenbord + Standaard toetsenbord + Annul. + Toetsenb. inschakelen + Met deze invoermethode wordt mogelijk alle ingevoerde tekst verzameld, met inbegrip van persoonlijke gegevens als wachtwoorden en creditcardnummers. Dit is afkomstig van de applicatie %s. Tik op Inschakelen om deze invoermethode in te schakelen. + Toetsenbord selecteren + Aanzetten + Let op + Virtueel toetsenbord + Toetsenborden + Toetsenbordinstellingen + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.or.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.or.resx new file mode 100644 index 0000000..69c660f --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.or.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullଟର୍ନ୍ ଅନ୍ + କୀବୋର୍ଡ୍ + ଡିଫଲ୍ଟ କୀବୋର୍ଡ + ବାତିଲ୍ + କୀବୋର୍ଡ ଟର୍ନ୍ ଅନ୍ + ଏହି ଇନପୁଟ୍ ପଦ୍ଧତି ଆପଣ ଟାଇପ୍ କରିବା ସମସ୍ତ ଟେକ୍ସଟ୍, ଯାହା ବ୍ୟକ୍ତିଗତ ଡାଟା ଯେପରିକି ପାସୱା‌ର୍ଡ୍‍ ଏବଂ କ୍ରେଡିଟ୍ କାର୍ଡ୍ ନମ୍ବରଗୁଡିକ ଅନ୍ତର୍ଭୁକ୍ତ କରି ସମସ୍ତ ସଂଗ୍ରହ କରିବାରେ ସମର୍ଥ ହୋଇଥାଏ। ଏହା %s ଆପ୍ଲିକେସନରୁ ଆସିଥାଏ। ଏହି ଇନପୁଟ୍ ପଦ୍ଧତି ସକ୍ଷମ କରିବାକୁ ସକ୍ଷମ ଟ୍ୟାପ୍ କରନ୍ତୁ। + କୀବୋର୍ଡ୍ ଚୟନ କରନ୍ତୁ + ସକ୍ଷମ + ସତର୍କତା + ଭର୍ଚୁଆଲ୍ କୀବୋର୍ଡ୍ + କୀବୋର୍ଡଗୁଡିକ + କୀବୋର୍ଡ ସେଟିଂସ୍ + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.pa.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.pa.resx new file mode 100644 index 0000000..468b83b --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.pa.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullਚਾਲੂ ਕਰੋ + ਕੀਬੋਰਡ + ਡਿਫਾੱਲਟ ਕੀਬੋਰਡ + ਰੱਦ + ਕੀਬੋਰਡ ਚਾਲੂ ਕਰੋ + ਇਹ ਇਨਪੁਟ ਵਿਧੀ ਤੁਹਾਡੇ ਵਿਅਕਤੀਗਤ ਡੈਟਾ ਜਿਵੇਂ ਪਾਸਵਰਡਸ ਅਤੇ ਕ੍ਰੈਡਿਟ ਕਾਰਡ ਨੰਬਰਸ ਸਮੇਤ ਤੁਹਾਡੇ ਦੁਆਰਾ ਟਾਈਪ ਕੀਤਾ ਜਾਣ ਵਾਲਾ ਸਾਰਾ ਟੈਕਸਟ ਇਕੱਠਾ ਕਰ ਸਕਦੀ ਹੈ। ਇਹ %s ਅਨੁਪ੍ਰਯੋਗ ਨਾਲ ਹੁੰਦਾ ਹੈ। ਇਸ ਇਨਪੁਟ ਵਿਧੀ ਨੂੰ ਸਮਰੱਥ ਕਰਨ ਲਈ ਸਮਰੱਥ ਕਰੋ ਤੇ ਟੈਪ ਕਰੋ। + ਕੀਬੋਰਡ ਚੁਣੋ + ਸਮੱਰਥ + ਧਿਆਨ ਦਿਉ + ਵਰਚੁਅਲ ਕੀਬੋਰਡ + ਕੀਬੋਰਡਸ + ਕੀਬੋਰਡ ਸੈੱਟਿੰਗਸ + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.pl.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.pl.resx new file mode 100644 index 0000000..eee9a3c --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.pl.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullWłącz + Klawiatura + Klawiatura domyślna + Anul. + Włączanie klawiatury + Ta metoda wprowadzania może mieć możliwość gromadzenia całego wpisywanego tekstu, łącznie z takimi danymi osobistymi, jak hasła i numery kart kredytowych. Pochodzi ona z aplikacji %s. Dotknij przycisku Włącz, aby włączyć tę metodę wprowadzania. + Wybierz klawiaturę + Włącz + Uwaga + Wirtualna klawiatura + Klawiatury + Ustawienia klawiatury + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.pl_SP.Designer.cs b/SettingInputmethod/SettingInputmethod/Resource/Resources.pl_SP.Designer.cs new file mode 100644 index 0000000..f7d3653 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.pl_SP.Designer.cs @@ -0,0 +1,172 @@ +//------------------------------------------------------------------------------ +// +// 이 코드는 도구를 사용하여 생성되었습니다. +// 런타임 버전:4.0.30319.42000 +// +// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면 +// 이러한 변경 내용이 손실됩니다. +// +//------------------------------------------------------------------------------ + +namespace SettingInputmethod.Resource { + using System; + + + /// + /// 지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다. + /// + // 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder + // 클래스에서 자동으로 생성되었습니다. + // 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여 ResGen을 + // 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class Resources_pl_SP { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources_pl_SP() { + } + + /// + /// 이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SettingInputmethod.Resource.Resources.pl_SP", typeof(Resources_pl_SP).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대해 현재 스레드의 CurrentUICulture 속성을 + /// 재정의합니다. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Anul.ê³¼(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_COM_SK_CANCEL_ABB { + get { + return ResourceManager.GetString("IDS_COM_SK_CANCEL_ABB", resourceCulture); + } + } + + /// + /// Tastaturaê³¼(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_IME_BODY_KEYBOARD { + get { + return ResourceManager.GetString("IDS_IME_BODY_KEYBOARD", resourceCulture); + } + } + + /// + /// Wybierz klawiaturę과(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_IME_BODY_SELECT_KEYBOARD { + get { + return ResourceManager.GetString("IDS_IME_BODY_SELECT_KEYBOARD", resourceCulture); + } + } + + /// + /// Nasztalowania tastaturyê³¼(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_IME_HEADER_KEYBOARD_SETTINGS_ABB { + get { + return ResourceManager.GetString("IDS_IME_HEADER_KEYBOARD_SETTINGS_ABB", resourceCulture); + } + } + + /// + /// Pozōrê³¼(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_ST_BODY_ATTENTION { + get { + return ResourceManager.GetString("IDS_ST_BODY_ATTENTION", resourceCulture); + } + } + + /// + /// Włōnczê³¼(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_ST_BUTTON_ENABLE { + get { + return ResourceManager.GetString("IDS_ST_BUTTON_ENABLE", resourceCulture); + } + } + + /// + /// Turn onê³¼(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_ST_BUTTON_TURN_ON_ABB3 { + get { + return ResourceManager.GetString("IDS_ST_BUTTON_TURN_ON_ABB3", resourceCulture); + } + } + + /// + /// Turn on keyboardê³¼(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_ST_BUTTON_TURN_ON_KEYBOARD_ABB { + get { + return ResourceManager.GetString("IDS_ST_BUTTON_TURN_ON_KEYBOARD_ABB", resourceCulture); + } + } + + /// + /// Tastatura dōmyślnŏ과(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_ST_HEADER_DEFAULT_KEYBOARD_ABB { + get { + return ResourceManager.GetString("IDS_ST_HEADER_DEFAULT_KEYBOARD_ABB", resourceCulture); + } + } + + /// + /// Klawiaturyê³¼(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_ST_HEADER_KEYBOARDS { + get { + return ResourceManager.GetString("IDS_ST_HEADER_KEYBOARDS", resourceCulture); + } + } + + /// + /// Wirtualna klawiaturaê³¼(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_ST_HEADER_VIRTUAL_KEYBOARD { + get { + return ResourceManager.GetString("IDS_ST_HEADER_VIRTUAL_KEYBOARD", resourceCulture); + } + } + + /// + /// Ta metoda wprowadzania może mieć możliwość gromadzenia całego wpisywanego tekstu, łącznie z takimi danymi osobistymi, jak hasła i numery kart kredytowych. Pochodzi ona z aplikacji %s. Dotknij przycisku Włącz, aby włączyć tę metodę wprowadzania.ê³¼(와) 유사한 지역화된 문자열을 찾습니다. + /// + public static string IDS_ST_POP_THIS_INPUT_METHOD_MAY_BE_ABLE_TO_COLLECT_ALL_THE_TEXT_YOU_TYPE_INCLUDING_PERSONAL_DATA_LIKE_PASSWORDS_AND_CREDIT_CARD_NUMBERS_MSG { + get { + return ResourceManager.GetString("IDS_ST_POP_THIS_INPUT_METHOD_MAY_BE_ABLE_TO_COLLECT_ALL_THE_TEXT_YOU_TYPE_INCLUDI" + + "NG_PERSONAL_DATA_LIKE_PASSWORDS_AND_CREDIT_CARD_NUMBERS_MSG", resourceCulture); + } + } + } +} diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.pl_SP.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.pl_SP.resx new file mode 100644 index 0000000..dd9acd3 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.pl_SP.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullTurn on + Tastatura + Tastatura dōmyślnŏ + Anul. + Turn on keyboard + Ta metoda wprowadzania może mieć możliwość gromadzenia całego wpisywanego tekstu, łącznie z takimi danymi osobistymi, jak hasła i numery kart kredytowych. Pochodzi ona z aplikacji %s. Dotknij przycisku Włącz, aby włączyć tę metodę wprowadzania. + Wybierz klawiaturę + Włōncz + Pozōr + Wirtualna klawiatura + Klawiatury + Nasztalowania tastatury + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.pt_BR.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.pt_BR.resx new file mode 100644 index 0000000..228bbe1 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.pt_BR.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullLigar + Teclado + Teclado padrão + Canc. + Ligar teclado + Este método de entrada pode acumular todo o texto digitado, incluindo dados pessoais como senhas e números de cartão de crédito. Ele acompanha o aplicativo %s. Toque em Ativar para ativar este método de entrada. + Selecionar teclado + Ativar + Atenção + Teclado virtual + Teclados + Configurações do teclado + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.pt_PT.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.pt_PT.resx new file mode 100644 index 0000000..9b5e4be --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.pt_PT.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullLigar + Teclado + Teclado padrão + Canc. + Ligar teclado + Este método de introdução pode ser capaz de recolher todos os textos que introduzir, incluindo dados pessoais, tais como palavras-passe e números de cartões de crédito. É fornecido pela aplicação %s. Toque em Activar para activar este método de introdução. + Selecionar teclado + Activar + Atenção + Teclado virtual + Teclados + Definições do teclado + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.resx new file mode 100644 index 0000000..608b2db --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Back + + + Cancel + + + Ok + + + Keyboard + + + Select keyboard + + + Keyboard settings + + + Attention + + + Enable + + + Turn on keyboard + + + Default keyboard + + + Keyboards + + + Virtual keyboard + + + This input method may be able to collect all the text you type, including personal data like passwords and credit card numbers. It comes from the %s application. Tap Turn on to turn on this input method. + + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.ro.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.ro.resx new file mode 100644 index 0000000..b059797 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.ro.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullPornire + Tastatură + Tastatură implicită + Anul. + Pornire tastatură + Această metodă de introducere poate colecta toate textele pe care le tastaÅ£i, inclusiv date personale, cum ar fi parolele şi numerele cărÅ£ilor de credit. Provine de la aplicaÅ£ia %s. AtingeÅ£i Activare pentru a activa metoda de introducere. + Selectare tastatură + Activare + AtenÅ£ie + Tastatură virtuală + Tastaturi + Setări tastatură + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.ru_RU.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.ru_RU.resx new file mode 100644 index 0000000..276313a --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.ru_RU.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullВключить + Клавиатура + Клавиатура по умолчанию + Отмена + Включение клавиатуры + При использовании этого метода ввода для приложения %s может собираться весь вводимый текст, включая личную информацию, такую как пароли и номера кредитных карт. Коснитесь кнопки “Включить”, чтобы включить этот метод ввода. + Выберите клавиатуру + Включить + Внимание + Виртуальная клавиатура + Клавиатуры + Параметры клавиатуры + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.si.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.si.resx new file mode 100644 index 0000000..968d5f5 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.si.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullක්‍රියාත්මක. + යතුරු පුවරුව + පෙරනිමි යතුරු පුවරුව + අ.ක. + යතුරු පුවර. ක්‍රි. කි. + මෙම ආදාන ක්‍රමයට මුරපද සහ ණයපත් අංක වැනි පුද්ගලික දත්ත ඇතුළුව, ඔබ ටයිප් කරන පෙළ සියල්ල එකතු කර ගැනීමට හැකි වනු ඇත. එය %s යෙදුමෙන් පැමිණේ. මෙම ආදාන ක්‍රමය සක්‍රිය කිරීමට සක්‍රිය කරන්න තට්ටු කරන්න. + යතුරුපුවරුව තෝරන්න + සක්‍රිය ක. + අවධානය යොමු කරන්න + අතථ්‍ය යතුරු පුවරුව + යතුරු පුවරු + යතුරුපුවරු සැකසුම් + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.sk.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.sk.resx new file mode 100644 index 0000000..cc293b0 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.sk.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullZapnúť + Klávesnica + Predvolená klávesnica + ZruÅ¡. + Zapnutie klávesnice + Táto metóda vstupu môže byÅ¥ schopná zaznamenávaÅ¥ vÅ¡etok text, ktorý zadáte, vrátane osobných údajov, ako sú heslá a čísla kreditných kariet. Pochádza z aplikácie %s. Ťuknutím na položku Zapnúť môžete zapnúť túto metódu vstupu. + Vyberte klávesnicu + PovoliÅ¥ + Pozor + Virtuálna klávesnica + Klávesnice + Nastavenia klávesnice + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.sl.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.sl.resx new file mode 100644 index 0000000..8c6eb41 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.sl.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullVklopi + Tipkovnica + Privzeta tipkovnica + Prekliči + Vklopi tipkovnico + Ta način vnosa lahko zbere celotno vneseno besedilo, vključno z osebnimi podatki, kot so gesla in Å¡tevilke kreditnih kartic. Ta način vnosa uporablja aplikacija %s. Pritisnite Omogoči, da omogočite ta način vnosa. + Izberite tipkovnico + Omogoči + Pozor + Navidezna tipkovnica + Tipkovnice + Nastavitve tipkovnice + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.sq.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.sq.resx new file mode 100644 index 0000000..55eb062 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.sq.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullNdize + Butona + Tastiera e parazgjedhur + Anullo + Ndiz tastierën + Kjo mënyrë futjeje mund të jetë në gjendje të mbledhë krejt tekstin që ti shtyp, përfshi të dhënat personale si fjalëkalimet dhe të dhënat e kartave të kreditit. Ajo vjen nga aplikacioni %s. Trokit mbi Aftëso, për ta aftësuar këtë mënyrë futjeje. + Përzgjidh tastierën + Aktivizo + Kujdes + Tastiera virtuale + Tastierat + Cilësimet e tastierës + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.sr.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.sr.resx new file mode 100644 index 0000000..4624b74 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.sr.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullUključi + Tastatura + Podrazumevana tastatura + Otkaži + Uključite tastaturu + Ovaj način unosa možda može da prikuplja sav tekst koji se unosi, uključujući i lične podatke kao Å¡to su lozinke i brojevi kreditnih kartica. On potiče od aplikacije %s. Kucni na opciju Omogući da bi omogućio/la ovaj način unosa. + Izaberi tastaturu + Omogući + Pažnja + Virtuelna tastatura + Tastature + PodeÅ¡avanja tastature + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.sv.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.sv.resx new file mode 100644 index 0000000..ca8c804 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.sv.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSlÃ¥ pÃ¥ + Tangentbord + Standardtangentbord + Avbryt + SlÃ¥ pÃ¥ tangentbordet + Den här inmatningsmetoden kan samla in alla texter du skriver, inklusive privata uppgifter som lösenord och kreditkortsnummer. Den kommer frÃ¥n programmet %s. Tryck pÃ¥ Aktivera om du vill aktivera inmatningsmetoden. + Välj tangentbord + Aktivera + Obs! + Virtuellt tangentbord + Tangentbord + Tangentbordsinställningar + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.ta.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.ta.resx new file mode 100644 index 0000000..2d8a55e --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.ta.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullஆன் செய்க + விசைப்பலகை + டீஃபால்ட் விசைப்பலகை + ரத்து + விசைப்பலகையை ஆன் செய்யவும் + இந்த உள்ளீட்டு முறையால், கடவுச்சொற்கள் மற்றும் கடனட்டை எண்கள் போன்ற தனிப்பட்ட தரவு உட்பட நீங்கள் தட்டச்சு செய்த அனைத்து உரையும் சேகரிக்க இயலும். %s பயன்பாட்டிலிருந்து இது வருகிறது. இந்த உள்ளீட்டு முறையை செயல்படுத்த செயல்படுத்தவும் என்பதை டேப் செய்க. + விசைப்பலகையைத் தேர்ந்தெடு + செ.படுத்துக + கவனம் + மெய்நிகர் விசைப்பலகை + விசைப்பலகைகள் + விசைப்பலகை அமைவுகள் + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.te.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.te.resx new file mode 100644 index 0000000..d6d6818 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.te.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullఆన్ చేయి + కీబోర్డు + డిఫాల్ట్ కీబోర్డు + రద్దు + కీబోర్డ్‌ని ఆన్ చేయండి + ఈ ఇన్‌పుట్ పాస్‌వర్డ్‌లు మరియు క్రెడిట్ కార్డ్ నంబర్‌ల వంటి వ్యక్తిగత డేటాతో సహా, మీరు టైప్ చేసే ప్రతిదాన్ని సేకరించవచ్చు. ఇది %s అప్లికేషన్ నుండి వస్తుంది. ఈ ఇన్‌పుట్ పద్దతిని ప్రారంభించడానికి ప్రారంభించు ట్యాప్ చేయండి. + కీబోర్డ్ ని ఎంచుకోండి + ఎనేబుల్ చేయి + అటెన్షన్ + వర్చువల్ కీబోర్డ్ + కీబోర్డ్‌లు + కీబోర్డ్ సెట్టింగ్‌లు + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.tg_TJ.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.tg_TJ.resx new file mode 100644 index 0000000..ad9df3c --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.tg_TJ.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullTurn on + Клавиатура + Клавиатураи стандартӣ + Бекор к. + Turn on keyboard + Ин усули вуруд метавонад ҳамаи матни чидаи шуморо ҷамъ оварад, аз ҷумла маълумоти шахсиро, аз қабили паролҳо ва рақами кортҳои қарзӣ. Он аз барномаи %s меояд. Барои фаъол кардани ин усули вуруд, Фаъол карданро зарба занед. + Интихоби клавиатура + Фаъол к-н + Таваҷҷӯҳ + Клавиатураи виртуалӣ + Клавиатураҳо + Танзимоти клавиатура + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.th.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.th.resx new file mode 100644 index 0000000..cbe039c --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.th.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullเปิด + แป้นพิมพ์ + แป้นพิมพ์เริ่มต้น + ยกเลิก + เปิดแป้นพิมพ์ + วิธีเขียนนี้อาจสามารถรวบรวมข้อความทั้งหมดที่คุณพิมพ์ รวมทั้งข้อมูลส่วนตัว เช่น รหัสผ่าน และหมายเลขบัตรเครดิตได้ มาจากแอพพลิเคชั่น %s สัมผัส เปิดใช้งาน เพื่อเปิดใช้งานวิธีเขียนนี้ + เลือกแป้นพิมพ์ + เปิดใช้งาน + โปรดทราบ + แป้นพิมพ์เสมือน + แป้นพิมพ์ + การตั้งค่าแป้นพิมพ์ + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.tk_TM.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.tk_TM.resx new file mode 100644 index 0000000..9f57071 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.tk_TM.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullTurn on + Klawiatura + Standart klawiatura + Goýbolsun et + Turn on keyboard + Bu giriziş usuly ähli ýazýan tekstiňizi, şol sanda parollar we kredit kart belgileri ýaly şahsy maglumatlary ýygnap biler. Ol %s goýmasyndan gelýär. Bu giriziş usulyny işletmek üçin, Işlet-e basyň. + Klawiatura saýla + Işlet + Üns beriň + Wirtual klawiatura + Klawiaturalar + Klawiatura sazlamalary + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.tl.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.tl.resx new file mode 100644 index 0000000..814aff6 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.tl.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullI-on + Keyboard + Default na keyboard + Knsla + I-on ang keyboard + Magagawa ng paraan ng pag-input na ito na tipunin ang lahat ng teksto na nai-type mo, kasama na ang mga personal na data gaya ng mga password at mga numero ng credit card. Nagmula ito sa %s application. I-tap ang Enable para paganahin ang paraan ng pag-input na ito. + Pumili ng keyboard + Paganahin + Atensyon + Virtual na keyboard + Mga Keyboard + Mga setting ng keyboard + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.tr_TR.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.tr_TR.resx new file mode 100644 index 0000000..e37bfcd --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.tr_TR.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullAç + Klavye + Varsayılan klavye + İptal + Klavyeyi aç + Bu giriş yöntemi, şifreler ve kredi kartı numaraları gibi kişisel veriler dahil olmak üzere yazdığınız tüm metinleri toplayabilir. %s uygulamasından geliyor. Bu giriş yöntemini etkinleştirmek için Etkinleştir öğesine dokunun. + Klavye seçin + Etkinleştir + Dikkat + Sanal klavye + Klavyeler + Klavye ayarları + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.uk.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.uk.resx new file mode 100644 index 0000000..837f379 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.uk.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullУвімкнути + Клавіатура + Стандартна клавіатура + Скасувати + Увімкнення клавіатури + При використанні цього методу вводу весь текст, що вводиться, може збиратися для програми %s, зокрема особиста інформація, така як паролі й номери кредитних карт. Торкніться кнопки «Ввімкнути», щоб застосувати цей метод вводу. + Вибрати клавіатуру + Увімкнути + Увага + Віртуальна клавіатура + Клавіатури + Установки клавіатури + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.ur.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.ur.resx new file mode 100644 index 0000000..b3bae2e --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.ur.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullآن کریں + کی بورڈ + ڈیفالٹ کی بورڈ + منسوخ + کی بورڈ آن کریں + اس ان پٹ طریقہ سے ہو سکتا ہے آپ کے ذریعے ٹائپ کیا ہوا تمام متن جمع کیا جا سکتا ہے، بشمول ذاتی ڈیٹا جیسا کہ پاس ورڈز اور کریڈٹ کارڈوں کے نمبر۔ یہ %s ایپلیکیشن سے آیا ہے۔ اس ان پٹ طریقہ کو اہل کرنے کے لیے اہل کریں پر تھپکی دیں۔ + کی بورڈ منتخب کریں + فعال + توجہ + مجازی کی بورڈ + کی بورڈز + کی بورڈ کی ترتیبات + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.uz.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.uz.resx new file mode 100644 index 0000000..a0fd293 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.uz.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullYoqish + Klaviatura + Birlamchi klaviatura + Bek/q. + Klaviaturani yoqish + Ushbu kiritish usuli Siz tergan barcha matnlarni to‘plashi mumkin, jumladan, parollar va kredit kartochka raqamlari kabi shaxsiy ma’lumotlarni ham. Bu %s ilovasidan kelib chiqadi. Ushbu kiritish usulini yoqish uchun Yoqish tugmasiga teging. + Klaviatura tanlang + Yoqish + Diqqat + Virtual klaviatura + Klaviaturalar + Klaviatura parametrlari + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.vi.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.vi.resx new file mode 100644 index 0000000..ee23fae --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.vi.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullBật + Bàn phím + Bàn phím mặc định + Thoát + Bật bàn phím + Cách nhập này có thể thu thập tất cả văn bản bạn nhập vào, bao gồm dữ liệu cá nhân như mật mã và số thẻ tín dụng. Nó đến từ ứng dụng %s. Chạm Bật để bật cách nhập này. + ChoÌ£n bàn phím + Bật + Chú ý + Bàn phím ảo + Bàn phím + Cài đặt bàn phím + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.zh_CN.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.zh_CN.resx new file mode 100644 index 0000000..64a8ce0 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.zh_CN.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null打开 + 键盘 + 默认键盘 + 取消 + 打开键盘 + 该输入法可能能够收集您键入的所有文本,包括密码和信用卡号等个人数据。它来自于 %s 应用程序。点击启用以启用该输入法。 + 选择键盘 + 启动 + 注意 + 虚拟键盘 + 键盘 + 键盘设置 + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.zh_HK.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.zh_HK.resx new file mode 100644 index 0000000..3919aed --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.zh_HK.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null開啟 + 鍵盤 + 預設鍵盤 + 取消 + 開啟鍵盤 + 此輸入方法可能可以蒐集您輸入的所有文字,包括密碼與信用卡號等個人數據。此方法來自於 %s 應用程式。輕觸啟用以啟用此輸入方法。 + 選擇鍵盤 + 啟用 + 注意 + 虛擬鍵盤 + 鍵盤 + 鍵盤設定 + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/Resource/Resources.zh_TW.resx b/SettingInputmethod/SettingInputmethod/Resource/Resources.zh_TW.resx new file mode 100644 index 0000000..3e52e86 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/Resource/Resources.zh_TW.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=nullSystem.Resources.ResXResourceWriter, resgen, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null開啟 + 鍵盤 + 預設鍵盤 + 取消 + 開啟鍵盤 + 此輸入法可能會蒐集您輸入的所有文字,包括如密碼與信用卡號等個人資料。輸入法來自 %s 應用程式。請輕觸啟用來啟用此輸入法。 + 選擇鍵盤 + 啟用 + 注意 + 虛擬鍵盤 + 鍵盤 + 鍵盤設定 + \ No newline at end of file diff --git a/SettingInputmethod/SettingInputmethod/SettingInputmethod.cs b/SettingInputmethod/SettingInputmethod/SettingInputmethod.cs new file mode 100644 index 0000000..a1defb6 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/SettingInputmethod.cs @@ -0,0 +1,200 @@ +/* + * Copyright (c) 2023 Samsung Electronics Co., Ltd. All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using Tizen; +using Tizen.Applications; +using Tizen.NUI; +using Tizen.NUI.BaseComponents; +using Tizen.NUI.Components; +using static Interop.IsfControl; + +namespace SettingInputmethod +{ + public class SettingInputmethod : SettingCore.MenuGadget + { + public override string ProvideTitle() => Resource.Resources.IDS_IME_BODY_KEYBOARD; + + private Navigator navigator; + private View scrollableContent; + private IList sections = new List(); + + protected override View OnCreate() + { + base.OnCreate(); + + Log.Debug(LogTag, "OnCreate"); + navigator = NUIApplication.GetDefaultWindow().GetDefaultNavigator(); + scrollableContent = new ScrollableBase() + { + WidthSpecification = LayoutParamPolicies.MatchParent, + HeightSpecification = LayoutParamPolicies.MatchParent, + ScrollingDirection = ScrollableBase.Direction.Vertical, + HideScrollbar = false, + Layout = new LinearLayout() + { + LinearOrientation = LinearLayout.Orientation.Vertical, + }, + }; + + CreateContent(); + return scrollableContent; + } + + private void CreateContent() + { + foreach (var view in sections) + { + scrollableContent.Remove(view); + } + sections.Clear(); + + var defaultKeyboard = SettingCore.Views.TextListItem.CreatePrimaryTextItemWithSubText(Resource.Resources.IDS_ST_HEADER_DEFAULT_KEYBOARD_ABB, GetDefaultIseName()); + defaultKeyboard.Clicked += (s, e) => + { + NavigateTo(MenuProvider.Keyboard_Default); + navigator.Popped += PoppedEvent; + }; + sections.Add(defaultKeyboard); + + var keyboardSettings = SettingCore.Views.TextListItem.CreatePrimaryTextItem(Resource.Resources.IDS_IME_HEADER_KEYBOARD_SETTINGS_ABB); + keyboardSettings.Clicked += (s, e) => + { + IsfControlOpenImeOptionWindow(); + }; + sections.Add(keyboardSettings); + + var keyboards = new SettingCore.Views.TextHeaderListItem(Resource.Resources.IDS_ST_HEADER_KEYBOARDS); + sections.Add(keyboards); + + int keyboardCount = IsfControlGetIseCount((uint)IseType.SoftwareKeyboard); + for (int i = 0; i < keyboardCount; i++) + { + IntPtr ptr = IntPtr.Zero; + IsfControlGetImeInfo(i, ref ptr); + var ImeInfo = Marshal.PtrToStructure(ptr); + + var imeItem = new SettingCore.Views.SwitchListItem(ImeInfo.label, isSelected: ImeInfo.enabled); + imeItem.Switch.SelectedChanged += (s, e) => + { + IsfControlSetEnableIme(ImeInfo.appId, e.IsSelected); + }; + + if (ImeInfo.preinstalled || string.Compare(GetDefaultIse(), ImeInfo.appId, false) == 0) + imeItem.Switch.IsEnabled = false; + else + imeItem.Switch.IsEnabled = true; + + sections.Add(imeItem); + } + + foreach (var view in sections) + { + scrollableContent.Add(view); + } + } + + private void PoppedEvent(object obj, PoppedEventArgs e) + { + CreateContent(); + navigator.Popped -= PoppedEvent; + } + + private string GetDefaultIseName() + { + string name = null; + string uuid = GetDefaultIse(); + if (uuid != string.Empty) + { + uint imeType; + int imeOption; + IntPtr namePtr, languagePtr; + IsfControlGetIseInfo(uuid, out namePtr, out languagePtr, out imeType, out imeOption); + name = Marshal.PtrToStringAnsi(namePtr); + } + + Log.Debug(LogTag, "Default IME : " + name); + return name; + } + + private string GetDefaultIse() + { + try + { + IntPtr activeIsePtr; + IsfControlGetActiveIse(out activeIsePtr); + return Marshal.PtrToStringAnsi(activeIsePtr); + } + catch (Exception e) + { + Log.Error(LogTag, "Failed to get active IME. error = " + e.ToString()); + return null; + } + } + + protected override void OnAppControlReceived(AppControlReceivedEventArgs e) + { + base.OnAppControlReceived(e); + } + + protected override void OnPause() + { + base.OnPause(); + MainView.Hide(); + } + + protected override void OnResume() + { + base.OnResume(); + MainView.Show(); + } + + protected override void OnDestroy() + { + Log.Debug(LogTag, "OnDestroy"); + base.OnDestroy(); + } + + protected override void OnDeviceOrientationChanged(DeviceOrientationEventArgs e) + { + base.OnDeviceOrientationChanged(e); + } + + protected override void OnLocaleChanged(LocaleChangedEventArgs e) + { + base.OnLocaleChanged(e); + Log.Debug(LogTag, "OnLocaleChanged"); + CreateContent(); + } + + protected override void OnLowBattery(LowBatteryEventArgs e) + { + base.OnLowBattery(e); + } + + protected override void OnLowMemory(LowMemoryEventArgs e) + { + base.OnLowMemory(e); + } + + protected override void OnRegionFormatChanged(RegionFormatChangedEventArgs e) + { + base.OnRegionFormatChanged(e); + } + } +} diff --git a/SettingInputmethod/SettingInputmethod/SettingInputmethod.csproj b/SettingInputmethod/SettingInputmethod/SettingInputmethod.csproj new file mode 100644 index 0000000..423dc6c --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/SettingInputmethod.csproj @@ -0,0 +1,297 @@ + + + + net6.0-tizen8.0 + false + + + + portable + + + None + + + + + + + + + + + + + + True + True + Resources.resx + + + True + True + Resources.my_ZG.resx + + + True + True + Resources.pl_SP.resx + + + + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + Resources.my_ZG.Designer.cs + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + Resources.pl_SP.Designer.cs + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + Resources.Designer.cs + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + + diff --git a/SettingInputmethod/SettingInputmethod/res/allowed/SettingInputmethod.dll b/SettingInputmethod/SettingInputmethod/res/allowed/SettingInputmethod.dll new file mode 100644 index 0000000000000000000000000000000000000000..ef004535c19e38e5a93adaa4b1484d1465e52ed0 GIT binary patch literal 66560 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�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 + + + + http://tizen.org/privilege/imemanager + + + + diff --git a/SettingInputmethod/SettingInputmethod/tizen_dotnet_project.yaml b/SettingInputmethod/SettingInputmethod/tizen_dotnet_project.yaml new file mode 100644 index 0000000..f6dda51 --- /dev/null +++ b/SettingInputmethod/SettingInputmethod/tizen_dotnet_project.yaml @@ -0,0 +1,15 @@ +# csproj file path +csproj_file: SettingInputmethod.csproj + +# files monitored for dirty/modified status +files: + - SettingInputmethod.csproj + - SettingInputmethod.cs + - tizen-manifest.xml + +# Enable to pack as rpk +pack_as_rpk: true + +# List of resource files to be packed in rpk +resources: + - res/ diff --git a/SettingInputmethod/index.d.ts b/SettingInputmethod/index.d.ts new file mode 100644 index 0000000..6cdff3d --- /dev/null +++ b/SettingInputmethod/index.d.ts @@ -0,0 +1,11438 @@ +interface AccountManagerObject { + /** + Object representing an account manager. + */ + account: AccountManager; +} + +interface AccountProvider { + /** + Identifier of the account provider application. + */ + applicationId: ApplicationId; + /** + Logical (translatable) display name. + */ + displayName: DOMString; + /** + Path to the icon representing the account provider. + */ + iconUri: DOMString; + /** + Path to the small icon representing the account provider. + */ + smallIconUri: DOMString; + /** + Capabilities of the account provider defined in IRI format. + */ + capabilities: DOMString[]; + /** + Boolean value that indicates whether multiple accounts are supported. + */ + isMultipleAccountSupported: boolean; +} + +interface Account { + /** + Identifier for the account. +By default, this attribute is set to null. + */ + id: AccountId; + /** + Account user name. +By default, this attribute is set to null. + */ + userName: DOMString; + /** + Name, identifier or URI of the icon. +By default, this attribute is set to null. + */ + iconUri: DOMString; + /** + Reference to the provider. +There is one provider for each account. +A given provider can be referenced from many accounts. + */ + provider: AccountProvider; + /** + Adds the specified key and value to the extended data. + */ + setExtendedData(key: DOMString,value: DOMString): void + /** + Gets the value for the given key from the extended data. +Returns null if the given key is not found. + */ + getExtendedData(key: DOMString): void + /** + Gets the extended data for the account as an array, asynchronously. +Returns an empty array if there is no extended data. + */ + getExtendedData(successCallback: AccountExtendedDataArraySuccessCallback,errorCallback: ErrorCallback): void +} + +interface AccountManager { + /** + Adds an account to the account database. + */ + add(account: Account): void + /** + Removes an account from the account database. + */ + remove(accountId: AccountId): void + /** + Updates an account. + */ + update(account: Account): void + /** + Gets the Account object with the given identifier. + */ + getAccount(accountId: AccountId): Account + /** + Gets the accounts associated with the provider that has a specified applicationId, asynchronously. +If you want to get all accounts, omit the applicationId argument. + */ + getAccounts(successCallback: AccountArraySuccessCallback,errorCallback: ErrorCallback,applicationId: DOMString): void + /** + Gets the account provider with the given application identifier. + */ + getProvider(applicationId: ApplicationId): AccountProvider + /** + Gets the providers with the given capabilities, asynchronously. +If you want to get all the providers, omit the capability argument. + */ + getProviders(successCallback: AccountProviderArraySuccessCallback,errorCallback: ErrorCallback,capability: DOMString): void + /** + Adds an account listener for watching changes to accounts. + */ + addAccountListener(callback: AccountChangeCallback): void + /** + Removes the previously registered listener. + */ + removeAccountListener(accountListenerId: long): void +} + +interface AccountExtendedData { + /** + Name (key) of the account extended data item. + */ + key: DOMString; + /** + Value of the account extended data item. + */ + value: DOMString; +} + +interface AccountArraySuccessCallback { + /** + Called when information of accounts is ready. + */ + onsuccess(accounts: Account[]): void +} + +interface AccountExtendedDataArraySuccessCallback { + /** + Called when information of extended data is ready. + */ + onsuccess(extendedDataArray: AccountExtendedData[]): void +} + +interface AccountProviderArraySuccessCallback { + /** + Called when information of providers are ready. + */ + onsuccess(providers: AccountProvider[]): void +} + +interface AccountChangeCallback { + /** + Called when an account is added. + */ + onadded(account: Account): void + /** + Called when an account is removed. + */ + onremoved(accountId: AccountId): void + /** + Called when an account is updated. + */ + onupdated(account: Account): void +} + +interface AlarmManagerObject { + /** + Object representing an alarm manager. + */ + alarm: AlarmManager; +} + +interface AlarmManager { + /** + Adds an alarm to the storage. + */ + add(alarm: Alarm,applicationId: ApplicationId,appControl: ApplicationControl): void + /** + Adds an alarm notification to the storage. + */ + addAlarmNotification(alarm: Alarm,notification: Notification): void + /** + Removes an alarm from the storage. + */ + remove(id: AlarmId): void + /** + Removes all alarms added by an application. + */ + removeAll(): void + /** + Returns an alarm as per the specified identifier. + */ + get(id: AlarmId): Alarm + /** + Gets the notification to be posted when an alarm is triggered. Returned contains exactly the same data like passed to method . + */ + getAlarmNotification(id: AlarmId): UserNotification + /** + Retrieves all alarms in an application storage. + */ + getAll(): void +} + +interface Alarm { + /** + The alarm identifier. + */ + id: AlarmId; +} + +interface AlarmRelative { + /** + An attribute to store the difference in time (in seconds) between when an alarm is added and when it is triggered. + */ + delay: long; + /** + An attribute to store the duration in seconds between each trigger of an alarm. +By default, this attribute is set to , indicating that this alarm does not repeat. + */ + period: long; + /** + Returns the duration in seconds before the next alarm is triggered. + */ + getRemainingSeconds(): void +} + +interface AlarmAbsolute { + /** + An attribute to store the absolute date/time when the alarm is initially triggered. + */ + date: Date; + /** + An attribute to store the duration in seconds between each trigger of the alarm. + */ + period: long; + /** + An attribute to store the days of the week associated with the recurrence rule. + */ + daysOfTheWeek: ByDayValue[]; + /** + Returns the date / time of the next alarm trigger. + */ + getNextScheduledDate(): void +} + +interface ApplicationManagerObject { + /** + Object representing a account manager. + */ + application: ApplicationManager; +} + +interface ApplicationManager { + /** + Gets the object defining the current application. + */ + getCurrentApplication(): Application + /** + Kills an application with the specified application context ID. + */ + kill(contextId: ApplicationContextId,successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Launches an application with the given application ID. + */ + launch(id: ApplicationId,successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Launches an application with the specified application control. + */ + launchAppControl(appControl: ApplicationControl,id: ApplicationId,successCallback: SuccessCallback,errorCallback: ErrorCallback,replyCallback: ApplicationControlDataArrayReplyCallback): void + /** + Finds which applications can be launched with the given application control. + */ + findAppControl(appControl: ApplicationControl,successCallback: FindAppControlSuccessCallback,errorCallback: ErrorCallback): void + /** + Gets a list of application contexts for applications that are currently running on a device. +The information contained for each application corresponds to the application state at the time when the list had been generated. + */ + getAppsContext(successCallback: ApplicationContextArraySuccessCallback,errorCallback: ErrorCallback): void + /** + Gets the application context for the specified application context ID. +If the ID is set to or is not set at all, the method returns the application context of the current application. +The list of running applications and their application IDs is obtained with . + */ + getAppContext(contextId: ApplicationContextId): ApplicationContext + /** + Gets the list of installed applications' information on a device. +The information contained on each application corresponds to the application state at the time when the list had been generated. + */ + getAppsInfo(successCallback: ApplicationInformationArraySuccessCallback,errorCallback: ErrorCallback): void + /** + Gets application information for a specified application ID. + */ + getAppInfo(id: ApplicationId): ApplicationInformation + /** + Gets application certificates for a specified application ID. + */ + getAppCerts(id: ApplicationId): void + /** + Gets the URI of the read-only shared directory of an application for a specified application ID. + */ + getAppSharedURI(id: ApplicationId): void + /** + Gets the application meta data array for a specified application ID. + */ + getAppMetaData(id: ApplicationId): void + /** + Gets information about battery usage per application. + */ + getBatteryUsageInfo(successCallback: BatteryUsageInfoArraySuccessCallback,errorCallback: ErrorCallback,days: long,limit: long): void + /** + Gets the usage statistics of applications. + */ + getAppsUsageInfo(successCallback: AppsUsageInfoArraySuccessCallback,errorCallback: ErrorCallback,mode: ApplicationUsageMode,filter: ApplicationUsageFilter,limit: long): void + /** + Adds a listener for receiving any notification for changes in the list of installed applications +on a device. + */ + addAppInfoEventListener(eventCallback: ApplicationInformationEventCallback): void + /** + Removes the listener to stop receiving notifications for changes on the list of installed applications on a device. + */ + removeAppInfoEventListener(watchId: long): void + /** + Adds a listener for receiving any notification for status changes of the installed applications on a device. + */ + addAppStatusChangeListener(eventCallback: StatusEventCallback,appId: ApplicationId): void + /** + Removes the listener to stop receiving notifications for status changes of the installed applications on a device. + */ + removeAppStatusChangeListener(watchId: long): void +} + +interface Application { + /** + An attribute to store the application information for the current application. + */ + appInfo: ApplicationInformation; + /** + An attribute to store the ID of a running application. + */ + contextId: ApplicationContextId; + /** + Exits the current application. + */ + exit(): void + /** + Hides the current application. + */ + hide(): void + /** + Gets the requested application control passed to the current application. + */ + getRequestedAppControl(): RequestedApplicationControl + /** + Adds a listener which will invoke a callback function when an event occurs. + */ + addEventListener(event: EventInfo,callback: EventCallback): void + /** + Removes an event listener with a specified listener identifier. + */ + removeEventListener(watchId: long): void + /** + Broadcasts a user defined event to all the listeners which are listening for this event. + */ + broadcastEvent(event: EventInfo,data: UserEventData): void + /** + Broadcasts a user defined event to all the trusted listeners which are listening for this event. Applications which have the same certificate as the sending application can receive the event. + */ + broadcastTrustedEvent(event: EventInfo,data: UserEventData): void +} + +interface ApplicationInformation { + /** + An attribute to store the identifier of an application for application management. + */ + id: ApplicationId; + /** + An attribute to store the name of an application. + */ + name: DOMString; + /** + An attribute to store the icon path of an application. + */ + iconPath: DOMString; + /** + An attribute to store the version of an application. + */ + version: DOMString; + /** + An attribute that determines whether the application information should +be shown (such as in menus). + */ + show: boolean; + /** + An array of attributes to store the categories that the app belongs to. + */ + categories: DOMString[]; + /** + An attribute to store the application install/update time. + */ + installDate: Date; + /** + An attribute to store the application size (installed space). + */ + size: long; + /** + An attribute to store the package ID of an application. + */ + packageId: PackageId; +} + +interface ApplicationContext { + /** + An attribute to store the ID of a running application. + */ + id: ApplicationContextId; + /** + An attribute to store the ID of an installed application. + */ + appId: ApplicationId; +} + +interface ApplicationBatteryUsage { + /** + An attribute storing ID of an application. + */ + appId: ApplicationId; + /** + An attribute which stores information about battery usage of an application with ApplicationId . +Battery usage is a ratio of battery consumption of the application with ApplicationId to the total battery consumption of all applications. +The attribute value scales from to , the higher value, the more battery is consumed. + */ + batteryUsage: double; +} + +interface ApplicationUsage { + /** + An attribute to store the ID of an application. + */ + appId: ApplicationId; + /** + An attribute to store the total number of times the application was in the foreground. + */ + totalCount: number; + /** + An attribute to store the total time of application usage in seconds. + */ + totalDuration: number; + /** + An attribute to store the last time when the application was used. + */ + lastTime: Date; +} + +interface ApplicationControlData { + /** + An attribute to store the name of a key. + */ + key: DOMString; + /** + An attribute to store the value associated with a key. + */ + value: DOMString[]; +} + +interface ApplicationControl { + /** + An attribute to store the string that defines the action to be +performed by an application control. + */ + operation: DOMString; + /** + An attribute to store the URI needed by an application control. + */ + uri: DOMString; + /** + An attribute to store the MIME type of content. + */ + mime: DOMString; + /** + An attribute to store the category of the application to be launched. + */ + category: DOMString; + /** + An array of attributes to store the data needed for an application control. + */ + data: ApplicationControlData[]; + /** + An attribute to specify launch mode. Default application launch mode is . + */ + launchMode: ApplicationControlLaunchMode; +} + +interface RequestedApplicationControl { + /** + An attribute to store the application control object that describes the caller application's request. +It contains the information that the calling application passed to . + */ + appControl: ApplicationControl; + /** + An attribute to store the caller application's ID. + */ + callerAppId: ApplicationId; + /** + Sends the results to the caller application. + */ + replyResult(data: ApplicationControlData[]): void + /** + Notifies the calling application that the application failed +to perform the requested action. + */ + replyFailure(): void +} + +interface ApplicationCertificate { + /** + An attribute to store the type of the application certificate + */ + type: DOMString; + /** + An attribute to store the value of the application certificate + */ + value: DOMString; +} + +interface ApplicationMetaData { + /** + An attribute to store the key of the application meta data + */ + key: DOMString; + /** + An attribute to store the value of the application meta data + */ + value: DOMString; +} + +interface BatteryUsageInfoArraySuccessCallback { + /** + Called when the asynchronous call completes successfully. + */ + onsuccess(batteryInfoArray: ApplicationBatteryUsage[]): void +} + +interface AppsUsageInfoArraySuccessCallback { + /** + Called when the asynchronous call completes successfully. + */ + onsuccess(appsInfoArray: ApplicationUsage[]): void +} + +interface ApplicationInformationArraySuccessCallback { + /** + Called when the asynchronous call completes successfully. + */ + onsuccess(informationArray: ApplicationInformation[]): void +} + +interface FindAppControlSuccessCallback { + /** + Called when the asynchronous call completes successfully. + */ + onsuccess(informationArray: ApplicationInformation[],appControl: ApplicationControl): void +} + +interface ApplicationContextArraySuccessCallback { + /** + Called when completes successfully. + */ + onsuccess(contexts: ApplicationContext[]): void +} + +interface ApplicationControlDataArrayReplyCallback { + /** + Called when the callee application calls . + */ + onsuccess(data: ApplicationControlData[]): void + /** + Called when the callee application calls . + */ + onfailure(): void +} + +interface SystemEventData { + /** + Value of the system event data item. + */ + value: DOMString; + /** + Type of the system event data item. + */ + type: DOMString; +} + +interface EventCallback { + /** + Called when the event occurs. + */ + onevent(event: EventInfo,data: EventData): void +} + +interface StatusEventCallback { + /** + Called when the status event occurs. + */ + onchange(appId: ApplicationId,isActive: boolean): void +} + +interface ArchiveManagerObject { + /** + Object representing an archive manager. + */ + archive: ArchiveManager; +} + +interface ArchiveManager { + /** + Opens the archive file. After this operation, it is possible to add or get files to and from the archive. + */ + open(file: FileReference,mode: FileMode,onsuccess: ArchiveFileSuccessCallback,onerror: ErrorCallback,options: ArchiveFileOptions): void + /** + Cancels an operation with the given identifier. + */ + abort(operationIdentifier: long): void +} + +interface ArchiveFile { + /** + Describes the mode the file is opened with. + */ + mode: FileMode; + /** + Size of all the files included in the archive after decompression. + */ + decompressedSize: number; + /** + Adds a new member file to . + */ + add(sourceFile: FileReference,onsuccess: SuccessCallback,onerror: ErrorCallback,onprogress: ArchiveFileProgressCallback,options: ArchiveFileEntryOptions): void + /** + Extracts every file from this to a given directory. + */ + extractAll(destinationDirectory: FileReference,onsuccess: SuccessCallback,onerror: ErrorCallback,onprogress: ArchiveFileProgressCallback,overwrite: boolean): void + /** + Retrieves information about the member files in . + */ + getEntries(onsuccess: ArchiveFileEntryArraySuccessCallback,onerror: ErrorCallback): void + /** + Retrieves information about with the specified name in . + */ + getEntryByName(name: DOMString,onsuccess: ArchiveFileEntrySuccessCallback,onerror: ErrorCallback): void + /** + Closes the . + */ + close(): void +} + +interface ArchiveFileEntry { + /** + Path identifying the member file of ArchiveFile. This is a full path with the directory and base name of the entry. + */ + name: DOMString; + /** + Original size of the member file [bytes]. + */ + size: number; + /** + Amount of storage space used by the member file, which may be compressed, in ArchiveFile [bytes]. + */ + compressedSize: number; + /** + Date and time stored with the member file. +This is usually the modification date of the file. + */ + modified: Date; + /** + Extracts ArchiveFileEntry to the given location. + */ + extract(destinationDirectory: FileReference,onsuccess: SuccessCallback,onerror: ErrorCallback,onprogress: ArchiveFileProgressCallback,stripName: boolean,overwrite: boolean): void +} + +interface ArchiveFileSuccessCallback { + /** + Called when the archive file with the given name is ready to use. + */ + onsuccess(archive: ArchiveFile): void +} + +interface ArchiveFileEntrySuccessCallback { + /** + Called when the file with the given name through getEntryByName() is found successfully. + */ + onsuccess(entry: ArchiveFileEntry): void +} + +interface ArchiveFileEntryArraySuccessCallback { + /** + Called when all file entries in the archive file are retrieved successfully. + */ + onsuccess(entries: ArchiveFileEntry[]): void +} + +interface ArchiveFileProgressCallback { + /** + Called to signal compressing or extracting operation progress. + */ + onprogress(operationIdentifier: long,value: double,filename: DOMString): void +} + +interface BadgeManagerObject { + /** + Object representing a badge manager object. + */ + badge: BadgeManager; +} + +interface BadgeManager { + /** + Maximum length of a badge number. + */ + maxBadgeCount: long; + /** + Sets the badge count for the designated application. Only applications with the same author signature can have their badge count modified. + */ + setBadgeCount(appId: ApplicationId,count: long): void + /** + Gets the badge count for the designated application. + */ + getBadgeCount(appId: ApplicationId): void + /** + Adds a listener to receive a notification when the badge number for the designated application changes. + */ + addChangeListener(appIdList: ApplicationId[],successCallback: BadgeChangeCallback): void + /** + Unsubscribes from receiving notifications for badge number changes. + */ + removeChangeListener(appIdList: ApplicationId[]): void +} + +interface BadgeChangeCallback { + /** + Called when the badge number of a specified application is updated. + */ + onsuccess(appId: ApplicationId,count: long): void +} + +interface BluetoothManagerObject { + /** + Object representing a bluetooth manager. + */ + bluetooth: BluetoothManager; +} + +interface BluetoothLEServiceData { + /** + The UUID of service data. + */ + uuid: BluetoothUUID; + /** + The service data of the Bluetooth LE device. + */ + data: DOMString; +} + +interface BluetoothLEManufacturerData { + /** + The manufacturer assigned ID + */ + id: DOMString; + /** + The manufacturer data content + */ + data: DOMString; +} + +interface BluetoothLEAdvertiseData { + /** + The flag indicating whether the device name should be included in advertise or scan response data. +If attribute is set to null, The default value is set to a false. + */ + includeName: boolean; + /** + The service UUIDs for advertise or scan response data. + */ + uuids: BluetoothUUID[]; + /** + The service solicitation UUIDs for advertise or scan response data. + */ + solicitationuuids: BluetoothLESolicitationUUID[]; + /** + The external appearance of this device for advertise or scan response data. + */ + appearance: number; + /** + The transmission power level should be included in advertise or scan response data. +If attribute is set to null, The default value is set to a false. + */ + includeTxPowerLevel: boolean; + /** + The array of objects representing service data for advertise. + */ + servicesData: BluetoothLEServiceData[]; + /** + The service data for advertise or scan response data. + */ + serviceData: BluetoothLEServiceData; + /** + The manufacturer specific data for advertise or scan response data. + */ + manufacturerData: BluetoothLEManufacturerData; +} + +interface BluetoothManager { + /** + The major device class identifier of Bluetooth class of device (CoD). + */ + deviceMajor: BluetoothClassDeviceMajor; + /** + The minor device class identifier of Bluetooth class of device (CoD). + */ + deviceMinor: BluetoothClassDeviceMinor; + /** + The major service class identifier of Bluetooth class of device (CoD). + */ + deviceService: BluetoothClassDeviceService; + /** + Gets the default local Bluetooth adapter. + */ + getDefaultAdapter(): BluetoothAdapter + /** + Gets the default Low Energy Bluetooth adapter. + */ + getLEAdapter(): BluetoothLEAdapter + /** + Gets the BluetoothGATTServer object, which allows starting, stopping the local GATT server, and configuring its services. + */ + getGATTServer(): BluetoothGATTServer + /** + Converts given data to byte array. + */ + toByteArray(data: Bytes): void + /** + Converts given data to DOMString. + */ + toDOMString(data: Bytes): void + /** + Converts given data to Uint8Array. + */ + toUint8Array(data: Bytes): Uint8Array + /** + Converts given UUID to 128 bit representation. + */ + uuidTo128bit(uuid: BluetoothUUID): BluetoothUUID + /** + Converts given UUID to the shortest format, in which it can be expressed. + */ + uuidToShortestPossible(uuid: BluetoothUUID): BluetoothUUID + /** + Checks if given parameters are representations of the same UUID. + */ + uuidsEqual(uuid1: BluetoothUUID,uuid2: BluetoothUUID): void +} + +interface BluetoothAdapter { + /** + The readable name of the Bluetooth adapter. + */ + name: DOMString; + /** + The unique hardware address of the Bluetooth adapter, also known as the MAC address. + */ + address: BluetoothAddress; + /** + The current state of the Bluetooth adapter. + */ + powered: boolean; + /** + The current visibility state of the Bluetooth adapter, that is, whether the local device is discoverable by remote devices. + */ + visible: boolean; + /** + Sets the local Bluetooth adapter name. + */ + setName(name: DOMString,successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Sets the state of a Bluetooth adapter to on or off by sending a request to Bluetooth hardware to change the power state. +For most Bluetooth actions, the Bluetooth adapter must be powered on. + */ + setPowered(state: boolean,successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Sets the local device visibility by sending a request to a Bluetooth hardware to change the device visible state to . + */ + setVisible(mode: boolean,successCallback: SuccessCallback,errorCallback: ErrorCallback,timeout: number): void + /** + Sets the listener to receive notifications about changes of Bluetooth adapter. + */ + setChangeListener(listener: BluetoothAdapterChangeCallback): void + /** + Unsets the listener, so stop receiving notifications about changes of Bluetooth adapter. + */ + unsetChangeListener(): void + /** + Discovers nearby Bluetooth devices if any, that is, devices within proximity to the local device. + */ + discoverDevices(successCallback: BluetoothDiscoverDevicesSuccessCallback,errorCallback: ErrorCallback): void + /** + Stops an active device discovery session. + */ + stopDiscovery(successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Gets all the known devices that have information stored in the local Bluetooth adapter. + */ + getKnownDevices(successCallback: BluetoothDeviceArraySuccessCallback,errorCallback: ErrorCallback): void + /** + Gets the object for a given device hardware address. + */ + getDevice(address: BluetoothAddress,successCallback: BluetoothDeviceSuccessCallback,errorCallback: ErrorCallback): void + /** + Creates a bond with a remote device by initiating the bonding process with peer device, using the given MAC address. The remote device must be bonded with the local device in order to connect to services of the remote device and then exchange data with each other. + */ + createBonding(address: BluetoothAddress,successCallback: BluetoothDeviceSuccessCallback,errorCallback: ErrorCallback): void + /** + Destroys the bond with a remote device. + */ + destroyBonding(address: BluetoothAddress,successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Registers a service record in the device service record database with the specified , . + */ + registerRFCOMMServiceByUUID(uuid: BluetoothUUID,name: DOMString,successCallback: BluetoothServiceSuccessCallback,errorCallback: ErrorCallback): void + /** + Gets the profile handler for the given type. + */ + getBluetoothProfileHandler(profileType: BluetoothProfileType): BluetoothProfileHandler +} + +interface BluetoothLEAdapter { + /** + Starts scanning for Low Energy advertisement. + */ + startScan(successCallback: BluetoothLEScanCallback,errorCallback: ErrorCallback): void + /** + Stops scanning for Low Energy advertisement. + */ + stopScan(): void + /** + Checks if scanning for Bluetooth Low Energy devices is currently in progress. + */ + isScanning(): void + /** + Starts advertising for Low Energy Devices. + */ + startAdvertise(advertiseData: BluetoothLEAdvertiseData,packetType: BluetoothAdvertisePacketType,successCallback: BluetoothLEAdvertiseCallback,errorCallback: ErrorCallback,mode: BluetoothAdvertisingMode,connectable: boolean): void + /** + Stops advertising for Low Energy Devices. + */ + stopAdvertise(): void + /** + Registers a listener that is called whenever a GATT connection with another device is established or terminated. + */ + addConnectStateChangeListener(listener: BluetoothLEConnectChangeCallback): void + /** + Unregisters a listener called whenever a GATT connection with another device is established or terminated. + */ + removeConnectStateChangeListener(watchID: long): void +} + +interface BluetoothGATTService { + /** + UUID of the service. + */ + uuid: BluetoothUUID; + /** + UUID of the service. + */ + serviceUuid: BluetoothUUID; + /** + A list of services included in this service. + */ + services: BluetoothGATTServiceVariant[]; + /** + A list of characteristics in this service. + */ + characteristics: BluetoothGATTCharacteristicVariant[]; +} + +interface BluetoothGATTServerService { + /** + Flag indicating whether the service is primary or secondary. + */ + isPrimary: boolean; + /** + Unregisters the service and all its characteristics from the local GATT server. + */ + unregister(successCallback: SuccessCallback,errorCallback: ErrorCallback): void +} + +interface BluetoothGATTCharacteristic { + /** + A list of descriptors in this characteristic. + */ + descriptors: BluetoothGATTDescriptorVariant[]; + /** + Indicates if the characteristic is broadcastable. + */ + isBroadcast: boolean; + /** + Indicates if the characteristic has extended properties. + */ + hasExtendedProperties: boolean; + /** + Indicates if the characteristic supports notification. + */ + isNotify: boolean; + /** + Indicates if the characteristic supports indication. + */ + isIndication: boolean; + /** + Indicates if the characteristic is readable. + */ + isReadable: boolean; + /** + Indicates if the characteristic supports write with the signature. + */ + isSignedWrite: boolean; + /** + Indicates if the characteristic is writable. + */ + isWritable: boolean; + /** + Indicates if the characteristic supports writing without response. + */ + isWriteNoResponse: boolean; + /** + UUID of the characteristic. + */ + uuid: BluetoothUUID; + /** + Reads the characteristic value from the remote device. Updates characteristic value attribute. + */ + readValue(successCallback: ReadValueSuccessCallback,errorCallback: ErrorCallback): void + /** + Writes the characteristic value to the remote device. + */ + writeValue(value: Bytes,successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Registers a callback to be called when characteristic value of the characteristic changes. + */ + addValueChangeListener(callback: ReadValueSuccessCallback): void + /** + Unregisters a characteristic value change listener. + */ + removeValueChangeListener(watchID: long): void +} + +interface BluetoothGATTServerCharacteristic { + /** + Indicates if clients have the permission to read the value of the characteristic. + */ + readPermission: boolean; + /** + Indicates if clients have the permission to write the value of the characteristic. + */ + writePermission: boolean; + /** + Indicates if clients have the permission to read the value of the characteristic through encrypted connections. + */ + encryptedReadPermission: boolean; + /** + Indicates if clients have the permission to write the value of the characteristic through encrypted connections. + */ + encryptedWritePermission: boolean; + /** + Indicates if clients have the permission to perform signed reads of the characteristic's value. + */ + encryptedSignedReadPermission: boolean; + /** + Indicates if clients have the permission to perform signed writes of the characteristic's value. + */ + encryptedSignedWritePermission: boolean; + /** + Notifies the clients of the local GATT server of the changes in the characteristic. + */ + notifyAboutValueChange(value: Bytes,clientAddress: BluetoothAddress,notificationCallback: NotificationCallback,errorCallback: ErrorCallback): void + /** + Registers the callback called when a client reads the value of the characteristic from the local GATT server. + */ + setReadValueRequestCallback(readValueRequestCallback: ReadValueRequestCallback,successCallback: SuccessCallback,errorCallback: ErrorCallback,sendResponseSuccessCallback: SuccessCallback,sendResponseErrorCallback: ErrorCallback): void + /** + Registers the callback called when a client writes the value of the characteristic of the local GATT server. + */ + setWriteValueRequestCallback(writeValueRequestCallback: WriteValueRequestCallback,successCallback: SuccessCallback,errorCallback: ErrorCallback,sendResponseSuccessCallback: SuccessCallback,sendResponseErrorCallback: ErrorCallback): void +} + +interface BluetoothGATTDescriptor { + /** + UUID of the descriptor. + */ + uuid: BluetoothUUID; + /** + Reads descriptor value from remote device. Updates descriptor value attribute. + */ + readValue(successCallback: ReadValueSuccessCallback,errorCallback: ErrorCallback): void + /** + Writes the descriptor value to the remote device. + */ + writeValue(value: Bytes,successCallback: SuccessCallback,errorCallback: ErrorCallback): void +} + +interface BluetoothGATTServerDescriptor { + /** + Indicates if clients have the permission to read the value of the descriptor. + */ + readPermission: boolean; + /** + Indicates if clients have the permission to write the value of the descriptor. + */ + writePermission: boolean; + /** + Indicates if clients have the permission to read the value of the descriptor through encrypted connections. + */ + encryptedReadPermission: boolean; + /** + Indicates if clients have the permission to write the value of the descriptor through encrypted connections. + */ + encryptedWritePermission: boolean; + /** + Indicates if clients have the permission to perform signed reads of the charactersitic's value. + */ + encryptedSignedReadPermission: boolean; + /** + Indicates if clients have the permission to perform signed writes of the charactersitic's value. + */ + encryptedSignedWritePermission: boolean; + /** + Registers the callback called when a client reads the value of the descriptor from the local GATT server. + */ + setReadValueRequestCallback(readValueRequestCallback: ReadValueRequestCallback,successCallback: SuccessCallback,errorCallback: ErrorCallback,sendResponseSuccessCallback: SuccessCallback,sendResponseErrorCallback: ErrorCallback): void + /** + Registers the callback called when a remote client writes the value of the descriptor from the local GATT server. + */ + setWriteValueRequestCallback(writeValueRequestCallback: WriteValueRequestCallback,successCallback: SuccessCallback,errorCallback: ErrorCallback,sendResponseSuccessCallback: SuccessCallback,sendResponseErrorCallback: ErrorCallback): void +} + +interface BluetoothGATTServer { + /** + The flag indicating if remote GATT clients can currently connect to the server, exposing services defined in . It is toggled on and calls. + */ + isRunning: boolean; + /** + The list of GATT services hosted on this server. + */ + services: BluetoothGATTServerService[]; + /** + Starts the local GATT server. After it starts, it can conduct GATT server operations. Also, the remote clients can discover and use the services provided by the local Bluetooth GATT Server. + */ + start(successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Stops GATT server operation. + */ + stop(successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Registers a primary service in the local GATT server. + */ + registerService(service: BluetoothGATTServerServiceInit,successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Unregisters all services from the local GATT server. + */ + unregisterAllServices(successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Gets the ATT MTU for the connection with a client. + */ + getConnectionMtu(clientAddress: BluetoothAddress,callback: ConnectionMtuCallback,errorCallback: ErrorCallback): void +} + +interface BluetoothLEScanCallback { + /** + Called when a new device is successfully discovered in the process of scanning. + */ + onsuccess(device: BluetoothLEDevice): void +} + +interface BluetoothLEAdvertiseCallback { + /** + Called when the advertising state is changed. + */ + onstate(state: BluetoothAdvertisingState): void +} + +interface BluetoothLEConnectChangeCallback { + /** + Called at the beginning of connect to a specific LE based service on a remote Bluetooth LE device. + */ + onconnected(device: BluetoothLEDevice): void + /** + Called at the beginning of disconnect to a specific LE based service on a remote Bluetooth LE device. + */ + ondisconnected(device: BluetoothLEDevice): void +} + +interface ReadValueSuccessCallback { + /** + Called when a characteristic value has been read. + */ + onread(value: byte[]): void +} + +interface GATTRequestReply { + /** + Reply status code. + */ + statusCode: long; + /** + Response data. It is only relevant for read value requests. It will be ignored in replies to write requests and thus can be uninitialized in such replies. + */ + data: Bytes; +} + +interface ReadValueRequestCallback { + /** + Called when a client makes a read request for GATT characteristic to the connected local GATT server. + */ + onreadrequest(clientAddress: BluetoothAddress,offset: long): GATTRequestReply +} + +interface WriteValueRequestCallback { + /** + Called when a client connected to the local GATT server requests characteristic's value write. + */ + onwriterequest(clientAddress: BluetoothAddress,value: byte[],offset: long,replyRequired: boolean): GATTRequestReply +} + +interface NotificationCallback { + /** + Called when the local GATT server successfully notifies a client of a characteristic's value change. + */ + onnotificationsuccess(clientAddress: BluetoothAddress): void + /** + Called when the local GATT server fails to notify a client of a characteristic's value change. + */ + onnotificationfail(clientAddress: BluetoothAddress,error: WebAPIException): void + /** + Called when the last of all client notifications was sent. + */ + onnotificationfinish(clientAddress: BluetoothAddress): void +} + +interface ConnectionMtuCallback { + /** + Called when the requested ATT MTU size for a connection is ready. + */ + onsuccess(mtu: long): void +} + +interface BluetoothDevice { + /** + The readable name of this remote device. + */ + name: DOMString; + /** + The hardware address of this remote device. + */ + address: BluetoothAddress; + /** + The device class, which represents the type of the device and the services it provides. + */ + deviceClass: BluetoothClass; + /** + The bond state of this remote device with the local device. + */ + isBonded: boolean; + /** + The flag indicating whether the local device recognizes this remote device as a trusted device or not. + */ + isTrusted: boolean; + /** + The flag indicating whether the connection state of this remote device with the local device. + */ + isConnected: boolean; + /** + The list of 128-bit service UUIDs available on this remote device. + */ + uuids: BluetoothUUID[]; + /** + Connects to a specified service identified by on this remote device. + */ + connectToServiceByUUID(uuid: BluetoothUUID,successCallback: BluetoothSocketSuccessCallback,errorCallback: ErrorCallback): void +} + +interface BluetoothLEDevice { + /** + The address of the Bluetooth LE device from the scan result information. + */ + address: BluetoothAddress; + /** + The name of the Bluetooth LE device from the scan result information. + */ + name: DOMString; + /** + The transmission power level of the Bluetooth LE device from the scan result information. + */ + txpowerlevel: long; + /** + The appearance of the Bluetooth LE device from the scan result information. + */ + appearance: number; + /** + The list of service UUIDs from scan result. + */ + uuids: BluetoothUUID[]; + /** + The list of service solicitation UUIDs available on Bluetooth LE device from the scan result information. + */ + solicitationuuids: BluetoothLESolicitationUUID[]; + /** + The list of service data available on Bluetooth LE device from the scan result information. + */ + serviceData: BluetoothLEServiceData[]; + /** + The manufacturer data from the scan result information. + */ + manufacturerData: BluetoothLEManufacturerData; + /** + The received signal strength indicator in dBm (decibel-milliwatts) units. + */ + rssi: long; + /** + Establishes Low Energy connection to the device. + */ + connect(successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Disconnects from the device. + */ + disconnect(successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Checks if Bluetooth Low Energy device is currently connected. + */ + isConnected(): void + /** + Retrieves a service from the device for the given UUID. + */ + getService(uuid: BluetoothUUID): BluetoothGATTService + /** + Retrieves list of all service UUIDs from connected GATT server. + */ + getServiceAllUuids(): void + /** + Registers a listener to be called when the device connects or disconnects. + */ + addConnectStateChangeListener(listener: BluetoothLEConnectChangeCallback): void + /** + Unregisters a Bluetooth device connection listener. + */ + removeConnectStateChangeListener(watchID: long): void + /** + Gets the current value of Attribute Protocol(ATT) Maximum Transmission Unit(MTU) from the connected device. + */ + getAttMtu(): void + /** + Requests the GATT server to change the Attribute Protocol (ATT) Maximum Transmission Unit (MTU) value. + */ + requestAttMtuChange(newAttMtu: number): void + /** + Registers a listener to be called when ATT MTU value is changed. + */ + addAttMtuChangeListener(callback: ConnectionMtuCallback): void + /** + Unregisters the ATT MTU value change listener. + */ + removeAttMtuChangeListener(watchId: long): void +} + +interface BluetoothSocket { + /** + The service UUID to which this socket is connected. + */ + uuid: BluetoothUUID; + /** + The socket state. + */ + state: BluetoothSocketState; + /** + The peer device to which this socket is connected. + */ + peer: BluetoothDevice; + /** + Called when an incoming message is received successfully from the peer. +By default, this attribute is set to null. + */ + onmessage: SuccessCallback; + /** + Called when the socket is closed successfully. +By default, this attribute is set to null. + */ + onclose: SuccessCallback; + /** + Writes data as a sequence of bytes onto the socket and returns the number of bytes actually written. + */ + writeData(data: Bytes): void + /** + Reads data from the socket. + */ + readData(): void + /** + Closes the socket. + */ + close(): void +} + +interface BluetoothClass { + /** + The major device class. + */ + major: octet; + /** + The minor device class. + */ + minor: octet; + /** + The services provided by this device and it refers to the interface for the list of possible +values. + */ + services: number[]; + /** + Checks whether the given service exists in the . + */ + hasService(service: number): void +} + +interface BluetoothClassDeviceMajor { +} + +interface BluetoothClassDeviceMinor { +} + +interface BluetoothClassDeviceService { +} + +interface BluetoothServiceHandler { + /** + The UUID of the service. See . + */ + uuid: BluetoothUUID; + /** + The name of the service. See . + */ + name: DOMString; + /** + The flag indicating whether any remote devices is using this service. See . + */ + isConnected: boolean; + /** + Called when a remote device is connected successfully to this service. +By default, this attribute is set to null. + */ + onconnect: BluetoothSocketSuccessCallback; + /** + Unregisters a service record from the Bluetooth services record database and stops listening for new connections to this service. + */ + unregister(successCallback: SuccessCallback,errorCallback: ErrorCallback): void +} + +interface BluetoothProfileHandler { + /** + The Bluetooth profile type. + */ + profileType: BluetoothProfileType; +} + +interface BluetoothHealthProfileHandler { + /** + Registers an application for the Sink role. + */ + registerSinkApplication(dataType: number,name: DOMString,successCallback: BluetoothHealthApplicationSuccessCallback,errorCallback: ErrorCallback): void + /** + Connects to the health device which acts as the Source role. + */ + connectToSource(peer: BluetoothDevice,application: BluetoothHealthApplication,successCallback: BluetoothHealthChannelSuccessCallback,errorCallback: ErrorCallback): void +} + +interface BluetoothHealthApplication { + /** + The MDEP data type used for communication, which is referenced in the ISO/IEEE 11073-20601 spec. + */ + dataType: number; + /** + The friendly name associated with sink application. See . + */ + name: DOMString; + /** + Called when a health device is connected successfully through this application. + */ + onconnect: BluetoothHealthChannelSuccessCallback; + /** + Unregisters this application. + */ + unregister(successCallback: SuccessCallback,errorCallback: ErrorCallback): void +} + +interface BluetoothHealthChannel { + /** + The remote device to which this channel is connected. See . + */ + peer: BluetoothDevice; + /** + The type of this channel. See . + */ + channelType: BluetoothHealthChannelType; + /** + The health application which is used to communicate with the remote device. See . + */ + application: BluetoothHealthApplication; + /** + The flag indicating whether any remote device is connected. + */ + isConnected: boolean; + /** + Closes the connected channel. + is changed to and is invoked when this channel is closed successfully. + */ + close(): void + /** + Sends data and returns the number of bytes actually written. + */ + sendData(data: byte[]): void + /** + Sets the listener to receive notifications. + */ + setListener(listener: BluetoothHealthChannelChangeCallback): void + /** + Unsets the listener. This stops receiving notifications. + */ + unsetListener(): void +} + +interface BluetoothAdapterChangeCallback { + /** + Called when the power state is changed. + */ + onstatechanged(powered: boolean): void + /** + Called when the name is changed. + */ + onnamechanged(name: DOMString): void + /** + Called when the visibility is changed. + */ + onvisibilitychanged(visible: boolean): void +} + +interface BluetoothDeviceSuccessCallback { + /** + Called on success. + */ + onsuccess(device: BluetoothDevice): void +} + +interface BluetoothDeviceArraySuccessCallback { + /** + Called when device information is ready. + */ + onsuccess(devices: BluetoothDevice[]): void +} + +interface BluetoothDiscoverDevicesSuccessCallback { + /** + Called at the beginning of a device discovery process for finding the nearby Bluetooth device. + */ + onstarted(): void + /** + Called when a new device is discovered in the process of inquiry/discovery. + */ + ondevicefound(device: BluetoothDevice): void + /** + Called when a device is lost from proximity. +After that, this device is no longer visible. + */ + ondevicedisappeared(address: BluetoothAddress): void + /** + Called when the device discovery process has finished. + */ + onfinished(foundDevices: BluetoothDevice[]): void +} + +interface BluetoothSocketSuccessCallback { + /** + Called when the connection to a service is ready. + */ + onsuccess(socket: BluetoothSocket): void +} + +interface BluetoothServiceSuccessCallback { + /** + Called when registering a service with the local device is successful. + */ + onsuccess(handler: BluetoothServiceHandler): void +} + +interface BluetoothHealthApplicationSuccessCallback { + /** + Called when the application is registered successfully. + */ + onsuccess(application: BluetoothHealthApplication): void +} + +interface BluetoothHealthChannelSuccessCallback { + /** + Called when a connection is established. + */ + onsuccess(channel: BluetoothHealthChannel): void +} + +interface BluetoothHealthChannelChangeCallback { + /** + Called when the message is received. + */ + onmessage(data: byte[]): void + /** + Called when the health channel is closed. + */ + onclose(): void +} + +interface CalendarManagerObject { + /** + Object representing a calendar manager. + */ + calendar: CalendarManager; +} + +interface CalendarManager { + /** + Gets an array of Calendar objects. + */ + getCalendars(type: CalendarType,successCallback: CalendarArraySuccessCallback,errorCallback: ErrorCallback): void + /** + The unified calendar is the aggregation of all calendars that are obtained from and contains all events or tasks. It does not have the calendar ID nor name which are set to . + */ + getUnifiedCalendar(type: CalendarType): Calendar + /** + Gets the default calendar, which is used for new items. + */ + getDefaultCalendar(type: CalendarType): Calendar + /** + Adds a calendar to the calendar database synchronously. + */ + addCalendar(calendar: Calendar): void + /** + Removes a calendar from the calendar database synchronously. + */ + removeCalendar(type: CalendarType,id: CalendarId): void + /** + Gets the calendar with the specified identifier and type. + */ + getCalendar(type: CalendarType,id: CalendarId): Calendar +} + +interface Calendar { + /** + Calendar identifier. + */ + id: CalendarId; + /** + Readable (descriptive) name for a calendar, such as work or personal. + */ + name: DOMString; + /** + Account identifier. + */ + accountId: AccountId; + /** + Gets the calendar item with the specified identifier. + */ + get(id: CalendarItemId): CalendarItem + /** + Adds an item to the calendar synchronously. + */ + add(item: CalendarItem): void + /** + Adds an array of items to the calendar asynchronously. + */ + addBatch(items: CalendarItem[],successCallback: CalendarItemArraySuccessCallback,errorCallback: ErrorCallback): void + /** + Updates an existing item in the calendar synchronously with the one specified in the argument. + */ + update(item: CalendarItem,updateAllInstances: boolean): void + /** + Updates an array of existing items in the calendar asynchronously with the specified values in the argument. + */ + updateBatch(items: CalendarItem[],successCallback: SuccessCallback,errorCallback: ErrorCallback,updateAllInstances: boolean): void + /** + Removes an item from the calendar that corresponds to the specified identifier. This method will throw an exception if it fails to remove the specified calendar item. + */ + remove(id: CalendarItemId): void + /** + Removes several items from the calendar asynchronously depending on the specified identifiers. + */ + removeBatch(ids: CalendarItemId[],successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Finds and fetches an array of objects for items stored in the calendar according to the supplied filter if it is valid else it will return all the items stored. + */ + find(successCallback: CalendarItemArraySuccessCallback,errorCallback: ErrorCallback,filter: AbstractFilter,sortMode: SortMode): void + /** + Adds a listener to receive notifications about calendar changes. + */ + addChangeListener(successCallback: CalendarChangeCallback): void + /** + Unsubscribes from receiving notification for a calendar item change. + */ + removeChangeListener(watchId: long): void +} + +interface CalendarItem { + /** + Calendar item identifier. + */ + id: CalendarItemId; + /** + Identifier of the calendar in which this item is saved. + */ + calendarId: CalendarId; + /** + The last modified date and time of an item. + */ + lastModificationDate: TZDate; + /** + The textual descriptions of an item. + */ + description: DOMString; + /** + The short summary or subject for an item. +(See RFC 5545 - Section 3.8.1.12) + */ + summary: DOMString; + /** + Flag to indicate whether an event is an all-day event. + */ + isAllDay: boolean; + /** + The start date or time for an item. +(see RFC 5545 - Section 3.8.2.4). + */ + startDate: TZDate; + /** + The duration of the calendar component. +(See RFC 5545 - Section 3.8.2.5). + */ + duration: TimeDuration; + /** + The location or the intended venue for the activity defined by the calendar item. +(See RFC 5545 - Section 3.8.1.7) + */ + location: DOMString; + /** + The global position latitude and longitude of the location where the event is planned to take place. +(See RFC 5545 - Section 3.8.1.6). + */ + geolocation: SimpleCoordinates; + /** + The name of the person who organized this event. +(See RFC 5545 - Section 3.8.4.3). + */ + organizer: DOMString; + /** + The visibility (secrecy) level of the item. +(See RFC 5545 - Section 3.8.1.3). + */ + visibility: CalendarItemVisibility; + /** + The overall confirmation status for a calendar component. +(See RFC 5545 - Section 3.8.1.11). + */ + status: CalendarItemStatus; + /** + The priority level of an item and may be used to relatively prioritize multiple items during a given period of time. +(See RFC 5545 - Section 3.8.1.9). + */ + priority: CalendarItemPriority; + /** + The array of the alarms (or reminders) associated to an item. + */ + alarms: CalendarAlarm[]; + /** + The flag that indicates the item categories or subtypes of a calendar component. The categories are useful in searching for a calendar component of a particular type and category. +(See RFC 5545 - Section 3.8.1.2). + */ + categories: DOMString[]; + /** + The array that lists the people attending an event. +(See RFC 5545 - Section 3.8.4.3). + */ + attendees: CalendarAttendee[]; + /** + Converts the calendar item to a string format that will be generated and returned synchronously. +The export format is set using the format parameter. + */ + convertToString(format: CalendarTextFormat): void + /** + Clones the object, detached from any calendar. + */ + clone(): CalendarItem +} + +interface CalendarTask { + /** + The due date and time for completing a task. (See RFC 5545 - Section 3.8.2.3). + */ + dueDate: TZDate; + /** + The date and time when an task is completed. +(See RFC 5545 - Section 3.8.2.1). + */ + completedDate: TZDate; + /** + The percent of completion of a task. + */ + progress: number; +} + +interface CalendarEvent { + /** + The flag that indicates whether an instance of a recurring event is detached and if it has been modified and saved to the calendar. + */ + isDetached: boolean; + /** + The end date/time of an event. + */ + endDate: TZDate; + /** + The availability of a person for an event. +(See RFC 5545 - Section 3.2.9). + */ + availability: EventAvailability; + /** + The recurrence rule for the event. + */ + recurrenceRule: CalendarRecurrenceRule; + /** + Expands a recurring event and returns asynchronously the list of instances occurring in a given time interval (inclusive). + */ + expandRecurrence(startDate: TZDate,endDate: TZDate,successCallback: CalendarEventArraySuccessCallback,errorCallback: ErrorCallback): void +} + +interface CalendarAttendee { + /** + The URI for the attendee. + */ + uri: DOMString; + /** + The name of an attendee. + */ + name: DOMString; + /** + The role of the attendee. + */ + role: AttendeeRole; + /** + The participant's attendance status. +(See RFC 5545, Section 3.2.12.) + */ + status: AttendeeStatus; + /** + The attendee's participation status reply (RSVP). +(See RFC 5545, Section 3.2.17.) + */ + RSVP: boolean; + /** + The type of a participant. +(See RFC 5545, Section 3.2.3.) + */ + type: AttendeeType; + /** + The participant's group or list membership. +(See RFC 5545, Section 3.2.11.) + */ + group: DOMString; + /** + The URI of the person who has delegated their participation to this attendee. +(See RFC 5545, Section 3.2.4.) + */ + delegatorURI: DOMString; + /** + The URI of the attendee to whom the person has delegated his participation. +(See RFC 5545, Section 3.2.5.) + */ + delegateURI: DOMString; + /** + The participant's reference in the Contact API. + */ + contactRef: ContactRef; +} + +interface CalendarRecurrenceRule { + /** + The frequency of a recurrence rule. + */ + frequency: RecurrenceRuleFrequency; + /** + The interval for the recurrence rule to repeat over the unit of time indicated by its frequency. + */ + interval: number; + /** + The end date of a recurrence duration of an event using either an end date ( attribute) or a number of occurrences ( attribute). + */ + untilDate: TZDate; + /** + The number of occurrences of a recurring event. + */ + occurrenceCount: long; + /** + The days of the week associated with the recurrence rule. + */ + daysOfTheWeek: ByDayValue[]; + /** + The list of ordinal numbers that filters which recurrences to include in the recurrence rule's frequency. + */ + setPositions: short[]; + /** + Array to list date/time exceptions for the recurring event. +(See RFC 5545, Section 3.8.5.1.) + */ + exceptions: TZDate[]; +} + +interface CalendarEventId { + /** + The calendar event identifier. + */ + uid: DOMString; + /** + The recurrence ID of a instance. + */ + rid: DOMString; +} + +interface CalendarAlarm { + /** + The absolute date and time when an alarm should be triggered. + */ + absoluteDate: TZDate; + /** + The duration before an event starts on which the alarm should be triggered. + */ + before: TimeDuration; + /** + The notification method used by an alarm. + */ + method: AlarmMethod; + /** + The description of an alarm. + */ + description: DOMString; +} + +interface CalendarEventArraySuccessCallback { + /** + Called when the list of calendar events is retrieved successfully. + */ + onsuccess(events: CalendarEvent[]): void +} + +interface CalendarItemArraySuccessCallback { + /** + Called when the list of calendar items is retrieved successfully. + */ + onsuccess(items: CalendarItem[]): void +} + +interface CalendarArraySuccessCallback { + /** + Called when the array of objects is retrieved successfully. + */ + onsuccess(calendars: Calendar[]): void +} + +interface CalendarChangeCallback { + /** + Called when items are added to the calendar. + */ + onitemsadded(items: CalendarItem[]): void + /** + Called when items are updated in the calendar. + */ + onitemsupdated(items: CalendarItem[]): void + /** + Called when item are removed from the calendar. + */ + onitemsremoved(ids: CalendarItemId[]): void +} + +interface CallHistoryObject { + /** + Object representing a callhistory. + */ + callhistory: CallHistory; +} + +interface RemoteParty { + /** + An attribute to store the remote party identifier (RPID). +The RPID is a unique identifier used by a service with call capability. It also includes phone numbers. +Contacts are also defined per service, so an RPID can be resolved to a Contact. +A value means that the remote is hidden (private number). + */ + remoteParty: DOMString; + /** + An attribute to store the identifier of the person to whom the raw contact belongs. + */ + personId: PersonId; +} + +interface CallHistoryEntry { + /** + An attribute to store the unique identifier of a call record. + */ + uid: DOMString; + /** + An attribute to store the service type of the call saved to call history. + */ + type: DOMString; + /** + An attributes to store the features associated with the call service saved to call history. +The following values are supported: + */ + features: DOMString[]; + /** + An attribute to store the remote parties participating in the call. + */ + remoteParties: RemoteParty[]; + /** + An attribute to store the start time of the call. +This attribute is the moment when media channels come up. The exact meaning is defined by the back-end. + */ + startTime: Date; + /** + An attribute to store the duration of the call in seconds. +This attribute is the duration from media channels coming up to the moment when media channels tear down on the same call service. +If the call is migrated to another service, another call history entry is used. +The exact meaning is defined by the back-end. + */ + duration: number; + /** + An attribute to indicate whether the call had been dialed, received, missed, blocked, or rejected. +The following values are supported: + */ + direction: DOMString; + /** + Indicates the phone number of SIM card used for the call. + */ + callingParty: DOMString; +} + +interface CallHistory { + /** + Finds and returns call history. + */ + find(successCallback: CallHistoryEntryArraySuccessCallback,errorCallback: ErrorCallback,filter: AbstractFilter,sortMode: SortMode,limit: number,offset: number): void + /** + Removes call history synchronously. + */ + remove(entry: CallHistoryEntry): void + /** + Removes a call history list asynchronously. + */ + removeBatch(entries: CallHistoryEntry[],successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Removes call history asynchronously. + */ + removeAll(successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Adds a listener to register for callback to observe call history changes. + */ + addChangeListener(observer: CallHistoryChangeCallback): void + /** + Removes a listener to unregister a previously registered listener. + */ + removeChangeListener(handle: long): void +} + +interface CallHistoryEntryArraySuccessCallback { + /** + Called when the queries on call history have been successfully completed. + */ + onsuccess(entries: CallHistoryEntry[]): void +} + +interface CallHistoryChangeCallback { + /** + Called when a new call history item is added. + */ + onadded(newItems: CallHistoryEntry[]): void + /** + Called when the call history has been changed. + */ + onchanged(changedItems: CallHistoryEntry[]): void + /** + Called when the call history has been removed. + */ + onremoved(removedItems: DOMString[]): void +} + +interface ContactManagerObject { + /** + Object representing a contact manager. + */ + contact: ContactManager; +} + +interface ContactManager { + /** + Gets the available address books. + */ + getAddressBooks(successCallback: AddressBookArraySuccessCallback,errorCallback: ErrorCallback): void + /** + Gets the aggregation of all address books. + */ + getUnifiedAddressBook(): AddressBook + /** + Gets the default address book. + */ + getDefaultAddressBook(): AddressBook + /** + Adds an addressbook to the contact database synchronously. + */ + addAddressBook(addressBook: AddressBook): void + /** + Removes an address book from the contact database synchronously. + */ + removeAddressBook(addressBookId: AddressBookId): void + /** + Gets the address book with the specified identifier. + */ + getAddressBook(addressBookId: AddressBookId): AddressBook + /** + Gets the person with the specified identifier. + */ + get(personId: PersonId): Person + /** + Updates a person in the address book synchronously. + */ + update(person: Person): void + /** + Updates several existing persons in the contact DB asynchronously. + */ + updateBatch(persons: Person[],successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Removes a person from the contact DB synchronously. + */ + remove(personId: PersonId): void + /** + Removes persons from contact DB asynchronously. + */ + removeBatch(personIds: PersonId[],successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Gets an array of all objects from the contact DB or the ones that match the optionally supplied filter. + */ + find(successCallback: PersonArraySuccessCallback,errorCallback: ErrorCallback,filter: AbstractFilter,sortMode: SortMode): void + /** + Gets an array of objects from the contact DB which match the supplied filter. This method is for filtering usageCount property of Person objects. + */ + findByUsageCount(filter: ContactUsageCountFilter,successCallback: PersonArraySuccessCallback,errorCallback: ErrorCallback,sortModeOrder: SortModeOrder,limit: number,offset: number): void + /** + Subscribes to receive notifications about person changes. + */ + addChangeListener(successCallback: PersonsChangeCallback): void + /** + Unsubscribes to person changes watch operation. + */ + removeChangeListener(watchId: long): void +} + +interface AddressBook { + /** + Unique identifier of the address book. + */ + id: AddressBookId; + /** + The address book descriptive name. + */ + name: DOMString; + /** + Indicates whether the address book is read-only. + */ + readOnly: boolean; + /** + Account identifier. + */ + accountId: AccountId; + /** + Gets the contact with the specified identifier. + */ + get(id: ContactId): Contact + /** + Adds a contact to the address book synchronously. + */ + add(contact: Contact): void + /** + Adds several contacts to the address book asynchronously. + */ + addBatch(contacts: Contact[],successCallback: ContactArraySuccessCallback,errorCallback: ErrorCallback): void + /** + Updates a contact in the address book synchronously. + */ + update(contact: Contact): void + /** + Updates several existing contacts in the address book asynchronously. + */ + updateBatch(contacts: Contact[],successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Removes a contact from the address book synchronously. + */ + remove(id: ContactId): void + /** + Removes several contacts from the address book asynchronously. + */ + removeBatch(ids: ContactId[],successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Finds an array of all Contact objects from the specified address book or an array of +Contact objects that match the optionally supplied filter. + */ + find(successCallback: ContactArraySuccessCallback,errorCallback: ErrorCallback,filter: AbstractFilter,sortMode: SortMode): void + /** + Subscribes to receive notifications about address book changes. + */ + addChangeListener(successCallback: AddressBookChangeCallback,errorCallback: ErrorCallback): void + /** + Unsubscribes an address book change watch operation. + */ + removeChangeListener(watchId: long): void + /** + Gets the group with the specified identifier. + */ + getGroup(groupId: ContactGroupId): ContactGroup + /** + Adds a group to the address book. + */ + addGroup(group: ContactGroup): void + /** + Updates a group in the address book. + */ + updateGroup(group: ContactGroup): void + /** + Removes a group from the address book. + */ + removeGroup(groupId: ContactGroupId): void + /** + Gets an array of all ContactGroup objects from the specified address book. + */ + getGroups(): void +} + +interface Person { + /** + The identifier of the person. + */ + id: PersonId; + /** + The person display name as a string. +It is selected from the contacts' display names. + */ + displayName: DOMString; + /** + The count of the contacts of a person. + */ + contactCount: long; + /** + Indicates whether a person has a phone number. + */ + hasPhoneNumber: boolean; + /** + Indicates whether the person has an email addresses. + */ + hasEmail: boolean; + /** + Indicates whether the contact is a favorite. + */ + isFavorite: boolean; + /** + The URI of a picture of a person. + */ + photoURI: DOMString; + /** + The URI of a custom ringtone for a contact. + */ + ringtoneURI: DOMString; + /** + The ID of a contact that represents information of the person. + */ + displayContactId: ContactId; + /** + Aggregates another person to this person. + */ + link(personId: PersonId): void + /** + Separates a contact from this person. + */ + unlink(contactId: ContactId): Person + /** + Gets person's usage count. + */ + getUsageCount(type: ContactUsageType): void + /** + Resets a person's usage count. + */ + resetUsageCount(type: ContactUsageType): void +} + +interface Contact { + /** + The identifier of a Raw contact. + */ + id: ContactId; + /** + The identifier of the person corresponding to the raw contact. + */ + personId: PersonId; + /** + The identifier of the address book that corresponds to the raw contact. +By default, this attribute is set to . + */ + addressBookId: AddressBookId; + /** + The timestamp for the last update of a contact. + */ + lastUpdated: Date; + /** + Indicates whether a contact is favorite. + */ + isFavorite: boolean; + /** + The name of a contact. + */ + name: ContactName; + /** + The contact addresses. + */ + addresses: ContactAddress[]; + /** + The URI to the picture of the contact. + */ + photoURI: DOMString; + /** + The telephone numbers of the contact. + */ + phoneNumbers: ContactPhoneNumber[]; + /** + The email addresses of the contact. + */ + emails: ContactEmailAddress[]; + /** + The instant messenger addresses of the contact. + */ + messengers: ContactInstantMessenger[]; + /** + The relationships of the contact. + */ + relationships: ContactRelationship[]; + /** + The extended data of the contact. + */ + extensions: ContactExtension[]; + /** + The birthday of the contact. + */ + birthday: Date; + /** + The list of anniversaries for the contact. + */ + anniversaries: ContactAnniversary[]; + /** + The organizations the contact belongs to. + */ + organizations: ContactOrganization[]; + /** + The notes associated to the contact. + */ + notes: DOMString[]; + /** + The URLs associated to the contact. + */ + urls: ContactWebSite[]; + /** + The URI to the custom ringtone for the contact. + */ + ringtoneURI: DOMString; + /** + The URI of a custom message alert for a contact. + */ + messageAlertURI: DOMString; + /** + The URI of a custom vibration alert for a contact. + */ + vibrationURI: DOMString; + /** + The groups the contact belongs to. + */ + groupIds: ContactGroupId[]; + /** + Converts the Contact item to a string format. + */ + convertToString(format: ContactTextFormat): void + /** + Creates a clone of the Contact object, detached from any address book. + */ + clone(): Contact +} + +interface ContactRef { + /** + The address book identifier. + */ + addressBookId: AddressBookId; + /** + The contact identifier inside the address book. + */ + contactId: ContactId; +} + +interface ContactName { + /** + The name prefix of a contact. + */ + prefix: DOMString; + /** + The name suffix of a contact. + */ + suffix: DOMString; + /** + The first (given) name of a contact. + */ + firstName: DOMString; + /** + The middle name of a contact. + */ + middleName: DOMString; + /** + The last (family) name of a contact. + */ + lastName: DOMString; + /** + The nicknames of a contact. + */ + nicknames: DOMString[]; + /** + The phonetic first name of a contact. + */ + phoneticFirstName: DOMString; + /** + The phonetic middle name of a contact. + */ + phoneticMiddleName: DOMString; + /** + The phonetic last name of a contact. + */ + phoneticLastName: DOMString; + /** + The display name of a contact. + */ + displayName: DOMString; +} + +interface ContactOrganization { + /** + The name of an organization. + */ + name: DOMString; + /** + The organizational unit name. + */ + department: DOMString; + /** + The job title. + */ + title: DOMString; + /** + An attribute to store the role, occupation, or business category +(such as "Programmer"). + */ + role: DOMString; + /** + The URI to the logo of a company. + */ + logoURI: DOMString; +} + +interface ContactWebSite { + /** + The URL for the contact's web site. + */ + url: DOMString; + /** + The type of web site. + */ + type: DOMString; +} + +interface ContactAnniversary { + /** + The date of an anniversary. + */ + date: Date; + /** + The text describing an anniversary. + */ + label: DOMString; +} + +interface ContactAddress { + /** + The country of the address. + */ + country: DOMString; + /** + The name of a country subdivision. + */ + region: DOMString; + /** + The name of the locality. +For example, the city, county, town, or village. + */ + city: DOMString; + /** + The street address, for example, building number and street name/number. + */ + streetAddress: DOMString; + /** + Additional address details that are required for an accurate address. +For example, floor number, apartment number, suite name, the name of an office occupant, and so on. + */ + additionalInformation: DOMString; + /** + The postal code of the location (also known as the zip code in the US). + */ + postalCode: DOMString; + /** + The default state of an address. + */ + isDefault: boolean; + /** + The case insensitive list of address types. + */ + types: DOMString[]; + /** + The address label, can hold a custom address type. + */ + label: DOMString; +} + +interface ContactPhoneNumber { + /** + The full phone number. + */ + number: DOMString; + /** + The default state of the phone number. + */ + isDefault: boolean; + /** + The case insensitive list of phone types, as defined in RFC 2426. + */ + types: DOMString[]; + /** + The phone number label, can hold a custom phone number type. + */ + label: DOMString; +} + +interface ContactEmailAddress { + /** + The full email address. + */ + email: DOMString; + /** + The default state of an email address. + */ + isDefault: boolean; + /** + The case insensitive list of email types. + */ + types: DOMString[]; + /** + The email label, can hold a custom email type. + */ + label: DOMString; +} + +interface ContactInstantMessenger { + /** + The full instant messenger address. + */ + imAddress: DOMString; + /** + The instant messenger provider type. + */ + type: ContactInstantMessengerType; + /** + The instant messenger label, can hold a custom messenger type. + */ + label: DOMString; +} + +interface ContactGroup { + /** + The identifier of a group. + */ + id: ContactGroupId; + /** + The identifier of the address book that the group belongs to. + */ + addressBookId: AddressBookId; + /** + The name of a group. + */ + name: DOMString; + /** + The URI to the custom ringtone for a group. + */ + ringtoneURI: DOMString; + /** + The URI that points to an image that can represent the object. This attribute only contains a local file URI. + */ + photoURI: DOMString; + /** + The flag indicating whether the group can be modified or removed. +Some groups cannot be edited if this flag is set to . + */ + readOnly: DOMString; +} + +interface ContactRelationship { + /** + The name of the person in a particular relationship. + */ + relativeName: DOMString; + /** + The relationship type. + */ + type: ContactRelationshipType; + /** + The relationship label, can hold a custom relationship type. + */ + label: DOMString; +} + +interface ContactExtension { + /** + The extended data of a contact. + */ + data1: long; + /** + The extended data of a contact. + */ + data2: DOMString; + /** + The extended data of a contact. + */ + data3: DOMString; + /** + The extended data of a contact. + */ + data4: DOMString; + /** + The extended data of a contact. + */ + data5: DOMString; + /** + The extended data of a contact. + */ + data6: DOMString; + /** + The extended data of a contact. + */ + data7: DOMString; + /** + The extended data of a contact. + */ + data8: DOMString; + /** + The extended data of a contact. + */ + data9: DOMString; + /** + The extended data of a contact. + */ + data10: DOMString; + /** + The extended data of a contact. + */ + data11: DOMString; + /** + The extended data of a contact. + */ + data12: DOMString; +} + +interface PersonArraySuccessCallback { + /** + Called when a list of persons is retrieved successfully. + */ + onsuccess(persons: Person[]): void +} + +interface ContactArraySuccessCallback { + /** + Called when a list of contacts is retrieved successfully. + */ + onsuccess(contacts: Contact[]): void +} + +interface AddressBookArraySuccessCallback { + /** + Called when a list of address books is retrieved successfully. + */ + onsuccess(addressbooks: AddressBook[]): void +} + +interface AddressBookChangeCallback { + /** + Called when contacts are added to the address book. + */ + oncontactsadded(contacts: Contact[]): void + /** + Called when contacts are updated in the address book. + */ + oncontactsupdated(contacts: Contact[]): void + /** + Called when contacts are deleted from the address book. + */ + oncontactsremoved(contactIds: ContactId[]): void +} + +interface PersonsChangeCallback { + /** + Called when persons are added to the person list. + */ + onpersonsadded(persons: Person[]): void + /** + Called when persons are updated in the person list. + */ + onpersonsupdated(persons: Person[]): void + /** + Called when persons are deleted from the person list. + */ + onpersonsremoved(personIds: PersonId[]): void +} + +interface ContentManagerObject { + /** + Object representing a content manager. + */ + content: ContentManager; +} + +interface ContentManager { + /** + Updates attributes of content in the content database synchronously. + */ + update(content: Content): void + /** + Updates a batch of content attributes in the content database asynchronously. + */ + updateBatch(contents: Content[],successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Gets a list of content directories. + */ + getDirectories(successCallback: ContentDirectoryArraySuccessCallback,errorCallback: ErrorCallback): void + /** + Finds contents that satisfy the conditions set by a filter. + */ + find(successCallback: ContentArraySuccessCallback,errorCallback: ErrorCallback,directoryId: ContentDirectoryId,filter: AbstractFilter,sortMode: SortMode,count: number,offset: number): void + /** + Scans a file to create or update content in the content database. + */ + scanFile(contentURI: DOMString,successCallback: ContentScanSuccessCallback,errorCallback: ErrorCallback): void + /** + Scans a content directory to create or update content in the content database. + */ + scanDirectory(contentDirURI: DOMString,recursive: boolean,successCallback: ContentScanSuccessCallback,errorCallback: ErrorCallback): void + /** + Cancels a scan process of a content directory. + */ + cancelScanDirectory(contentDirURI: DOMString): void + /** + Adds a listener which receives notifications when content changes. + */ + addChangeListener(changeCallback: ContentChangeCallback): void + /** + Removes a listener which receives notifications about content changes. + */ + removeChangeListener(listenerId: long): void + /** + Sets a listener to receive notifications of content changes. + */ + setChangeListener(changeCallback: ContentChangeCallback): void + /** + Unsets the listener to unsubscribe from receiving notifications for content changes. + */ + unsetChangeListener(): void + /** + Gets all playlists. + */ + getPlaylists(successCallback: PlaylistArraySuccessCallback,errorCallback: ErrorCallback): void + /** + Creates a new playlist. + */ + createPlaylist(name: DOMString,successCallback: PlaylistSuccessCallback,errorCallback: ErrorCallback,sourcePlaylist: Playlist): void + /** + Removes a playlist. + */ + removePlaylist(id: PlaylistId,successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Creates a content's thumbnail. + */ + createThumbnail(content: Content,successCallback: ThumbnailSuccessCallback,errorCallback: ErrorCallback): void +} + +interface ContentArraySuccessCallback { + /** + Called when the list of content is retrieved successfully. + */ + onsuccess(contents: Content[]): void +} + +interface ContentDirectoryArraySuccessCallback { + /** + Called when the directory list is retrieved successfully. + */ + onsuccess(directories: ContentDirectory[]): void +} + +interface ContentScanSuccessCallback { + /** + Called when the scanning has been completed. + */ + onsuccess(uri: DOMString): void +} + +interface ContentChangeCallback { + /** + Called when content is added. + */ + oncontentadded(content: Content): void + /** + Called when content is updated. + */ + oncontentupdated(content: Content): void + /** + Called when content is removed. + */ + oncontentremoved(id: ContentId): void + /** + Called when a content directory is added. + */ + oncontentdiradded(contentDir: ContentDirectory): void + /** + Called when a content directory is updated. + */ + oncontentdirupdated(contentDir: ContentDirectory): void + /** + Called when a content directory is removed. + */ + oncontentdirremoved(id: ContentDirectoryId): void +} + +interface ContentDirectory { + /** + The opaque content directory identifier. + */ + id: ContentDirectoryId; + /** + The directory path on the device. + */ + directoryURI: DOMString; + /** + The directory name. + */ + title: DOMString; + /** + The type of device storage. + */ + storageType: ContentDirectoryStorageType; + /** + The last modified date for a directory. + */ + modifiedDate: Date; +} + +interface Content { + /** + The list of attributes that are editable to the local backend using the update() or updateBatch() method. + */ + editableAttributes: DOMString[]; + /** + The opaque content identifier. + */ + id: ContentId; + /** + The content name. The initial value is the file name of the content. + */ + name: DOMString; + /** + The content type. + */ + type: ContentType; + /** + The content MIME type. + */ + mimeType: DOMString; + /** + The content title. + */ + title: DOMString; + /** + The URI to access the content. + */ + contentURI: DOMString; + /** + The array of content thumbnail URIs. + */ + thumbnailURIs: DOMString[]; + /** + The date when content has been released publicly. If only the release year is known, then the month and date are set to January and 1st respectively. + */ + releaseDate: Date; + /** + The last modified date for a content item. + */ + modifiedDate: Date; + /** + The file size of the content in bytes. + */ + size: number; + /** + The content description. + */ + description: DOMString; + /** + The content rating. This value can range from to . + */ + rating: number; + /** + Boolean value that indicates whether a content item is marked as a favorite. + */ + isFavorite: boolean; +} + +interface VideoContent { + /** + The geographical location where the video has been made. + */ + geolocation: SimpleCoordinates; + /** + The album name to which the video belongs. + */ + album: DOMString; + /** + The list of artists who created the video. + */ + artists: DOMString[]; + /** + The video duration in milliseconds. + */ + duration: number; + /** + The width of a video in pixels. + */ + width: number; + /** + The height of the video in pixels. + */ + height: number; +} + +interface AudioContentLyrics { + /** + The type of lyrics, that is, whether they are synchronized with the music. + */ + type: AudioContentLyricsType; + /** + The array of timestamps in milliseconds for lyrics. + */ + timestamps: number[]; + /** + The array of lyrics snippets. + */ + texts: DOMString[]; +} + +interface AudioContent { + /** + The album name to which the audio belongs. + */ + album: DOMString; + /** + The list of genres to which the audio belongs. + */ + genres: DOMString[]; + /** + The list of artists who created the audio. + */ + artists: DOMString[]; + /** + The list of composers for the music. + */ + composers: DOMString[]; + /** + The lyrics of a song in an audio file. + */ + lyrics: AudioContentLyrics; + /** + The copyright information. + */ + copyright: DOMString; + /** + The audio bitrate in bits per second. By default, this value is . + */ + bitrate: number; + /** + The track number if the audio belongs to an album. + */ + trackNumber: number; + /** + The audio duration in milliseconds. + */ + duration: number; +} + +interface ImageContent { + /** + The geographical location where the image has been made. + */ + geolocation: SimpleCoordinates; + /** + The width of an image in pixels. + */ + width: number; + /** + The height of an image in pixels. + */ + height: number; + /** + The image orientation. + */ + orientation: ImageContentOrientation; +} + +interface PlaylistItem { + /** + Content contained in this playlist item. + */ + content: Content; +} + +interface Playlist { + /** + Identifier of a playlist. + */ + id: PlaylistId; + /** + Name of a playlist (case sensitive and unique). + */ + name: DOMString; + /** + Number of playlist items in the playlist. + */ + numberOfTracks: long; + /** + Thumbnail URI of a playlist. + */ + thumbnailURI: DOMString; + /** + Adds a content item to a playlist. + */ + add(item: Content): void + /** + Adds tracks to a playlist as a batch, asynchronously. + */ + addBatch(items: Content[],successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Removes a track from a playlist. + */ + remove(item: PlaylistItem): void + /** + Removes tracks from a playlist as a batch, asynchronously. + */ + removeBatch(items: PlaylistItem[],successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Gets playlist items from a playlist. + */ + get(successCallback: PlaylistItemArraySuccessCallback,errorCallback: ErrorCallback,count: long,offset: long): void + /** + Changes the play order of all playlist items in the playlist. + */ + setOrder(items: PlaylistItem[],successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Moves the specified item up or down a specified amount in the play order. + */ + move(item: PlaylistItem,delta: long,successCallback: SuccessCallback,errorCallback: ErrorCallback): void +} + +interface PlaylistArraySuccessCallback { + /** + Called when the method completes successfully. + */ + onsuccess(playlists: Playlist[]): void +} + +interface PlaylistSuccessCallback { + /** + Called when the method completes successfully. + */ + onsuccess(playlist: Playlist): void +} + +interface PlaylistItemArraySuccessCallback { + /** + Called when the method completes successfully. + */ + onsuccess(items: PlaylistItem[]): void +} + +interface ThumbnailSuccessCallback { + /** + Called when the method completes successfully. + */ + onsuccess(path: DOMString): void +} + +interface ConsoleManagerObject { + /** */ + console: ConsoleManager; +} + +interface ConsoleManager { + /** + Prints a line of text to a standard output. +The text will be logged as a standard message. + */ + log(text: DOMString): void + /** + Prints a line of text to a standard output. +The text will be logged as an error message. + */ + error(text: DOMString): void + /** + Prints a line of text to a standard output. +The text will be logged as a warning message. + */ + warn(text: DOMString): void + /** + Prints a line of text to a standard output. +The text will be logged as an info message. + */ + info(text: DOMString): void + /** + Prints a line of text to a standard output. +The text will be logged as a debug message. + */ + debug(text: DOMString): void + /** + If the specified expression is false, +the message is written to the console. + */ + assert(expression: boolean,message: DOMString): void + /** + Prints a JavaScript representation of the specified object. +If the object being logged is an HTML element, the JavaScript +Object view is forced. + */ + dir(obj: Object): void + /** + Prints an XML/HTML Element representation of the specified object +if possible or the JavaScript Object if it is not. + */ + dirxml(obj: Object): void + /** + Starts a new timer with an associated label. When is called with the same label, the timer is stopped and the elapsed time +is displayed in the console. Timer values are accurate to the sub-millisecond. + */ + time(label: DOMString): void + /** + Stops the timer with the specified label and prints the elapsed time. + */ + timeEnd(label: DOMString): void +} + +interface CordovaManagerObject { + /** */ + cordova: Cordova; +} + +interface Cordova { +} + +interface SuccessCallback { + /** + Success + */ + onsuccess(): void +} + +interface ErrorCallback { + /** + Success + */ + onerror(error: DOMException): void +} + +interface DOMException { + /** + The number representing the type of the error. + */ + code: short; + /** + The short text representing the type of the error. + */ + name: DOMString; + /** + A text containing information about the error. + */ + message: DOMString; +} + +interface AccelerometerManagerObject { + /** */ + accelerometer: Accelerometer; +} + +interface Accelerometer { + /** + Gets the current acceleration along the x, y, and z axes. + */ + getCurrentAcceleration(onsuccess: AccelerometerSuccessCallback,onerror: ErrorCallback): void + /** + Gets the acceleration along the x, y, and z axes at a regular interval. + */ + watchAcceleration(onsuccess: AccelerometerSuccessCallback,onerror: ErrorCallback,options: AccelerationOptions): void + /** + Stop watching the Acceleration referenced by the watchID parameter. + */ + clearWatch(watchID: DOMString): void +} + +interface Acceleration { + /** + Amount of acceleration on the x-axis. (in m/s^2) + */ + x: double; + /** + Amount of acceleration on the y-axis. (in m/s^2) + */ + y: double; + /** + Amount of acceleration on the z-axis. (in m/s^2) + */ + z: double; + /** + Creation timestamp in milliseconds. + */ + timestamp: long; +} + +interface AccelerometerSuccessCallback { + /** */ + onsuccess(acceleration: Acceleration): void +} + +interface ErrorCallback { + /** + Success + */ + onerror(error: DOMException): void +} + +interface DeviceManagerObject { + /** */ + device: Device; +} + +interface Device { + /** + Returns the version of Cordova running on the device. + */ + cordova: DOMString; + /** + Get the the name of the device's model or product. The value is set by the device manufacturer and may be different across versions of the same product. + */ + model: DOMString; + /** + Get the device's operating system name. + */ + platform: DOMString; + /** + Get the device's Universally Unique Identifier (UUID). The details of how a UUID is generated are determined by the device manufacturer and are specific to the device's platform or model. + */ + uuid: DOMString; + /** + Get the operating system version. + */ + version: DOMString; +} + +interface DialogsManagerObject { + /** */ + notification: DialogsManager; +} + +interface DialogsManager { + /** + Shows a custom alert with one button. + */ + alert(message: DOMString,alertCallback: SuccessCallback,title: DOMString,buttonName: DOMString): void + /** + Shows a custom confirm box with set of buttons. + */ + confirm(message: DOMString,confirmCallback: ConfirmCallback,title: DOMString,buttonNames: DOMString[]): void + /** + Shows a custom confirm box with set of buttons. + */ + prompt(message: DOMString,promptCallback: PromptCallback,title: DOMString,buttonNames: DOMString[],defaultText: DOMString): void + /** + Method allows to make custom number of beeps by device. + */ + beep(times: long): void +} + +interface PromptData { + /** + The index of button, which was pressed by user. +the index uses one-based indexing, so the values could be 1, 2, 3, etc. + */ + buttonIndex: long; + /** + The text entered by user in the prompt of dialog box. + */ + input1: DOMString; +} + +interface ConfirmCallback { + /** + Called when the user perform action on confirm dialog. + */ + onsuccess(buttonIndex: long): void +} + +interface PromptCallback { + /** + Called when the user perform action on prompt dialog. + */ + onsuccess(data: PromptData): void +} + +interface DeviceReadyEventCallback { + /** + Called when Cordova is fully loaded. + */ + ondeviceready(): void +} + +interface PauseEventCallback { + /** + Called when an application is put into the background. + */ + onpause(): void +} + +interface ResumeEventCallback { + /** + Called when an application is retrieved from the background. + */ + onresume(): void +} + +interface BackButtonEventCallback { + /** + Called when user presses the back button. + */ + onbackbutton(): void +} + +interface MenuButtonEventCallback { + /** + Called when user presses the menu button. + */ + onmenubutton(): void +} + +interface SearchButtonEventCallback { + /** + Called when user presses the search button. + */ + onsearchbutton(): void +} + +interface StartCallEventCallback { + /** + Called when user presses the start call button. + */ + onstartcallbutton(): void +} + +interface EndCallButtonEventCallback { + /** + Called when user presses the end call button. + */ + onendcallbutton(): void +} + +interface VolumeDownButtonEventCallback { + /** + Called when user presses the volume down button. + */ + onvolumedownbutton(): void +} + +interface VolumeUpButtonEventCallback { + /** + Called when user presses the volume up button. + */ + onvolumeupbutton(): void +} + +interface FileUploadOptions { + /** + The name of the form element. Defaults to file + */ + fileKey: DOMString; + /** + The file name to use when saving the file on the server. Defaults to image.jpg. + */ + fileName: DOMString; + /** + The HTTP method to use - either PUT or POST. Defaults to POST. + */ + httpMethod: DOMString; + /** + The mime type of the data to upload. Defaults to image/jpeg. + */ + mimeType: DOMString; + /** + A set of optional key/value pairs to pass in the HTTP request. + */ + params: FileUploadParams; + /** + Whether to upload the data in chunked streaming mode. Defaults to true. + */ + chunkedMode: boolean; + /** + A map of header name/header values. Use an array to specify more than one value. + */ + headers: HeaderFields; +} + +interface FileUploadResult { + /** + The number of bytes sent to the server as part of the upload. + */ + bytesSent: long; + /** + The HTTP response code returned by the server. + */ + responseCode: long; + /** + The HTTP response returned by the server. + */ + response: DOMString; + /** + The HTTP response headers by the server. + */ + headers: HeaderFields; +} + +interface FileTransferError { + /** + One of the predefined error codes listed above. + */ + code: short; + /** + URL to the source. + */ + source: DOMString; + /** + URL to the target. + */ + target: DOMString; + /** + HTTP status code. This attribute is only available when a response code is received from the HTTP connection. + */ + http_status: long; + /** + Response body. This attribute is only available when a response is received from the HTTP connection. + */ + body: DOMString; + /** + Either e.getMessage or e.toString + */ + _exception: DOMString; +} + +interface FileTransfer { + /** + Called with a ProgressEvent whenever a new chunk of data is transferred. + */ + onprogress: ProgressCallback; + /** + Sends a file to a server. + */ + upload(fileURL: DOMString,server: DOMString,successCallback: FileUploadSuccessCallback,errorCallback: FileTransferErrorCallback,options: FileUploadOptions,trustAllHosts: boolean): void + /** + Downloads a file from a server. + */ + download(source: DOMString,target: DOMString,successCallback: FileDownloadSuccessCallback,errorCallback: FileTransferErrorCallback,trustAllHosts: boolean,options: FileDownloadOptions): void + /** + Aborts an in-progress transfer. The onerror callback is passed a FileTransferError object which has an error code of FileTransferError.ABORT_ERR. + */ + abort(): void +} + +interface FileUploadSuccessCallback { + /** + Called when upload is successfully finished. + */ + onsuccess(result: FileUploadResult): void +} + +interface FileDownloadSuccessCallback { + /** + Called when download is successfully finished. + */ + onsuccess(file: FileEntry): void +} + +interface FileTransferErrorCallback { + /** + Called when file transfer is finished with an error + */ + onerror(error: FileTransferError): void +} + +interface ProgressEvent { + /** + The type of event, e.g. "click", "hashchange", or "submit". + */ + type: DOMString; + /** + True if event's goes through its target attribute value's ancestors in reverse tree order, and false otherwise. + */ + bubbles: boolean; + /** + Cancel bubble + */ + cancelBubble: boolean; + /** + Its return value does not always carry meaning, but true can indicate that part of the operation during which event was dispatched, can be canceled. + */ + cancelable: boolean; + /** + True when the length of the transferred content is known. + */ + lengthComputable: boolean; + /** + Number of bytes transferred. + */ + loaded: number; + /** + The total length of the content. This attribute is set when lengthComputable is true. + */ + total: number; + /** + The object to which event is dispatched. + */ + target: EventTarget; +} + +interface FileSystemManagerObject { + /** */ + file: FileSystemManager; +} + +interface FileSystemManager { + /** + Read-only directory where the application is installed. + */ + applicationDirectory: DOMString; + /** + Root directory of the application's sandbox. + */ + applicationStorageDirectory: DOMString; + /** + Persistent and private data storage within the application's sandbox using internal memory + */ + dataDirectory: DOMString; + /** + Directory for cached data files or any files that your app can re-create easily. The OS may delete these files when the device runs low on storage, nevertheless, apps should not rely on the OS to delete files in here. + */ + cacheDirectory: DOMString; + /** + Application space on external storage. + */ + externalApplicationStorageDirectory: DOMString; + /** + Where to put app-specific data files on external storage. + */ + externalDataDirectory: DOMString; + /** + Application cache on external storage. + */ + externalCacheDirectory: DOMString; + /** + External storage root. + */ + externalRootDirectory: DOMString; + /** + Temp directory that the OS can clear at will. Do not rely on the OS to clear this directory; your app should always remove files as applicable. + */ + tempDirectory: DOMString; + /** + Holds app-specific files that should be synced. + */ + syncedDataDirectory: DOMString; + /** + Files private to the app, but that are meaningful to other application (e.g. Office files). + */ + documentsDirectory: DOMString; + /** + Files globally available to all applications. + */ + sharedDirectory: DOMString; +} + +interface FileSystem { + /** + This is the name of the file system. + */ + name: DOMString; + /** + The root directory of the file system. + */ + root: DirectoryEntry; +} + +interface Metadata { + /** + This is the time at which the file or directory was last modified. + */ + modificationTime: Date; + /** + The size of the file, in bytes. This must return 0 for directories. + */ + size: number; +} + +interface FileError { + /** */ + code: number; +} + +interface File { + /** + The name of the file. + */ + name: DOMString; + /** + The full path of the file, including the name. + */ + localURL: DOMString; + /** + The mime type of the file. + */ + type: DOMString; + /** + The last modified date of the file. + */ + lastModified: Date; + /** + The size of the file in bytes. + */ + size: long long; +} + +interface LocalFileSystem { + /** + Request a file system in which to store application data. + */ + requestFileSystem(type: short,size: long long,successCallback: FileSystemCallback,errorCallback: ErrorCallback): void + /** + Retrieves a or using local URI. + */ + resolveLocalFileSystemURL(uri: DOMString,successCallback: EntryCallback,errorCallback: ErrorCallback): void +} + +interface Entry { + /** + True if the entry is a file. + */ + isFile: boolean; + /** + True if the entry is a directory. + */ + isDirectory: boolean; + /** + The full absolute path from the root to the entry. An absolute path is a relative path from the root directory, prepended with a "/". + */ + fullPath: DOMString; + /** + The name of the entry, excluding the path leading to it. + */ + name: DOMString; + /** + The file system where the entry resides. + */ + filesystem: FileSystem; + /** + Look up metadata about this entry. + */ + getMetadata(onsuccess: MetadataCallback,onerror: ErrorCallback): void + /** + Move an entry to a different location on the file system. + */ + moveTo(parent: DirectoryEntry,newName: DOMString,onsuccess: EntryCallback,onerror: ErrorCallback): void + /** + Copy an entry to a different location on the file system. + */ + copyTo(parent: DirectoryEntry,newName: DOMString,onsuccess: EntryCallback,onerror: ErrorCallback): void + /** + Look up the parent DirectoryEntry containing this Entry. If this Entry is the root of its filesystem, its parent is itself. + */ + getParent(onsuccess: EntryCallback,onerror: ErrorCallback): void + /** + Deletes a file or directory. It is an error to attempt to delete a directory that is not empty. It is an error to attempt to delete the root directory of a filesystem. + */ + remove(onsuccess: VoidCallback,onerror: ErrorCallback): void + /** + Returns a URL that can be used to identify this entry. Unlike the URN defined in [FILE-API-ED], it has no specific expiration; as it describes a location on disk, it should be valid at least as long as that location exists. + */ + toURL(): void +} + +interface DirectoryEntry { + /** + Creates a new DirectoryReader to read Entries from this Directory. + */ + createReader(): DirectoryReader + /** + Creates or looks up a directory. + */ + getDirectory(path: DOMString,options: Flags,onsuccess: EntryCallback,onerror: ErrorCallback): void + /** + Creates or looks up a file. + */ + getFile(path: DOMString,options: Flags,onsuccess: EntryCallback,onerror: ErrorCallback): void + /** + Deletes a directory and all of its contents, if any. In the event of an error [e.g. trying to delete a directory that contains a file that cannot be removed], some of the contents of the directory may be deleted. It is an error to attempt to delete the root directory of a filesystem. + */ + removeRecursively(onsuccess: VoidCallback,onerror: ErrorCallback): void +} + +interface DirectoryReader { + /** + Read the next block of entries from this directory. + */ + readEntries(onsuccess: EntriesCallback,onerror: ErrorCallback): void +} + +interface FileEntry { + /** + Creates a new FileWriter associated with the file that this FileEntry represents. + */ + createWriter(onsuccess: FileWriterCallback,onerror: ErrorCallback): void + /** + Returns a File that represents the current state of the file that this FileEntry represents. + */ + file(onsuccess: FileCallback,onerror: ErrorCallback): void +} + +interface FileReader { + /** + The state of FileReader. Possible values are , or . + */ + readyState: short; + /** + The contents of the file, that have been read. +Returns a Blob's data as a DOMString, or byte[], or null, depending on the read method that has been called on the FileReader. It is if any errors occurred. + */ + result: ReadResultData; + /** + An object describing error, if any occurred. + */ + error: FileError; + /** + Callback, which is triggered, when the read starts. + */ + onloadstart: ProgressCallback; + /** + Callback, which is triggered, when the read has successfully completed. + */ + onload: ProgressCallback; + /** + Callback, which is triggered, when the read has been aborted. For instance, by invoking the abort() method. + */ + onabort: ProgressCallback; + /** + Callback, which is triggered, when the read has failed. + */ + onerror: ProgressCallback; + /** + Callback, which is triggered, when the request has completed (either in success or failure). + */ + onloadend: ProgressCallback; + /** + Aborts current operation of reading file. + */ + abort(): void + /** + Reads file and return data as a base64-encoded data URL. + */ + readAsDataURL(blob: Blob): void + /** + Reads text file. + */ + readAsText(blob: Blob,label: DOMString): void + /** + Reads file as binary and returns a binary string. + */ + readAsBinaryString(blob: Blob): void + /** + Reads file as an array buffer and result would be . + */ + readAsArrayBuffer(blob: Blob): void +} + +interface FileWriter { + /** + One of the three possible states, either INIT, WRITING, or DONE. + */ + readyState: short; + /** + The name of the file to be written. + */ + fileName: DOMString; + /** + The length of the file to be written. + */ + length: long; + /** + The current position of the file pointer. + */ + position: long; + /** + An object containing errors. + */ + error: FileError; + /** + Called when the write starts. + */ + onwritestart: ProgressCallback; + /** + Called when the request has completed successfully. + */ + onwrite: ProgressCallback; + /** + Called when the write has been aborted. For instance, by invoking the abort() method. + */ + onabort: ProgressCallback; + /** + Called when the write has failed. + */ + onerror: ProgressCallback; + /** + Called when the request has completed (either in success or failure). + */ + onwriteend: ProgressCallback; + /** + Aborts writing the file. + */ + abort(): void + /** + Moves the file pointer to the specified byte. + */ + seek(offset: long): void + /** + Shortens the file to the specified length. + */ + truncate(size: long): void + /** + Writes data to the file. + */ + write(data: WriteData): void +} + +interface ProgressCallback { + /** + Called with a ProgressEvent object. + */ + onsuccess(event: ProgressEvent): void +} + +interface FileSystemCallback { + /** + Called when the file system was successfully obtained. + */ + handleEvent(filesystem: FileSystem): void +} + +interface EntryCallback { + /** + Used to supply an Entry as a response to a user query. + */ + handleEvent(entry: Entry): void +} + +interface EntriesCallback { + /** + Used to supply an array of Entries as a response to a user query. + */ + handleEvent(entries: Entry[]): void +} + +interface MetadataCallback { + /** + Used to supply file or directory metadata as a response to a user query. + */ + handleEvent(metadata: Metadata): void +} + +interface FileWriterCallback { + /** + Used to supply a FileWriter as a response to a user query. + */ + handleEvent(fileWriter: FileWriter): void +} + +interface FileCallback { + /** + Used to supply a File as a response to a user query. + */ + handleEvent(file: File): void +} + +interface VoidCallback { + /** + . + */ + handleEvent(): void +} + +interface ErrorCallback { + /** + There was an error with the request. Details are provided by the FileError parameter. + */ + handleEvent(err: FileError): void +} + +interface GlobalizationManagerObject { + /** */ + globalization: GlobalizationManager; +} + +interface GlobalizationManager { + /** + Gets the BCP 47 language tag for the client's current language. + */ + getPreferredLanguage(onsuccess: StringSuccessCallback,onerror: ErrorCallback): void + /** + Returns the BCP 47 compliant tag for the client's current locale settings. + */ + getLocaleName(onsuccess: StringSuccessCallback,onerror: ErrorCallback): void + /** + Returns a date formatted as a string according to the client's locale and timezone. + */ + dateToString(date: Date,onsuccess: StringSuccessCallback,onerror: ErrorCallback,options: DateOptions): void + /** + Returns a pattern string to format and parse currency values according to +the client's user preferences and ISO 4217 currency code. + */ + getCurrencyPattern(currencyCode: DOMString,onsuccess: PatternSuccessCallback,onerror: ErrorCallback): void + /** + Returns an array of the names of the months or the days of the week, +depending on the client's user preferences and calendar. + */ + getDateNames(onsuccess: ArrayStringSuccessCallback,onerror: ErrorCallback,options: GetDateNamesOptions): void + /** + Gets a pattern string to format and parse dates according to the client's +user preferences. + */ + getDatePattern(onsuccess: GetDatePatternSuccessCallback,onerror: ErrorCallback,options: DateOptions): void + /** + Gets the first day of the week according to the client's +user preferences and calendar. + */ + getFirstDayOfWeek(onsuccess: LongSuccessCallback,onerror: ErrorCallback): void + /** + Gets a pattern string to format and parse numbers +according to the client's user preferences. + */ + getNumberPattern(onsuccess: GetNumberPatternSuccessCallback,onerror: ErrorCallback,options: NumberPatternOptions): void + /** + Indicates whether or not daylight savings time is in effect +for a given date using the client's time zone and calendar. + */ + isDayLightSavingsTime(date: Date,onsuccess: DSTSuccessCallback,onerror: ErrorCallback): void + /** + Returns a number formatted as a string +according to the client's user preferences. + */ + numberToString(number: double,onsuccess: StringSuccessCallback,onerror: ErrorCallback,options: NumberPatternOptions): void + /** + Parses a date formatted as a DOMString according to the client's +user preferences and calendar using the time zone of the client. +Returns the corresponding date object. + */ + stringToDate(dateString: DOMString,onsuccess: GlobalizationDateSuccessCallback,onerror: ErrorCallback,options: DateOptions): void + /** + Parses a number formatted as a string according to the client's +user preferences and returns the corresponding number. + */ + stringToNumber(numberString: DOMString,onsuccess: DoubleSuccessCallback,onerror: ErrorCallback,options: NumberPatternOptions): void +} + +interface DSTSuccessCallback { + /** + Called when a function returns the DST data successfully. + */ + onsuccess(properties: object): void +} + +interface StringSuccessCallback { + /** + Called when a function returns the properties object with data successfully. + */ + onsuccess(properties: object): void +} + +interface ArrayStringSuccessCallback { + /** + Called when a function returns the array of DOMString values successfully. + */ + onsuccess(properties: object): void +} + +interface LongSuccessCallback { + /** + Called when a function returns a numeric (long) data successfully. + */ + onsuccess(properties: object): void +} + +interface DoubleSuccessCallback { + /** + Called when a function returns a numeric (double) data successfully. + */ + onsuccess(properties: object): void +} + +interface GlobalizationDateSuccessCallback { + /** + Called when a function returns a GlobalizationDate object successfully. + */ + onsuccess(date: Date): void +} + +interface PatternSuccessCallback { + /** + Called when a function returns the currency pattern information successfully. + */ + onsuccess(pattern: CurrencyPattern): void +} + +interface GetDatePatternSuccessCallback { + /** + Called when a function returns the date pattern information successfully. + */ + onsuccess(pattern: DatePattern): void +} + +interface GetNumberPatternSuccessCallback { + /** + Called when a function returns the number pattern information successfully. + */ + onsuccess(pattern: NumberPattern): void +} + +interface GlobalizationError { + /** + One of the following codes representing the error type. + */ + code: long; + /** + A text message that includes the error's explanation and/or details. + */ + message: DOMString; +} + +interface ErrorCallback { + /** + Success + */ + onerror(error: DOMException): void +} + +interface Media { + /** + A URI containing the audio content. + */ + src: DOMString; + /** + The callback that executes after a Media object has completed the current play, record, or stop action. + */ + successCallback: SuccessCallback; + /** + The callback that executes if an error occurs. + */ + errorCallback: MediaErrorCallback; + /** + The callback that executes to indicate status changes. + */ + statusCallback: StatusChangeCallback; + /** + Returns the current position within an audio file in seconds. + */ + getCurrentPosition(positionSuccessCallback: PositionSuccessCallback,errorCallback: MediaErrorCallback): void + /** + Returns the duration of an audio file in seconds. If the duration is unknown, it returns a value of -1. + */ + getDuration(): void + /** + Pauses playing an audio file. + */ + pause(): void + /** + Starts or resumes playing an audio file. + */ + play(): void + /** + Releases the underlying operating system's audio resources. +Applications should call the release function for any Media resource that is no longer needed. + */ + release(): void + /** + Sets the current position within an audio file. + */ + seekTo(position: double): void + /** + Set the volume for an audio file. + */ + setVolume(volume: double): void + /** + Starts recording an audio file. + */ + startRecord(): void + /** + Stops recording an audio file. + */ + stopRecord(): void + /** + Stops playing an audio file. + */ + stop(): void +} + +interface MediaError { + /** + One of the predefined error codes listed above. + */ + code: short; +} + +interface MediaErrorCallback { + /** + Success + */ + onerror(error: MediaError): void +} + +interface StatusChangeCallback { + /** + Called when the status of the object has been changed. + */ + onchanged(status: short): void +} + +interface PositionSuccessCallback { + /** + Called when getting current position of the media file is retrieved successfully. + */ + onsuccess(position: double): void +} + +interface NetworkInformationManagerObject { + /** */ + connection: NetworkInformationManager; +} + +interface NetworkInformationManager { + /** + Returns the current connection type. The value returned is one of the following strings, case-sensitively: unknown, ethernet, wifi, 2g, 3g, 4g, none. + */ + type: DOMString; +} + +interface Connection { + /** + The value returned is "unknown". + */ + UNKNOWN: DOMString; + /** + The value returned is "ethernet". + */ + ETHERNET: DOMString; + /** + The value returned is "wifi". + */ + WIFI: DOMString; + /** + The value returned is "2g". + */ + CELL_2G: DOMString; + /** + The value returned is "3g". + */ + CELL_3G: DOMString; + /** + The value returned is "4g". + */ + CELL_4G: DOMString; + /** + The value returned is "cellular". + */ + CELL: DOMString; + /** + The value returned is "none". + */ + NONE: DOMString; +} + +interface OnlineEventCallback { + /** + Called when an application goes online. + */ + online(): void +} + +interface OfflineEventCallback { + /** + Called when an application goes offline. + */ + offline(): void +} + +interface DataControlManagerObject { + /** + Object representing a data control manager. + */ + datacontrol: DataControlManager; +} + +interface DataControlManager { + /** + Gets with a given DataType. + */ + getDataControlConsumer(providerId: DOMString,dataId: DOMString,type: DataType): DataControlConsumerObject +} + +interface DataControlConsumerObject { + /** + An attribute to store the DataType. + */ + type: DataType; + /** + An attribute to hold a provider identifier of the application with whom it shares the DataControl. +This attribute should be known to users who want to interact with the application. + */ + providerId: DOMString; + /** + The dataId identifies specific data, usually a database table to process(insert, delete, update). +The string consists of one or more components, separated by a slash("/"). + */ + dataId: DOMString; + /** + Adds a listener to receive notifications about provider data changes. + */ + addChangeListener(dataChangeCallback: DataControlChangeCallback,errorCallback: ErrorCallback): void + /** + Removes data change listener. + */ + removeChangeListener(watchId: long): void +} + +interface SQLDataControlConsumer { + /** + Inserts new rows into a table owned by an SQL-type data control provider. + */ + insert(reqId: number,insertionData: RowData,successCallback: DataControlInsertSuccessCallback,errorCallback: DataControlErrorCallback): void + /** + Updates values of a table owned by an SQL-type data control provider. + */ + update(reqId: number,updateData: RowData,where: DOMString,successCallback: DataControlSuccessCallback,errorCallback: DataControlErrorCallback): void + /** + Delete rows from a table that is owned by an SQL-type data control provider. + */ + remove(reqId: number,where: DOMString,successCallback: DataControlSuccessCallback,errorCallback: DataControlErrorCallback): void + /** + Selects the specified columns to be queried. The result set of the specified columns is retrieved from a table owned by an SQL-type data control provider. + */ + select(reqId: number,columns: DOMString[],where: DOMString,successCallback: DataControlSelectSuccessCallback,errorCallback: DataControlErrorCallback,page: number,maxNumberPerPage: number,order: DOMString): void +} + +interface MappedDataControlConsumer { + /** + Adds the value associated with the specified key to a key-values map owned by a MAP-type data control provider. + */ + addValue(reqId: number,key: DOMString,value: DOMString,successCallback: DataControlSuccessCallback,errorCallback: DataControlErrorCallback): void + /** + Removes the value associated with the specified key from a key-values map owned by a MAP-type data control provider. + */ + removeValue(reqId: number,key: DOMString,value: DOMString,successCallback: DataControlSuccessCallback,errorCallback: DataControlErrorCallback): void + /** + Gets the value associated with the specified key, from a key-values map owned by a MAP-type data control provider. + */ + getValue(reqId: number,key: DOMString,successCallback: DataControlGetValueSuccessCallback,errorCallback: DataControlErrorCallback): void + /** + Sets the value associated with the specified key to a new value. + */ + updateValue(reqId: number,key: DOMString,oldValue: DOMString,newValue: DOMString,successCallback: DataControlSuccessCallback,errorCallback: DataControlErrorCallback): void +} + +interface DataControlSuccessCallback { + /** + Called on success. + */ + onsuccess(reqId: number): void +} + +interface DataControlErrorCallback { + /** + Called on error. + */ + onerror(reqId: number,error: WebAPIError): void +} + +interface DataControlInsertSuccessCallback { + /** + Called on success. + */ + onsuccess(reqId: number,insertRowId: long): void +} + +interface DataControlSelectSuccessCallback { + /** + Called on success. + */ + onsuccess(rows: RowData[],reqId: number): void +} + +interface DataControlGetValueSuccessCallback { + /** + Called on success. + */ + onsuccess(values: DOMString[],reqid: number): void +} + +interface DataControlChangeCallback { + /** + Called when the data is modified. + */ + onsuccess(type: EventType,data: RowData): void +} + +interface DataSynchronizationManagerObject { + /** + Object representing a data synchronization manager. + */ + datasync: DataSynchronizationManager; +} + +interface SyncInfo { + /** + An attribute to store the URL of the sync server. + */ + url: DOMString; + /** + An attribute to store the login ID for the sync server. + */ + id: DOMString; + /** + An attribute to store the login password to the sync server. + */ + password: DOMString; + /** + An attribute to store the sync mode. + */ + mode: SyncMode; + /** + An attribute to store the sync type. + */ + type: SyncType; + /** + An attribute to store the sync interval. + */ + interval: SyncInterval; +} + +interface SyncServiceInfo { + /** + An attribute to enable or disable a service category for sync. + */ + enable: boolean; + /** + An attribute to indicate the sync service type. + */ + serviceType: SyncServiceType; + /** + An attribute to store the sync service DB URI of the server. + */ + serverDatabaseUri: DOMString; + /** + An attribute to store the sync service DB access ID to the server. + */ + id: DOMString; + /** + An attribute to store the sync service DB access password to the server. + */ + password: DOMString; +} + +interface SyncProfileInfo { + /** + An attribute to store the unique identifier provided by the platform for a profile that has been successfully added. + */ + profileId: SyncProfileId; + /** + An attribute to store the profile name. + */ + profileName: DOMString; + /** + An attribute to store sync info. + */ + syncInfo: SyncInfo; + /** + An attribute to indicate service info. + */ + serviceInfo: SyncServiceInfo[]; +} + +interface SyncStatistics { + /** + An attribute to store the last sync status for a corresponding service category. + */ + syncStatus: SyncStatus; + /** + An attribute to indicate the sync service type. + */ + serviceType: SyncServiceType; + /** + An attribute to store the last sync time. + */ + lastSyncTime: Date; + /** + An attribute to indicate the total number of items sent from the server to the client. + */ + serverToClientTotal: number; + /** + An attribute to indicate the number of added items from the server to the client. + */ + serverToClientAdded: number; + /** + An attribute to indicate the number of updated items from the server to the client. + */ + serverToClientUpdated: number; + /** + An attribute to indicate the number of removed items from the server to the client. + */ + serverToClientRemoved: number; + /** + An attribute to indicate the total number of items from the client to the server. + */ + clientToServerTotal: number; + /** + An attribute to indicate the number of added items from the client to the server. + */ + clientToServerAdded: number; + /** + An attribute to indicate the number of updated items from the client to the server. + */ + clientToServerUpdated: number; + /** + An attribute to indicate the number of removed items from the client to the server. + */ + clientToServerRemoved: number; +} + +interface DataSynchronizationManager { + /** + Adds a sync profile. + */ + add(profile: SyncProfileInfo): void + /** + Updates an existing sync profile. + */ + update(profile: SyncProfileInfo): void + /** + Removes an existing sync profile. + */ + remove(profileId: SyncProfileId): void + /** + Gets the maximum number of supported sync profiles on a platform. +Normally the platform sets a limitation on the number of supported profiles. It returns or a negative value if no limitation is set. + */ + getMaxProfilesNum(): void + /** + Gets the current number of sync profiles on a device. + */ + getProfilesNum(): void + /** + Gets the object from a given profile ID. + */ + get(profileId: SyncProfileId): SyncProfileInfo + /** + Gets the information of all sync profiles saved in a device. + */ + getAll(): void + /** + Starts a sync operation with a given profile ID. + */ + startSync(profileId: SyncProfileId,progressCallback: SyncProgressCallback): void + /** + Stops an ongoing sync operation that is specified by the parameter. + */ + stopSync(profileId: SyncProfileId): void + /** + Gets the sync statistics of a given profile ID. + */ + getLastSyncStatistics(profileId: SyncProfileId): void +} + +interface SyncProgressCallback { + /** + Called when a synchronization operation is started and progress is made. + */ + onprogress(profileId: SyncProfileId,serviceType: SyncServiceType,isFromServer: boolean,totalPerService: number,syncedPerService: number): void + /** + Called when the sync operation has completed. + */ + oncompleted(profileId: SyncProfileId): void + /** + Called when the sync operation is stopped by the user. + */ + onstopped(profileId: SyncProfileId): void + /** + Called when the sync operation fails. + */ + onfailed(profileId: SyncProfileId,error: WebAPIError): void +} + +interface DownloadManagerObject { + /** + Object representing a download manager. + */ + download: DownloadManager; +} + +interface DownloadRequest { + /** + An attribute to store the URL of the object to download. + */ + url: DOMString; + /** + An attribute to store the folder path of the destination folder to which a requested file object will be downloaded. + */ + destination: DOMString; + /** + An attribute to store the file name for the specified URL. + */ + fileName: DOMString; + /** + An attribute to store the allowed network type. + */ + networkType: DownloadNetworkType; + /** + An attribute to store extra HTTP header fields. + */ + httpHeader: DownloadHTTPHeaderFields; +} + +interface DownloadManager { + /** + Starts a download operation with the specified URL information. + */ + start(downloadRequest: DownloadRequest,downloadCallback: DownloadCallback): void + /** + Cancels an ongoing download operation that is specified by the parameter. +The abandoned download operation cannot be canceled and trying to do so will result in InvalidValuesError exception. + */ + cancel(downloadId: long): void + /** + Pauses an ongoing download operation that is specified by the parameter. +The paused download operation can be resumed later by the method. + */ + pause(downloadId: long): void + /** + Abandons a download operation that is specified by the parameter. +The abandoned download operation cannot be resumed later with the method. +Trying to resume this download operation will result in exception. +Calling the method or the method with this will also result in exception. +All resources needed by download operation are freed. + */ + abandon(downloadId: long): void + /** + Resumes a paused download operation that is specified by the parameter. + */ + resume(downloadId: long): void + /** + Gets the download state of an operation synchronously with the specified ID. + */ + getState(downloadId: long): DownloadState + /** + Gets the DownloadRequest object from a given ID. + */ + getDownloadRequest(downloadId: long): DownloadRequest + /** + Gets the MIME type of the downloaded file. + */ + getMIMEType(downloadId: long): void + /** + Sets the download callback to the download operation of the given ID. +It's possible to change or register the listener of the download operation using the saved ID. + */ + setListener(downloadId: long,downloadCallback: DownloadCallback): void +} + +interface DownloadCallback { + /** + Called when a download is successful and it is called multiple times as the download progresses. +The interval between the callback is platform-dependent. When the download is started, the can be . + */ + onprogress(downloadId: long,receivedSize: number,totalSize: number): void + /** + Called when the download operation is paused by the method. + */ + onpaused(downloadId: long): void + /** + Called when the download operation is canceled by the method. + */ + oncanceled(downloadId: long): void + /** + Called when the download operation is completed with the final full path or virtual path. +If the same file name already exists in the destination, it is changed according to the platform policy and delivered in this callback. + */ + oncompleted(downloadId: long,path: DOMString): void + /** + Called when the download operation fails. + */ + onfailed(downloadId: long,error: WebAPIError): void +} + +interface ExifManagerObject { + /** + Object representing a exif manager. + */ + exif: ExifManager; +} + +interface ExifManager { + /** + Gets the object to manipulate the Exif data in a JPEG file. + */ + getExifInfo(uri: DOMString,successCallback: ExifInformationSuccessCallback,errorCallback: ErrorCallback): void + /** + Saves the Exif data of the object into the JPEG file. + */ + saveExifInfo(exifInfo: ExifInformation,successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Gets the thumbnail of the specified JPEG file. If there is no thumbnail in the JPEG file, is returned. + */ + getThumbnail(uri: DOMString,successCallback: ExifThumbnailSuccessCallback,errorCallback: ErrorCallback): void +} + +interface ExifInformation { + /** + URI of the image. + */ + uri: DOMString; + /** + Width of the image i.e. the number of points (pixels) per image line. + */ + width: number; + /** + Height of the image i.e. the number of lines in the image. + */ + height: number; + /** + Name of the camera manufacturer. + */ + deviceMaker: DOMString; + /** + Model name or model number of the camera or input device. + */ + deviceModel: DOMString; + /** + Date and time when the picture was taken. + */ + originalTime: Date; + /** + Orientation of the image when displayed. + */ + orientation: ImageContentOrientation; + /** + The f-number when the image was taken. + */ + fNumber: double; + /** + Photo sensitivity (also called ISO speed and ISO latitude) of the camera or input device. + */ + isoSpeedRatings: number[]; + /** + Exposure time, given in seconds. + */ + exposureTime: DOMString; + /** + Exposure balance program used by the camera to set exposure when the picture was taken. + */ + exposureProgram: ExposureProgram; + /** + Boolean value that indicates whether flash was fired when the picture was taken (true: flash fired). + */ + flash: boolean; + /** + Focal length of the lens, given in mm. + */ + focalLength: double; + /** + White balance mode set when the picture was taken. + */ + whiteBalance: WhiteBalanceMode; + /** + Latitude and longitude of the camera (from GPS) when the picture was taken. + */ + gpsLocation: SimpleCoordinates; + /** + Altitude (from GPS) of the camera when the picture was taken. + */ + gpsAltitude: double; + /** + Name of the method used for finding the location. + */ + gpsProcessingMethod: DOMString; + /** + Date and time information relative to UTC (Universal Time Coordinated) provided by GPS when the photo was taken. + */ + gpsTime: TZDate; + /** + User comment. + */ + userComment: DOMString; +} + +interface ExifInformationSuccessCallback { + /** + Called when the Exif information object has been successfully retrieved. + */ + onsuccess(exifInfo: ExifInformation): void +} + +interface ExifThumbnailSuccessCallback { + /** + Called when the thumbnail of the JPEG file has been successfully retrieved. + */ + onsuccess(uri: DOMString): void +} + +interface FeedbackManagerObject { + /** + Object representing a feedback manager. + */ + feedback: FeedbackManager; +} + +interface FeedbackManager { + /** + Plays various types of reactions that are predefined. + */ + play(pattern: FeedbackPattern,type: FeedbackType): void + /** + Stops various of vibration patterns. + */ + stop(): void + /** + Checks if a pattern is supported. + */ + isPatternSupported(pattern: FeedbackPattern,type: FeedbackType): void +} + +interface FileSystemManagerObject { + /** + Object representing a filesystem. + */ + filesystem: FileSystemManager; +} + +interface FileSystemManager { + /** + The maximum file or directory name length for the current platform. + */ + maxNameLength: long; + /** + The maximum path length limit for the current platform. + */ + maxPathLength: long; + /** + Opens a file or creates a file pointed by . + */ + openFile(path: Path,openMode: FileMode,makeParents: boolean): FileHandle + /** + Creates directory pointed by . + */ + createDirectory(path: Path,makeParents: boolean,successCallback: PathSuccessCallback,errorCallback: ErrorCallback): void + /** + Deletes file pointed by . + */ + deleteFile(path: Path,successCallback: PathSuccessCallback,errorCallback: ErrorCallback): void + /** + Deletes directory or directory tree under the current directory pointed by . + */ + deleteDirectory(path: Path,recursive: boolean,successCallback: PathSuccessCallback,errorCallback: ErrorCallback): void + /** + Copies file from location pointed by to . + */ + copyFile(sourcePath: Path,destinationPath: Path,overwrite: boolean,successCallback: PathSuccessCallback,errorCallback: ErrorCallback): void + /** + Recursively copies directory pointed by to . + */ + copyDirectory(sourcePath: Path,destinationPath: Path,overwrite: boolean,successCallback: PathSuccessCallback,errorCallback: ErrorCallback): void + /** + Moves file pointed by to . + */ + moveFile(sourcePath: Path,destinationPath: Path,overwrite: boolean,successCallback: PathSuccessCallback,errorCallback: ErrorCallback): void + /** + Recursively moves directory pointed by to . + */ + moveDirectory(sourcePath: Path,destinationPath: Path,overwrite: boolean,successCallback: PathSuccessCallback,errorCallback: ErrorCallback): void + /** + Renames file or directory located in to name . + */ + rename(path: Path,newName: DOMString,successCallback: PathSuccessCallback,errorCallback: ErrorCallback): void + /** + Lists directory content located in . + */ + listDirectory(path: Path,successCallback: ListDirectorySuccessCallback,errorCallback: ErrorCallback,filter: FileFilter): void + /** + Converts to file URI. + */ + toURI(path: Path): void + /** + Checks if given points to a file. + */ + isFile(path: Path): void + /** + Checks if given points to a directory. + */ + isDirectory(path: Path): void + /** + Checks if given exists. + */ + pathExists(path: Path): void + /** + Returns path to directory for given . + */ + getDirName(path: DOMString): void + /** + Resolves a location to a file handle after validating it. */ + resolve(location: DOMString,onsuccess: FileSuccessCallback,onerror: ErrorCallback,mode: FileMode): void + /** + Gets information about a storage based on its label.For example: "MyThumbDrive", "InternalFlash". + */ + getStorage(label: DOMString,onsuccess: FileSystemStorageSuccessCallback,onerror: ErrorCallback): void + /** + Lists the available storages (both internal and external) on a device. +The onsuccess method receives a list of the data structures as input argument containing additional information about each drive found. +It can get storages that would have a label named as "internal0", virtual roots (images, documents, ...), "removable1", "removable2". +"removable1" label is used to resolve sdcard and "removable2" label is used to resolve USB host, if supported. +The vfat filesystem used to sdcard filesystem widely is not case-sensitive. +If you want to handle the file on sdcard, you need to consider case-sensitive filenames are regarded as same name. + */ + listStorages(onsuccess: FileSystemStorageArraySuccessCallback,onerror: ErrorCallback): void + /** + Adds a listener to subscribe to notifications when a change in storage state occurs. + */ + addStorageStateChangeListener(onsuccess: FileSystemStorageSuccessCallback,onerror: ErrorCallback): void + /** + Removes a listener to unsubscribe from a storage watch operation. + */ + removeStorageStateChangeListener(watchId: long): void +} + +interface FileSystemStorage { + /** + The storage name. + */ + label: DOMString; + /** + The storage type as internal or external. + */ + type: FileSystemStorageType; + /** + The storage state as mounted or not. + */ + state: FileSystemStorageState; +} + +interface FileHandle { + /** + Path, as passed to . + */ + path: Path; + /** + Sets position indicator in file stream to . + */ + seek(offset: long long,whence: BaseSeekPosition): void + /** + Sets position indicator in file stream to . + */ + seekNonBlocking(offset: long long,onsuccess: SeekSuccessCallback,onerror: ErrorCallback,whence: BaseSeekPosition): void + /** + Reads file content as string. + */ + readString(count: long long,inputEncoding: DOMString): void + /** + Reads file content as string. + */ + readStringNonBlocking(onsuccess: ReadStringSuccessCallback,onerror: ErrorCallback,count: long long,inputEncoding: DOMString): void + /** + Writes content to a file. + */ + writeString(inputString: DOMString,outputEncoding: DOMString): void + /** + Writes content to a file. + */ + writeStringNonBlocking(inputString: DOMString,onsuccess: WriteStringSuccessCallback,onerror: ErrorCallback,outputEncoding: DOMString): void + /** + Reads file content as . + */ + readBlob(size: long long): Blob + /** + Reads file content as . + */ + readBlobNonBlocking(onsuccess: ReadBlobSuccessCallback,onerror: ErrorCallback,size: long long): void + /** + Writes to file. + */ + writeBlob(blob: Blob): void + /** + Writes to file. + */ + writeBlobNonBlocking(blob: Blob,onsuccess: SuccessCallback,onerror: ErrorCallback): void + /** + Reads file content as binary data. + */ + readData(size: long long): Uint8Array + /** + Reads file content as binary data. + */ + readDataNonBlocking(onsuccess: ReadDataSuccessCallback,onerror: ErrorCallback,size: long long): void + /** + Writes binary data to file. + */ + writeData(data: Uint8Array): void + /** + Writes binary data to file. + */ + writeDataNonBlocking(data: Uint8Array,onsuccess: SuccessCallback,onerror: ErrorCallback): void + /** + Flushes data. + */ + flush(): void + /** + Flushes data. + */ + flushNonBlocking(onsuccess: SuccessCallback,onerror: ErrorCallback): void + /** + Synchronizes data to storage device. + */ + sync(): void + /** + Synchronizes data to storage device. + */ + syncNonBlocking(onsuccess: SuccessCallback,onerror: ErrorCallback): void + /** + Closes file handle. + */ + close(): void + /** + Closes file handle. + */ + closeNonBlocking(onsuccess: SuccessCallback,onerror: ErrorCallback): void +} + +interface File { + /** + The parent directory handle. + */ + parent: File; + /** + The file/directory access state in the filesystem. + */ + readOnly: boolean; + /** + The flag indicating whether it is a file. + */ + isFile: boolean; + /** + The flag indicating whether it is a directory. + */ + isDirectory: boolean; + /** + The timestamp when a file is first created in the filesystem. + */ + created: Date; + /** + The timestamp when the most recent modification is made to a file, usually when the last write operation succeeds. + */ + modified: Date; + /** + The path of a file after excluding its file name. + */ + path: DOMString; + /** + The file name after excluding the root name and any path components. + */ + name: DOMString; + /** + The full path of a file. + */ + fullPath: DOMString; + /** + The size of this file, in bytes. + */ + fileSize: number; + /** + The number of files and directories contained in a file handle. + */ + length: long; + /** + Returns a URI for a file to identify an entry (such as using it as the src attribute on an HTML img element). +The URI has no specific expiration, it should be valid at least as long as the file exists. + */ + toURI(): void + /** + Lists all files in a directory. + */ + listFiles(onsuccess: FileArraySuccessCallback,onerror: ErrorCallback,filter: FileFilter): void + /** + Opens the file in the given mode supporting a specified encoding. + */ + openStream(mode: FileMode,onsuccess: FileStreamSuccessCallback,onerror: ErrorCallback,encoding: DOMString): void + /** + Reads the content of a file as a DOMString. + */ + readAsText(onsuccess: FileStringSuccessCallback,onerror: ErrorCallback,encoding: DOMString): void + /** + Copies (and overwrites if possible and specified) a file or a +directory from a specified location to another specified location. + */ + copyTo(originFilePath: DOMString,destinationFilePath: DOMString,overwrite: boolean,onsuccess: SuccessCallback,onerror: ErrorCallback): void + /** + Moves (and overwrites if possible and specified) a file or a directory from a specified location to another. +This operation is different from instantiating copyTo() and then deleting the original file, as on certain platforms, this operation does not require extra disk space. + */ + moveTo(originFilePath: DOMString,destinationFilePath: DOMString,overwrite: boolean,onsuccess: SuccessCallback,onerror: ErrorCallback): void + /** + Creates a new directory. + */ + createDirectory(dirPath: DOMString): File + /** + Creates a empty new file in a specified location that is relative to the directory indicated by current object's attribute. + */ + createFile(relativeFilePath: DOMString): File + /** + Resolves an existing file or directory relative to the current directory this operation is performed on and returns a file handle for it. + */ + resolve(filePath: DOMString): File + /** + Deletes a specified directory and directory tree if specified. + */ + deleteDirectory(directoryPath: DOMString,recursive: boolean,onsuccess: SuccessCallback,onerror: ErrorCallback): void + /** + Deletes a specified file.This function attempts to asynchronously delete a file under the current directory. + */ + deleteFile(filePath: DOMString,onsuccess: SuccessCallback,onerror: ErrorCallback): void +} + +interface FileStream { + /** + The flag indicating whether the current file pointer is at the end of the file. + */ + eof: boolean; + /** + The flag indicating the stream position for reads/writes. + */ + position: long; + /** + The number of bytes that are available for reading from the stream. + */ + bytesAvailable: long; + /** + Closes this FileStream. + */ + close(): void + /** + Reads the specified number of characters from the position of the file pointer in a FileStream and returns the characters as a string. +The resulting string length might be shorter than if EOF is . + */ + read(charCount: long): void + /** + Reads the specified number of bytes from a FileStream. + */ + readBytes(byteCount: long): void + /** + Reads the specified number of bytes from this FileStream, encoding the result in base64. + */ + readBase64(byteCount: long): void + /** + Writes the specified DOMString to a FileStream. + */ + write(stringData: DOMString): void + /** + Writes the specified bytes to this FileStream. + */ + writeBytes(byteData: octet[]): void + /** + Writes the result to this FileStream after converting the specified base64 DOMString to bytes. + */ + writeBase64(base64Data: DOMString): void +} + +interface FileSuccessCallback { + /** + Called when the asynchronous call completes successfully. + */ + onsuccess(file: File): void +} + +interface FileSystemStorageArraySuccessCallback { + /** + Called when the asynchronous call completes successfully. + */ + onsuccess(storages: FileSystemStorage[]): void +} + +interface FileSystemStorageSuccessCallback { + /** + Called when the asynchronous call completes successfully. + */ + onsuccess(storage: FileSystemStorage): void +} + +interface PathSuccessCallback { + /** + Called when the asynchronous call completes successfully. + */ + onsuccess(path: Path): void +} + +interface SeekSuccessCallback { + /** + Called when the asynchronous call completes successfully. + */ + onsuccess(position: long long): void +} + +interface ReadStringSuccessCallback { + /** + Called when the asynchronous call completes successfully. + */ + onsuccess(string: DOMString): void +} + +interface WriteStringSuccessCallback { + /** + Called when the asynchronous call completes successfully. + */ + onsuccess(bytesCount: long long): void +} + +interface ReadBlobSuccessCallback { + /** + Called when the asynchronous call completes successfully. + */ + onsuccess(blob: Blob): void +} + +interface ReadDataSuccessCallback { + /** + Called when the asynchronous call completes successfully. + */ + onsuccess(data: Uint8Array): void +} + +interface FileStringSuccessCallback { + /** + Called when the asynchronous call completes successfully. + */ + onsuccess(fileStr: DOMString): void +} + +interface FileStreamSuccessCallback { + /** + Called when the File.openStream asynchronous call completes successfully. + */ + onsuccess(filestream: FileStream): void +} + +interface ListDirectorySuccessCallback { + /** + Called when the asynchronous call completes successfully. + */ + onsuccess(names: DOMString[],path: Path): void +} + +interface FileArraySuccessCallback { + /** + Called when the asynchronous call completes successfully. + */ + onsuccess(files: File[]): void +} + +interface FMRadioObject { + /** + Object representing a exif manager. + */ + fmradio: FMRadioManager; +} + +interface FMRadioManager { + /** + Current frequency(MHz) of the radio. + */ + frequency: double; + /** + Maximum frequency(MHz) available on the radio device. + */ + frequencyUpperBound: double; + /** + Minimum frequency(MHz) available on the radio device. + */ + frequencyLowerBound: double; + /** + Strength of the radio signal ranging between and (dBm). + */ + signalStrength: long; + /** + State of the radio. + */ + state: RadioState; + /** + Indicates if the FM Radio antenna is connected. + */ + isAntennaConnected: boolean; + /** + Mute state of the radio. If the value is , there is no sound from the radio (muted). If the values is , sound is playing. The default value is . + */ + mute: boolean; + /** + Starts playing the radio. This method is available in the or state. After , the radio state is . + */ + start(frequency: double): void + /** + Stops playing the radio. This method is only available in the state. After the radio stops, the state is . + */ + stop(): void + /** + Finds a radio channel at a higher frequency than the current one while the radio is playing, asynchronously. + */ + seekUp(successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Finds a radio channel at a lower frequency than the current one while the radio is playing, asynchronously. + */ + seekDown(successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Starts scanning all radio channels, asynchronously. + */ + scanStart(radioScanCallback: FMRadioScanCallback,errorCallback: ErrorCallback): void + /** + Stops scanning radio channels, asynchronously. +This method is only available in the state. After the scan stops, the radio state is . + */ + scanStop(successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Sets a listener to receive a notification when the radio is interrupted. + */ + setFMRadioInterruptedListener(interruptCallback: FMRadioInterruptCallback): void + /** + Unsets the listener to stop receiving a notification when the radio is interrupted. + */ + unsetFMRadioInterruptedListener(): void + /** + Sets the listener which is called when the status of antenna has been changed. + */ + setAntennaChangeListener(changeCallback: AntennaChangeCallback): void + /** + Unsets the listener set with the method. + */ + unsetAntennaChangeListener(): void +} + +interface FMRadioScanCallback { + /** + Called when a new radio channel is discovered in the process of scanning. + */ + onfrequencyfound(frequency: double): void + /** + Called when the scan is complete. + */ + onfinished(frequencies: double[]): void +} + +interface FMRadioInterruptCallback { + /** + Called when the FM radio is interrupted. + */ + oninterrupted(reason: RadioInterruptReason): void + /** + Called when the cause of the interrupt ends. + */ + oninterruptfinished(): void +} + +interface AntennaChangeCallback { + /** + Called when the antenna is connected or disconnected which causes value of attribute to change. + */ + onchanged(isAntennaConnected: boolean): void +} + +interface HumanActivityMonitorManagerObject { + /** + Object representing a exif manager. + */ + humanactivitymonitor: HumanActivityMonitorManager; +} + +interface HumanActivityMonitorManager { + /** + Gets the current human activity data for certain human activity types. + */ + getHumanActivityData(type: HumanActivityType,successCallback: HumanActivityMonitorSuccessCallback,errorCallback: ErrorCallback): void + /** + Starts a sensor and registers a change listener to be called when new human activity data for a given human activity type is available. + */ + start(type: HumanActivityType,changedCallback: HumanActivityMonitorSuccessCallback,errorCallback: ErrorCallback,option: HumanActivityMonitorOption): void + /** + Stops the sensor and unregisters a previously registered listener for available human activity data. + */ + stop(type: HumanActivityType): void + /** + Starts the sensor and registers a listener to be called when new accumulative pedometer data is available. + */ + setAccumulativePedometerListener(changeCallback: HumanActivityMonitorSuccessCallback): void + /** + Stops the sensor and unregisters a previously registered listener for the accumulative pedometer data. + */ + unsetAccumulativePedometerListener(): void + /** + Registers a listener that is to be called when the activity is recognized. + */ + addActivityRecognitionListener(type: ActivityRecognitionType,listener: HumanActivityMonitorSuccessCallback,errorCallback: ErrorCallback): void + /** + Unsubscribes from receiving notifications when the activity is recognized. + */ + removeActivityRecognitionListener(listenerId: long,errorCallback: ErrorCallback): void + /** + Starts recording human activity data for a given human activity type. + */ + startRecorder(type: HumanActivityRecorderType,option: HumanActivityRecorderOption): void + /** + Stops recording human activity data for a given human activity type. + */ + stopRecorder(type: HumanActivityRecorderType): void + /** + Reads the recorded human activity data with some query. + */ + readRecorderData(type: HumanActivityRecorderType,query: HumanActivityRecorderQuery,successCallback: HumanActivityReadRecorderSuccessCallback,errorCallback: ErrorCallback): void + /** + Checks if gesture type is supported on a device. + */ + isGestureSupported(type: GestureType): void + /** + Adds a listener to be invoked when given gesture type is detected. + */ + addGestureRecognitionListener(type: GestureType,listener: GestureRecognitionCallback,errorCallback: ErrorCallback,alwaysOn: boolean): void + /** + Removes listener with the given id. + */ + removeGestureRecognitionListener(watchId: long): void + /** + Adds a listener to be invoked when returned value enters into defined range (the range is changed). + */ + addStressMonitorChangeListener(ranges: StressMonitorDataRange[],listener: StressMonitorCallback): void + /** + Removes listener with the given id. + */ + removeStressMonitorChangeListener(watchId: long): void +} + +interface StepDifference { + /** + Count difference between the steps. + */ + stepCountDifference: long; + /** + Timestamp in seconds. + */ + timestamp: long; +} + +interface HumanActivityData { +} + +interface HumanActivityPedometerData { + /** + The current movement type. + */ + stepStatus: PedometerStepStatus; + /** + Current speed in km/h. + */ + speed: double; + /** + Step count per second. + */ + walkingFrequency: double; + /** + Cumulative distance traveled since the last method call in meters. + */ + cumulativeDistance: double; + /** + Cumulative calories burnt since the last method call in kcal. + */ + cumulativeCalorie: double; + /** + Cumulative walking and running step count since the last start() method call. + */ + cumulativeTotalStepCount: double; + /** + Cumulative walking step count since the last method call. + */ + cumulativeWalkStepCount: double; + /** + Cumulative running step count since the last method call. + */ + cumulativeRunStepCount: double; + /** + Accumulative distance traveled since the device boot in meters. + */ + accumulativeDistance: double; + /** + Accumulative calories burnt since the device boot in kcal. + */ + accumulativeCalorie: double; + /** + Accumulative walking and running step count since the device boot. + */ + accumulativeTotalStepCount: double; + /** + Accumulative walking step count since the device boot. + */ + accumulativeWalkStepCount: double; + /** + Accumulative running step count since the device boot. + */ + accumulativeRunStepCount: double; + /** + Array of the StepDifference. + */ + stepCountDifferences: StepDifference[]; +} + +interface HumanActivityAccumulativePedometerData { + /** + Current movement type. + */ + stepStatus: PedometerStepStatus; + /** + Current speed in km/h. + */ + speed: double; + /** + Step count per second. + */ + walkingFrequency: double; + /** + Accumulative distance traveled since the device boot in meters. + */ + accumulativeDistance: double; + /** + Accumulative calories burnt since the device boot in kcal. + */ + accumulativeCalorie: double; + /** + Accumulative walking and running step count since the device boot. + */ + accumulativeTotalStepCount: double; + /** + Accumulative walking step count since the device boot. + */ + accumulativeWalkStepCount: double; + /** + Accumulative running step count since the device boot. + */ + accumulativeRunStepCount: double; + /** + Array of the StepDifference. + */ + stepCountDifferences: StepDifference[]; +} + +interface HumanActivityHRMData { + /** + Heart rate in beats per minute. +When a user takes off the watch device, the heartRate is set to -3. When a user shakes the watch, the heartRate is set to -2. + */ + heartRate: long; + /** + Peak-to-peak interval in millisecond(s). + */ + rRInterval: long; +} + +interface HumanActivityGPSInfo { + /** + An attribute to indicate the user's latitude in degrees. + */ + latitude: double; + /** + An attribute to indicate the user's longitude in degrees. + */ + longitude: double; + /** + An attribute to indicate the user's altitude in meters. + */ + altitude: double; + /** + An attribute to indicate the speed in km/h. + */ + speed: double; + /** + An attribute to indicate the error range of the user's position in meters. + */ + errorRange: long; + /** + An attribute to indicate timestamp in seconds. + */ + timestamp: long; +} + +interface HumanActivityGPSInfoArray { + /** + An attribute to indicate the array of GPS information. + */ + gpsInfo: HumanActivityGPSInfo[]; +} + +interface HumanActivitySleepMonitorData { + /** + The sleep status. + */ + status: SleepStatus; + /** + The time when the sleep status is recognized. Epoch time in milliseconds. + */ + timestamp: long long; +} + +interface HumanActivitySleepDetectorData { + /** + Sleep state (can be UNKNOWN, ASLEEP and AWAKE). + */ + status: SleepStatus; +} + +interface HumanActivityStressMonitorData { + /** + Value returned from . +It's a . + */ + stressScore: long; +} + +interface HumanActivityRecognitionData { + /** + The type of activity. + */ + type: ActivityRecognitionType; + /** + The time when the activity is recognized. Epoch time in seconds. + */ + timestamp: long; + /** + The degree of accuracy. + */ + accuracy: ActivityAccuracy; +} + +interface HumanActivityRecorderData { + /** + Recording start time of the data in this HumanActivityRecorderData object. Epoch time in seconds. + */ + startTime: long; + /** + Recording end time of the data in this HumanActivityRecorderData object. Epoch time in seconds. + */ + endTime: long; +} + +interface HumanActivityRecorderPedometerData { + /** + Distance traveled from to in meters. + */ + distance: double; + /** + Calories burnt from to in kcal. + */ + calorie: double; + /** + Walking and running step count from to . The value is the sum of and . + */ + totalStepCount: double; + /** + Walking step count from to . + */ + walkStepCount: double; + /** + Running step count from to . + */ + runStepCount: double; +} + +interface HumanActivityRecorderHRMData { + /** + Heart rate in beats per minute. + */ + heartRate: long; +} + +interface HumanActivityRecorderSleepMonitorData { + /** + The sleep status. + */ + status: SleepStatus; +} + +interface HumanActivityRecorderPressureData { + /** + Max pressure in hectopascal (hPa). + */ + max: double; + /** + Min pressure in hectopascal (hPa). + */ + min: double; + /** + Average pressure in hectopascal (hPa). + */ + average: double; +} + +interface GestureData { + /** + Identifier of gesture type. + */ + type: GestureType; + /** + Event type related to the detected gesture. + */ + event: GestureEvent; + /** + Time when gesture was detected. Epoch time in seconds. + */ + timestamp: long; + /** + Tilt degree on X-axis. It is used only for type. For other gesture types it is set to null. + */ + x: double; + /** + Tilt degree on Y-axis. It is used only for type. For other gesture types it is set to null. + */ + y: double; +} + +interface StressMonitorDataRange { + /** + Name of range. Default value is ""; + */ + label: DOMString; + /** + Minimum value of range. Default value is 0. + */ + min: number; + /** + Maximum value of range. If is undefined it means that this value represents infinity. Default value is undefined. + */ + max: number; +} + +interface HumanActivityMonitorSuccessCallback { + /** + Called when there is new human activity data available. + */ + onsuccess(humanactivitydata: HumanActivityData): void +} + +interface HumanActivityReadRecorderSuccessCallback { + /** + Called when recorded human activity data is successfully read. + */ + onsuccess(humanactivitydata: HumanActivityRecorderData[]): void +} + +interface GestureRecognitionCallback { + /** + Called when a gesture is detected. + */ + onsuccess(data: GestureData): void +} + +interface StressMonitorCallback { + /** + Called when value returned from is within registered range. + */ + onsuccess(label: DOMString): void +} + +interface InputDeviceManagerObject { + /** + Object representing a input device manager. + */ + inputdevice: InputDeviceManager; +} + +interface InputDeviceKey { + /** + The name of the key, for example or . + */ + name: InputDeviceKeyName; + /** + The numeric code of the key, like or . + */ + code: long; +} + +interface InputDeviceManager { + /** + Retrieves the list of keys can be registered with the method. + */ + getSupportedKeys(): void + /** + Returns information about the key which has the given name. + */ + getKey(keyName: InputDeviceKeyName): InputDeviceKey + /** + Registers an input device key to receive DOM keyboard event when it is pressed or released + */ + registerKey(keyName: InputDeviceKeyName): void + /** + Unregisters an input device key + */ + unregisterKey(keyName: InputDeviceKeyName): void + /** + Registers a batch of input device keys to receive DOM keyboard event when any of them is pressed or released + */ + registerKeyBatch(keyNames: InputDeviceKeyName[],successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Unregisters a batch of input device keys + */ + unregisterKeyBatch(keyNames: InputDeviceKeyName[],successCallback: SuccessCallback,errorCallback: ErrorCallback): void +} + +interface IotconObject { + /** + Object representing a exif manager. + */ + iotcon: Iotcon; +} + +interface Iotcon { + /** + The device name of this application. + */ + deviceName: DOMString; + /** + Connects to the iotcon service. Call this function to start Iotcon. + */ + initialize(filePath: DOMString): void + /** + Returns object of singleton, which provides methods for working with remote resources. + */ + getClient(): Client + /** + Returns the object, which provides methods for managing resources on current device. + */ + getServer(): Server + /** + Returns the number of seconds set as the timeout threshold of asynchronous API. + */ + getTimeout(): void + /** + Sets the timeout value, in seconds, of asynchronous APIs. + */ + setTimeout(timeout: long): void + /** + Adds a listener to receive generated random pin from provisioning tool. + */ + addGeneratedPinListener(successCallback: GeneratedPinCallback): void + /** + Unregisters the listener and stops receiving generated random pin. + */ + removeGeneratedPinListener(watchId: long): void +} + +interface Client { + /** + Finds resources using host address and resource type. + */ + findResource(hostAddress: DOMString,query: Query,connectivityType: ConnectivityType,successCallback: FoundResourceSuccessCallback,errorCallback: ErrorCallback): void + /** + Adds a listener to receive a presence events from the server. +A server sends presence events when starts or stops presence. + */ + addPresenceEventListener(hostAddress: DOMString,resourceType: ResourceType,connectivityType: ConnectivityType,successCallback: PresenceEventCallback): void + /** + Unregisters a presence event listener. + */ + removePresenceEventListener(watchId: long): void + /** + Gets the device information of remote server. + */ + findDeviceInfo(hostAddress: DOMString,query: Query,connectivityType: ConnectivityType,successCallback: FoundDeviceInfoSuccessCallback,errorCallback: ErrorCallback): void + /** + Gets the platform information of remote server. + */ + findPlatformInfo(hostAddress: DOMString,query: Query,connectivityType: ConnectivityType,successCallback: FoundPlatformInfoSuccessCallback,errorCallback: ErrorCallback): void +} + +interface Server { + /** + Returns an array of resources which are registered on the server. + */ + getResources(): void + /** + Creates a resource and registers the resource on server. + */ + createResource(uriPath: DOMString,resourceTypes: ResourceType[],resourceInterfaces: ResourceInterface[],listener: RequestCallback,policy: ResourcePolicy): Resource + /** + Removes the resource and unregisters it from server. + */ + removeResource(resource: Resource): void + /** + Starts sending presence event of server. Server can send presence event to client when become online for the first time or come back from offline to online. + */ + startPresence(timeToLive: number): void + /** + Stops sending presence announcement of a server. + */ + stopPresence(): void +} + +interface RemoteResource { + /** + The resource URI. + */ + uriPath: DOMString; + /** + It is connectivity type. + */ + connectivityType: ConnectivityType; + /** + The host address + */ + hostAddress: DOMString; + /** + A list of types in this resource + */ + resourceTypes: ResourceType[]; + /** + A list of interfaces in the resource. + */ + resourceInterfaces: ResourceInterface[]; + /** + Indicates if the resource is observable or not + */ + isObservable: boolean; + /** + Indicates if the resource is discoverable or not + */ + isDiscoverable: boolean; + /** + Indicates if the resource is initialized and activated or not + */ + isActive: boolean; + /** + Indicates if the resource takes some delay to respond or not + */ + isSlow: boolean; + /** + Indicates if the resource is secure or not + */ + isSecure: boolean; + /** + Indicates if the resource is allowed to be discovered only if discovery request contains an explicit query string or not + */ + isExplicitDiscoverable: boolean; + /** + The device unique id. this is unique per-server independent on how it was discovered. + */ + deviceId: DOMString; + /** + The device name of the remote resource. + */ + deviceName: DOMString; + /** + The option for managing vendor specific option of COAP packet. + */ + options: IotconOption[]; + /** + The cached representation of remote resource. + */ + cachedRepresentation: Representation; + /** + The time interval in seconds for monitoring state (registered with setResourceStateChangeListener() ) and caching (registered with startCaching() ). Provided value must be in range from 1 to 3600 inclusive. The default value is seconds. + */ + timeInterval: long; + /** + Gets the attributes of a resource. + */ + methodGet(responseCallback: RemoteResourceResponseCallback,query: Query,errorCallback: ErrorCallback): void + /** + Puts the representation of a resource for update. + */ + methodPut(representation: Representation,responseCallback: RemoteResourceResponseCallback,query: Query,errorCallback: ErrorCallback): void + /** + Posts the representation of a resource for create. + */ + methodPost(representation: Representation,responseCallback: RemoteResourceResponseCallback,query: Query,errorCallback: ErrorCallback): void + /** + Deletes the remote resource. + */ + methodDelete(responseCallback: RemoteResourceResponseCallback,errorCallback: ErrorCallback): void + /** + Sets the listener to receive notification about attribute change of remote resource. When server sends notification message, successCallback will be called. + */ + startObserving(observePolicy: ObservePolicy,successCallback: RemoteResourceResponseCallback,query: Query): void + /** + Unregisters the listener. so stop receiving notification about attribute change of remote resource. + */ + stopObserving(): void + /** + Starts caching of a remote resource. cached representation is updated when remote resource is changed. + */ + startCaching(updatedCallback: CacheUpdatedCallback): void + /** + Stops caching of a remote resource. + */ + stopCaching(): void + /** + Sets a listener to monitor the state of the remote resource. + */ + setResourceStateChangeListener(successCallback: ResourceStateChangeCallback): void + /** + Unsets the listener to stop monitoring the state of the remote resource. + */ + unsetResourceStateChangeListener(): void +} + +interface Resource { + /** + The resource URI. + */ + uriPath: DOMString; + /** + A list of types in this resource. + */ + resourceTypes: ResourceType[]; + /** + A list of interfaces in the resource. + */ + resourceInterfaces: ResourceInterface[]; + /** + Indicates if the resource is observable or not + */ + isObservable: boolean; + /** + Indicates if the resource is discoverable or not + */ + isDiscoverable: boolean; + /** + Indicates if the resource is initialized and activated or not + */ + isActive: boolean; + /** + Indicates if the resource takes some delay to respond or not + */ + isSlow: boolean; + /** + Indicates if the resource is secure or not + */ + isSecure: boolean; + /** + Indicates if the resource is allowed to be discovered only if discovery request contains an explicit query string or not + */ + isExplicitDiscoverable: boolean; + /** + A list of children of this resource. + */ + resources: Resource[]; + /** + A list of observation IDs of this resource. + */ + observerIds: long[]; + /** + A lists of attributes of this resource. + */ + attributes: object; + /** + Notifies specific clients that resource's attributes have been changed. + */ + notify(qosLevel: QosLevel,observerIds: long[]): void + /** + Adds resource type to this resource. + */ + addResourceTypes(types: ResourceType[]): void + /** + Adds resource interface to this resource. + */ + addResourceInterface(interface: ResourceInterface): void + /** + Adds child resource into the parent resource. + */ + addChildResource(resource: Resource): void + /** + Removes child resource from the parent resource. + */ + removeChildResource(resource: Resource): void + /** + Sets the listener for request from client. + */ + setRequestListener(listener: RequestCallback): void + /** + Remove the listener. + */ + unsetRequestListener(): void +} + +interface Representation { + /** + The resource URI. + */ + uriPath: DOMString; + /** + A list of types in this resource + */ + resourceTypes: ResourceType[]; + /** + A list of interfaces in the resource. + */ + resourceInterfaces: ResourceInterface[]; + /** + A lists of attribute in this resource. + */ + attributes: object; + /** + Representations belonging to this representation. + */ + children: Representation[]; +} + +interface PresenceResponse { + /** + The host address of the presence. + */ + hostAddress: DOMString; + /** + The connectivity type of the presence. + */ + connectivityType: ConnectivityType; + /** + The resource type of the presence. + */ + resourceType: ResourceType; + /** + The results type of presence. + */ + resultType: PresenceResponseResultType; + /** + The trigger type of presence. It is set only if a response result type is "OK". + */ + triggerType: PresenceTriggerType; +} + +interface IotconOption { + /** + The ID of the option. id is always situated between 2048 and 3000. + */ + id: number; + /** + The string data to add. Length of data is less than or equal to 15. + */ + data: DOMString; +} + +interface Request { + /** + The address of host of the request. + */ + hostAddress: DOMString; + /** + Connectivity type of connection. + */ + connectivityType: ConnectivityType; + /** + The request representation. + */ + representation: Representation; + /** + The option which was sent from client. + */ + options: IotconOption[]; + /** + The query parameters from the request. + */ + query: Query; +} + +interface Response { + /** + The request, that server responded. + */ + request: Request; + /** + The result indicates the detailed information about the result of the response to request. + */ + result: ResponseResult; + /** + The representation indicates the information of the resource. + */ + representation: Representation; + /** + The options indicates the vendor specific options of COAP packet. + */ + options: IotconOption[]; + /** + Sends the response. + */ + send(): void +} + +interface RemoteResponse { + /** + The result indicates the detailed information about the result of the response to request. + */ + result: ResponseResult; + /** + The representation indicates the information of the resource. + */ + representation: Representation; + /** + The options indicates the vendor specific options of COAP packet. + */ + options: IotconOption[]; +} + +interface DeviceInfo { + /** + The device name + */ + deviceName: DOMString; + /** + The version of core specification. + */ + specVersion: DOMString; + /** + The unique identifier for OIC device. + */ + oicDeviceId: DOMString; + /** + The version of specification which the device's data model is implemented + */ + dataModelVersion: DOMString; +} + +interface PlatformInfo { + /** + The platform identifier + */ + platformId: DOMString; + /** + The name of manufacturer. + */ + manufacturerName: DOMString; + /** + The URL of manufacturer. + */ + manufacturerUrl: DOMString; + /** + The model number is designated by manufacturer. + */ + modelNumber: DOMString; + /** + The manufacture date of device. + */ + manufactureDate: DOMString; + /** + The platform version is defined by manufacturer. + */ + platformVersion: DOMString; + /** + The operating system version. + */ + operatingSystemVersion: DOMString; + /** + The hardware version. + */ + hardwareVersion: DOMString; + /** + The firmware version. + */ + firmwareVersion: DOMString; + /** + The URL that points to support information from manufacturer. + */ + supportUrl: DOMString; + /** + The System time. + */ + systemTime: DOMString; +} + +interface RequestCallback { + /** + Called when GET request was received. + */ + onget(request: Request): void + /** + Called when PUT request was received. + */ + onput(request: Request): void + /** + Called when POST request was received. + */ + onpost(request: Request): void + /** + Called when DELETE request was received. + */ + ondelete(request: Request): void + /** + Called when OBSERVE request was received. + */ + onobserving(request: Request,observeType: ObserveType,observeId: number): void +} + +interface FoundResourceSuccessCallback { + /** + Called when request was received. + */ + onfound(remoteResource: RemoteResource): void +} + +interface PresenceEventCallback { + /** + Called when client receive presence events. + */ + onreceived(presenceResponse: PresenceResponse): void +} + +interface FoundDeviceInfoSuccessCallback { + /** + Called when the device information is received. + */ + onsuccess(info: DeviceInfo): void +} + +interface FoundPlatformInfoSuccessCallback { + /** + Called when the platform information is received. + */ + onsuccess(info: PlatformInfo): void +} + +interface RemoteResourceResponseCallback { + /** + Called when the response is received. + */ + onsuccess(response: RemoteResponse): void +} + +interface ResourceStateChangeCallback { + /** + Called when connection change appeared. + */ + onchanged(isAlive: boolean): void +} + +interface CacheUpdatedCallback { + /** + Called when caching is successfully started. + */ + onupdated(representation: Representation): void +} + +interface GeneratedPinCallback { + /** + Called when random pin is successfully generated. + */ + onsuccess(pin: DOMString): void +} + +interface KeyManagerObject { + /** + Object representing a key manager. + */ + keymanager: KeyManager; +} + +interface KeyManager { + /** + Saves and stores data as a inside the KeyManager. + */ + saveData(name: DOMString,rawData: RawData,password: DOMString,successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Removes data from the KeyManager. + */ + removeData(dataAlias: KeyManagerAlias): void + /** + Gets raw data from the KeyManager. + */ + getData(dataAlias: KeyManagerAlias,password: DOMString): RawData + /** + Gets all the aliases which an application can access. + */ + getDataAliasList(): void + /** + Sets permissions that another application has for accessing an application's data. + */ + setPermission(dataAlias: KeyManagerAlias,packageId: PackageId,permissionType: PermissionType,successCallback: SuccessCallback,errorCallback: ErrorCallback): void +} + +interface MediaControllerObject { + /** + Object representing a media controller manager. + */ + mediacontroller: MediaControllerManager; +} + +interface MediaControllerManager { + /** + Gets the client object. If not exist, client will be automatically created. + */ + getClient(): MediaControllerClient + /** + Creates the Server object which holds playback state, meta data +and is controlled by Client. + */ + createServer(): MediaControllerServer +} + +interface MediaControllerServer { + /** + Current playback info. + */ + playbackInfo: MediaControllerPlaybackInfo; + /** + Current playback info. + */ + playback: MediaControllerServerPlaybackInfo; + /** + Object representing features related to playlists of a media controller server. + */ + playlists: MediaControllerPlaylists; + /** + Server icon URI. + */ + iconURI: DOMString; + /** + Abilities of the media controller server. + */ + abilities: MediaControllerAbilities; + /** + Object representing features related to subtitles control of a media controller server. + */ + subtitles: MediaControllerSubtitles; + /** + Object representing features related to spherical (360°) mode control of a media controller server. + */ + mode360: MediaControllerMode360; + /** + Object representing features related to display mode control of a media controller server. + */ + displayMode: MediaControllerDisplayMode; + /** + Object representing features related to display rotation control of a media controller server. + */ + displayRotation: MediaControllerDisplayRotation; + /** + Returns all existing clients info. + */ + getAllClientsInfo(): void + /** + Updates playback state and send notification to the listening clients. +See to check +how to receive playback info changes from server on client side. + */ + updatePlaybackState(state: MediaControllerPlaybackState): void + /** + Updates server icon URI. + */ + updateIconURI(iconURI: DOMString): void + /** + Updates playback position and send notification to the listening clients. + */ + updatePlaybackPosition(position: number): void + /** + Sets content age rating for current playback item. + */ + updatePlaybackAgeRating(rating: MediaControllerContentAgeRating): void + /** + Sets content type for the current playback item. + */ + updatePlaybackContentType(type: MediaControllerContentType): void + /** + Updates shuffle mode and send notification to the listening clients. + */ + updateShuffleMode(mode: boolean): void + /** + Updates repeat mode and send notification to the listening clients. + */ + updateRepeatMode(mode: boolean): void + /** + Updates repeat state and sends notification to the listening clients. + */ + updateRepeatState(state: MediaControllerRepeatState): void + /** + Updates metadata and send notification to the listening clients. + */ + updateMetadata(metadata: MediaControllerMetadata): void + /** + Adds the listener for a media playback info requests from client. +See to check how to send playback info change +requests from client. + */ + addChangeRequestPlaybackInfoListener(listener: MediaControllerChangeRequestPlaybackInfoCallback): void + /** + Removes the listener, so stop receiving playback state requests from clients. + */ + removeChangeRequestPlaybackInfoListener(watchId: long): void + /** + Sets the listener for receiving search requests from a client. + */ + setSearchRequestListener(listener: MediaControllerSearchRequestCallback): void + /** + Unsets search request listener. + */ + unsetSearchRequestListener(): void + /** + Adds the listener for receiving custom commands from client. +See to check how to from client. + */ + addCommandListener(listener: MediaControllerReceiveCommandCallback): void + /** + Removes the listener, so stop receiving custom commands from clients. + */ + removeCommandListener(watchId: long): void + /** + Creates object. + */ + createPlaylist(name: DOMString): MediaControllerPlaylist + /** + Saves the playlist in a local database. + */ + savePlaylist(playlist: MediaControllerPlaylist,successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Deletes playlist from local database. + */ + deletePlaylist(playlistName: DOMString,successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Sets index and playlist name properties of playback info object. + */ + updatePlaybackItem(playlistName: DOMString,index: DOMString): void + /** + Retrieves all playlists from a local database. + */ + getAllPlaylists(successCallback: MediaControllerGetAllPlaylistsSuccessCallback,errorCallback: ErrorCallback): void +} + +interface MediaControllerClient { + /** + Retrieves all activated media controller servers. + */ + findServers(successCallback: MediaControllerServerInfoArraySuccessCallback,errorCallback: ErrorCallback): void + /** + Gets the latest activated media controller server info. + */ + getLatestServerInfo(): MediaControllerServerInfo + /** + Adds a listener to be invoked when ability of the media controller server is changed. + */ + addAbilityChangeListener(listener: MediaControllerAbilityChangeCallback): void + /** + Removes selected . + */ + removeAbilityChangeListener(watchId: long): void + /** + Retrieves all subscribed media controller servers. + */ + findSubscribedServers(successCallback: MediaControllerServerInfoArraySuccessCallback,errorCallback: ErrorCallback): void + /** + Sets the media controller client's listener for custom events from the server. + */ + setCustomEventListener(listener: MediaControllerReceiveCommandCallback): void + /** + Removes the server's events listener. + */ + unsetCustomEventListener(): void +} + +interface MediaControllerServerInfo { + /** + The appId of the media controller server. + */ + name: ApplicationId; + /** + State of the media controller server. + */ + state: MediaControllerServerState; + /** + Current playback info. + */ + playbackInfo: MediaControllerPlaybackInfo; + /** + Playback info of current server info. + */ + playback: MediaControllerServerInfoPlaybackInfo; + /** + An attribute providing access to the playlist information from the server. + */ + playlists: MediaControllerPlaylistsInfo; + /** + Server icon URI. + */ + iconURI: DOMString; + /** + Abilities of the media controller server. + */ + abilities: MediaControllerAbilitiesInfo; + /** + Object representing features related to subtitles control of a media controller server. + */ + subtitles: MediaControllerSubtitlesInfo; + /** + Object representing features related to spherical (360°) mode control of a media controller server. + */ + mode360: MediaControllerMode360Info; + /** + Object representing features related to display mode control of a media controller server. + */ + displayMode: MediaControllerDisplayModeInfo; + /** + Object representing features related to display rotation control of a media controller server. + */ + displayRotation: MediaControllerDisplayRotationInfo; + /** + Allows to change playback state of media controller server. + */ + sendPlaybackState(state: MediaControllerPlaybackState,successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Allows to change playback position of media controller server. + */ + sendPlaybackPosition(position: number,successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Allows to change shuffle mode of media controller server. + */ + sendShuffleMode(mode: boolean,successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Allows to change repeat mode of media controller server. + */ + sendRepeatMode(mode: boolean,successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Allows to change repeat state of media controller server. + */ + sendRepeatState(state: MediaControllerRepeatState,successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Sends a search request to the media controller server. + */ + sendSearchRequest(request: SearchFilter[],replyCallback: MediaControllerSearchRequestReplyCallback,errorCallback: ErrorCallback): void + /** + Allows to send custom command to media controller server. + */ + sendCommand(command: DOMString,data: Bundle,successCallback: MediaControllerSendCommandSuccessCallback,errorCallback: ErrorCallback): void + /** + Adds the listener for a media controller server status change. + */ + addServerStatusChangeListener(listener: MediaControllerServerStatusChangeCallback): void + /** + Removes the listener, so stop receiving notifications about media controller server status. + */ + removeServerStatusChangeListener(watchId: long): void + /** + Adds the listener for a media playback info changes. + */ + addPlaybackInfoChangeListener(listener: MediaControllerPlaybackInfoChangeCallback): void + /** + Removes the listener, so stop receiving notifications about media playback info changes. + */ + removePlaybackInfoChangeListener(watchId: long): void + /** + Retrieves all playlists saved in local database. + */ + getAllPlaylists(successCallback: MediaControllerGetAllPlaylistsSuccessCallback,errorCallback: ErrorCallback): void + /** + Requests setting new playback item to server. + */ + sendPlaybackItem(playlistName: DOMString,index: DOMString,state: MediaControllerPlaybackState,position: number): void + /** + Adds listener to be invoked when playlist is updated by server. + */ + addPlaylistUpdatedListener(listener: MediaControllerPlaylistUpdatedCallback): void + /** + Stops listening for playlist updates and removals. + */ + removePlaylistUpdatedListener(listenerId: long): void +} + +interface MediaControllerPlaybackInfo { + /** + Current playback state. + */ + state: MediaControllerPlaybackState; + /** + Current playback position. + */ + position: number; + /** + Current playback age rating. + */ + ageRating: MediaControllerContentAgeRating; + /** + Current playback content type. + */ + contentType: MediaControllerContentType; + /** + Current shuffle mode. + */ + shuffleMode: boolean; + /** + Current repeat mode. + */ + repeatMode: boolean; + /** + Current repeat state. + */ + repeatState: MediaControllerRepeatState; + /** + Current playback metadata. + */ + metadata: MediaControllerMetadata; + /** + Current item index. + */ + index: DOMString; + /** + Current playlist name. + */ + playlistName: DOMString; +} + +interface MediaControllerServerPlaybackInfo { + /** + Current playback state. + */ + state: MediaControllerPlaybackState; + /** + Current playback position. + */ + position: number; + /** + Current playback age rating. + */ + ageRating: MediaControllerContentAgeRating; + /** + Current playback content type. + */ + contentType: MediaControllerContentType; + /** + Current shuffle mode. + */ + shuffleMode: boolean; + /** + Current repeat state. + */ + repeatState: MediaControllerRepeatState; + /** + Current playback metadata. + */ + metadata: MediaControllerMetadata; + /** + Current item index. + */ + index: DOMString; + /** + Current playlist name. + */ + playlistName: DOMString; + /** + Sets index and playlist name properties of playback info object. + */ + updatePlaybackItem(playlistName: DOMString,index: DOMString): void + /** + Adds the listener for change requests of a media controller playback info. + */ + addChangeRequestListener(listener: MediaControllerChangeRequestPlaybackInfoCallback): void + /** + Removes the listener and stops receiving change requests of media controller playback info. + */ + removeChangeRequestListener(watchId: long): void +} + +interface MediaControllerServerInfoPlaybackInfo { + /** + Current playback state. + */ + state: MediaControllerPlaybackState; + /** + Current playback position. + */ + position: number; + /** + Current playback age rating. + */ + ageRating: MediaControllerContentAgeRating; + /** + Current playback content type. + */ + contentType: MediaControllerContentType; + /** + Current shuffle mode. + */ + shuffleMode: boolean; + /** + Current repeat state. + */ + repeatState: MediaControllerRepeatState; + /** + Current playback metadata. + */ + metadata: MediaControllerMetadata; + /** + Current item index. Value set to means no playlist set in playback + */ + index: DOMString; + /** + Current playlist name. Value set to means no playlist set in playback + */ + playlistName: DOMString; + /** + Sends request to change the playback state of a media controller server. + */ + sendPlaybackAction(action: MediaControllerPlaybackAction,replyCallback: MediaControllerSendCommandSuccessCallback): void + /** + Sends request to change the playback position of a media controller server. + */ + sendPlaybackPosition(position: number,replyCallback: MediaControllerSendCommandSuccessCallback): void + /** + Sends request to change the shuffle mode of a media controller server. + */ + sendShuffleMode(mode: boolean,replyCallback: MediaControllerSendCommandSuccessCallback): void + /** + Sends request to change the repeat state of a media controller server. + */ + sendRepeatState(state: MediaControllerRepeatState,replyCallback: MediaControllerSendCommandSuccessCallback): void + /** + Adds the listener for a media playback info changes. + */ + addPlaybackInfoChangeListener(listener: MediaControllerPlaybackInfoChangeCallback): void + /** + Removes the listener, so stop receiving notifications about media playback info changes. + */ + removePlaybackInfoChangeListener(watchId: long): void +} + +interface MediaControllerPlaylists { + /** + Creates object. + */ + createPlaylist(name: DOMString): MediaControllerPlaylist + /** + Saves the playlist in a local database. + */ + savePlaylist(playlist: MediaControllerPlaylist,successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Deletes the playlist from a local database. + */ + deletePlaylist(playlistName: DOMString,successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Retrieves all playlists from a local database. + */ + getAllPlaylists(successCallback: MediaControllerGetAllPlaylistsSuccessCallback,errorCallback: ErrorCallback): void + /** + Returns the playlist with the given name. + */ + getPlaylist(playlistName: DOMString): MediaControllerPlaylist +} + +interface MediaControllerPlaylistsInfo { + /** + Retrieves all playlists saved in local database. + */ + getAllPlaylists(successCallback: MediaControllerGetAllPlaylistsSuccessCallback,errorCallback: ErrorCallback): void + /** + Asks the server to set a new playback item. + */ + sendPlaybackItem(playlistName: DOMString,index: DOMString,action: MediaControllerPlaybackAction,position: number,replyCallback: MediaControllerSendCommandSuccessCallback): void + /** + Adds listener to be invoked when playlist is updated by server. + */ + addPlaylistUpdatedListener(listener: MediaControllerPlaylistUpdatedCallback): void + /** + Stops listening for playlist updates. + */ + removePlaylistUpdatedListener(listenerId: long): void + /** + Returns the playlist with the given name. + */ + getPlaylist(playlistName: DOMString): MediaControllerPlaylist +} + +interface MediaControllerAbilities { + /** + Represents abilities of server's playback actions. + */ + playback: MediaControllerPlaybackAbilities; + /** + Represents abilities of server's display modes. + */ + displayMode: MediaControllerDisplayModeAbilities; + /** + Represents display orientations supported by the media controller server. + */ + displayRotation: MediaControllerDisplayRotationAbilities; + /** + Represents server's ability to change playback position. + */ + playbackPosition: MediaControllerAbilitySupport; + /** + Represents server's ability to change shuffle mode. + */ + shuffle: MediaControllerAbilitySupport; + /** + Represents server's ability to change repeat state. + */ + repeat: MediaControllerAbilitySupport; + /** + Represents server's ability to add/change/remove playlists. + */ + playlist: MediaControllerAbilitySupport; + /** + Represents server's ability to receive custom commands from the media controller client. + */ + clientCustom: MediaControllerAbilitySupport; + /** + Represents server's ability to receive search requests from the media controller client. + */ + search: MediaControllerAbilitySupport; + /** + Represents server's ability to receive requests for subtitles mode change from the media controller client. + */ + subtitles: MediaControllerAbilitySupport; + /** + Represents server's ability to receive requests for spherical (360°) mode change from the media controller client. + */ + mode360: MediaControllerAbilitySupport; +} + +interface MediaControllerPlaybackAbilities { + /** + Represents server's ability to perform action. + */ + play: MediaControllerAbilitySupport; + /** + Represents server's ability to perform action. + */ + pause: MediaControllerAbilitySupport; + /** + Represents server's ability to perform action. + */ + stop: MediaControllerAbilitySupport; + /** + Represents server's ability to perform action. + */ + next: MediaControllerAbilitySupport; + /** + Represents server's ability to perform action. + */ + prev: MediaControllerAbilitySupport; + /** + Represents server's ability to perform action. + */ + forward: MediaControllerAbilitySupport; + /** + Represents server's ability to perform action. + */ + rewind: MediaControllerAbilitySupport; + /** + Represents server's ability to perform action. + */ + togglePlayPause: MediaControllerAbilitySupport; + /** + Saves the current state of playback abilities to the database. + */ + saveAbilities(): void +} + +interface MediaControllerDisplayModeAbilities { + /** + Represents server's ability to set mode. + */ + letterBox: MediaControllerAbilitySupport; + /** + Represents server's ability to set mode. + */ + originSize: MediaControllerAbilitySupport; + /** + Represents server's ability to set mode. + */ + fullScreen: MediaControllerAbilitySupport; + /** + Represents server's ability to set mode. + */ + croppedFull: MediaControllerAbilitySupport; +} + +interface MediaControllerDisplayRotationAbilities { + /** + Represents the server's ability to set 0° display orientation. + */ + rotationNone: MediaControllerAbilitySupport; + /** + Represents the server's ability to set 90° display orientation. + */ + rotation90: MediaControllerAbilitySupport; + /** + Represents the server's ability to set 180° display orientation. + */ + rotation180: MediaControllerAbilitySupport; + /** + Represents the server's ability to set 270° display orientation. + */ + rotation270: MediaControllerAbilitySupport; +} + +interface MediaControllerAbilitiesInfo { + /** + Represents abilities of server's playback actions. + */ + playback: MediaControllerPlaybackAbilitiesInfo; + /** + Represents abilities of server's display modes. + */ + displayMode: MediaControllerDisplayModeAbilitiesInfo; + /** + Represents server abilities of setting display orientations. + */ + displayRotation: MediaControllerDisplayRotationAbilitiesInfo; + /** + Represents server's ability to change playback position. + */ + playbackPosition: MediaControllerAbilitySupport; + /** + Represents server's ability to change shuffle mode. + */ + shuffle: MediaControllerAbilitySupport; + /** + Represents server's ability to change repeat state. + */ + repeat: MediaControllerAbilitySupport; + /** + Represents server's ability to add/change/remove playlists. + */ + playlist: MediaControllerAbilitySupport; + /** + Represents server's ability to receive custom commands from media controller client. + */ + clientCustom: MediaControllerAbilitySupport; + /** + Represents server's ability to receive search requests from media controller client. + */ + search: MediaControllerAbilitySupport; + /** + Represents server's ability to receive requests for subtitles mode change from media controller client. + */ + subtitles: MediaControllerAbilitySupport; + /** + Represents server's ability to receive requests for spherical (360°) mode change from media controller client. + */ + mode360: MediaControllerAbilitySupport; + /** + Adds a subscription for monitoring status of all abilities of server represented by this object. + */ + subscribe(): void + /** + Removes a subscription for monitoring status of all abilities of server represented by this object. + */ + unsubscribe(): void +} + +interface MediaControllerPlaybackAbilitiesInfo { + /** + Represents server's ability to perform action. + */ + play: MediaControllerAbilitySupport; + /** + Represents server's ability to perform action. + */ + pause: MediaControllerAbilitySupport; + /** + Represents server's ability to perform action. + */ + stop: MediaControllerAbilitySupport; + /** + Represents server's ability to perform action. + */ + next: MediaControllerAbilitySupport; + /** + Represents server's ability to perform action. + */ + prev: MediaControllerAbilitySupport; + /** + Represents server's ability to perform action. + */ + forward: MediaControllerAbilitySupport; + /** + Represents server's ability to perform action. + */ + rewind: MediaControllerAbilitySupport; + /** + Represents server's ability to perform action. + */ + togglePlayPause: MediaControllerAbilitySupport; +} + +interface MediaControllerDisplayModeAbilitiesInfo { + /** + Represents server's ability to set mode. + */ + letterBox: MediaControllerAbilitySupport; + /** + Represents server's ability to set mode. + */ + originSize: MediaControllerAbilitySupport; + /** + Represents server's ability to set mode. + */ + fullScreen: MediaControllerAbilitySupport; + /** + Represents server's ability to set mode. + */ + croppedFull: MediaControllerAbilitySupport; +} + +interface MediaControllerDisplayRotationAbilitiesInfo { + /** + Represents the server's ability to set 0° display orientation. + */ + rotationNone: MediaControllerAbilitySupport; + /** + Represents the server's ability to set 90° display orientation. + */ + rotation90: MediaControllerAbilitySupport; + /** + Represents the server's ability to set 180° display orientation. + */ + rotation180: MediaControllerAbilitySupport; + /** + Represents the server's ability to set 270° display orientation. + */ + rotation270: MediaControllerAbilitySupport; +} + +interface MediaControllerSubtitles { + /** + State of subtitles mode on the server. Default value for a newly created server is . + */ + enabled: boolean; + /** + Adds the listener for change requests of a media controller subtitles mode. + */ + addChangeRequestListener(listener: MediaControllerEnabledChangeRequestCallback): void + /** + Removes the listener and stops receiving change requests of media controller subtitles mode. + */ + removeChangeRequestListener(watchId: long): void +} + +interface MediaControllerSubtitlesInfo { + /** + State of subtitles mode on the server represented by this object. + */ + enabled: boolean; + /** + Allows to send change requests for subtitles mode to media controller server. + */ + sendRequest(enabled: boolean,replyCallback: MediaControllerSendCommandSuccessCallback): void + /** + Adds the listener for changes of a media controller subtitles mode of a media controller server. + */ + addModeChangeListener(listener: MediaControllerEnabledChangeCallback): void + /** + Removes the listener, so stop receiving notifications about media controller server subtitles mode changes. + */ + removeModeChangeListener(watchId: long): void +} + +interface MediaControllerMode360 { + /** + State of spherical (360°) mode on the server. Default value for a newly created server is . + */ + enabled: boolean; + /** + Adds the listener for change requests of a media controller spherical (360°) mode. + */ + addChangeRequestListener(listener: MediaControllerEnabledChangeRequestCallback): void + /** + Removes the listener and stops receiving change requests of media controller spherical (360°) mode. + */ + removeChangeRequestListener(watchId: long): void +} + +interface MediaControllerMode360Info { + /** + State of spherical (360°) mode on the server represented by this object. + */ + enabled: boolean; + /** + Allows to send change requests for spherical (360°) mode to media controller server. + */ + sendRequest(enabled: boolean,replyCallback: MediaControllerSendCommandSuccessCallback): void + /** + Adds the listener for changes of a media controller spherical (360°) mode of a media controller server. + */ + addModeChangeListener(listener: MediaControllerEnabledChangeCallback): void + /** + Removes the listener, so stop receiving notifications about media controller server spherical (360°) mode changes. + */ + removeModeChangeListener(watchId: long): void +} + +interface MediaControllerDisplayMode { + /** + Type of display mode on the server. Default value for a newly created server is . + */ + type: MediaControllerDisplayModeType; + /** + Adds the listener for change requests of the media controller display mode. + */ + addChangeRequestListener(listener: MediaControllerDisplayModeChangeRequestCallback): void + /** + Removes the listener and stops receiving change requests of media controller display mode. + */ + removeChangeRequestListener(watchId: long): void +} + +interface MediaControllerDisplayModeInfo { + /** + Type of display mode on the server represented by this object. + */ + type: MediaControllerDisplayModeType; + /** + Allows to send change requests for display mode to media controller server. + */ + sendRequest(type: MediaControllerDisplayModeType,replyCallback: MediaControllerSendCommandSuccessCallback): void + /** + Adds the listener for changes of a media controller display mode of a media controller server. + */ + addModeChangeListener(listener: MediaControllerDisplayModeChangeCallback): void + /** + Removes the listener, so stop receiving notifications about media controller server display mode changes. + */ + removeModeChangeListener(watchId: long): void +} + +interface MediaControllerDisplayRotation { + /** + State of display rotation on the server. Default value for a newly created server is . + */ + displayRotation: MediaControllerDisplayRotationType; + /** + Adds the listener for change requests of a media controller display rotation. + */ + addChangeRequestListener(listener: MediaControllerDisplayRotationChangeRequestCallback): void + /** + Removes the listener and stops receiving change requests of media controller display rotation. + */ + removeChangeRequestListener(watchId: long): void +} + +interface MediaControllerClientInfo { + /** + Id of the client application. + */ + name: ApplicationId; + /** + Sends an event to the client. + */ + sendEvent(eventName: DOMString,data: Bundle,successCallback: MediaControllerSendCommandSuccessCallback): void +} + +interface MediaControllerDisplayRotationInfo { + /** + State of display rotation on the server represented by this object. + */ + displayRotation: MediaControllerDisplayRotationType; + /** + Allows to send change requests for display rotation change to a media controller server. + */ + sendRequest(displayRotation: MediaControllerDisplayRotationType,replyCallback: MediaControllerSendCommandSuccessCallback): void + /** + Adds the listener for changes of a display rotation of a media controller server. + */ + addDisplayRotationChangeListener(listener: MediaControllerDisplayRotationChangeCallback): void + /** + Removes the listener, so stop receiving notifications about media controller server display rotation changes. + */ + removeDisplayRotationChangeListener(watchId: long): void +} + +interface MediaControllerMetadata { + /** + Media title. + */ + title: DOMString; + /** + Media artist. + */ + artist: DOMString; + /** + Media album. + */ + album: DOMString; + /** + Media author. + */ + author: DOMString; + /** + Media genre. + */ + genre: DOMString; + /** + Media duration. + */ + duration: DOMString; + /** + Media date. + */ + date: DOMString; + /** + Media copyright. + */ + copyright: DOMString; + /** + Media description. + */ + description: DOMString; + /** + Media track number. + */ + trackNum: DOMString; + /** + Media picture. + */ + picture: DOMString; + /** + Season number. Default value is 0. + */ + seasonNumber: long; + /** + Season title. Default value is . + */ + seasonTitle: DOMString; + /** + Episode number. Default value is 0. + */ + episodeNumber: long; + /** + Episode title. Default value is . + */ + episodeTitle: DOMString; + /** + Resolution width. Default value is 0. It cannot be changed to less than 0. Setting inappropriate values has no effect on the attribute. + */ + resolutionWidth: long; + /** + Resolution height. Default value is 0. It cannot be changed to less than 0. Setting inappropriate values has no effect on the attribute. + */ + resolutionHeight: long; + /** + Saves current state of metadata to the database and sends notification to the listening clients. + */ + save(): void +} + +interface MediaControllerPlaylistItem { + /** + Index of playlist's item. Should be unique within playlist. + */ + index: DOMString; + /** + Metadata associated with item. + */ + metadata: MediaControllerMetadata; +} + +interface MediaControllerPlaylist { + /** + Name of this playlist. + */ + name: DOMString; + /** + Adds new item to the playlist. + */ + addItem(index: DOMString,metadata: MediaControllerMetadataInit): void + /** + Gets all items from playlist. + */ + getItems(successCallback: MediaControllerGetItemsSuccessCallback,errorCallback: ErrorCallback): void +} + +interface SearchFilter { + /** + Specifies filter's content type parameter. + */ + contentType: MediaControllerContentType; + /** + Specifies filter's search category parameter. + */ + category: MediaControllerSearchCategory; + /** + Specifies filter's search keyword parameter. + */ + keyword: DOMString; + /** + Additional application-dependent search parameters. + */ + extraData: Bundle; +} + +interface MediaControllerServerInfoArraySuccessCallback { + /** + Called when all registered media controller servers found. + */ + onsuccess(servers: MediaControllerServerInfo[]): void +} + +interface MediaControllerSendCommandSuccessCallback { + /** + Called when a response to the request is received. + */ + onsuccess(data: object,code: long): void +} + +interface RequestReply { + /** + Response data bundle. + */ + data: Bundle; + /** + Response status code. + */ + code: long; +} + +interface MediaControllerSearchRequestReplyCallback { + /** + Function called when search request has been processed. + */ + onreply(reply: RequestReply): void +} + +interface MediaControllerSearchRequestCallback { + /** + Function called on the server when it receives a search request from a client. + */ + onrequest(clientName: ApplicationId,request: SearchFilter[]): RequestReply +} + +interface MediaControllerReceiveCommandCallback { + /** + Called when custom command is received by the server or custom event is received by the client. + */ + onsuccess(senderAppName: ApplicationId,command: DOMString,data: object): RequestReply +} + +interface MediaControllerEnabledChangeRequestCallback { + /** + Called when change request is received from client. + */ + onreply(clientName: ApplicationId,enabled: boolean): RequestReply +} + +interface MediaControllerEnabledChangeCallback { + /** + Called when server's attribute is changed. + */ + onchange(enabled: boolean): void +} + +interface MediaControllerDisplayModeChangeRequestCallback { + /** + Called when change request is received from client. + */ + onreply(clientName: ApplicationId,mode: MediaControllerDisplayModeType): RequestReply +} + +interface MediaControllerDisplayModeChangeCallback { + /** + Called when server's display mode is changed. + */ + onchange(mode: MediaControllerDisplayModeType): void +} + +interface MediaControllerDisplayRotationChangeRequestCallback { + /** + Called when change request is received from a client. + */ + onreply(clientName: ApplicationId,displayRotation: MediaControllerDisplayRotationType): RequestReply +} + +interface MediaControllerDisplayRotationChangeCallback { + /** + Called when display rotation is changed. + */ + onchange(displayRotation: MediaControllerDisplayRotationType): void +} + +interface MediaControllerServerStatusChangeCallback { + /** + Called when server status changed. + */ + onsuccess(status: MediaControllerServerState): void +} + +interface MediaControllerPlaybackInfoChangeCallback { + /** + Called when playback state or position is changed. + */ + onplaybackchanged(state: MediaControllerPlaybackState,position: number): void + /** + Called when shuffle mode is changed. + */ + onshufflemodechanged(mode: boolean): void + /** + Called when repeat mode is changed. + */ + onrepeatmodechanged(mode: boolean): void + /** + Called when repeat state is changed. + */ + onrepeatstatechanged(state: MediaControllerRepeatState): void + /** + Called when playback metadata is changed. + */ + onmetadatachanged(metadata: MediaControllerMetadata): void +} + +interface MediaControllerChangeRequestPlaybackInfoCallback { + /** + Called when client requested playback state changes. + */ + onplaybackstaterequest(state: MediaControllerPlaybackState,clientName: ApplicationId): void + /** + Called when a client requested the playback state changes by sending the playback action. + */ + onplaybackactionrequest(action: MediaControllerPlaybackAction,clientName: ApplicationId): RequestReply + /** + Called when client requested playback position changes. + */ + onplaybackpositionrequest(position: number,clientName: ApplicationId): RequestReply + /** + Called when client requested shuffle mode changes. + */ + onshufflemoderequest(mode: boolean,clientName: ApplicationId): RequestReply + /** + Called when client requested repeat mode changes. + */ + onrepeatmoderequest(mode: boolean,clientName: ApplicationId): void + /** + Called when client requested change of repeat state. + */ + onrepeatstaterequest(state: MediaControllerRepeatState,clientName: ApplicationId): RequestReply + /** + Called when client request change of playback item. + */ + onplaybackitemrequest(playlistName: DOMString,index: DOMString,action: MediaControllerPlaybackAction,position: number,clientName: ApplicationId): RequestReply +} + +interface MediaControllerGetAllPlaylistsSuccessCallback { + /** + Success callback for function. + */ + onsuccess(playlists: MediaControllerPlaylist[]): void +} + +interface MediaControllerPlaylistUpdatedCallback { + /** + Event triggered when playlist is updated in database. + */ + onplaylistupdated(serverName: DOMString,playlist: MediaControllerPlaylist): void + /** + Event triggered when playlist is removed from database. + */ + onplaylistdeleted(serverName: DOMString,playlistName: DOMString): void +} + +interface MediaControllerGetItemsSuccessCallback { + /** + Success callback for function. + */ + onsuccess(items: MediaControllerPlaylistItem[]): void +} + +interface MediaControllerAbilityChangeCallback { + /** + Event triggered when server's playback ability is updated. + */ + onplaybackabilitychanged(server: MediaControllerServerInfo,abilities: MediaControllerPlaybackAbilitiesInfo): void + /** + Event triggered when server's display mode ability is updated. + */ + ondisplaymodeabilitychanged(server: MediaControllerServerInfo,abilities: MediaControllerDisplayModeAbilitiesInfo): void + /** + Event triggered when server's display rotation is updated. + */ + ondisplayrotationabilitychanged(server: MediaControllerServerInfo,abilities: MediaControllerDisplayRotationAbilitiesInfo): void + /** + Event triggered when server's simple ability is updated. + */ + onsimpleabilitychanged(server: MediaControllerServerInfo,type: MediaControllerSimpleAbility,support: MediaControllerAbilitySupport): void +} + +interface MediaKeyManagerObject { + /** + Object representing a media key manager. + */ + mediakey: MediaKeyManager; +} + +interface MediaKeyManager { + /** + Registers a listener to be called when a media key is pressed or released. + */ + setMediaKeyEventListener(callback: MediaKeyEventCallback): void + /** + Unsubscribes from receiving notification for detecting the media key event. + */ + unsetMediaKeyEventListener(): void +} + +interface MediaKeyEventCallback { + /** + Called when a media key has been pressed. + */ + onpressed(type: MediaKeyType): void + /** + Called when a media key has been released. + */ + onreleased(type: MediaKeyType): void +} + +interface MessagePortManagerObject { + /** + Object representing a exif manager. + */ + messageport: MessagePortManager; +} + +interface MessagePortManager { + /** + Requests a LocalMessagePort instance to start receiving message from another application. + */ + requestLocalMessagePort(localMessagePortName: DOMString): LocalMessagePort + /** + Requests a trusted LocalMessagePort instance to receive message from another application. + */ + requestTrustedLocalMessagePort(localMessagePortName: DOMString): LocalMessagePort + /** + Requests a RemoteMessagePort instance to send message to another application. + */ + requestRemoteMessagePort(appId: ApplicationId,remoteMessagePortName: DOMString): RemoteMessagePort + /** + Requests a trusted RemoteMessagePort instance to receive message from another application. + */ + requestTrustedRemoteMessagePort(appId: ApplicationId,remoteMessagePortName: DOMString): RemoteMessagePort +} + +interface LocalMessagePort { + /** + The name of the message port name. + */ + messagePortName: DOMString; + /** + The flag indicating whether the message port is trusted. + */ + isTrusted: boolean; + /** + Adds a message port listener to receive messages from other applications. + */ + addMessagePortListener(listener: MessagePortCallback): void + /** + Removes the message port listener. + */ + removeMessagePortListener(watchId: long): void +} + +interface RemoteMessagePort { + /** + The message port name. + */ + messagePortName: DOMString; + /** + The application ID to connect with. + */ + appId: ApplicationId; + /** + The flag indicating whether the message port is trusted. + */ + isTrusted: boolean; + /** + Sends messages to the specified application. + */ + sendMessage(data: MessagePortDataItem[],localMessagePort: LocalMessagePort): void +} + +interface MessagePortCallback { + /** + Called when data is received from other applications via the specified message port name. + */ + onreceived(data: MessagePortDataItem[],remoteMessagePort: RemoteMessagePort): void +} + +interface MessageManagerObject { + /** + Object representing a messaging manager. + */ + messaging: Messaging; +} + +interface Message { + /** + The message identifier. + */ + id: MessageId; + /** + The identifier of the conversation to which the message belongs. + */ + conversationId: MessageConvId; + /** + The identifier of the folder to which the message belongs. + */ + folderId: MessageFolderId; + /** + The type of a given message. + */ + type: MessageServiceTag; + /** + The timestamp of a message. + */ + timestamp: Date; + /** + The source address (or source phone number) of a message. + */ + from: DOMString; + /** + The destination of a message. + */ + to: DOMString[]; + /** + The carbon copy address of a message. + */ + cc: DOMString[]; + /** + The blind carbon copy (bcc) address of a message. + */ + bcc: DOMString[]; + /** + The body of a message. + */ + body: MessageBody; + /** + The flag indicating the read state for a message. + */ + isRead: boolean; + /** + The flag indicating whether an attachment(s) exists. + */ + hasAttachment: boolean; + /** + The flag indicating the priority of a message. + */ + isHighPriority: boolean; + /** + The subject of a message. + */ + subject: DOMString; + /** + The original message. + */ + inResponseTo: MessageId; + /** + The status of a given message. + */ + messageStatus: DOMString; + /** + The list of the message attachments. + */ + attachments: MessageAttachment[]; +} + +interface MessageBody { + /** + The ID of a parent message. + */ + messageId: MessageId; + /** + The flag indicating whether the message body has been loaded. + */ + loaded: boolean; + /** + The plain text representation of a message body. + */ + plainBody: DOMString; + /** + The HTML representation of a message body. + */ + htmlBody: DOMString; + /** + The list of the inline attachments. + */ + inlineAttachments: MessageAttachment[]; +} + +interface MessageAttachment { + /** + The ID of an attachment. + */ + id: MessageAttachmentId; + /** + The ID of a parent message. + */ + messageId: MessageId; + /** + The attachment MIME type. + */ + mimeType: DOMString; + /** + The location path to a loaded attachment file. + */ + filePath: DOMString; +} + +interface Messaging { + /** + Gets the messaging service of a given type for a given account, or all existing services supporting the given type, if is not given. + */ + getMessageServices(messageServiceType: MessageServiceTag,successCallback: MessageServiceArraySuccessCallback,errorCallback: ErrorCallback): void +} + +interface MessageServiceArraySuccessCallback { + /** + Called when finding message services is successful. + */ + onsuccess(services: MessageService[]): void +} + +interface MessageService { + /** + The unique identifier of this Messaging service. + */ + id: DOMString; + /** + The tag supported by this messaging service. + */ + type: MessageServiceTag; + /** + The messaging service name taken from the messaging service. + */ + name: DOMString; + /** + The for this messaging service. + */ + messageStorage: MessageStorage; + /** + Sends a specified message. + */ + sendMessage(message: Message,successCallback: MessageRecipientsCallback,errorCallback: ErrorCallback,simIndex: long): void + /** + Loads the body for a specified message. + */ + loadMessageBody(message: Message,successCallback: MessageBodySuccessCallback,errorCallback: ErrorCallback): void + /** + Loads a specified message attachment. + */ + loadMessageAttachment(attachment: MessageAttachment,successCallback: MessageAttachmentSuccessCallback,errorCallback: ErrorCallback): void + /** + Synchronizes the service content with an external mail server. + */ + sync(successCallback: SuccessCallback,errorCallback: ErrorCallback,limit: number): void + /** + Synchronizes the folder content with an external mail server. + */ + syncFolder(folder: MessageFolder,successCallback: SuccessCallback,errorCallback: ErrorCallback,limit: number): void + /** + Stops sync() and syncFoler() operation. + */ + stopSync(opId: long): void +} + +interface MessageRecipientsCallback { + /** + Called when the message sending is finished. + */ + onsuccess(recipients: DOMString[]): void +} + +interface MessageBodySuccessCallback { + /** + Called when the asynchronous query completes successfully. + */ + onsuccess(message: Message): void +} + +interface MessageAttachmentSuccessCallback { + /** + Called when the asynchronous query completes successfully. + */ + onsuccess(attachment: MessageAttachment): void +} + +interface MessageStorage { + /** + Adds a draft message to and these messages are stored in the Drafts folder. + */ + addDraftMessage(message: Message,successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Finds messages from . + */ + findMessages(filter: AbstractFilter,successCallback: MessageArraySuccessCallback,errorCallback: ErrorCallback,sort: SortMode,limit: number,offset: number): void + /** + Removes messages from . + */ + removeMessages(messages: Message[],successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Updates messages in . + */ + updateMessages(messages: Message[],successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Finds conversations from . + */ + findConversations(filter: AbstractFilter,successCallback: MessageConversationArraySuccessCallback,errorCallback: ErrorCallback,sort: SortMode,limit: number,offset: number): void + /** + Removes conversations from . + */ + removeConversations(conversations: MessageConversation[],successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Queries folders from MessageStorage. + */ + findFolders(filter: AbstractFilter,successCallback: MessageFolderArraySuccessCallback,errorCallback: ErrorCallback): void + /** + Adds a listener to subscribe to notification for MessageStorage changes. + */ + addMessagesChangeListener(messagesChangeCallback: MessagesChangeCallback,filter: AbstractFilter): void + /** + Adds a listener to subscribe to notifications for MessageConversation changes. + */ + addConversationsChangeListener(conversationsChangeCallback: MessageConversationsChangeCallback,filter: AbstractFilter): void + /** + Adds a listener to subscribe to notifications for MessageFolder changes. + */ + addFoldersChangeListener(foldersChangeCallback: MessageFoldersChangeCallback,filter: AbstractFilter): void + /** + Removes a listener to unsubscribe from receiving message notifications. + */ + removeChangeListener(watchId: long): void +} + +interface MessageArraySuccessCallback { + /** + Called when an asynchronous query completes successfully. + */ + onsuccess(messages: Message[]): void +} + +interface MessageConversationArraySuccessCallback { + /** + Called when an asynchronous query completes successfully. + */ + onsuccess(conversations: MessageConversation[]): void +} + +interface MessageFolderArraySuccessCallback { + /** + Called when an asynchronous query completes successfully. + */ + onsuccess(folders: MessageFolder[]): void +} + +interface MessagesChangeCallback { + /** + Called when messages are added to the MessageStorage. + */ + messagesadded(addedMessages: Message[]): void + /** + Called when messages are updated in MessageStorage. + */ + messagesupdated(updatedMessages: Message[]): void + /** + Called when messages are removed from MessageStorage. + */ + messagesremoved(removedMessages: Message[]): void +} + +interface MessageConversationsChangeCallback { + /** + Called when conversations are added to MessageStorage. + */ + conversationsadded(addedConversations: MessageConversation[]): void + /** + Called when conversations are updated in MessageStorage. + */ + conversationsupdated(updatedConversations: MessageConversation[]): void + /** + Called when conversations are removed from MessageStorage. + */ + conversationsremoved(removedConversations: MessageConversation[]): void +} + +interface MessageFoldersChangeCallback { + /** + Called when folders are added to . + */ + foldersadded(addedFolders: MessageFolder[]): void + /** + Called when folders are updated in . + */ + foldersupdated(updatedFolders: MessageFolder[]): void + /** + Called when folders are removed from . + */ + foldersremoved(removedFolders: MessageFolder[]): void +} + +interface MessageConversation { + /** + The conversation identifier. + */ + id: MessageConvId; + /** + The type of a given conversation. + */ + type: MessageServiceTag; + /** + The timestamp of the latest message in a conversation. + */ + timestamp: Date; + /** + The count of messages in a conversation. + */ + messageCount: number; + /** + The count of unread messages in a conversation. + */ + unreadMessages: number; + /** + A preview of the latest message in a conversation. + */ + preview: DOMString; + /** + The subject of a conversation (applicable for group chats, MMS, email). + */ + subject: DOMString; + /** + The flag indicating whether the latest message in a conversation has been read. + */ + isRead: boolean; + /** + The source address (or source phone number) of the latest message in the conversation. + */ + from: DOMString; + /** + The destination of the latest message in a conversation. + */ + to: DOMString[]; + /** + The carbon copy (cc) address of the latest message in a conversation. + */ + cc: DOMString[]; + /** + The blind carbon copy (bcc) address of the latest message in a conversation. + */ + bcc: DOMString[]; + /** + The identifier of a latest message in a conversation. + */ + lastMessageId: MessageId; +} + +interface MessageFolder { + /** + The folder identifier. +The ID is locally unique and persistent property, assigned by the device or the Web runtime (WRT). + */ + id: MessageFolderId; + /** + The identifier for the parent folder of a specified folder. + */ + parentId: MessageFolderId; + /** + The identifier of the service to which a specified folder belongs. + */ + serviceId: DOMString; + /** + The type of the messages contained within a folder. + */ + contentType: MessageServiceTag; + /** + The visible name of a folder. + */ + name: DOMString; + /** + The whole path of a remote folder on the server. + */ + path: DOMString; + /** + The standard type of a folder. + */ + type: DOMString; + /** + The flag indicating whether this folder should be synchronized. + */ + synchronizable: boolean; +} + +interface MetadataObject { + /** + Object representing a Metadata manager. + */ + metadata: MetadataManager; +} + +interface MetadataManager { + /** + Creates representation of file for metadata operations. + */ + createFileHandle(path: Path): MetadataFileHandle +} + +interface MetadataFileHandle { + /** + for a path passed to . + */ + uri: DOMString; + /** + Extracts a metadata of a given type. + */ + get(type: MetadataType): void + /** + Gets the artwork image included in a media file. + */ + getArtwork(): Blob + /** + Gets the thumbnail frame of a video file. + */ + getThumbnailFrame(): Blob + /** + Gets the frame of a video file for a specified time. + */ + getFrameAtTime(timestamp: number,isAccurate: boolean): Blob + /** + Gets synchronized lyrics saved in multimedia file. + */ + getSyncLyrics(index: number): MetadataSyncLyrics + /** + Releases all resources related to the handle and marks handle as invalid. + */ + release(): void +} + +interface MetadataSyncLyrics { + /** + Time information about lyrics in milliseconds. + */ + timestamp: number; + /** + Lyrics stored as simple text. + */ + lyrics: DOMString; +} + +interface MachineLearningPipeline { + /** + Creates a machine learning pipeline. + */ + createPipeline(description: DOMString,listener: PipelineStateChangeListener): Pipeline + /** + Registers a , which implements a custom transform to the data coming through the pipeline. + */ + registerCustomFilter(filterName: DOMString,filter: CustomFilter,inputInfo: TensorsInfo,outputInfo: TensorsInfo,errorCallback: ErrorCallback): void + /** + Unregisters a pipeline's . + */ + unregisterCustomFilter(filterName: DOMString): void +} + +interface Pipeline { + /** + The current state of the pipeline. + */ + state: PipelineState; + /** + Starts the pipeline. + */ + start(): void + /** + Stops the pipeline. + */ + stop(): void + /** + Releases the resources allocated by the pipeline. + */ + dispose(): void + /** + Gets a object allowing to get and set pipeline node's properties. + */ + getNodeInfo(name: DOMString): NodeInfo + /** + Gets a object that allows input to the pipeline. + */ + getSource(name: DOMString): Source + /** + Gets a object that allows to select a pipeline branch to be used as a source or sink. + */ + getSwitch(name: DOMString): Switch + /** + Gets a object that allows to start and stop streaming data to a branch of a pipeline. + */ + getValve(name: DOMString): Valve + /** + Registers a for a given sink. The listener is used to get output data from a pipeline. + */ + registerSinkListener(sinkName: DOMString,sinkListener: SinkListener): void + /** + Unregisters a sink's . + */ + unregisterSinkListener(sinkName: DOMString): void +} + +interface NodeInfo { + /** + Name of the node. + */ + name: DOMString; + /** + Retrieves the value of node's property. + */ + getProperty(name: DOMString,type: PropertyType): Property + /** + Sets the value of node's property. + */ + setProperty(name: DOMString,type: PropertyType,value: Property): void +} + +interface Source { + /** + The information about the format of tensor input expected by the source. + */ + inputTensorsInfo: TensorsInfo; + /** + Name of the source. + */ + name: DOMString; + /** + Feeds the source with input data. + */ + inputData(data: TensorsData): void +} + +interface Switch { + /** + Determines the switch type. + */ + type: SwitchType; + /** + Name of the switch. + */ + name: DOMString; + /** + Retrieves the list of pad names of the switch. + */ + getPadList(): void + /** + Selects a pad to be used as a source or sink of the switch node. + */ + select(padName: DOMString): void +} + +interface Valve { + /** + Name of the valve. + */ + name: DOMString; + /** + State of the valve. + */ + isOpen: boolean; + /** + Enables or disables the flow of the data through the valve by setting it to open or closed, respectively. + */ + setOpen(open: boolean): void +} + +interface PipelineStateChangeListener { + /** + Called when pipeline state changes. + */ + onstatechange(newState: PipelineState): void +} + +interface SinkListener { + /** + Called when new data arrives to the sink. + */ + ondata(sinkName: DOMString,data: TensorsData): void +} + +interface CustomFilter { + /** + Called when data to be processed arrives to the filter. + */ + filter(input: TensorsData,output: TensorsData): void +} + +interface MachineLearningSingle { + /** + Opens file, loads the neural network model and configures runtime environment with Neural Network Framework and HW information. +Use method to close the opened model. + */ + openModel(modelPath: Path,inTensorsInfo: TensorsInfo,outTensorsInfo: TensorsInfo,fwType: NNFWType,hwType: HWType,isDynamicMode: boolean): SingleShot + /** + Opens file asynchronously, loads the neural network model and configures runtime environment with Neural Network Framework and HW information. +Use method to close opened model. + */ + openModelAsync(modelPath: Path,successCallback: OpenModelSuccessCallback,errorCallback: ErrorCallback,inTensorsInfo: TensorsInfo,outTensorsInfo: TensorsInfo,fwType: NNFWType,hwType: HWType,isDynamicMode: boolean): void +} + +interface SingleShot { + /** + The information (tensor dimension, type, name and so on) of required input data for the given model. + */ + input: TensorsInfo; + /** + The information (tensor dimension, type, name and so on) of output data for the given model. + */ + output: TensorsInfo; + /** + Invokes the model with the given input data. + */ + invoke(inTensorsData: TensorsData): TensorsData + /** + Gets the property value for the given model. + */ + getValue(name: DOMString): void + /** + Sets the property value for the given model. A model/framework may support changing the model information, such as tensor dimension and data layout. +If model does not support changing the information, this method will raise an exception. + */ + setValue(name: DOMString,value: DOMString): void + /** + Sets the maximum amount of time to wait for an output from method, in milliseconds. + */ + setTimeout(timeout: number): void + /** + Closes the model and releases memory. + */ + close(): void +} + +interface OpenModelSuccessCallback { + /** + Called when the model file is opened successfully. + */ + onsuccess(singleShot: SingleShot): void +} + +interface MachineLearningManagerObject { + /** + Object representing a machine learning manager. + */ + ml: MachineLearningManager; +} + +interface MachineLearningManager { + /** + Provides methods for . + */ + single: MachineLearningSingle; + /** + Provides methods for . + */ + pipeline: MachineLearningPipeline; + /** + Checks whether Neural Network Framework with provided configuration is supported. + */ + checkNNFWAvailability(nnfw: NNFWType,hw: HWType): void +} + +interface TensorRawData { + /** + Raw tensor data. Array type inside TensorRawData is deduced by the of the tensor. + */ + data: TypedArray; + /** + Size of returned data in bytes. + */ + size: long; + /** + Shape of raw tensor data - the length (number of elements) of each of the axes of a tensor. +Tensors with rank up to 4 are supported, so length of the shape array will be always 4 and axes not defined by user will be filled with 1. + */ + shape: long[]; +} + +interface TensorsData { + /** + Number of tensors in TensorsData object. + */ + count: number; + /** + Information about tensor. + */ + tensorsInfo: TensorsInfo; + /** + Gets tensor data at a given index. Data location and size can be provided to limit returned buffer, otherwise whole tensor will be returned. + */ + getTensorRawData(index: long,location: long[],size: long[]): TensorRawData + /** + Sets tensor data at a given index. Location and size of modified data can be provided. + */ + setTensorRawData(index: long,buffer: Bytes,location: long[],size: long[]): void + /** + Disposes an object and releases the memory. Object should not be used after calling this method. Using diposed object will trigger . + */ + dispose(): void +} + +interface TensorsInfo { + /** + Number of tensor information already added to object. + */ + count: number; + /** + Add a Tensor information to the TensorsInfo instance. + */ + addTensorInfo(name: DOMString,type: TensorType,dimensions: long[]): void + /** + Clones a TensorsInfo object. + */ + clone(): TensorsInfo + /** + Compares with TensorsInfo and checks whether it has the same contents or not. +One TensorsInfo is equal to another when they both have the same type and dimensions. + */ + equals(other: TensorsInfo): void + /** + Gets the dimensions of the tensor at a given index. + */ + getDimensions(index: long): void + /** + Gets the name of the tensor at a given index. + */ + getTensorName(index: long): void + /** + Creates a TensorsData instance based on information of TensorsInfo. +Each execution of this method creates a new TensorsData object. + */ + getTensorsData(): TensorsData + /** + Calculates the byte size of tensor data. + */ + getTensorSize(index: long): void + /** + Gets the type of the tensor at a given index. + */ + getTensorType(index: long): TensorType + /** + Sets the dimensions of the tensor at a given index. + */ + setDimensions(index: long,dimensions: long[]): void + /** + Sets the name of the tensor at a given index. + */ + setTensorName(index: long,name: DOMString): void + /** + Sets the type of the tensor at a given index. + */ + setTensorType(index: long,type: TensorType): void + /** + Disposes an object and releases the memory. Object should not be used after calling this method. Using diposed object will trigger . + */ + dispose(): void +} + +interface NetworkBearerSelectionObject { + /** + Object representing a network bearer selection. + */ + networkbearerselection: NetworkBearerSelection; +} + +interface NetworkBearerSelection { + /** + Requests a specific network connection. + */ + requestRouteToHost(networkType: NetworkType,domainName: DOMString,successCallback: NetworkSuccessCallback,errorCallback: ErrorCallback): void + /** + Releases a specific network connection. + */ + releaseRouteToHost(networkType: NetworkType,domainName: DOMString,successCallback: SuccessCallback,errorCallback: ErrorCallback): void +} + +interface NetworkSuccessCallback { + /** + Called when a network is connected successfully. + */ + onsuccess(): void + /** + Called when a network is disconnected. + */ + ondisconnected(): void +} + +interface NFCManagerObject { + /** + Object representing a nfc manager. + */ + nfc: NFCManager; +} + +interface NFCManager { + /** + Gets the default NFC adapter of the device. + */ + getDefaultAdapter(): NFCAdapter + /** + Gives priority to the current application for NFC operations. + */ + setExclusiveMode(mode: boolean): void +} + +interface NFCAdapter { + /** + The state of the NFC adapter. + */ + powered: boolean; + /** + Card emulation mode of the NFC adapter. + */ + cardEmulationMode: CardEmulationMode; + /** + Active secure element type. + */ + activeSecureElement: SecureElementType; + /** + Sets the power of an NFC adapter to either an on state or an off state. + */ + setPowered(state: boolean,successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Registers a callback function to invoke when an NFC tag is detected. + */ + setTagListener(detectCallback: NFCTagDetectCallback,tagFilter: NFCTagType[]): void + /** + Registers a callback function to be invoked when an NFC peer-to-peer target is detected. + */ + setPeerListener(detectCallback: NFCPeerDetectCallback): void + /** + Unregisters the listener for detecting an NFC tag. + */ + unsetTagListener(): void + /** + Unregisters the listener for detecting an NFC peer-to-peer target. + */ + unsetPeerListener(): void + /** + Registers a callback function to invoke when the card emulation mode is changed. + */ + addCardEmulationModeChangeListener(changeCallback: CardEmulationModeChangeCallback): void + /** + Unsubscribes from receiving notification of card emulation mode changes. + */ + removeCardEmulationModeChangeListener(watchId: long): void + /** + Registers a callback function to invoke when an external reader tries to access a secure element. +Such an event may indicate initiating a financial transaction using the device. + */ + addTransactionEventListener(type: SecureElementType,eventCallback: TransactionEventCallback): void + /** + Unsubscribes from receiving notification of transaction events. + */ + removeTransactionEventListener(watchId: long): void + /** + Registers a callback function to invoke when an active secure element is changed. + */ + addActiveSecureElementChangeListener(changeCallback: ActiveSecureElementChangeCallback): void + /** + Unsubscribes from receiving notification of active secure element changes. + */ + removeActiveSecureElementChangeListener(watchId: long): void + /** + Gets the NDEF message cached when the tag is detected. + */ + getCachedMessage(): NDEFMessage + /** + Gives priority to the current application for NFC transaction events. + */ + setExclusiveModeForTransaction(mode: boolean): void + /** + Registers a callback function for receiving HCE event. + */ + addHCEEventListener(eventCallback: HCEEventReceiveCallback): void + /** + Unsubscribes from receiving notification of a HCE event. + */ + removeHCEEventListener(watchId: long): void + /** + Sends host APDU response to CLF (Contactless Front-end). + */ + sendHostAPDUResponse(apdu: byte[],successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Allows an application to query whether an application is currently the activated handler for a specific AID and secure element type. + */ + isActivatedHandlerForAID(type: SecureElementType,aid: AID): void + /** + Allows an application to query whether an application is currently the activated handler for a specific card emulation category and secure element type. + */ + isActivatedHandlerForCategory(type: SecureElementType,category: CardEmulationCategoryType): void + /** + Registers an AID for a specific category and secure element type. + */ + registerAID(type: SecureElementType,aid: AID,category: CardEmulationCategoryType): void + /** + Unregisters an AID that was previously registered for a specific card emulation category and secure element type. An application can only remove the AIDs which it registered. + */ + unregisterAID(type: SecureElementType,aid: AID,category: CardEmulationCategoryType): void + /** + Retrieves AIDs that were previously registered for a specific card emulation category and secure element type. An application can only retrieve the AIDs which it registered. + */ + getAIDsForCategory(type: SecureElementType,category: CardEmulationCategoryType,successCallback: AIDArraySuccessCallback,errorCallback: ErrorCallback): void + /** + Sets current application as preferred application for NFC card emulation events as long as it is in foreground. + */ + setPreferredApp(): void + /** + Unsets currently running application as preferred application for NFC card emulation events. + */ + unsetPreferredApp(): void +} + +interface NFCTag { + /** + The type of the NFC tag. + */ + type: NFCTagType; + /** + An attribute to check if the NFC Tag supports the NDEF format. + */ + isSupportedNDEF: boolean; + /** + The size of an NDEF message stored in the tag. + */ + ndefSize: long; + /** + The value is all tag information. + */ + properties: object; + /** + The value is necessary to check if this tag is connected. + */ + isConnected: boolean; + /** + Reads the NDEF data from the NFC tag. + */ + readNDEF(readCallback: NDEFMessageReadCallback,errorCallback: ErrorCallback): void + /** + Writes the NDEF data to the NFC tag. + */ + writeNDEF(ndefMessage: NDEFMessage,successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Accesses the raw format card. The transceive function is the only way to access the raw format card (not formatted). +Each tag type requires its own command to access tags. +This API provides low level access of the tag operation. (Note that you must know each tag technology.) + */ + transceive(data: byte[],dataCallback: ByteArraySuccessCallback,errorCallback: ErrorCallback): void +} + +interface NFCPeer { + /** + The value is necessary to check if this NFC peer-to-peer target is connected. + */ + isConnected: boolean; + /** + Registers a callback function to be invoked when an NDEF message is received from the connected NFC peer-to-peer target. + */ + setReceiveNDEFListener(successCallback: NDEFMessageReadCallback): void + /** + Unregisters the listener for receiving NDEF messages from the NFC peer-to-peer target connected. + */ + unsetReceiveNDEFListener(): void + /** + Sends data to the NFC peer-to-peer target. + */ + sendNDEF(ndefMessage: NDEFMessage,successCallback: SuccessCallback,errorCallback: ErrorCallback): void +} + +interface NDEFMessage { + /** + The number of records in the NDEFMessage. + */ + recordCount: long; + /** + The array of NDEFRecord objects in the NDEFMessage. + */ + records: NDEFRecord[]; + /** + Gets the serial byte array of the NDEF message. + */ + toByte(): void +} + +interface NDEFRecord { + /** + The value of the record type (TNF value). + */ + tnf: short; + /** + The specified type in byte array. + */ + type: byte[]; + /** + The record ID. + */ + id: byte[]; + /** + The record payload. + */ + payload: byte[]; +} + +interface NDEFRecordText { + /** + The encoded text. + */ + text: DOMString; + /** + The language code string value, followed by IANA[RFC 3066] (for example, en-US, ko-KR). + */ + languageCode: DOMString; + /** + The encoding type. By default, this attribute is set to UTF8. + */ + encoding: NDEFRecordTextEncoding; +} + +interface NDEFRecordURI { + /** + The URI string that is stored in the payload. + */ + uri: DOMString; +} + +interface NDEFRecordMedia { + /** + The mime type [RFC 2046] (for example, text/plain, image/jpeg ). + */ + mimeType: DOMString; +} + +interface HCEEventData { + /** + HCE event type. + */ + eventType: HCEEventType; + /** + The bytes array of APDU + */ + apdu: byte[]; + /** + The length of APDU + */ + length: long; +} + +interface AIDData { + /** + Secure Element type. + */ + type: SecureElementType; + /** + The AID (Application ID) data, specified in ISO/IEC 7816-4 + */ + aid: AID; + /** + An attribute to indicate whether the registered AID is read-only or not + */ + readOnly: boolean; +} + +interface NFCTagDetectCallback { + /** + The method invoked when a tag is attached. + */ + onattach(nfcTag: NFCTag): void + /** + The method invoked when the connected tag is detached. + */ + ondetach(): void +} + +interface NFCPeerDetectCallback { + /** + The method invoked when the NFC peer-to-peer target is attached. + */ + onattach(nfcPeer: NFCPeer): void + /** + The method invoked when the connected NFC peer-to-peer target is detached. + */ + ondetach(): void +} + +interface NDEFMessageReadCallback { + /** + The method invoked when the asynchronous call completes successfully. + */ + onsuccess(ndefMessage: NDEFMessage): void +} + +interface ByteArraySuccessCallback { + /** + The method invoked when the asynchronous call completes successfully. + */ + onsuccess(data: byte[]): void +} + +interface CardEmulationModeChangeCallback { + /** + Called when the card emulation mode is changed. + */ + onchanged(mode: CardEmulationMode): void +} + +interface TransactionEventCallback { + /** + Called when the asynchronous call completes successfully. + */ + ondetected(appletId: octet[],data: octet[]): void +} + +interface ActiveSecureElementChangeCallback { + /** + Called when the type of an active secure element is changed. + */ + onchanged(type: SecureElementType): void +} + +interface HCEEventReceiveCallback { + /** + Called when HCE event is detected. + */ + ondetected(data: HCEEventData): void +} + +interface AIDArraySuccessCallback { + /** + The method invoked when the asynchronous call completes successfully. + */ + onsuccess(aids: AIDData[]): void +} + +interface NotificationObject { + /** + Object representing a notification manager. + */ + notification: NotificationManager; +} + +interface NotificationManager { + /** + Posts a notification to display. + */ + post(notification: Notification): void + /** + Updates a previously posted notification. + */ + update(notification: Notification): void + /** + Removes a previously posted notification. + */ + remove(id: NotificationId): void + /** + Removes all notifications that have been posted by the current application. + */ + removeAll(): void + /** + Gets a notification that has previously been posted by the current application. Note that the obtained notification's progressType is */ + get(id: NotificationId): Notification + /** + Gets a notification that has previously been posted by the current application. Note that the obtained notification's progressType is . + */ + getNotification(id: NotificationId): Notification + /** + Gets all notifications that have previously been posted by the current application. Note that the obtained notification's progressType is */ + getAll(): void + /** + Gets all notifications that have previously been posted by the current application. Note that the obtained notification's progressType is . + */ + getAllNotifications(): void + /** + Plays the custom effect of the service LED that is located to the front of a device. + */ + playLEDCustomEffect(timeOn: long,timeOff: long,color: DOMString,flags: LEDCustomFlags[]): void + /** + Stops the custom effect of the service LED that is located to the front of a device. + */ + stopLEDCustomEffect(): void + /** + Saves a notification template to the notification database. + */ + saveNotificationAsTemplate(name: DOMString,notification: Notification): void + /** + Creates notification based on previously created template. + */ + createNotificationFromTemplate(name: DOMString): UserNotification +} + +interface Notification { + /** + The Notification identifier. Before the notification is posted, this value is undefined. + */ + id: NotificationId; + /** + The Notification type. + */ + type: NotificationType; + /** + The time when the notification is posted. Before the notification is posted, this value is undefined. + */ + postedTime: Date; + /** + The title to display in a notification. + */ + title: DOMString; + /** + The content to display in a notification. + */ + content: DOMString; +} + +interface StatusNotification { + /** + The status notification type. + */ + statusType: StatusNotificationType; + /** + The icon path to display in the notification. + */ + iconPath: DOMString; + /** + The sub icon path to display in the notification. + */ + subIconPath: DOMString; + /** + The number of events to display in the notification. + */ + number: long; + /** + Appends lines of the detail information to the notification. +This attribute is available in a simple status notification. +By default, this attribute is initialized with an empty array. +The maximum number of detail information elements in the array is 2. + */ + detailInfo: NotificationDetailInfo[]; + /** + Sets the notification LED indicator color property. +The color is a numerical RGB value(#rrggbb). The format of an RGB value in hexadecimal notation is a "#" immediately followed by exactly six hexadecimal characters(0-9, A-F). The color format is case-insensitive. +The LED indicator color will show that it's a close approximation. +LED will only light on when the screen is off. To turn the LED off, set "#000000" or null to ledColor. +This method has effects when the device has notification LED. + */ + ledColor: DOMString; + /** + The milliseconds for which the light is on. +The light continuously toggles on (ledOnPeriod) and off (ledOffPeriod). +By default, this attribute is set to 0 + */ + ledOnPeriod: number; + /** + The milliseconds for which the light is off. +By default, this attribute is set to 0. + */ + ledOffPeriod: number; + /** + The image path to use as the background of the notification. +This attribute is available on simple or thumbnail status notifications. + */ + backgroundImagePath: DOMString; + /** + The image paths associated with the thumbnail status notification. +By default, this attribute is initialized with an empty array. +The maximum number of thumbnail path elements in the array is 4. + */ + thumbnails: DOMString[]; + /** + The path of a sound file to play when the notification is shown. + */ + soundPath: DOMString; + /** + Checks whether to vibrate when the notification is shown. By default, this attribute is set to false. + */ + vibration: boolean; + /** + Holds the application control to launch an application when the notification is selected from the notification tray. + */ + appControl: ApplicationControl; + /** + Holds the application ID to launch when the notification is selected from the notification tray. + */ + appId: ApplicationId; + /** + Defines the type for an ongoing notification's progress. +By default, this attribute is set to PERCENTAGE. + */ + progressType: NotificationProgressType; + /** + Defines the current notification progress value ( or ), depending on the */ + progressValue: number; +} + +interface UserNotification { + /** + The type of notification. + */ + userType: UserNotificationType; + /** + Defines content-related settings of a notification. + */ + textContents: NotificationTextContentInfo; + /** + Defines additional image-related settings of a notification. + */ + images: NotificationImageInfo; + /** + Defines additional thumbnails-related settings of a notification. + */ + thumbnails: NotificationThumbnailInfo; + /** + Defines additional actions-related settings of a notification. + */ + actions: NotificationActionInfo; + /** + Defines additional group-content-related settings of a notification. + */ + groupContents: NotificationGroupContentInfo; + /** + Defines additional LED-related settings of a notification. + */ + leds: NotificationLedInfo; +} + +interface NotificationDetailInfo { + /** + The main content of the detail information. +This attribute is available on simple status notifications. + */ + mainText: DOMString; + /** + The secondary content of the detail information. + */ + subText: DOMString; +} + +interface PackageManagerObject { + /** + Object representing a package manager. + */ + package: PackageManager; +} + +interface PackageManager { + /** + Installs a package with a specified file on a device. + */ + install(packageFileURI: DOMString,progressCallback: PackageProgressCallback,errorCallback: ErrorCallback): void + /** + Uninstalls the package with a specified package ID. + */ + uninstall(id: PackageId,progressCallback: PackageProgressCallback,errorCallback: ErrorCallback): void + /** + Gets information of the installed packages. + */ + getPackagesInfo(successCallback: PackageInformationArraySuccessCallback,errorCallback: ErrorCallback): void + /** + Gets information of an installed package. + */ + getPackageInfo(id: PackageId): PackageInformation + /** + Sets a listener to receive notifications for any changes made to the list of installed packages. + */ + setPackageInfoEventListener(eventCallback: PackageInformationEventCallback): void + /** + Unsets the listener to stop receiving package notifications. + */ + unsetPackageInfoEventListener(): void +} + +interface PackageInformation { + /** + An attribute to store the identifier of a package. + */ + id: PackageId; + /** + An attribute to store the package name. + */ + name: DOMString; + /** + An attribute to store the icon path of a package. + */ + iconPath: DOMString; + /** + An attribute to store the package version. + */ + version: DOMString; + /** + An attribute to store the total installed size(package + data) of a package. + */ + totalSize: long; + /** + An attribute to store the current data size of a package. + */ + dataSize: long; + /** + An attribute to store the latest installed or updated time of a package. + */ + lastModified: Date; + /** + An attribute to store the author of a package. + */ + author: DOMString; + /** + An attribute to store the package description. + */ + description: DOMString; + /** + An attribute to store the application ID list of a package. + */ + appIds: ApplicationId[]; +} + +interface PackageInformationArraySuccessCallback { + /** + Called when the asynchronous call completes successfully. + */ + onsuccess(informationArray: PackageInformation[]): void +} + +interface PackageProgressCallback { + /** + Called while the request is in progress. + */ + onprogress(id: PackageId,progress: short): void + /** + Called when the request is completed. + */ + oncomplete(id: PackageId): void +} + +interface PackageInformationEventCallback { + /** + Called when a package is installed. + */ + oninstalled(info: PackageInformation): void + /** + Called when a package is updated. + */ + onupdated(info: PackageInformation): void + /** + Called when a package is uninstalled. + */ + onuninstalled(id: PackageId): void +} + +interface PlayerUtilManagerObject { + /** + Object representing a player utilities manager. + */ + playerutil: PlayerUtilManager; +} + +interface PlayerUtilManager { + /** + Gets the latency mode of the W3C Player. + */ + getLatencyMode(): LatencyMode + /** + Sets the latency mode of the W3C Player. + */ + setLatencyMode(mode: LatencyMode): void +} + +interface PowerManagerObject { + /** + Object representing a power manager. + */ + power: PowerManager; +} + +interface PowerManager { + /** + Requests the minimum-state for a power resource. + */ + request(resource: PowerResource,state: PowerState): void + /** + Releases the power state request for the given resource. + */ + release(resource: PowerResource): void + /** + Sets the screen state change callback and monitors its state changes. + */ + setScreenStateChangeListener(listener: ScreenStateChangeCallback): void + /** + Unsets the screen state change callback and stop monitoring it. + */ + unsetScreenStateChangeListener(): void + /** + Gets the screen brightness level of an application, from 0 to 1. + */ + getScreenBrightness(): void + /** + Sets the screen brightness level, from 0 to 1. + */ + setScreenBrightness(brightness: double): void + /** + Checks whether the screen is on. + */ + isScreenOn(): void + /** + Restores the screen brightness to the system default setting value. + */ + restoreScreenBrightness(): void + /** + Turns on the screen. + */ + turnScreenOn(): void + /** + Turns off the screen. + */ + turnScreenOff(): void +} + +interface ScreenStateChangeCallback { + /** + Called on screen state change. + */ + onchanged(previousState: PowerScreenState,changedState: PowerScreenState): void +} + +interface PrivacyPrivilegeManagerObject { + /** + Object representing a privacy privilege manager. + */ + ppm: PrivacyPrivilegeManager; +} + +interface PrivacyPrivilegeManager { + /** + Method allows checking current state of user's permission for using a privilege. + */ + checkPermission(privilege: DOMString): PermissionType + /** + Method allows checking current state of user's permission for using privileges. + */ + checkPermissions(privileges: DOMString[]): void + /** + This method allows launching pop-up for asking user to directly grant permission for given privilege. + */ + requestPermission(privilege: DOMString,successCallback: PermissionSuccessCallback,errorCallback: ErrorCallback): void + /** + This method allows launching pop-up for asking user to directly grant permission for given privileges. + */ + requestPermissions(privileges: DOMString[],successCallback: PermissionRequestSuccessCallback,errorCallback: ErrorCallback): void +} + +interface PrivilegeStatus { + /** + Privilege which was checked against user's permission. + */ + privilege: DOMString; + /** + State of user's permission for using specified privilege. + */ + type: PermissionType; +} + +interface RequestStatus { + /** + The requested privilege. + */ + privilege: DOMString; + /** + Result of the action performed by user. + */ + result: PermissionRequestResult; +} + +interface PermissionSuccessCallback { + /** + Called when the permission for using privilege was requested successfully. + */ + onsuccess(result: PermissionRequestResult,privilege: DOMString): void +} + +interface PermissionRequestSuccessCallback { + /** + Called when the permission for privileges was requested successfully. + */ + onsuccess(result: RequestStatus[]): void +} + +interface PreferenceManagerObject { + /** + Object representing a preference manager. + */ + preference: PreferenceManager; +} + +interface PreferenceData { + /** + The key name of the preferences data value. + */ + key: DOMString; + /** + The value associated with a given key. + */ + value: PreferenceValueType; +} + +interface PreferenceManager { + /** + Gets all preferences data. + */ + getAll(successCallback: PreferenceGetAllCallback,errorCallback: ErrorCallback): void + /** + Sets the preference value. + */ + setValue(key: DOMString,value: PreferenceValueType): void + /** + Gets a preference value. + */ + getValue(key: DOMString): PreferenceValueType + /** + Removes a value with the given key from the preferences. + */ + remove(key: DOMString): void + /** + Removes all key-value pairs from the preferences. + */ + removeAll(): void + /** + Checks whether the preference with given key exists. + */ + exists(key: DOMString): void + /** + Sets the listener to receive notifications about changes of the preference value with the given key. + */ + setChangeListener(key: DOMString,listener: PreferenceChangeCallback): void + /** + Unsets the listener, so stop receiving notifications about changes of the preference with the given key. + */ + unsetChangeListener(key: DOMString): void +} + +interface PreferenceChangeCallback { + /** + Called when the preference with the given key changed. + */ + onsuccess(data: PreferenceData): void +} + +interface PreferenceGetAllCallback { + /** + Called with all preferences' data as an argument. + */ + onsuccess(preferences: PreferenceData[]): void +} + +interface PushManagerObject { + /** + Object representing a push manager. + */ + push: PushManager; +} + +interface PushManager { + /** + Registers an application to the Tizen push server. + */ + registerService(appControl: ApplicationControl,successCallback: PushRegisterSuccessCallback,errorCallback: ErrorCallback): void + /** + Registers an application to the Tizen push server. + */ + register(successCallback: PushRegisterSuccessCallback,errorCallback: ErrorCallback): void + /** + Unregisters an application from the Tizen push server. + */ + unregisterService(successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Unregisters an application from the Tizen push server. + */ + unregister(successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Connects to the push service and receives push notifications. + */ + connectService(notificationCallback: PushNotificationCallback): void + /** + Connects to the push service and gets state change events and push notifications. + */ + connect(stateChangeCallback: PushRegistrationStateChangeCallback,notificationCallback: PushNotificationCallback,errorCallback: ErrorCallback): void + /** + Disconnects the push service and stops receiving push notifications. + */ + disconnectService(): void + /** + Disconnects the push service and stops receiving push notifications. + */ + disconnect(): void + /** + Gets the push service registration ID for this application if the registration process is successful. is returned if the application has not been registered yet. + */ + getRegistrationId(): PushRegistrationId + /** + Requests to get unread push notifications. As a consequence, the PushNotificationCallback which was set using the method will be invoked to retrieve the notifications. + */ + getUnreadNotifications(): void + /** + Gets push messages when the application is launched by the push service. + */ + getPushMessage(): PushMessage +} + +interface PushMessage { + /** + An attribute to store the push notification data. + */ + appData: DOMString; + /** + An attribute to store the push notification message that may include an alert message to the user. + */ + alertMessage: DOMString; + /** + An attribute to store the full push notification message. + */ + message: DOMString; + /** + An attribute to store the date/time when a push notification message is received. + */ + date: Date; + /** + The name of the sender of the notification. + */ + sender: DOMString; + /** + The session information of the notification. + */ + sessionInfo: DOMString; + /** + The request ID assigned by the sender. + */ + requestId: DOMString; +} + +interface PushRegisterSuccessCallback { + /** + Called when a push service registration request is successful. + */ + onsuccess(id: PushRegistrationId): void +} + +interface PushRegistrationStateChangeCallback { + /** + Called when the state of push registration is changed. + */ + onsuccess(state: PushRegistrationState): void +} + +interface PushNotificationCallback { + /** + Called when the push notification message arrives. + */ + onsuccess(message: PushMessage): void +} + +interface SensorServiceManagerObject { + /** + Object representing a sensor service. + */ + sensorservice: SensorService; +} + +interface SensorService { + /** + Gets the default sensor of the device for the given sensor type. + */ + getDefaultSensor(type: SensorType): Sensor + /** + Gets the available sensor types. + */ + getAvailableSensors(): void +} + +interface Sensor { + /** + Sensor type to monitor the changes. + */ + sensorType: SensorType; + /** + Starts the sensor. + */ + start(successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Stops the sensor. + */ + stop(): void + /** + Registers a listener to retrieve sensor data periodically. + */ + setChangeListener(successCallback: SensorDataSuccessCallback,interval: long,batchLatency: long): void + /** + Unregisters the sensor data change listener. + */ + unsetChangeListener(): void + /** + Gets hardware information of the sensor. + */ + getSensorHardwareInfo(successCallback: SensorHardwareInfoSuccessCallback,errorCallback: ErrorCallback): void +} + +interface AccelerationSensor { + /** + Gets the current acceleration sensor data. You can refer to interface. + */ + getAccelerationSensorData(successCallback: SensorDataSuccessCallback,errorCallback: ErrorCallback): void +} + +interface GravitySensor { + /** + Gets the current gravity sensor data. You can refer to the interface. + */ + getGravitySensorData(successCallback: SensorDataSuccessCallback,errorCallback: ErrorCallback): void +} + +interface GyroscopeSensor { + /** + Gets the current gyroscope sensor data. You can refer to the interface. + */ + getGyroscopeSensorData(successCallback: SensorDataSuccessCallback,errorCallback: ErrorCallback): void +} + +interface GyroscopeRotationVectorSensor { + /** + Gets the current gyroscope rotation vector sensor data. You can refer to the interface. + */ + getGyroscopeRotationVectorSensorData(successCallback: SensorDataSuccessCallback,errorCallback: ErrorCallback): void +} + +interface GyroscopeUncalibratedSensor { + /** + Gets the current sensor data. + */ + getGyroscopeUncalibratedSensorData(successCallback: SensorDataSuccessCallback,errorCallback: ErrorCallback): void +} + +interface HRMRawSensor { + /** + Gets the current sensor data. + */ + getHRMRawSensorData(successCallback: SensorDataSuccessCallback,errorCallback: ErrorCallback): void +} + +interface LightSensor { + /** + Gets the current sensor data. + */ + getLightSensorData(successCallback: SensorDataSuccessCallback,errorCallback: ErrorCallback): void +} + +interface LinearAccelerationSensor { + /** + Gets the current sensor data. + */ + getLinearAccelerationSensorData(successCallback: SensorDataSuccessCallback,errorCallback: ErrorCallback): void +} + +interface MagneticSensor { + /** + Gets the current sensor data. + */ + getMagneticSensorData(successCallback: SensorDataSuccessCallback,errorCallback: ErrorCallback): void +} + +interface MagneticUncalibratedSensor { + /** + Gets the current sensor data. + */ + getMagneticUncalibratedSensorData(successCallback: SensorDataSuccessCallback,errorCallback: ErrorCallback): void +} + +interface PressureSensor { + /** + Gets the current sensor data. + */ + getPressureSensorData(successCallback: SensorDataSuccessCallback,errorCallback: ErrorCallback): void +} + +interface ProximitySensor { + /** + Gets the current sensor data. + */ + getProximitySensorData(successCallback: SensorDataSuccessCallback,errorCallback: ErrorCallback): void +} + +interface UltravioletSensor { + /** + Gets the current sensor data. + */ + getUltravioletSensorData(successCallback: SensorDataSuccessCallback,errorCallback: ErrorCallback): void +} + +interface SensorData { +} + +interface SensorAccelerationData { + /** + The result of acceleration sensor measurement in the device's X axis in m/s².The value can be between -19.6 and 19.6 inclusive. + */ + x: double; + /** + The result of acceleration sensor measurement in the device's Y axis in m/s².The value can be between -19.6 and 19.6 inclusive. + */ + y: double; + /** + The result of acceleration sensor measurement in the device's Z axis in m/s².The value can be between -19.6 and 19.6 inclusive. + */ + z: double; +} + +interface SensorGravityData { + /** + Value of the Earth's gravity in the device's X axis in m/s².The value can be between -9.8 and 9.8 inclusive. + */ + x: double; + /** + Value of the Earth's gravity in the device's Y axis in m/s².The value can be between -9.8 and 9.8 inclusive. + */ + y: double; + /** + Value of the Earth's gravity in the device's Z axis in m/s².The value can be between -9.8 and 9.8 inclusive. + */ + z: double; +} + +interface SensorGyroscopeData { + /** + The angular velocity about the device's X axis in °/s.The value can be between -573.0 and 573.0 inclusive. + */ + x: double; + /** + The angular velocity about the device's Y axis in °/s.The value can be between -573.0 and 573.0 inclusive. + */ + y: double; + /** + The angular velocity about the device's Z axis in °/s.The value can be between -573.0 and 573.0 inclusive. + */ + z: double; +} + +interface SensorGyroscopeRotationVectorData { + /** + The X direction component of the rotation vector (x * sin(θ/2)).The value can be between -1 and 1 inclusive. + */ + x: double; + /** + The Y direction component of the rotation vector (y * sin(θ/2)).The value can be between -1 and 1 inclusive. + */ + y: double; + /** + The Z direction component of the rotation vector (z * sin(θ/2)).The value can be between -1 and 1 inclusive. + */ + z: double; + /** + The scalar component of the rotation vector (cos(θ/2)).The value can be between -1 and 1 inclusive. + */ + w: double; +} + +interface SensorGyroscopeUncalibratedData { + /** + The result of measurement of angular velocity around the device's X axis, without measurement drift compensation, in °/s.The value can be between -573.0 and 573.0 inclusive. + */ + x: double; + /** + The result of measurement of angular velocity around the device's Y axis, without measurement drift compensation, in °/s.The value can be between -573.0 and 573.0 inclusive. + */ + y: double; + /** + The result of measurement of angular velocity around the device's Z axis, without measurement drift compensation, in °/s.The value can be between -573.0 and 573.0 inclusive. + */ + z: double; + /** + Stated drift of angular velocity measurement result around the device's X axis, in °/s.The value can be between -573.0 and 573.0 inclusive. + */ + xAxisDrift: double; + /** + Stated drift of angular velocity measurement result around the device's Y axis, in °/s.The value can be between -573.0 and 573.0 inclusive. + */ + yAxisDrift: double; + /** + Stated drift of angular velocity measurement result around the device's Z axis, in °/s.The value can be between -573.0 and 573.0 inclusive. + */ + zAxisDrift: double; +} + +interface SensorHRMRawData { + /** + HRM sensor light type. + */ + lightType: DOMString; + /** + HRM sensor light intensity measures the light intensity that is reflected from a blood vessel. The changes in the reported value represent blood volume changes in the microvascular bed of the tissue, and can be used to estimate heart rate. + */ + lightIntensity: number; +} + +interface SensorLightData { + /** + Ambient light level in lux. + */ + lightLevel: double; +} + +interface SensorLinearAccelerationData { + /** + Value of the linear acceleration in the device's X axis in m/s².The value can be between -19.6 and 19.6 inclusive. + */ + x: double; + /** + Value of the linear acceleration in the device's Y axis in m/s².The value can be between -19.6 and 19.6 inclusive. + */ + y: double; + /** + Value of the linear acceleration in the device's Z axis in m/s².The value can be between -19.6 and 19.6 inclusive. + */ + z: double; +} + +interface SensorMagneticData { + /** + Ambient magnetic field of the X axis in microtesla (µT). + */ + x: double; + /** + Ambient magnetic field of the Y axis in microtesla (µT). + */ + y: double; + /** + Ambient magnetic field of the Z axis in microtesla (µT). + */ + z: double; + /** + Accuracy of magnetic sensor data. + */ + accuracy: MagneticSensorAccuracy; +} + +interface SensorMagneticUncalibratedData { + /** + The result of measurement of magnetic field strength of the X axis, without measurement bias compensation, in microtesla (µT). + */ + x: double; + /** + The result of measurement of magnetic field strength of the Y axis, without measurement bias compensation, in microtesla (µT). + */ + y: double; + /** + The result of measurement of magnetic field strength of the Z axis, without measurement bias compensation, in microtesla (µT). + */ + z: double; + /** + Stated measurement bias of the value of magnetic field strength of the X axis in microtesla (µT). + */ + xAxisBias: double; + /** + Stated measurement bias of the value of magnetic field strength of the Y axis in microtesla (µT). + */ + yAxisBias: double; + /** + Stated measurement bias of the value of magnetic field strength of the Z axis in microtesla (µT). + */ + zAxisBias: double; +} + +interface SensorPressureData { + /** + Pressure in hectopascal (hPa). + */ + pressure: double; +} + +interface SensorProximityData { + /** + Proximity state. + */ + proximityState: ProximityState; +} + +interface SensorUltravioletData { + /** + Ultraviolet index. + */ + ultravioletLevel: long; +} + +interface SensorHardwareInfo { + /** + Name of the sensor. + */ + name: DOMString; + /** + . */ + type: SensorType; + /** + Vendor of the sensor. + */ + vendor: DOMString; + /** + Minimum reading value that can be received from the sensor.The units for the minimum value depends on the sensor type: */ + minValue: double; + /** + Maximum reading value that can be received from the sensor.The units for the maximum value depends on the sensor type: */ + maxValue: double; + /** + The smallest change which the sensor can detect.The units of the resolution depends on the sensor type: */ + resolution: double; + /** + Minimum interval of the sensor which means a period between two events. + */ + minInterval: long; + /** + Maximum batch count of sensor, batch means storing a sensors event in a hardware FIFO register when processor stay on sleep or suspend status. + */ + maxBatchCount: long; +} + +interface SensorDataSuccessCallback { + /** + Called periodically. + */ + onsuccess(sensorData: SensorData): void +} + +interface SensorHardwareInfoSuccessCallback { + /** + Called when sensor hardware information is successfully retrieved. + */ + onsuccess(hardwareInfo: SensorHardwareInfo): void +} + +interface SEServiceManagerObject { + /** + Object representing a secure element service manager. + */ + seService: SEService; +} + +interface SEService { + /** + Gets all the available Secure Element readers. + */ + getReaders(successCallback: ReaderArraySuccessCallback,errorCallback: ErrorCallback): void + /** + Registers a callback function that is invoked when an available Secure Element reader is detected. + */ + registerSEListener(listener: SEChangeListener): void + /** + Unregisters the listener from notifying any detection of an available Secure Element reader. + */ + unregisterSEListener(id: number): void + /** + Shuts down Secure Elements after releasing all resources. + */ + shutdown(): void +} + +interface Reader { + /** + Boolean value that indicates whether a Secure Element is present on a reader. + */ + isPresent: boolean; + /** + Gets the reader's name. + */ + getName(): void + /** + Opens a session on a reader. + */ + openSession(successCallback: SessionSuccessCallback,errorCallback: ErrorCallback): void + /** + Closes all sessions opened on a reader. + */ + closeSessions(): void +} + +interface Session { + /** + Boolean value that indicates whether a session is closed. + */ + isClosed: boolean; + /** + Opens a basic channel in a session. +The basic channel (defined in the ISO7816-4 specification) is opened by default and its channel ID is . +Once this channel has been opened by an application, it is considered to be "locked" to other applications, and they cannot open any channel, until the basic channel is closed. +Some Secure Elements might always deny opening a basic channel. + */ + openBasicChannel(aid: byte[],successCallback: ChannelSuccessCallback,errorCallback: ErrorCallback): void + /** + Opens a logical channel in a session by the specified applet ID. +The logical channel is defined in the ISO7816-4 specification. + */ + openLogicalChannel(aid: byte[],successCallback: ChannelSuccessCallback,errorCallback: ErrorCallback): void + /** + Gets the answer to reset(ATR) of a Secure Element. + */ + getATR(): void + /** + Closes a session. + */ + close(): void + /** + Closes all channels on this session. + */ + closeChannels(): void +} + +interface Channel { + /** + Boolean value that indicates whether it is a basic channel. + */ + isBasicChannel: boolean; + /** + Closes a channel. + */ + close(): void + /** + Transmits an APDU command to a Secure Element. The APDU command is defined in ISO7816-4. + */ + transmit(command: byte[],successCallback: TransmitSuccessCallback,errorCallback: ErrorCallback): void + /** + Gets the data as received from the application select command including the status words. + */ + getSelectResponse(): void +} + +interface SEChangeListener { + /** + Called when a Secure Element reader is detected. + */ + onSEReady(reader: Reader): void + /** + Called when a Secure Element reader is lost. + */ + onSENotReady(reader: Reader): void + /** + Called when a Secure Element reader has an error. + */ + onSEError(reader: Reader,error: WebAPIError): void +} + +interface ReaderArraySuccessCallback { + /** + Called when an asynchronous call completes successfully. + */ + onsuccess(readers: Reader[]): void +} + +interface SessionSuccessCallback { + /** + Called when an asynchronous call completes successfully. + */ + onsuccess(session: Session): void +} + +interface ChannelSuccessCallback { + /** + Called when an asynchronous call completes successfully. + */ + onsuccess(channel: Channel): void +} + +interface TransmitSuccessCallback { + /** + Called when an asynchronous call completes successfully. + */ + onsuccess(response: byte[]): void +} + +interface SoundManagerObject { + /** + Object representing a sound manager. + */ + sound: SoundManager; +} + +interface SoundManager { + /** + Gets the current sound mode. + */ + getSoundMode(): SoundModeType + /** + Sets the volume level for a specified sound type. + */ + setVolume(type: SoundType,volume: double): void + /** + Gets the current volume level for a specified sound type. + */ + getVolume(type: SoundType): void + /** + Registers a listener to be called when the sound mode is changed. + */ + setSoundModeChangeListener(callback: SoundModeChangeCallback): void + /** + Unsubscribes from receiving notification about the sound mode change. + */ + unsetSoundModeChangeListener(): void + /** + Registers a listener to be called when the volume level is changed. + */ + setVolumeChangeListener(callback: SoundVolumeChangeCallback): void + /** + Unsubscribes from receiving notification when the volume level is changed. + */ + unsetVolumeChangeListener(): void + /** + Gets a list of connected sound devices. + */ + getConnectedDeviceList(): void + /** + Gets a list of activated sound devices. + */ + getActivatedDeviceList(): void + /** + Registers a listener that is to be called when the sound device state is changed. + */ + addDeviceStateChangeListener(callback: SoundDeviceStateChangeCallback): void + /** + Unsubscribes from receiving notifications when the sound device state is changed. + */ + removeDeviceStateChangeListener(id: long): void +} + +interface SoundDeviceInfo { + /** + The sound device ID + */ + id: long; + /** + The sound device name + */ + name: DOMString; + /** + The sound device type + */ + device: SoundDeviceType; + /** + The sound device I/O type + */ + direction: SoundIOType; + /** + True if the sound device state is connected + */ + isConnected: boolean; + /** + True if the sound device state is activated + */ + isActivated: boolean; +} + +interface SoundModeChangeCallback { + /** + Called when the sound mode has changed. + */ + onsuccess(mode: SoundModeType): void +} + +interface SoundVolumeChangeCallback { + /** + Called when the volume level has changed. + */ + onsuccess(type: SoundType,volume: double): void +} + +interface SoundDeviceStateChangeCallback { + /** + Method invoked when the sound device state changes. + */ + onchanged(info: SoundDeviceInfo): void +} + +interface SystemInfoObject { + /** + Object representing a system info module. + */ + systeminfo: SystemInfo; +} + +interface SystemInfo { + /** + Gets the total amount of system memory (in bytes). + */ + getTotalMemory(): void + /** + Gets the amount of memory that is not in use (in bytes). + */ + getAvailableMemory(): void + /** + Gets the capabilities of the device. + */ + getCapabilities(): SystemInfoDeviceCapability + /** + Gets a device capability related to a given key. + */ + getCapability(key: DOMString): void + /** + Gets the number of system property information provided for a particular system property. + */ + getCount(property: SystemInfoPropertyId): void + /** + Gets the current value of a specified system property. + */ + getPropertyValue(property: SystemInfoPropertyId,successCallback: SystemInfoPropertySuccessCallback,errorCallback: ErrorCallback): void + /** + Gets the current values of a specified system property. + */ + getPropertyValueArray(property: SystemInfoPropertyId,successCallback: SystemInfoPropertyArraySuccessCallback,errorCallback: ErrorCallback): void + /** + Adds a listener to allow tracking changes in one or more system properties. + */ + addPropertyValueChangeListener(property: SystemInfoPropertyId,successCallback: SystemInfoPropertySuccessCallback,options: SystemInfoOptions,errorCallback: ErrorCallback): void + /** + Adds a listener to allow tracking of changes in one or more values of a system property. + */ + addPropertyValueArrayChangeListener(property: SystemInfoPropertyId,successCallback: SystemInfoPropertyArraySuccessCallback,options: SystemInfoOptions,errorCallback: ErrorCallback): void + /** + Unsubscribes notifications for property changes. + */ + removePropertyValueChangeListener(listenerId: number): void +} + +interface SystemInfoDeviceCapability { + /** + Indicates whether the device supports Bluetooth. + */ + bluetooth: boolean; + /** + Indicates whether the device supports NFC. + */ + nfc: boolean; + /** + Indicates whether the device supports NFC reserved push. + */ + nfcReservedPush: boolean; + /** + The number of point in Multi-point touch. + */ + multiTouchCount: number; + /** + Indicates whether the device supports the built-in keyboard. + */ + inputKeyboard: boolean; + /** + Indicates whether the device supports the built-in keyboard layout. + */ + inputKeyboardLayout: boolean; + /** + Indicates whether the device supports Wi-Fi. + */ + wifi: boolean; + /** + Indicates whether the device supports Wi-Fi Direct. + */ + wifiDirect: boolean; + /** + Indicates whether the device supports OpenGL-ES. + */ + opengles: boolean; + /** + The device 3DC texture format for OpenGL-ES. + */ + openglestextureFormat: DOMString; + /** + Indicates whether the device supports OpenGL-ES version 1.1. + */ + openglesVersion1_1: boolean; + /** + Indicates whether the device supports OpenGL-ES version 2.0. + */ + openglesVersion2_0: boolean; + /** + Indicates whether the device supports FM radio. + */ + fmRadio: boolean; + /** + The version of the platform in the format. + */ + platformVersion: DOMString; + /** + The version of the Web API in the format. + */ + webApiVersion: DOMString; + /** + The version of the Native API in the format. + */ + nativeApiVersion: DOMString; + /** + The name of the platform. + */ + platformName: DOMString; + /** + Indicates whether the device supports camera. + */ + camera: boolean; + /** + Indicates whether the device supports front camera. + */ + cameraFront: boolean; + /** + Indicates whether the device supports flash on the front camera. + */ + cameraFrontFlash: boolean; + /** + Indicates whether the device supports back-side camera. + */ + cameraBack: boolean; + /** + Indicates whether the device supports flash on the back-side camera. + */ + cameraBackFlash: boolean; + /** + Indicates whether the device supports GPS or not. + */ + location: boolean; + /** + Indicates whether the device supports GPS based location feature. + */ + locationGps: boolean; + /** + Indicates whether the device supports WPS based location feature. + */ + locationWps: boolean; + /** + Indicates whether the device supports microphone. + */ + microphone: boolean; + /** + Indicates whether the device supports USB host. + */ + usbHost: boolean; + /** + Indicates whether the device supports USB accessory. + */ + usbAccessory: boolean; + /** + Indicates whether the device supports RCA output. + */ + screenOutputRca: boolean; + /** + Indicates whether the device supports HDMI output. + */ + screenOutputHdmi: boolean; + /** + The device CPU architecture. + */ + platformCoreCpuArch: DOMString; + /** + The device FPU architecture. + */ + platformCoreFpuArch: DOMString; + /** + Indicates whether the device supports VOIP. + */ + sipVoip: boolean; + /** + Indicates the Tizen ID, not device's unique ID since Tizen 2.3. + */ + duid: DOMString; + /** + Indicates whether the device supports speech recognition. + */ + speechRecognition: boolean; + /** + Indicates whether the device supports speech synthesis. + */ + speechSynthesis: boolean; + /** + Indicates whether the device supports accelerometer. + */ + accelerometer: boolean; + /** + Indicates whether the device supports accelerometer wake-up feature. + */ + accelerometerWakeup: boolean; + /** + Indicates whether the device supports barometer. + */ + barometer: boolean; + /** + Indicates whether the device supports barometer wake-up feature. + */ + barometerWakeup: boolean; + /** + Indicates whether the device supports gyroscope. + */ + gyroscope: boolean; + /** + Indicates whether the device supports gyroscope wake-up feature. + */ + gyroscopeWakeup: boolean; + /** + Indicates whether the device supports magnetometer. + */ + magnetometer: boolean; + /** + Indicates whether the device supports magnetometer wake-up feature. + */ + magnetometerWakeup: boolean; + /** + Indicates whether the device supports photometer. + */ + photometer: boolean; + /** + Indicates whether the device supports photometer wake-up feature. + */ + photometerWakeup: boolean; + /** + Indicates whether the device supports proximity. + */ + proximity: boolean; + /** + Indicates whether the device supports proximity wake-up feature. + */ + proximityWakeup: boolean; + /** + Indicates whether the device supports tiltmeter. + */ + tiltmeter: boolean; + /** + Indicates whether the device supports tiltmeter wake-up feature. + */ + tiltmeterWakeup: boolean; + /** + Indicates whether the device supports data encryption. + */ + dataEncryption: boolean; + /** + Indicates whether the device supports hardware acceleration for 2D/3D graphics. + */ + graphicsAcceleration: boolean; + /** + Indicates whether the device supports push service. + */ + push: boolean; + /** + Indicates whether the device supports the telephony feature. + */ + telephony: boolean; + /** + Indicates whether the device supports the MMS feature. + */ + telephonyMms: boolean; + /** + Indicates whether the device supports the SMS feature. + */ + telephonySms: boolean; + /** + Indicates whether the device supports the screen normal size. + */ + screenSizeNormal: boolean; + /** + Indicates whether the device supports the 480 * 800 screen size. + */ + screenSize480_800: boolean; + /** + Indicates whether the device supports the 720 * 1280 screen size. + */ + screenSize720_1280: boolean; + /** + Indicates whether the device supports auto rotation. + */ + autoRotation: boolean; + /** + Indicates whether the device supports shell app widget (dynamic box). + */ + shellAppWidget: boolean; + /** + Indicates whether the device supports vision image recognition. + */ + visionImageRecognition: boolean; + /** + Indicates whether the device supports vision QR code generation. + */ + visionQrcodeGeneration: boolean; + /** + Indicates whether the device supports vision QR code recognition. + */ + visionQrcodeRecognition: boolean; + /** + Indicates whether the device supports vision face recognition. + */ + visionFaceRecognition: boolean; + /** + Indicates whether the device supports secure element. + */ + secureElement: boolean; + /** + Indicates whether the device supports native OSP API. + */ + nativeOspCompatible: boolean; + /** + Represents the profile of the current device. + */ + profile: SystemInfoProfile; +} + +interface SystemInfoPropertySuccessCallback { + /** + Function invoked when the asynchronous call completes successfully. + */ + onsuccess(property: SystemInfoProperty): void +} + +interface SystemInfoPropertyArraySuccessCallback { + /** + Function invoked when the asynchronous call completes successfully. + */ + onsuccess(properties: SystemInfoProperty[]): void +} + +interface SystemInfoProperty { +} + +interface SystemInfoBattery { + /** + An attribute to specify the remaining level of an internal battery, scaled from to : + */ + level: double; + /** + Indicates whether the battery source is currently charging. + */ + isCharging: boolean; + /** + Estimated time to discharge, in minutes. + */ + timeToDischarge: long; + /** + Estimated time to finish charging battery, in minutes. + */ + timeToFullCharge: long; +} + +interface SystemInfoCpu { + /** + An attribute to indicate the current CPU load, as a number between and , representing the minimum and maximum values allowed on this system. + */ + load: double; +} + +interface SystemInfoStorage { + /** + The array of storage units connected to this device. + */ + units: SystemInfoStorageUnit[]; +} + +interface SystemInfoStorageUnit { + /** + The type of a storage device. The value is one of the constants defined for this type. + */ + type: DOMString; + /** + The total amount of space available on the user's storage (excluding system-reserved), in bytes. + */ + capacity: number; + /** + The amount of space currently available on the user's storage, in bytes. + */ + availableCapacity: number; + /** + An attribute to indicate whether a device can be removed or not. + */ + isRemovable: boolean; + /** + True if this unit can be removed from the system (such as an sdcard unplugged), false otherwise. + */ + isRemoveable: boolean; +} + +interface SystemInfoDisplay { + /** + The total number of addressable pixels in the horizontal direction of a rectangular entity +(such as Camera, Display, Image, Video, ...) when held in its default orientation. + */ + resolutionWidth: number; + /** + The total number of addressable pixels in the vertical direction of a rectangular element +(such as Camera, Display, Image, Video, ...) when held in its default orientation. + */ + resolutionHeight: number; + /** + Resolution of this device, along its width, in dots per inch. + */ + dotsPerInchWidth: number; + /** + Resolution of this device, along its height, in dots per inch. + */ + dotsPerInchHeight: number; + /** + The display's physical width in millimeters. + */ + physicalWidth: double; + /** + The display's physical height in millimeters. + */ + physicalHeight: double; + /** + The current brightness of a display ranging between to . + */ + brightness: double; +} + +interface SystemInfoDeviceOrientation { + /** + Represents the status of the current device orientation. + */ + status: SystemInfoDeviceOrientationStatus; + /** + Indicates whether the device is in autorotation. + */ + isAutoRotation: boolean; +} + +interface SystemInfoBuild { + /** + Represents the model name of the current device. + */ + model: DOMString; + /** + Represents the manufacturer of the device. + */ + manufacturer: DOMString; + /** + Represents the build version information of the device. + */ + buildVersion: DOMString; +} + +interface SystemInfoLocale { + /** + Indicates the current language setting in the (LANGUAGE)_(REGION) syntax. + */ + language: DOMString; + /** + Indicates the current country setting in the (LANGUAGE)_(REGION) syntax. + */ + country: DOMString; +} + +interface SystemInfoNetwork { + /** + Represents the network type of the current data network. + */ + networkType: SystemInfoNetworkType; +} + +interface SystemInfoWifiNetwork { + /** + Represents the status (ON or OFF) of the Wi-Fi interface. + */ + status: DOMString; + /** + Represents the SSID of the Wi-Fi network. + */ + ssid: DOMString; + /** + Represents the IPv4 address of the Wi-Fi network. + */ + ipAddress: DOMString; + /** + Represents the IPv6 address of the Wi-Fi network. + */ + ipv6Address: DOMString; + /** + Represents the MAC address of the Wi-Fi interface. + */ + macAddress: DOMString; + /** + This connection's signal strength, as a normalized value between 0 (no signal detected) and 1 (the level is at its maximum value). + */ + signalStrength: double; +} + +interface SystemInfoEthernetNetwork { + /** + Represents the cable status (ATTACHED or DETACHED) of the Ethernet interface. + */ + cable: DOMString; + /** + Represents the status (DEACTIVATED, DISCONNECTED or CONNECTED) of the Ethernet interface. + */ + status: DOMString; + /** + Represents the IPv4 address of the Ethernet network. + */ + ipAddress: DOMString; + /** + Represents the IPv6 address of the Ethernet network. + */ + ipv6Address: DOMString; + /** + Represents the MAC address of the Ethernet interface. + */ + macAddress: DOMString; +} + +interface SystemInfoCellularNetwork { + /** + Represents the status (ON or OFF) of the cellular network. + */ + status: DOMString; + /** + Represents an Access Point Name of the cellular network. + */ + apn: DOMString; + /** + Represents the IPv4 address of the cellular network. + */ + ipAddress: DOMString; + /** + Represents the IPv6 address of the cellular network. + */ + ipv6Address: DOMString; + /** + Represents Mobile Country Code (MCC) of the cellular network. + */ + mcc: number; + /** + Represents Mobile Network Code (MNC) of the cellular network. MNC is used in combination with MCC (also known as a "MCC / MNC tuple") to uniquely +identify a mobile phone operator/carrier using the GSM, CDMA, iDEN, TETRA and UMTS public land mobile networks and some satellite mobile networks. + */ + mnc: number; + /** + Represents Cell ID. + */ + cellId: number; + /** + Represents Location Area Code. + */ + lac: number; + /** + Indicates whether the connection is set up while the device is roaming. + */ + isRoaming: boolean; + /** + Indicates whether the device is in flight mode. + */ + isFlightMode: boolean; + /** + Represents the International Mobile Equipment Identity (IMEI). + */ + imei: DOMString; +} + +interface SystemInfoNetProxyNetwork { + /** + Represents the status (ON or OFF) of the net_proxy network. + */ + status: DOMString; +} + +interface SystemInfoSIM { + /** + Represents the SIM card state. + */ + state: SystemInfoSimState; + /** + Represents the Operator Name String (ONS) of Common PCN Handset Specification (CPHS) in SIM card. + */ + operatorName: DOMString; + /** + Represents the SIM card subscriber number. + */ + msisdn: DOMString; + /** + Represents the Integrated Circuit Card ID. + */ + iccid: DOMString; + /** + Represents the Mobile Country Code (MCC) of SIM provider. + */ + mcc: number; + /** + Represents the Mobile Network Code (MNC) of SIM provider. + */ + mnc: number; + /** + Represents the Mobile Subscription Identification Number (MSIN) of SIM provider. + */ + msin: DOMString; + /** + Represents the Service Provider Name (SPN) of SIM card. + */ + spn: DOMString; +} + +interface SystemInfoPeripheral { + /** + Represents the video out status. + */ + isVideoOutputOn: boolean; +} + +interface SystemInfoMemory { + /** + Represents the low memory state. + */ + status: SystemInfoLowMemoryStatus; +} + +interface SystemInfoCameraFlash { + /** + Brightness level of the camera flash (0~1). + */ + brightness: double; + /** + Specifies camera to which this flash belongs. + */ + camera: DOMString; + /** + Number of brightness levels supported by the flash (other than 0 brightness). + */ + levels: long; + /** + Sets the brightness value of the flash that is located next to the camera. + */ + setBrightness(brightness: double): void +} + +interface SystemInfoADS { + /** + Represents the unique id of advertisement service. It is used to distinguish each device. + */ + id: DOMString; +} + +interface SystemSettingObject { + /** + Object representing a system settings manager. + */ + systemsetting: SystemSettingManager; +} + +interface SystemSettingManager { + /** + Sets the property of a device. + */ + setProperty(type: SystemSettingType,value: DOMString,successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Gets the value of the property of a device. + */ + getProperty(type: SystemSettingType,successCallback: SystemSettingSuccessCallback,errorCallback: ErrorCallback): void +} + +interface SystemSettingSuccessCallback { + /** + Called when the value of the system setting property is successfully retrieved. + */ + onsuccess(value: DOMString): void +} + +interface TimeManagerObject { + /** + Object representing a time manager. + */ + time: TimeUtil; +} + +interface TimeUtil { + /** + Gets the current date/time. + */ + getCurrentDateTime(): TZDate + /** + Gets the identifier of the local system timezone. + */ + getLocalTimezone(): void + /** + Gets synchronously the identifiers of the timezones supported by the device. + */ + getAvailableTimezones(): void + /** + Gets the date format according to the system's locale settings. + */ + getDateFormat(shortformat: boolean): void + /** + Gets the time format according to the system's locale settings. + */ + getTimeFormat(): void + /** + Checks whether the given year is a leap year. + */ + isLeapYear(year: long): void + /** + Sets a listener to receive notification of changes to the time/date on a device. + */ + setDateTimeChangeListener(changeCallback: SuccessCallback): void + /** + Unsets the listener to stop receiving notification of changes to the time/date on a device. + */ + unsetDateTimeChangeListener(): void + /** + Sets a listener to receive notification of changes to the time zone on a device. + */ + setTimezoneChangeListener(changeCallback: SuccessCallback): void + /** + Unsets the listener to stop receiving notification of changes to the time zone on a device. + */ + unsetTimezoneChangeListener(): void +} + +interface TZDate { + /** + Gets the day of the month (from 1-31). + */ + getDate(): void + /** + Sets the day of the month (from 1-31). + */ + setDate(date: long): void + /** + Gets the day of the week (from 0-6). 0 denotes Sunday, 1 denotes Monday and so on. + */ + getDay(): void + /** + Gets the year. + */ + getFullYear(): void + /** + Sets the year. + */ + setFullYear(year: long): void + /** + Gets the hour (0-23). + */ + getHours(): void + /** + Sets the hour (0-23). + */ + setHours(hours: long): void + /** + Gets the milliseconds (from 0-999). + */ + getMilliseconds(): void + /** + Sets the milliseconds (from 0-999). + */ + setMilliseconds(ms: long): void + /** + Gets the minutes (from 0-59). + */ + getMinutes(): void + /** + Sets the minutes. + */ + setMinutes(minutes: long): void + /** + Gets the month (from 0-11). Note: January is denoted as 0, February as 1, and so on till December, which is denoted as 11. + */ + getMonth(): void + /** + Sets the month (from 0-11). + */ + setMonth(month: long): void + /** + Gets the seconds (from 0-59). + */ + getSeconds(): void + /** + Sets the seconds (from 0-59). + */ + setSeconds(seconds: long): void + /** + Gets the day of the month, according to universal time (from 1-31). + */ + getUTCDate(): void + /** + Sets the day of the month, according to universal time (from 1-31). + */ + setUTCDate(date: long): void + /** + Gets the day of the week, according to universal time (from 0-6). + */ + getUTCDay(): void + /** + Gets the year, according to universal time. + */ + getUTCFullYear(): void + /** + Sets the year, according to universal time. + */ + setUTCFullYear(year: long): void + /** + Gets the hour, according to universal time (0-23). + */ + getUTCHours(): void + /** + Sets the hour, according to universal time (0-23). + */ + setUTCHours(hours: long): void + /** + Gets the milliseconds, according to universal time (from 0-999). + */ + getUTCMilliseconds(): void + /** + Sets the milliseconds, according to universal time (from 0-999). + */ + setUTCMilliseconds(ms: long): void + /** + Gets the minutes, according to universal time (from 0-59). + */ + getUTCMinutes(): void + /** + Sets the minutes, according to universal time (from 0-59). + */ + setUTCMinutes(minutes: long): void + /** + Gets the month, according to universal time (from 0-11). Note: January is denoted as 0, February as 1 and so on till December, which is denoted as 11. + */ + getUTCMonth(): void + /** + Sets the month, according to universal time (from 0-11). + */ + setUTCMonth(month: long): void + /** + Gets the seconds, according to universal time (from 0-59). + */ + getUTCSeconds(): void + /** + Sets the seconds, according to universal time (from 0-59). + */ + setUTCSeconds(seconds: long): void + /** + Gets the timezone identifier. + */ + getTimezone(): void + /** + Gets a copy of the TZDate converted to a given time zone. + */ + toTimezone(tzid: DOMString): TZDate + /** + Gets a copy of the TZDate converted to the local time zone. + */ + toLocalTimezone(): TZDate + /** + Gets a copy of the TZDate converted to Coordinated Universal Time (UTC). + */ + toUTC(): TZDate + /** + Calculates the difference with another TZDate object. + */ + difference(other: TZDate): TimeDuration + /** + Checks whether the TZDate is equal to another. + */ + equalsTo(other: TZDate): void + /** + Checks whether the TZDate is earlier than another. + */ + earlierThan(other: TZDate): void + /** + Checks whether the TZDate is later than another. + */ + laterThan(other: TZDate): void + /** + Gets a new date by adding a duration to the current TZDate object. + */ + addDuration(duration: TimeDuration): TZDate + /** + Gets the date portion of a TZDate object as a string, using locale conventions. + */ + toLocaleDateString(): void + /** + Gets the time portion of a TZDate object as a string, using locale conventions. + */ + toLocaleTimeString(): void + /** + Converts a TZDate object to a string, using locale conventions. + */ + toLocaleString(): void + /** + Gets the date portion of a TZDate object as a string. + */ + toDateString(): void + /** + Gets the time portion of a TZDate object as a string. + */ + toTimeString(): void + /** + Converts a TZDate object to a string. + */ + toString(): void + /** + Determines the time zone abbreviation to be used at a particular date in the time zone. + */ + getTimezoneAbbreviation(): void + /** + Gets the number of seconds from Coordinated Universal Time (UTC) offset for the timezone. + */ + secondsFromUTC(): void + /** + Checks whether Daylight Saving Time(DST) is active for this TZDate. + */ + isDST(): void + /** + Gets the date of the previous daylight saving time transition for the timezone. + */ + getPreviousDSTTransition(): TZDate + /** + Gets the date of the next daylight saving time transition for the timezone. + */ + getNextDSTTransition(): TZDate +} + +interface TimeDuration { + /** + The duration length. + */ + length: long long; + /** + The duration unit (milliseconds, seconds, minutes, hours, or days). + */ + unit: TimeDurationUnit; + /** + Calculates the difference between two TimeDuration objects. + */ + difference(other: TimeDuration): TimeDuration + /** + Checks whether the TimeDuration is equal to another. + */ + equalsTo(other: TimeDuration): void + /** + Checks whether the TimeDuration is lower than another. + */ + lessThan(other: TimeDuration): void + /** + Checks whether the TimeDuration is greater than another. + */ + greaterThan(other: TimeDuration): void +} + +interface TizenObject { + /** + Object representing a tizen manager. + */ + tizen: Tizen; +} + +interface Bundle { + /** + Gets value stored under given key. + */ + get(key: DOMString): void + /** + Inserts the key-value pair. + */ + set(key: DOMString,value: any): void + /** + Gets type of the value for a given key. + */ + typeOf(key: DOMString): BundleValueType + /** + Calls the callback function for each item stored in the bundle. + */ + forEach(callback: BundleItemCallback): void + /** + Converts bundle to JSON-compatible object. + */ + toJSON(): void + /** + Returns string representation of the bundle's data. + */ + toString(): void +} + +interface AbstractFilter { +} + +interface AttributeFilter { + /** + The name of the object attribute used for filtering. + */ + attributeName: DOMString; + /** + The match flag used for attribute-based filtering. + */ + matchFlag: FilterMatchFlag; + /** + The value used for matching. + */ + matchValue: any; +} + +interface AttributeRangeFilter { + /** + The name of the object attribute used for filtering. + */ + attributeName: DOMString; + /** + Objects with an attribute that is greater than or equal to will match. + */ + initialValue: any; + /** + Objects with an attribute that is strictly lower than or equal to will match. + */ + endValue: any; +} + +interface CompositeFilter { + /** + The composite filter type. + */ + type: CompositeFilterType; + /** + The list of filters in the composite filter. + */ + filters: AbstractFilter[]; +} + +interface SortMode { + /** + The name of the object attribute used for sorting. + */ + attributeName: DOMString; + /** + The type of the sorting. + */ + order: SortModeOrder; +} + +interface SimpleCoordinates { + /** + Latitude. + */ + latitude: double; + /** + Longitude. + */ + longitude: double; +} + +interface WebAPIException { + /** + 16-bit error code. + */ + code: number; + /** + An error type. The name attribute must return the value it had been initialized with. + */ + name: DOMString; + /** + An error message that describes the details of an encountered error. + */ + message: DOMString; +} + +interface WebAPIError { + /** + 16-bit error code. + */ + code: number; + /** + An error type. The name attribute must return the value it had been initialized with. + */ + name: DOMString; + /** + An error message that describes the details of the error encountered. + */ + message: DOMString; +} + +interface SuccessCallback { + /** + Method invoked when the asynchronous call completes successfully. + */ + onsuccess(): void +} + +interface ErrorCallback { + /** + Method that is invoked when an error occurs. + */ + onerror(error: WebAPIError): void +} + +interface BundleItemCallback { + /** + Callback for method. + */ + onitem(key: DOMString,value: any,type: BundleValueType): void +} + +interface VoiceControlClientManagerObject { + /** + Object representing a voice control manager. + */ + voicecontrol: VoiceControlClientManager; +} + +interface VoiceControlClientManager { + /** + Requests voice control Client instance. + */ + getVoiceControlClient(): VoiceControlClient +} + +interface VoiceControlClient { + /** + Gets current language. + */ + getCurrentLanguage(): void + /** + Sets command list. + */ + setCommandList(list: VoiceControlCommand[],type: VoiceControlCommandType): void + /** + Unsets command list. + */ + unsetCommandList(type: VoiceControlCommandType): void + /** + Registers a listener for getting recognition result. + */ + addResultListener(listener: VoiceControlResultCallback): void + /** + Unregisters the listener. + */ + removeResultListener(id: long): void + /** + Registers a callback function to be called when current language is changed. + */ + addLanguageChangeListener(listener: VoiceControlLanguageChangeCallback): void + /** + Unregisters the callback function. + */ + removeLanguageChangeListener(id: long): void + /** + Releases all resources. + */ + release(): void +} + +interface VoiceControlCommand { + /** + The command text + */ + command: DOMString; + /** + The type of the command processing + */ + type: VoiceControlCommandType; +} + +interface VoiceControlLanguageChangeCallback { + /** + Called when default language is changed. + */ + onlanguagechanged(previous: DOMString,current: DOMString): void +} + +interface VoiceControlResultCallback { + /** + Called when client gets the recognition result. + */ + onresult(event: VoiceControlResultEvent,list: VoiceControlCommand[],results: DOMString): void +} + +interface WebSettingObject { + /** + Object representing a web settings manager. + */ + websetting: WebSettingManager; +} + +interface WebSettingManager { + /** + Sets the custom user agent string for your Web application. + */ + setUserAgentString(userAgent: DOMString,successCallback: SuccessCallback,errorCallback: ErrorCallback): void + /** + Removes all the cookies saved for the Web view in your Web application. + */ + removeAllCookies(successCallback: SuccessCallback,errorCallback: ErrorCallback): void +} + +interface WidgetServiceManagerObject { + /** + Object representing a widget service manager. + */ + widgetservice: WidgetServiceManager; +} + +interface WidgetServiceManager { + /** + Retrieves a Widget object with a given . + */ + getWidget(widgetId: WidgetId): Widget + /** + Retrieves a list of all widgets. If package id is provided returned list contains widgets included in a given package only. + */ + getWidgets(successCallback: WidgetArraySuccessCallback,errorCallback: ErrorCallback,packageId: PackageId): void + /** + Returns the primary widget ID of the specified package or application. + */ + getPrimaryWidgetId(id: union): WidgetId + /** + Returns the size corresponding to the given sizeType. + */ + getSize(sizeType: WidgetSizeType): WidgetSize +} + +interface Widget { + /** + Widget ID. + */ + id: WidgetId; + /** + Main application ID. + */ + applicationId: ApplicationId; + /** + Setup application ID. + */ + setupApplicationId: ApplicationId; + /** + The ID of the package this widget was installed with. + */ + packageId: PackageId; + /** + if the widget should be hidden in the list of widgets. + */ + noDisplay: boolean; + /** + Returns a name of the widget in a given locale. + */ + getName(locale: DOMString): void + /** + Retrieves Widget instances (elements that have been added to the screen). Widget instance as opposed to the widget interface (which is abstract of application), is a specified application. + */ + getInstances(successCallback: WidgetInstancesCallback,errorCallback: ErrorCallback): void + /** + Returns object representing widget information related to a given sizeType. + */ + getVariant(sizeType: WidgetSizeType): WidgetVariant + /** + Retrieves Widget Variants representing all of the supported widget size types. + */ + getVariants(successCallback: WidgetVariantsCallback,errorCallback: ErrorCallback): void + /** + Registers a callback which will be called whenever any of this widget instances state changes. + */ + addStateChangeListener(listener: WidgetChangeCallback): void + /** + Unregisters a callback registered under the given watchId. + */ + removeStateChangeListener(watchId: long): void +} + +interface WidgetSize { + /** + The horizontal dimension of the area in pixels. + */ + width: long; + /** + The vertical dimension of the area in pixels. + */ + height: long; +} + +interface WidgetVariant { + /** + The WidgetSizeType this WidgetVariant describes. + */ + sizeType: WidgetSizeType; + /** + Pixel width. + */ + width: long; + /** + Pixel height. + */ + height: long; + /** + The preview image path. + */ + previewImagePath: DOMString; + /** + if the widget was designed to receive mouse events. + */ + needsMouseEvents: boolean; + /** + if the widget expects the system to show touch effect. + */ + needsTouchEffect: boolean; + /** + if the widget expects the system to draw a frame. + */ + needsFrame: boolean; +} + +interface WidgetInstance { + /** + The Widget this instance belongs to. + */ + widget: Widget; + /** + ID of the widget instance, this value is volatile and may change after reboot. + */ + id: WidgetInstanceId; + /** + Changes the interval between automatic update of the widget instance data. Minimum value is second. + */ + changeUpdatePeriod(seconds: double): void + /** + Sends a new content data to the Widget Instance. + */ + sendContent(data: Object,updateIfPaused: boolean): void + /** + Retrieves content data from the Widget Instance. + */ + getContent(successCallback: WidgetContentCallback,errorCallback: ErrorCallback): void +} + +interface WidgetArraySuccessCallback { + /** + Called when the array of objects is retrieved successfully. + */ + onsuccess(widgets: Widget[]): void +} + +interface WidgetInstancesCallback { + /** + Called when the array of objects is retrieved successfully. + */ + onsuccess(instances: WidgetInstance[]): void +} + +interface WidgetVariantsCallback { + /** + Called when the array of objects is retrieved successfully. + */ + onsuccess(instances: WidgetVariant[]): void +} + +interface WidgetContentCallback { + /** + Called when the content of the widget instance is retrieved successfully. + */ + onsuccess(data: Object): void +} + +interface WidgetChangeCallback { + /** + Called when the instance state was changed. + */ + onchange(instance: WidgetInstance,event: WidgetStateType): void +} + +type DOMString = string +type long = number +type boolean = Boolean +type double = number +type ApplicationContextId = DOMString +type ContactId = DOMString +type WidgetInstanceId = DOMString +type AddressBookId = DOMString +type ContactGroupId = DOMString +type SyncProfileId = DOMString +type RawData = DOMString +type AlarmId = DOMString +type ContentDirectoryId = DOMString +type PlaylistId = DOMString +type MessageId = DOMString +type AID = DOMString +type PackageId = DOMString +type BluetoothLESolicitationUUID = DOMString +type PersonId = DOMString +type InputDeviceKeyName = DOMString +type MessageAttachmentId = DOMString +type BluetoothAddress = DOMString +type MessageConvId = DOMString +type NotificationId = DOMString +type CalendarId = DOMString +type ResourceType = DOMString +type ResourceInterface = DOMString +type ApplicationId = DOMString +type MessageFolderId = DOMString +type BluetoothUUID = DOMString +type CalendarTaskId = DOMString +type ContentId = DOMString +type Path = DOMString +type PushRegistrationId = DOMString +type WidgetId = DOMString + +interface Tizen extends AccountManagerObject,AlarmManagerObject,ApplicationManagerObject,ArchiveManagerObject,BadgeManagerObject,BluetoothManagerObject,CalendarManagerObject,CallHistoryObject,ContactManagerObject,ContentManagerObject,DataControlManagerObject,DataSynchronizationManagerObject,DownloadManagerObject,ExifManagerObject,FeedbackManagerObject,FileSystemManagerObject,FMRadioObject,HumanActivityMonitorManagerObject,InputDeviceManagerObject,IotconObject,KeyManagerObject,MediaControllerObject,MediaKeyManagerObject,MessagePortManagerObject,MessageManagerObject,MetadataObject,MachineLearningManagerObject,NetworkBearerSelectionObject,NFCManagerObject,NotificationObject,PackageManagerObject,PlayerUtilManagerObject,PowerManagerObject,PrivacyPrivilegeManagerObject,PreferenceManagerObject,PushManagerObject,SensorServiceManagerObject,SEServiceManagerObject,SoundManagerObject,SystemInfoObject,SystemSettingObject,TimeManagerObject,VoiceControlClientManagerObject,WebSettingObject,WidgetServiceManagerObject{ +} + +declare var tizen: Tizen; + diff --git a/SettingInputmethod/jsconfig.json b/SettingInputmethod/jsconfig.json new file mode 100644 index 0000000..e69de29 diff --git a/SettingInputmethod/tizen_workspace.yaml b/SettingInputmethod/tizen_workspace.yaml new file mode 100644 index 0000000..6a6255a --- /dev/null +++ b/SettingInputmethod/tizen_workspace.yaml @@ -0,0 +1,88 @@ +# Enable auto build file generation +auto_gen_build_files: true +# Workspace type, [native/web/dotnet] +type: hybrid +# Package ID for the Tizen package +package_id: +# version for the Tizen package +version: +# Default profile +profile: tizen +# Tizen API version +api_version: 8.0 +# Path of profiles.xml, containing the signing profiles + # If value is empty, the profiles.xml in the data_path specified in tizen-studio/tools/tizen-core/config.yaml will be used +profiles_xml_path: D:/tizen-sdk-data/profile/profiles.xml +# Signing profile to be used for Tizen package signing + # If value is empty, active signing profile will be used +signing_profile: '' +# Build type [debug/ release/ test] +build_type: debug +# Rootstrap for compiling native app +rootstrap: public +# Default compiler for native app compilation +compiler: llvm +# Default path for dotnet-cli +dotnet_cli_path: +# Default path for msbuild +msbuild_path: +# Default tool for dotnet build [dotnet-cli/ msbuild] +dotnet_build_tool: dotnet-cli +# Default nuget version for Tizen.Net +tizen_net_version: +# Default nuget version for Xamarin.Forms +tizen_net_sdk_verison: 1.2.0 +# Default nuget version for MSBuild.Tasks +xamarin_forms_version: 5.0.0.2515 +# Default nuget version for Tizen.Wearable.CircleUI +msbuild_tasks_version: +# Default nuget version for Tizen.Wearable.CircleUI +tizen_wearable_circleui_version: 1.5.0 +# Default nuget version for Tizen.OpenTK +tizen_opentk_version: 3.0.2 +# Default nuget version for Tizen.NUI.Xaml +tizen_nuixaml_version: 1.0.34 +# Default nuget version for Tizen.HotReload +tizen_hotreload_version: 1.0.1 +# Working folder for dotnet & web workspace, paths to csproj or sln or config.xml, if empty all projects will be build +working_folder: Z:\Input\tizen\setting-inputmethod\SettingInputmethod\SettingInputmethod +# Default path for Google Chrome +chrome_path: +# Default options to be passed to Chrome when running web simulator +chrome_simulator_options: +- --allow-file-access-from-files +- --disable-web-security +- --proxy-auto-detect +# Default path for Web Simulator data +chrome_simulator_data_path: D:\tizen-sdk\tools\websimulator\sdk-profile-data +# Default path for Samsung Tizen TV Simulator +tv_simulator_path: D:\tizen-sdk\tools\sec-tv-simulator\simulator.exe +# Default options to be passed to Chrome when running web inspector +chrome_inspector_options: +- --no-first-run +- --activate-on-launch +- --no-default-browser-check +- --allow-file-access-from-files +- --disable-web-security +- --disable-translate +- --proxy-auto-detect +- --proxy-bypass-list=127.0.0.1 +- --enable-blink-features=ShadowDOMV0 +- --enable-blink-features=CustomElementsV0 +# Default path for Web Inspector data +chrome_inspector_data_path: D:\tizen-sdk-data\chrome-user-data +# default arch for build, [x86/ x86_64/ arm/ aarch64] +arch: x86 +# Enable size optimization of wgt for web workspace +opt: false +# Source files matching these pattern will always be excluded from build +src_file_patterns: +- _exclude* +# Source files matching these patterns will only be included while building in test mode +test_file_patterns: +- _test* +# List of projects in the workspace and their dependencies +projects: + SettingInputmethod: [] +# Skip generating files needed for VS +skip_vs_files: false diff --git a/packaging/org.tizen.cssetting-inputmethod-1.0.0.tpk b/packaging/org.tizen.cssetting-inputmethod-1.0.0.tpk deleted file mode 100644 index 6ef69defa8b2fc5d97d752cf825cf8e84c0167ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169849 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 M06_g268zo&1KhHuMgRZ+ diff --git a/packaging/org.tizen.cssetting-inputmethod-1.1.0.rpk b/packaging/org.tizen.cssetting-inputmethod-1.1.0.rpk new file mode 100644 index 0000000000000000000000000000000000000000..137b66fc7a389fdc48f3cd9555246c87c05540ab GIT binary patch literal 22107 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 O)8p6aC@{A;YyB76p-GMa literal 0 HcmV?d00001 diff --git a/packaging/org.tizen.cssetting-inputmethod.spec b/packaging/org.tizen.cssetting-inputmethod.spec index 1e4597c..1e43ec8 100644 --- a/packaging/org.tizen.cssetting-inputmethod.spec +++ b/packaging/org.tizen.cssetting-inputmethod.spec @@ -1,6 +1,6 @@ Name: org.tizen.cssetting-inputmethod Summary: org.tizen.cssetting-inputmethod -Version: 1.0.0 +Version: 1.1.0 Release: 1 Group: N/A License: Apache-2.0 @@ -9,13 +9,12 @@ Source0: %{name}-%{version}.tar.gz ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 riscv64 BuildRequires: pkgconfig(libtzplatform-config) -Requires(post): /usr/bin/tpk-backend +Requires(post): /usr/bin/unified-backend -%define internal_name org.tizen.cssetting-inputmethod -%define preload_tpk_path %{TZ_SYS_RO_APP}/.preload-tpk +%define preload_rpk_path %{TZ_SYS_RO_APP}/.preload-rpk %description -NUI Setting Application for ISF. +NUI Setting Application for Inputmethod. %prep %setup -q @@ -24,12 +23,12 @@ NUI Setting Application for ISF. %install rm -rf %{buildroot} -mkdir -p %{buildroot}/%{preload_tpk_path} -install packaging/%{internal_name}-%{version}.tpk %{buildroot}/%{preload_tpk_path}/ +mkdir -p %{buildroot}/%{preload_rpk_path} +install packaging/%{name}-%{version}.rpk %{buildroot}/%{preload_rpk_path}/ %post %files %defattr(-,root,root,-) -%{preload_tpk_path}/* +%{preload_rpk_path}/* %license LICENSE -- 2.34.1