Separate SettingMainGadget to gadget solution.
authorPiotr Czaja/Advanced Frameworks (PLT) /SRPOL/Engineer/Samsung Electronics <p.czaja@samsung.com>
Thu, 13 Apr 2023 10:14:34 +0000 (12:14 +0200)
committerPiotr Czaja/Tizen Services & IoT (PLT) /SRPOL/Engineer/Samsung Electronics <p.czaja@samsung.com>
Thu, 20 Apr 2023 07:31:59 +0000 (09:31 +0200)
Change-Id: Ie83912f9a7cafe826ec15d6554a6dcc68af12a88

102 files changed:
SettingMainGadget/.gitattributes [new file with mode: 0644]
SettingMainGadget/.gitignore [new file with mode: 0644]
SettingMainGadget/About/AboutDeviceStatusGadget.cs [deleted file]
SettingMainGadget/About/AboutLegalInfoGadget.cs [deleted file]
SettingMainGadget/About/AboutManageCertificatesGadget.cs [deleted file]
SettingMainGadget/About/AboutScalableGadget.cs [deleted file]
SettingMainGadget/AboutGadget.cs [deleted file]
SettingMainGadget/DateTime/DateTimeManager.cs [deleted file]
SettingMainGadget/DateTime/DateTimeSetDateGadget.cs [deleted file]
SettingMainGadget/DateTime/DateTimeSetTimeGadget.cs [deleted file]
SettingMainGadget/DateTime/DateTimeSetTimezoneGadget.cs [deleted file]
SettingMainGadget/DateTime/DateTimeTimezoneManager.cs [deleted file]
SettingMainGadget/DateTime/Interop.Alarm.cs [deleted file]
SettingMainGadget/DateTimeGadget.cs [deleted file]
SettingMainGadget/Display/DisplayFontGadget.cs [deleted file]
SettingMainGadget/Display/DisplayFontSizeGadget.cs [deleted file]
SettingMainGadget/Display/DisplayFontTypeGadget.cs [deleted file]
SettingMainGadget/Display/DisplayGadget.cs [deleted file]
SettingMainGadget/Display/DisplayThemeGadget.cs [deleted file]
SettingMainGadget/Display/DisplayThemeManager.cs [deleted file]
SettingMainGadget/Display/DisplayTimeOutGadget.cs [deleted file]
SettingMainGadget/Display/DisplayTimeOutManager.cs [deleted file]
SettingMainGadget/LanguageInput/LanguageInputDisplayLanguageGadget.cs [deleted file]
SettingMainGadget/LanguageInput/LanguageInputDisplayLanguageManager.cs [deleted file]
SettingMainGadget/LanguageInputGadget.cs [deleted file]
SettingMainGadget/MainMenuProvider.cs [deleted file]
SettingMainGadget/SettingMainGadget.csproj [deleted file]
SettingMainGadget/SettingMainGadget.sln [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/About/AboutDeviceStatusGadget.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/About/AboutLegalInfoGadget.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/About/AboutManageCertificatesGadget.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/About/AboutScalableGadget.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/AboutGadget.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/DateTime/DateTimeManager.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/DateTime/DateTimeSetDateGadget.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/DateTime/DateTimeSetTimeGadget.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/DateTime/DateTimeSetTimezoneGadget.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/DateTime/DateTimeTimezoneManager.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/DateTime/Interop.Alarm.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/DateTimeGadget.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/Directory.Build.targets [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/Display/DisplayFontGadget.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/Display/DisplayFontSizeGadget.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/Display/DisplayFontTypeGadget.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/Display/DisplayGadget.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/Display/DisplayThemeGadget.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/Display/DisplayThemeManager.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/Display/DisplayTimeOutGadget.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/Display/DisplayTimeOutManager.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/LanguageInput/LanguageInputDisplayLanguageGadget.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/LanguageInput/LanguageInputDisplayLanguageManager.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/LanguageInputGadget.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/MainMenuProvider.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/SettingMainGadget.csproj [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/Sound/SettingAudioManager.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/Sound/SoundGadget.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/Sound/SoundNotificationManager.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/Sound/SoundmodeGadget.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/Sound/SoundmodeManager.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/Sound/SoundnotificationGadget.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/Sound/SoundotherGadget.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/Storage/DefaultStorageGadget.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/StorageGadget.cs [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/about.svg [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/datetime.svg [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/display.svg [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/fonts/ClimateCrisis-Regular.ttf [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/fonts/DancingScript-Regular.ttf [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/fonts/Sono-Regular.ttf [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/language_input.svg [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/media/Ringtones/ringtone_sdk.mp3 [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/sound.svg [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/sound/sound_slider_icon_default.png [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/storage.svg [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/tizen-manifest.xml [new file with mode: 0644]
SettingMainGadget/SettingMainGadget/tizen_dotnet_project.yaml [new file with mode: 0644]
SettingMainGadget/Sound/SettingAudioManager.cs [deleted file]
SettingMainGadget/Sound/SoundGadget.cs [deleted file]
SettingMainGadget/Sound/SoundNotificationManager.cs [deleted file]
SettingMainGadget/Sound/SoundmodeGadget.cs [deleted file]
SettingMainGadget/Sound/SoundmodeManager.cs [deleted file]
SettingMainGadget/Sound/SoundnotificationGadget.cs [deleted file]
SettingMainGadget/Sound/SoundotherGadget.cs [deleted file]
SettingMainGadget/Storage/DefaultStorageGadget.cs [deleted file]
SettingMainGadget/StorageGadget.cs [deleted file]
SettingMainGadget/index.d.ts [new file with mode: 0644]
SettingMainGadget/jsconfig.json [new file with mode: 0644]
SettingMainGadget/resources/about.svg [deleted file]
SettingMainGadget/resources/datetime.svg [deleted file]
SettingMainGadget/resources/display.svg [deleted file]
SettingMainGadget/resources/fonts/ClimateCrisis-Regular.ttf [deleted file]
SettingMainGadget/resources/fonts/DancingScript-Regular.ttf [deleted file]
SettingMainGadget/resources/fonts/Sono-Regular.ttf [deleted file]
SettingMainGadget/resources/language_input.svg [deleted file]
SettingMainGadget/resources/media/Ringtones/ringtone_sdk.mp3 [deleted file]
SettingMainGadget/resources/sound.svg [deleted file]
SettingMainGadget/resources/sound/sound_slider_icon_default.png [deleted file]
SettingMainGadget/resources/storage.svg [deleted file]
SettingMainGadget/resources/tizen-manifest.xml [deleted file]
SettingMainGadget/tizen_workspace.yaml [new file with mode: 0644]
SettingView/SettingView.csproj
Settings.sln

diff --git a/SettingMainGadget/.gitattributes b/SettingMainGadget/.gitattributes
new file mode 100644 (file)
index 0000000..57df8ce
--- /dev/null
@@ -0,0 +1,13 @@
+* text=auto eol=lf
+*.png   binary
+*.tpk   binary
+*.rpk   binary
+*.wav   binary
+*.mp3   binary
+*.dll   binary
+*.cs        eol=lf
+*.csproj    eol=lf
+*.sln       eol=lf
+*.xml       eol=lf
+*.svg       eol=lf
+*.xaml      eol=lf
diff --git a/SettingMainGadget/.gitignore b/SettingMainGadget/.gitignore
new file mode 100644 (file)
index 0000000..881c36d
--- /dev/null
@@ -0,0 +1,9 @@
+**/.vs/
+**/.vscode/
+**/[Oo]bj/
+**/[Bb]in/
+**/[Dd]ebug/
+**/[Rr]elease/
+**/.gn
+**/[Bb]uild/
+**/res/allowed/*.dll
diff --git a/SettingMainGadget/About/AboutDeviceStatusGadget.cs b/SettingMainGadget/About/AboutDeviceStatusGadget.cs
deleted file mode 100644 (file)
index ca7d81e..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-using SettingCore.TextResources;
-using SettingCore;
-using SettingCore.Views;
-using SettingMainGadget;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using Tizen.NUI;
-using Tizen.NUI.BaseComponents;
-using Tizen.NUI.Components;
-using Tizen.System;
-using Tizen.Telephony;
-
-namespace Setting.Menu
-{
-    public class AboutDeviceStatusGadget : SettingCore.MenuGadget
-    {
-        private SystemCpuUsage systemCpuUsage;
-        private TextListItem cpuUsage;
-        private Timer timer;
-        private View content;
-        private Sections sections = new Sections();
-
-        public override string ProvideTitle() => Resources.IDS_ST_MBODY_DEVICE_STATUS;
-    
-        protected override View OnCreate()
-        {
-            base.OnCreate();
-
-            content = new ScrollableBase()
-            {
-                WidthSpecification = LayoutParamPolicies.MatchParent,
-                HeightSpecification = LayoutParamPolicies.MatchParent,
-                ScrollingDirection = ScrollableBase.Direction.Vertical,
-                HideScrollbar = false,
-                Layout = new LinearLayout()
-                {
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-
-            CreateView();
-
-            return content;
-        }
-
-        protected override void OnDestroy()
-        {
-            base.OnDestroy();
-            timer.Tick -= timerTick;
-            timer.Stop();
-        }
-
-        private void CreateView()
-        {
-            sections.RemoveAllSectionsFromView(content);
-#if false
-            IEnumerable<SlotHandle> handlelist = Tizen.Telephony.Manager.Init();
-            if (handlelist != null)
-            {
-                IEnumerator<SlotHandle> enumerator = handlelist.GetEnumerator();
-
-                Sim sim = new Sim(enumerator.Current);
-                if (sim != null)
-                {
-                    item = SettingItemCreator.CreateItemWithCheck(Resources.IDS_ST_BODY_PHONE_NUMBER, sim.SubscriberNumber);
-                    content.Add(item);
-                }
-
-                Modem modem = new Modem(enumerator.Current);
-                if (modem != null)
-                {
-                    item = SettingItemCreator.CreateItemWithCheck(Resources.IDS_ST_BODY_IMEI, modem.Imei);
-                    content.Add(item);
-                }
-
-                Tizen.Telephony.Manager.Deinit();
-            }
-#endif
-
-
-#if true
-            string addressBT = Resources.IDS_ST_HEADER_UNAVAILABLE;
-            try
-            {
-                if (Tizen.Network.Bluetooth.BluetoothAdapter.IsBluetoothEnabled)
-                    addressBT = Tizen.Network.Bluetooth.BluetoothAdapter.Address;
-                else
-                    addressBT = Resources.IDS_ST_SBODY_DISABLED;
-            }
-            catch (Exception e)
-            {
-                Logger.Warn($"Could not get bluetooth address.");
-            }
-
-            var btAddress = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_MBODY_BLUETOOTH_ADDRESS, addressBT);
-            if (btAddress != null)
-            {
-                sections.Add(MainMenuProvider.About_DeviceStatus_bt_address, btAddress);
-            }
-#endif
-
-#if true
-            string addressMac = Resources.IDS_ST_HEADER_UNAVAILABLE;
-            if (Tizen.Network.WiFi.WiFiManager.IsActive)
-                addressMac = Tizen.Network.WiFi.WiFiManager.MacAddress;
-            else
-                addressMac = Resources.IDS_ST_SBODY_DISABLED;
-
-            var wifiMacAddress = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_WI_FI_MAC_ADDRESS, addressMac);
-            if (wifiMacAddress != null)
-            {
-                sections.Add(MainMenuProvider.About_DeviceStatus_wifi_mac_address, wifiMacAddress);
-
-            }
-#endif
-            ulong total = 0, available = 0;
-            foreach (var deviceStorage in StorageManager.Storages)
-            {
-                total += deviceStorage.TotalSpace;
-                available += deviceStorage.AvailableSpace;
-            }
-
-            var storage = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_STORAGE,
-                $"{bytesToGB(available).ToString("0.##")}GB available (Total {bytesToGB(total).ToString("0.##")}GB)");
-            if (storage != null)
-            {
-                sections.Add(MainMenuProvider.About_DeviceStatus_storage, storage);
-            }
-
-#if true
-            systemCpuUsage = new SystemCpuUsage();
-            cpuUsage = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_CPU_USAGE, getCpuUsageFormated());
-            if (cpuUsage != null)
-            {
-                sections.Add(MainMenuProvider.About_DeviceStatus_cpu_usage, cpuUsage);
-                startTimer();
-            }
-#endif
-
-            // add only visible sections to content view in required order
-            var customization = GetCustomization().OrderBy(c => c.Order);
-            foreach (var cust in customization)
-            {
-                string visibility = cust.IsVisible ? "visible" : "hidden";
-                Logger.Verbose($"Customization: {cust.MenuPath} - {visibility} - {cust.Order}");
-                if (cust.IsVisible && sections.TryGetValue(cust.MenuPath, out View row))
-                {
-                    content.Add(row);
-                }
-            }
-        }
-
-        protected override void OnCustomizationUpdate(IEnumerable<MenuCustomizationItem> items)
-        {
-            Logger.Verbose($"{nameof(AboutGadget)} got customization with {items.Count()} items. Recreating view.");
-            CreateView();
-        }
-        private double bytesToGB(double b)
-        {
-            return b / (1024 * 1024 * 1024);
-        }
-
-        private string getCpuUsageFormated()
-        {
-            string system = (systemCpuUsage.System/100).ToString("0.#%");
-            Logger.Verbose($"CPU usage: {system}");
-            return system;
-        }
-
-        private void startTimer()
-        {
-            timer = new Timer(1000);
-            timer.Tick += timerTick;
-            timer.Start();
-        }
-
-        private bool timerTick(object source, Timer.TickEventArgs e)
-        {
-            systemCpuUsage.Update();
-            var system = getCpuUsageFormated();
-            cpuUsage.Secondary = system;
-
-            return true;
-        }
-    }
-}
diff --git a/SettingMainGadget/About/AboutLegalInfoGadget.cs b/SettingMainGadget/About/AboutLegalInfoGadget.cs
deleted file mode 100644 (file)
index 4086940..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-using SettingCore.TextResources;
-using Tizen.NUI.BaseComponents;
-
-namespace Setting.Menu
-{
-    public class AboutLegalInfoGadget : SettingCore.MenuGadget
-    {
-        const string LegalinfoURL = "file:///usr/share/license.html";
-        public override string ProvideTitle() => Resources.IDS_ST_BODY_OPEN_SOURCE_LICENCES;
-
-        protected override View OnCreate()
-        {
-            base.OnCreate();
-            WebView view = new WebView();
-            view.LoadUrl(LegalinfoURL);
-
-            return view;
-        }
-    }
-}
diff --git a/SettingMainGadget/About/AboutManageCertificatesGadget.cs b/SettingMainGadget/About/AboutManageCertificatesGadget.cs
deleted file mode 100644 (file)
index 035c2c4..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace SettingMainGadget.About
-{
-    public class AboutManageCertificatesGadget : SettingCore.MenuGadget
-    {
-        public override string ProvideTitle()
-        {
-            throw new NotImplementedException();
-        }
-    }
-}
diff --git a/SettingMainGadget/About/AboutScalableGadget.cs b/SettingMainGadget/About/AboutScalableGadget.cs
deleted file mode 100644 (file)
index 414e526..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-using SettingCore;
-using SettingCore.Views;
-using Tizen.NUI;
-using Tizen.NUI.BaseComponents;
-using Tizen.NUI.Components;
-
-namespace SettingMainGadget.About
-{
-    public class AboutScalableGadget : SettingCore.MenuGadget
-    {
-        public override string ProvideTitle() => "Scalable UI for Developers";
-
-        protected override View OnCreate()
-        {
-            base.OnCreate();
-
-            var content = new ScrollableBase()
-            {
-                WidthSpecification = LayoutParamPolicies.MatchParent,
-                HeightSpecification = LayoutParamPolicies.MatchParent,
-                ScrollingDirection = ScrollableBase.Direction.Vertical,
-                HideScrollbar = false,
-                ThemeChangeSensitive = true,
-                Layout = new LinearLayout()
-                {
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-
-            var scalable = new (string, string)[]
-            {
-                ("Scaling Factor", $"{GraphicsTypeManager.Instance.ScalingFactor}"),
-                ("DPI", $"{GraphicsTypeManager.Instance.Dpi}"),
-                ("Scaled DPI", $"{GraphicsTypeManager.Instance.ScaledDpi}"),
-                ("Baseline DPI", $"{GraphicsTypeManager.Instance.BaselineDpi}"),
-                ("Density", $"{GraphicsTypeManager.Instance.Density}"),
-                ("Scaled Density", $"{GraphicsTypeManager.Instance.ScaledDensity}"),
-                ("100dp scaled is displayed as:", $"{GraphicsTypeManager.Instance.ConvertScriptToPixel("100dp")}px"),
-                ("100sp scaled is displayed as:", $"{GraphicsTypeManager.Instance.ConvertScriptToPixel("100sp")}px"),
-            };
-            foreach (var (title, value) in scalable)
-            {
-                var row = TextListItem.CreatePrimaryTextItemWithSecondaryText(title, value);
-                content.Add(row);
-            }
-
-            var hideButton = new Button()
-            {
-                Text = "Hide menu: Scalable UI for Developers",
-                WidthSpecification = LayoutParamPolicies.MatchParent,
-            };
-            hideButton.TextLabel.PixelSize = 24.SpToPx();
-            hideButton.TextLabel.Margin = new Extents(0, 0, 16, 16).SpToPx();
-            hideButton.Clicked += (s, e) =>
-            {
-                GadgetManager.Instance.ChangeMenuPathOrder(MainMenuProvider.About_ScalableUI, -30);
-                NavigateBack();
-            };
-            content.Add(hideButton);
-
-            return content;
-        }
-    }
-}
diff --git a/SettingMainGadget/AboutGadget.cs b/SettingMainGadget/AboutGadget.cs
deleted file mode 100644 (file)
index 036268f..0000000
+++ /dev/null
@@ -1,364 +0,0 @@
-using SettingCore.TextResources;
-using SettingCore;
-using SettingCore.Views;
-using SettingMainGadget;
-using System.Collections.Generic;
-using System.Linq;
-using Tizen;
-using Tizen.NUI;
-using Tizen.NUI.BaseComponents;
-using Tizen.NUI.Components;
-using Tizen.System;
-using System;
-
-namespace Setting.Menu
-{
-    public class AboutGadget : SettingCore.MainMenuGadget
-    {
-        private const int MAX_DEVICE_NAME_LEN = 32;
-        private TextListItem renameDevice;
-        private string VconfDeviceName = "db/setting/device_name";
-        private string SystemModelName = "tizen.org/system/model_name";
-
-        private Sections sections = new Sections();
-        private View content;
-        private TextField textField;
-        private TextLabel warning;
-        private Button renameButton;
-        private string deviceName;
-        private bool isLightTheme => ThemeManager.PlatformThemeId == "org.tizen.default-light-theme";
-
-        public override Color ProvideIconColor() => new Color(IsLightTheme ? "#301A4B" : "#CAB4E5");
-
-        public override string ProvideIconPath() => GetResourcePath("about.svg");
-
-        public override string ProvideTitle() => Resources.IDS_ST_BODY_ABOUT_DEVICE;
-
-        protected override View OnCreate()
-        {
-            base.OnCreate();
-            content = new ScrollableBase()
-            {
-                WidthSpecification = LayoutParamPolicies.MatchParent,
-                HeightSpecification = LayoutParamPolicies.MatchParent,
-                ScrollingDirection = ScrollableBase.Direction.Vertical,
-                HideScrollbar = false,
-                ThemeChangeSensitive = true,
-                Layout = new LinearLayout()
-                {
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-
-            SystemSettings.DeviceNameChanged += SystemSettings_DeviceNameChanged;
-            CreateView();
-
-            return content;
-        }
-
-        protected override void OnDestroy()
-        {
-            SystemSettings.DeviceNameChanged -= SystemSettings_DeviceNameChanged;
-
-            base.OnDestroy();
-        }
-
-        private void SystemSettings_DeviceNameChanged(object sender, DeviceNameChangedEventArgs e)
-        {
-            Logger.Verbose($"Device name changed: {e.Value}");
-            deviceName = e.Value;
-            renameDevice.Secondary = e.Value;
-        }
-
-
-        private void CreateView()
-        {
-            sections.RemoveAllSectionsFromView(content);
-
-            var manageCertificates = TextListItem.CreatePrimaryTextItem(Resources.IDS_ST_HEADER_MANAGE_CERTIFICATES_ABB);
-            manageCertificates.Clicked += (s, e) =>
-            {
-                NavigateTo(MainMenuProvider.About_ManageCertificates);
-            };
-            sections.Add(MainMenuProvider.About_ManageCertificates, manageCertificates);
-
-            var openSourceLicenses = TextListItem.CreatePrimaryTextItem(Resources.IDS_ST_BODY_OPEN_SOURCE_LICENCES);
-            openSourceLicenses.Clicked += (s, e) =>
-            {
-                NavigateTo(MainMenuProvider.About_OpenSourceLicenses);
-            };
-            sections.Add(MainMenuProvider.About_OpenSourceLicenses, openSourceLicenses);
-
-            var scalableUI = TextListItem.CreatePrimaryTextItem("Scalable UI for Developers");
-            scalableUI.Clicked += (s, e) =>
-            {
-                NavigateTo(MainMenuProvider.About_ScalableUI);
-            };
-            sections.Add(MainMenuProvider.About_ScalableUI, scalableUI);
-
-            var deviceInfo = new TextHeaderListItem(Resources.IDS_ST_BODY_DEVICE_INFO);
-            sections.Add(MainMenuProvider.About_DeviceInfo, deviceInfo);
-
-            if (Vconf.TryGetString(VconfDeviceName, out deviceName))
-            {
-                Logger.Warn($"Could not get vconf value: {VconfDeviceName}");
-            }
-
-            renameDevice = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_NAME, deviceName);
-            renameDevice.Clicked += (s, e) =>
-            {
-                ShowRenamePopup(deviceName);
-            };
-            sections.Add(MainMenuProvider.About_RenameDevice, renameDevice);
-
-            bool result = Tizen.System.Information.TryGetValue<string>("http://tizen.org/system/model_name", out string modelNumberText);
-            var modelNumber = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_MODEL_NUMBER, result ? modelNumberText : Resources.IDS_ST_HEADER_UNAVAILABLE);
-            sections.Add(MainMenuProvider.About_ModelNumber, modelNumber);
-
-            result = Tizen.System.Information.TryGetValue<string>("http://tizen.org/feature/platform.version", out string platformVersionText);
-            var platformVersion = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_MBODY_TIZEN_VERSION, result ? platformVersionText : Resources.IDS_ST_HEADER_UNAVAILABLE);
-            platformVersion.MultiTap += (s, e) =>
-            {
-                GadgetManager.Instance.ChangeMenuPathOrder(MainMenuProvider.About_ScalableUI, 30);
-
-                var toast = Notification.MakeToast("Scalable UI for Developers menu enabled", Notification.ToastCenter);
-                toast.Post(1000);
-            };
-            sections.Add(MainMenuProvider.About_TizenVersion, platformVersion);
-
-            result = Tizen.System.Information.TryGetValue<string>("http://tizen.org/system/platform.processor", out string platformProcessorText);
-            var cpu = TextListItem.CreatePrimaryTextItemWithSecondaryText("CPU", result ? platformProcessorText : Resources.IDS_ST_HEADER_UNAVAILABLE);
-            sections.Add(MainMenuProvider.About_Cpu, cpu);
-
-            var memusage = new Tizen.System.SystemMemoryUsage();
-            float ram_total_gb = memusage.Total / (float)(1024 * 1024);
-            var ram = TextListItem.CreatePrimaryTextItemWithSecondaryText("RAM", string.Format("{0:0.0} GB", ram_total_gb));
-            sections.Add(MainMenuProvider.About_Ram, ram);
-
-            bool result1 = Tizen.System.Information.TryGetValue<int>("http://tizen.org/feature/screen.width", out int screenwidth);
-            bool result2 = Tizen.System.Information.TryGetValue<int>("http://tizen.org/feature/screen.height", out int screenheight);
-
-            var resolution = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_RESOLUTION, result1 && result2 ? $"{screenwidth} x {screenheight}" : Resources.IDS_ST_HEADER_UNAVAILABLE);
-            sections.Add(MainMenuProvider.About_Resolution, resolution);
-
-            if (IsEmulBin() == false)
-            {
-                var showOther = TextListItem.CreatePrimaryTextItemWithSubText(Resources.IDS_ST_BODY_STATUS, Resources.IDS_ST_BODY_SHOW_NETWORK_STATUS_AND_OTHER_INFORMATION);
-                showOther.Clicked += (s, e) =>
-                {
-                    NavigateTo(MainMenuProvider.About_DeviceStatus);
-                };
-                sections.Add(MainMenuProvider.About_DeviceStatus, showOther);
-            }
-
-            // add only visible sections to content view in required order
-            var customization = GetCustomization().OrderBy(c => c.Order);
-            foreach (var cust in customization)
-            {
-                string visibility = cust.IsVisible ? "visible" : "hidden";
-                Logger.Verbose($"Customization: {cust.MenuPath} - {visibility} - {cust.Order}");
-                if (cust.IsVisible && sections.TryGetValue(cust.MenuPath, out View row))
-                {
-                    content.Add(row);
-                }
-            }
-        }
-
-        protected override void OnCustomizationUpdate(IEnumerable<MenuCustomizationItem> items)
-        {
-            Logger.Verbose($"{nameof(AboutGadget)} got customization with {items.Count()} items. Recreating view.");
-            CreateView();
-        }
-
-        private bool IsEmulBin()
-        {
-            Information.TryGetValue<string>(SystemModelName, out string model);
-            return (model.Equals("Emulator") || model.Equals("EMULATOR"));
-        }
-
-        private void ShowRenamePopup(string name)
-        {
-            var content = new View()
-            {
-                BackgroundColor = isLightTheme ? new Color("#FAFAFA") : new Color("#16131A"),
-                WidthSpecification = LayoutParamPolicies.WrapContent,
-                HeightSpecification = LayoutParamPolicies.WrapContent,
-                Layout = new LinearLayout()
-                {
-                    HorizontalAlignment = HorizontalAlignment.Center,
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-
-            //title text
-            var textTitle = new TextLabel(Resources.IDS_ST_HEADER_RENAME_DEVICE)
-            {
-                FontFamily = "BreezeSans",
-                PixelSize = 24.SpToPx(),
-                Margin = new Extents(0, 0, 24, 16).SpToPx(),
-            };
-
-            content.Add(textTitle);
-
-            // main text
-            var textSubTitle = new TextLabel(Resources.IDS_ST_BODY_DEVICE_NAMES_ARE_DISPLAYED)
-            {
-                FontFamily = "BreezeSans",
-                PixelSize = 24.SpToPx(),
-                SizeWidth = 618.SpToPx(),
-                MultiLine = true,
-                LineWrapMode = LineWrapMode.Word,
-                Margin = new Extents(24, 24, 0, 24).SpToPx(),
-            };
-            content.Add(textSubTitle);
-
-            //entry view
-            PropertyMap placeholder = new PropertyMap();
-            placeholder.Add("color", new PropertyValue(isLightTheme ? new Color("#CACACA") : new Color("#666666")));
-            placeholder.Add("fontFamily", new PropertyValue("BreezeSans"));
-            placeholder.Add("pixelSize", new PropertyValue(24.SpToPx()));
-            placeholder.Add("text", new PropertyValue("Type text"));
-
-            View entryView = new View()
-            {
-                WidthSpecification = LayoutParamPolicies.WrapContent,
-                HeightSpecification = LayoutParamPolicies.WrapContent,
-                Layout = new LinearLayout()
-                {
-                    LinearOrientation = LinearLayout.Orientation.Horizontal,
-                },
-                Margin = new Extents(48, 50, 0, 7).SpToPx(),
-            };
-            textField = new TextField
-            {
-                FontFamily = "BreezeSans",
-                SizeWidth = 544.SpToPx(),
-                Placeholder = placeholder,
-                BackgroundColor = isLightTheme ? new Color("#FAFAFA") : new Color("#1D1A21"),
-                MaxLength = MAX_DEVICE_NAME_LEN,
-                EnableCursorBlink = true,
-                PixelSize = 24.SpToPx(),
-                Text = name,
-                Margin = new Extents(0, 26, 0, 0).SpToPx(),
-            };
-            textField.TextChanged += TextField_TextChanged;
-            CancelButton cancelTextButton = new CancelButton();
-            cancelTextButton.Clicked += cancelTextButton_Clicked;
-
-            entryView.Add(textField);
-            entryView.Add(cancelTextButton);
-            content.Add(entryView);
-
-            // separator
-            View separatorWrapper = new View()
-            {
-                Layout = new LinearLayout()
-                {
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-
-            View separator = new View
-            {
-                Size = new Size(576.SpToPx(), 1),
-                BackgroundColor = new Color("#FF6200"),
-                Margin = new Extents(32, 82, 0, 16).SpToPx(),
-            };
-            separatorWrapper.Add(separator);
-            content.Add(separatorWrapper);
-
-            // warn label
-            View warningWrapper = new View()
-            {
-                WidthSpecification = LayoutParamPolicies.WrapContent,
-                HeightSpecification = LayoutParamPolicies.WrapContent,
-                Layout = new LinearLayout()
-                {
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-
-            warning = new TextLabel(Resources.IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED)
-            {
-                SizeWidth = 618.SpToPx(),
-                PixelSize = 16.SpToPx(),
-                TextColor = new Color("#A40404"),
-                Margin = new Extents(32, 40, 0, 25).SpToPx(),
-            };
-            warningWrapper.Add(warning);
-            content.Add(warningWrapper);
-
-            // buttons
-            View buttons = new View()
-            {
-                WidthSpecification = LayoutParamPolicies.WrapContent,
-                HeightSpecification = LayoutParamPolicies.WrapContent,
-                Layout = new LinearLayout()
-                {
-                    LinearOrientation = LinearLayout.Orientation.Horizontal,
-                },
-                Padding = new Extents(32, 32, 0, 32).SpToPx(),
-            };
-
-            renameButton = new Button()
-            {
-                WidthResizePolicy = ResizePolicyType.FitToChildren,
-                HeightResizePolicy = ResizePolicyType.FitToChildren,
-                Text = Resources.IDS_ST_BUTTON_RENAME,
-                Size = new Size(252, 48).SpToPx(),
-                Margin = new Extents(61, 0, 0, 0).SpToPx(),
-            };
-            renameButton.Clicked += (object sender, ClickedEventArgs e) => {
-                Vconf.SetString(VconfDeviceName, textField.Text);
-                NUIApplication.GetDefaultWindow().GetDefaultNavigator().Pop();
-            };
-
-            var cancelButton = new Button("Tizen.NUI.Components.Button.Outlined")
-            {
-                WidthResizePolicy = ResizePolicyType.FitToChildren,
-                HeightResizePolicy = ResizePolicyType.FitToChildren,
-                Text = Resources.IDS_ST_BUTTON_CANCEL,
-                Size = new Size(252, 48).SpToPx(),
-                Margin = new Extents(61, 0, 0, 0).SpToPx(),
-            };
-
-            cancelButton.Clicked += (object sender, ClickedEventArgs e) => { NUIApplication.GetDefaultWindow().GetDefaultNavigator().Pop(); };
-            buttons.Add(cancelButton);
-            buttons.Add(renameButton);
-
-            content.Add(buttons);
-            checkNameLength(textField);
-
-            RoundedDialogPage.ShowDialog(content);
-        }
-
-        private void TextField_TextChanged(object sender, TextField.TextChangedEventArgs e)
-        {
-            checkNameLength(e.TextField);
-        }
-
-        private void checkNameLength(TextField textField)
-        {
-            if (textField.Text.Length >= MAX_DEVICE_NAME_LEN)
-            {
-                warning.Show();
-                renameButton.IsEnabled = false;
-            }
-            else
-            {
-                warning.Hide();
-                renameButton.IsEnabled = true;
-            }
-
-            if (textField.Text == string.Empty)
-            {
-                renameButton.IsEnabled = false;
-            }
-        }
-
-        private void cancelTextButton_Clicked(object sender, ClickedEventArgs e)
-        {
-            textField.Text = string.Empty;
-        }
-    }
-}
diff --git a/SettingMainGadget/DateTime/DateTimeManager.cs b/SettingMainGadget/DateTime/DateTimeManager.cs
deleted file mode 100644 (file)
index e7a8405..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-using SettingCore;
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace SettingMainGadget.DateTime
-{
-    public static class DateTimeManager
-    {
-        private const string VconfAutoDateTimeUpdate = "db/setting/automatic_time_update";
-        private const string VconfTimeFormat = "db/menu_widget/regionformat_time1224";
-
-        public static bool Is24HourFormat
-        {
-            get
-            {
-                if (!Tizen.Vconf.TryGetInt(VconfTimeFormat, out int timeformat))
-                {
-                    Logger.Warn($"could not get value for {VconfTimeFormat}");
-                }
-
-                return timeformat.Equals(2) ? true : false;
-            }
-            set
-            {
-                Tizen.Vconf.SetInt(VconfTimeFormat, value ? 2 : 1);
-                Logger.Debug(String.Format("time format changed to: {0}", value ? "24h" : "12h"));
-            }
-        }
-
-        public static bool AutoTimeUpdate
-        {
-            get
-            {
-                if (!Tizen.Vconf.TryGetBool(VconfAutoDateTimeUpdate, out bool autoUpdate))
-                {
-                    Logger.Warn($"could not get value for {VconfAutoDateTimeUpdate}");
-                }
-
-                return autoUpdate;
-            }
-            set
-            {
-                Tizen.Vconf.SetBool(VconfAutoDateTimeUpdate, value);
-                Logger.Debug($"date & time auto update value: {value}");
-            }
-        }
-
-        public static string FormattedTime
-        {
-            get => System.DateTime.Now.ToString(Is24HourFormat ? "HH:mm" : "h:mm tt");
-        }
-    }
-}
diff --git a/SettingMainGadget/DateTime/DateTimeSetDateGadget.cs b/SettingMainGadget/DateTime/DateTimeSetDateGadget.cs
deleted file mode 100644 (file)
index 3f13d3c..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-using SettingCore.TextResources;
-using SettingCore;
-using System;
-using Tizen.NUI;
-using Tizen.NUI.BaseComponents;
-using Tizen.NUI.Components;
-
-namespace Setting.Menu.DateTime
-{
-    public class DateTimeSetDateGadget : SettingCore.MenuGadget
-    {
-        public override string ProvideTitle() => Resources.IDS_ST_BODY_SET_DATE;
-
-        protected override View OnCreate()
-        {
-            base.OnCreate();
-
-            var content = new View()
-            {
-                WidthSpecification = LayoutParamPolicies.MatchParent,
-                HeightSpecification = LayoutParamPolicies.MatchParent,
-                Layout = new LinearLayout()
-                {
-                    HorizontalAlignment = HorizontalAlignment.Center,
-                    VerticalAlignment = VerticalAlignment.Center,
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-
-            var datepicker = new DatePicker()
-            {
-                Date = System.DateTime.Now,
-                HeightResizePolicy = ResizePolicyType.FitToChildren,
-            };
-
-            var button = new Button("Tizen.NUI.Components.Button.Outlined")
-            {
-                Text = Resources.IDS_ST_BUTTON_OK,
-                Size = new Size(252, 48).SpToPx(),
-                WidthResizePolicy = ResizePolicyType.FitToChildren,
-                HeightResizePolicy = ResizePolicyType.FitToChildren,
-                Margin = new Extents(0, 0, 20, 0).SpToPx(),
-            };
-            button.Clicked += (bo, be) =>
-            {
-                SetSystemTime(datepicker.Date);
-                NavigateBack();
-            };
-
-            content.Add(datepicker);
-            content.Add(button);
-
-            return content;
-        }
-
-        private void SetSystemTime(System.DateTime date)
-        {
-            System.DateTime setTime = date;
-            System.DateTime curTime = System.DateTime.Now;
-
-            System.DateTime ltime = new System.DateTime(setTime.Year, setTime.Month, setTime.Day, curTime.Hour, curTime.Minute, curTime.Second, curTime.Millisecond);
-            System.DateTime utime2 = ltime.ToUniversalTime();
-
-            System.DateTime epoch = new System.DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
-            TimeSpan delta = utime2 - epoch;
-
-            Int64 timetick = Convert.ToInt64(delta.TotalSeconds);
-            SettingMainGadget.DateTime.Interop.Alarm.Alarmmgr_SetSystime(timetick);
-
-            Logger.Debug($"system date was changed to: {date}");
-        }
-    }
-}
diff --git a/SettingMainGadget/DateTime/DateTimeSetTimeGadget.cs b/SettingMainGadget/DateTime/DateTimeSetTimeGadget.cs
deleted file mode 100644 (file)
index 5382466..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-using SettingCore.TextResources;
-using SettingCore;
-using SettingMainGadget.DateTime;
-using System;
-using Tizen.NUI;
-using Tizen.NUI.BaseComponents;
-using Tizen.NUI.Components;
-
-namespace Setting.Menu.DateTime
-{
-    public class DateTimeSetTimeGadget : SettingCore.MenuGadget
-    {
-        public override string ProvideTitle() => Resources.IDS_ST_BODY_SET_TIME;
-
-        protected override View OnCreate()
-        {
-            base.OnCreate();
-
-            var content = new View()
-            {
-                WidthSpecification = LayoutParamPolicies.MatchParent,
-                HeightSpecification = LayoutParamPolicies.MatchParent,
-                Layout = new LinearLayout()
-                {
-                    HorizontalAlignment = HorizontalAlignment.Center,
-                    VerticalAlignment = VerticalAlignment.Center,
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-
-            var timepicker = new TimePicker()
-            {
-                Time = System.DateTime.Now,
-                HeightResizePolicy = ResizePolicyType.FitToChildren,
-                Is24HourView = DateTimeManager.Is24HourFormat,
-            };
-
-            var button = new Button("Tizen.NUI.Components.Button.Outlined")
-            {
-                Text = Resources.IDS_ST_BUTTON_OK,
-                Size = new Size(252, 48).SpToPx(),
-                WidthResizePolicy = ResizePolicyType.FitToChildren,
-                HeightResizePolicy = ResizePolicyType.FitToChildren,
-                Margin = new Extents(0, 0, 20, 0).SpToPx(),
-            };
-            button.Clicked += (bo, be) =>
-            {
-                SetSystemTime(timepicker.Time);
-                NavigateBack();
-            };
-
-            content.Add(timepicker);
-            content.Add(button);
-
-            return content;
-        }
-
-        private void SetSystemTime(System.DateTime time)
-        {
-            System.DateTime setTime = time;
-            System.DateTime curTime = System.DateTime.Now;
-
-            System.DateTime ltime = new System.DateTime(curTime.Year, curTime.Month, curTime.Day, setTime.Hour, setTime.Minute, setTime.Second, setTime.Millisecond);
-            System.DateTime utime2 = ltime.ToUniversalTime();
-
-            System.DateTime epoch = new System.DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
-            TimeSpan delta = utime2 - epoch;
-
-            Int64 timetick = Convert.ToInt64(delta.TotalSeconds);
-            SettingMainGadget.DateTime.Interop.Alarm.Alarmmgr_SetSystime(timetick);
-
-            Logger.Debug($"system time was changed to: {time}");
-        }
-    }
-}
diff --git a/SettingMainGadget/DateTime/DateTimeSetTimezoneGadget.cs b/SettingMainGadget/DateTime/DateTimeSetTimezoneGadget.cs
deleted file mode 100644 (file)
index 7e74ee9..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-using SettingCore.TextResources;
-using SettingCore.Views;
-using SettingMainGadget.DateTime;
-using System.Linq;
-using Tizen.NUI;
-using Tizen.NUI.BaseComponents;
-using Tizen.NUI.Components;
-using Tizen.System;
-
-namespace Setting.Menu.DateTime
-{
-    public class DateTimeSetTimezoneGadget : SettingCore.MenuGadget
-    {
-        public override string ProvideTitle() => Resources.IDS_ST_BODY_TIME_ZONE;
-
-        private ScrollableBase content = null;
-
-        protected override View OnCreate()
-        {
-            base.OnCreate();
-
-            content = new ScrollableBase
-            {
-                WidthSpecification = LayoutParamPolicies.MatchParent,
-                HeightSpecification = LayoutParamPolicies.MatchParent,
-                ScrollingDirection = ScrollableBase.Direction.Vertical,
-                HideScrollbar = false,
-                Layout = new LinearLayout()
-                {
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-
-            RadioButtonGroup radioButtonGroup = new RadioButtonGroup();
-
-            var timeZones = DateTimeTimezoneManager.GetTimeZones();
-            timeZones = timeZones.OrderBy(a => a.City).ThenBy(x => x.Continent).ToList();
-
-            foreach (var timeZone in timeZones)
-            {
-                RadioButtonListItem item = new RadioButtonListItem(timeZone.DisplayName);
-                item.RadioButton.IsSelected = SystemSettings.LocaleTimeZone == timeZone.Info.Id;
-
-                radioButtonGroup.Add(item.RadioButton);
-                content.Add(item);
-            }
-
-            radioButtonGroup.SelectedChanged += (o, e) =>
-            {
-                DateTimeTimezoneManager.SetTimezone(timeZones[radioButtonGroup.SelectedIndex].Info.Id);
-            };
-
-            content.Relayout += (s, e) =>
-            {
-                var timeZone = timeZones.Where(x => x.Info.Id == SystemSettings.LocaleTimeZone).FirstOrDefault();
-
-                if (timeZone != null)
-                {
-                    content.ScrollToIndex(timeZones.IndexOf(timeZone));
-                }
-            };
-
-            return content;
-        }
-    }
-}
diff --git a/SettingMainGadget/DateTime/DateTimeTimezoneManager.cs b/SettingMainGadget/DateTime/DateTimeTimezoneManager.cs
deleted file mode 100644 (file)
index e7f61e2..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using Tizen.System;
-
-namespace SettingMainGadget.DateTime
-{
-    public static class DateTimeTimezoneManager
-    {
-        public static List<TimeZone> GetTimeZones()
-        {
-            var timeZones = new List<TimeZone>();
-            foreach (var timeZoneInfo in TimeZoneInfo.GetSystemTimeZones())
-            {
-                timeZones.Add(new TimeZone(timeZoneInfo));
-            }
-
-            return timeZones;
-        }
-
-        public static void SetTimezone(string timezoneId)
-        {
-            SystemSettings.LocaleTimeZone = timezoneId;
-        }
-
-        public static string GetTimezoneName()
-        {
-            // DO NOT USE TimeZoneInfo localtimezone = TimeZoneInfo.Local;
-            // It take long time to sync TimeZoneInfo.Local after setting SystemSettings.LocaleTimeZone
-
-            TimeZoneInfo localtimezone = TimeZoneInfo.FindSystemTimeZoneById(SystemSettings.LocaleTimeZone);
-            var date = System.DateTime.Now;
-            TimeSpan time = localtimezone.GetUtcOffset(date);
-            string offset = time < TimeSpan.Zero ? time.ToString(@"\-hh\:mm") : time.ToString(@"\+hh\:mm");
-
-            return $"GMT {offset}, {localtimezone.StandardName}";
-        }
-
-        public class TimeZone
-        {
-            public TimeZoneInfo Info { get; private set; }
-
-            public TimeZone(TimeZoneInfo timeZone)
-            {
-                this.Info = timeZone;
-            }
-
-            public string City
-            {
-                get => Info.Id.Split('/').Last();
-            }
-
-            public string Continent
-            {
-                get => Info.Id.Split('/').First();
-            }
-
-            public string DisplayName
-            {
-                get
-                {
-                    var identifiers = Info.Id.Split('/').Reverse().ToList();
-                    string place = String.Join(", ", identifiers.ToArray()).Replace('_', ' ');
-
-                    var displayName = Info.DisplayName;
-                    int index = displayName.LastIndexOf("Time") + 4;
-                    displayName = displayName.Substring(0, index);
-
-                    return $"{place} {displayName}";
-                }
-            }
-        }
-    }
-}
diff --git a/SettingMainGadget/DateTime/Interop.Alarm.cs b/SettingMainGadget/DateTime/Interop.Alarm.cs
deleted file mode 100644 (file)
index 1ace6a4..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *  Copyright (c) 2022 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.Runtime.InteropServices;
-
-namespace SettingMainGadget.DateTime
-{
-    internal static partial class Interop
-    {
-        internal static partial class Alarm
-        {
-            private const string LibraryAlarm = "libalarm.so.0";
-
-            [DllImport(LibraryAlarm, EntryPoint = "alarmmgr_set_systime64")]
-            internal static extern int Alarmmgr_SetSystime(Int64 utc_timestamp);
-        }
-    }
-}
diff --git a/SettingMainGadget/DateTimeGadget.cs b/SettingMainGadget/DateTimeGadget.cs
deleted file mode 100644 (file)
index 6dd8926..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-using SettingCore.TextResources;
-using SettingCore;
-using SettingCore.Views;
-using SettingMainGadget;
-using SettingMainGadget.DateTime;
-using System.Linq;
-using Tizen.NUI;
-using Tizen.NUI.BaseComponents;
-using Tizen.NUI.Components;
-using Tizen.System;
-
-namespace Setting.Menu
-{
-    public class DateTimeGadget : SettingCore.MainMenuGadget
-    {
-        public override Color ProvideIconColor() => new Color(IsLightTheme ? "#205493" : "#2560A8");
-
-        public override string ProvideIconPath() => GetResourcePath("datetime.svg");
-
-        public override string ProvideTitle() => Resources.IDS_ST_BODY_DATE_AND_TIME;
-
-        private Sections sections = new Sections();
-        private View content;
-
-        private TextListItem mDateItem = null;
-        private TextListItem mTimeItem = null;
-        private TextListItem mTimezoneItem = null;
-
-        private SwitchListItem autoUpdateItem = null;
-        private SwitchListItem timeFormatItem = null;
-
-        private bool isAutomaticTimeUpdateSupported;
-
-        protected override View OnCreate()
-        {
-            base.OnCreate();
-
-            AttachToEvents();
-
-            content = new ScrollableBase()
-            {
-                WidthSpecification = LayoutParamPolicies.MatchParent,
-                HeightSpecification = LayoutParamPolicies.MatchParent,
-                ScrollingDirection = ScrollableBase.Direction.Vertical,
-                HideScrollbar = false,
-                Layout = new LinearLayout()
-                {
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-
-            CreateView();
-
-            return content;
-        }
-
-        protected override void OnDestroy()
-        {
-            DetachFromEvents();
-
-            base.OnDestroy();
-        }
-
-        private void CreateView()
-        {
-            sections.RemoveAllSectionsFromView(content);
-
-            try
-            {
-                // RPI4 device unable to get isAutomaticTimeUpdate system setting
-                var autoUpdate = SystemSettings.AutomaticTimeUpdate;
-                isAutomaticTimeUpdateSupported = true;
-            }
-            catch (System.Exception e)
-            {
-                Logger.Warn($"AutomaticTimeUpdate is not supported: {e.Message}");
-            }
-
-            autoUpdateItem = new SwitchListItem(Resources.IDS_ST_MBODY_AUTO_UPDATE, isSelected: isAutomaticTimeUpdateSupported ? DateTimeManager.AutoTimeUpdate : false);
-            autoUpdateItem.IsEnabled = isAutomaticTimeUpdateSupported;
-            autoUpdateItem.Switch.SelectedChanged += (o, e) =>
-            {
-                DateTimeManager.AutoTimeUpdate = e.IsSelected;
-                ApplyAutomaticTimeUpdate();
-            };
-            sections.Add(MainMenuProvider.DateTime_AutoUpdate, autoUpdateItem);
-
-            mDateItem = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_SET_DATE, System.DateTime.Now.ToString("MMM d, yyyy"));
-            if (mDateItem != null)
-            {
-                mDateItem.Clicked += (o, e) =>
-                {
-                    NavigateTo(MainMenuProvider.DateTime_SetDate);
-                };
-                sections.Add(MainMenuProvider.DateTime_SetDate, mDateItem);
-            }
-
-            mTimeItem = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_SET_TIME, DateTimeManager.FormattedTime);
-            if (mTimeItem != null)
-            {
-                mTimeItem.Clicked += (o, e) =>
-                {
-                    NavigateTo(MainMenuProvider.DateTime_SetTime);
-                };
-                sections.Add(MainMenuProvider.DateTime_SetTime, mTimeItem);
-            }
-
-            mTimezoneItem = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_TIME_ZONE, DateTimeTimezoneManager.GetTimezoneName());
-            if (mTimezoneItem != null)
-            {
-                mTimezoneItem.Clicked += (o, e) =>
-                {
-                    NavigateTo(MainMenuProvider.DateTime_SetTimezone);
-                };
-                sections.Add(MainMenuProvider.DateTime_SetTimezone, mTimezoneItem);
-            }
-
-            timeFormatItem = new SwitchListItem(Resources.IDS_ST_MBODY_24_HOUR_CLOCK, Resources.IDS_ST_SBODY_SHOW_THE_TIME_IN_24_HOUR_FORMAT_INSTEAD_OF_12_HOUR_HAM_PM_FORMAT, DateTimeManager.Is24HourFormat);
-            timeFormatItem.Switch.SelectedChanged += (o, e) =>
-            {
-                DateTimeManager.Is24HourFormat = e.IsSelected;
-            };
-            sections.Add(MainMenuProvider.DateTime_TimeFormat, timeFormatItem);
-
-            ApplyAutomaticTimeUpdate();
-
-            var customization = GetCustomization().OrderBy(c => c.Order);
-            Logger.Debug($"customization: {customization.Count()}");
-            foreach (var cust in customization)
-            {
-                string visibility = cust.IsVisible ? "visible" : "hidden";
-                Logger.Verbose($"Customization: {cust.MenuPath} - {visibility} - {cust.Order}");
-                if (cust.IsVisible && sections.TryGetValue(cust.MenuPath, out View row))
-                {
-                    content.Add(row);
-                }
-            }
-        }
-
-        private void ApplyAutomaticTimeUpdate()
-        {
-            if (mDateItem != null) mDateItem.IsEnabled = !DateTimeManager.AutoTimeUpdate;
-            if (mTimeItem != null) mTimeItem.IsEnabled = !DateTimeManager.AutoTimeUpdate;
-            if (mTimezoneItem != null) mTimezoneItem.IsEnabled = !DateTimeManager.AutoTimeUpdate;
-        }
-
-        private void SystemSettings_TimeChanged(object sender, Tizen.System.TimeChangedEventArgs e)
-        {
-            if (mDateItem != null)
-                mDateItem.Secondary = System.DateTime.Now.ToString("MMM d, yyyy");
-            if (mTimeItem != null)
-                mTimeItem.Secondary = DateTimeManager.FormattedTime;
-        }
-
-        private void SystemSettings_LocaleTimeZoneChanged(object sender, LocaleTimeZoneChangedEventArgs e)
-        {
-            if (mTimezoneItem != null)
-                mTimezoneItem.Secondary = DateTimeTimezoneManager.GetTimezoneName();
-        }
-
-        private void SystemSettings_LocaleTimeFormat24HourSettingChanged(object sender, LocaleTimeFormat24HourSettingChangedEventArgs e)
-        {
-            if (mTimeItem != null)
-                mTimeItem.Secondary = DateTimeManager.FormattedTime;
-        }
-
-        private void AttachToEvents()
-        {
-            try
-            {
-                SystemSettings.TimeChanged += SystemSettings_TimeChanged;
-            }
-            catch (System.Exception e)
-            {
-                Logger.Warn($"Cannot attach to SystemSettings.TimeChanged ({e.GetType()})");
-            }
-
-            try
-            {
-                SystemSettings.LocaleTimeZoneChanged += SystemSettings_LocaleTimeZoneChanged;
-            }
-            catch (System.Exception e)
-            {
-                Logger.Warn($"Cannot attach to SystemSettings.LocaleTimeZoneChanged ({e.GetType()})");
-            }
-
-            try
-            {
-                SystemSettings.LocaleTimeFormat24HourSettingChanged += SystemSettings_LocaleTimeFormat24HourSettingChanged;
-            }
-            catch (System.Exception e)
-            {
-                Logger.Warn($"Cannot attach to SystemSettings.LocaleTimeFormat24HourSettingChanged ({e.GetType()})");
-            }
-        }
-
-        private void DetachFromEvents()
-        {
-            try
-            {
-                SystemSettings.TimeChanged -= SystemSettings_TimeChanged;
-            }
-            catch (System.Exception e)
-            {
-                Logger.Warn($"Cannot detach from SystemSettings.TimeChanged ({e.GetType()})");
-            }
-
-            try
-            {
-                SystemSettings.LocaleTimeZoneChanged -= SystemSettings_LocaleTimeZoneChanged;
-            }
-            catch (System.Exception e)
-            {
-                Logger.Warn($"Cannot detach from SystemSettings.LocaleTimeZoneChanged ({e.GetType()})");
-            }
-
-            try
-            {
-                SystemSettings.LocaleTimeFormat24HourSettingChanged -= SystemSettings_LocaleTimeFormat24HourSettingChanged;
-            }
-            catch (System.Exception e)
-            {
-                Logger.Warn($"Cannot detach from SystemSettings.LocaleTimeFormat24HourSettingChanged ({e.GetType()})");
-            }
-        }
-    }
-}
diff --git a/SettingMainGadget/Display/DisplayFontGadget.cs b/SettingMainGadget/Display/DisplayFontGadget.cs
deleted file mode 100644 (file)
index e1b1862..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-using SettingCore.Views;
-using SettingCore.TextResources;
-using SettingMainGadget;
-using Tizen.NUI;
-using Tizen.NUI.BaseComponents;
-using Tizen.System;
-
-namespace Setting.Menu.Display
-{
-    public class DisplayFontGadget : SettingCore.MenuGadget
-    {
-        public override string ProvideTitle() => Resources.IDS_ST_BODY_FONT;
-        private TextListItem fontSizeItem;
-        private TextListItem fontTypeItem;
-        private View content;
-
-        protected override void OnDestroy()
-        {
-            SystemSettings.FontSizeChanged -= SystemSettings_FontSizeChanged;
-            SystemSettings.FontTypeChanged -= SystemSettings_FontTypeChanged;
-
-            base.OnDestroy();
-        }
-
-        private void SystemSettings_FontSizeChanged(object sender, FontSizeChangedEventArgs e)
-        {
-            CreateItems();
-        }
-
-        private void SystemSettings_FontTypeChanged(object sender, FontTypeChangedEventArgs e)
-        {
-            if (fontTypeItem != null)
-                fontTypeItem.Secondary = SystemSettings.FontType.ToString();
-        }
-
-        private void CreateItems()
-        {
-            if(fontSizeItem != null)
-            {
-                content.Remove(fontSizeItem);
-            }
-
-            fontSizeItem = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_MBODY_FONT_SIZE, SystemSettings.FontSize.ToString());
-            fontSizeItem.Clicked += (o, e) =>
-            {
-                NavigateTo(MainMenuProvider.Display_FontSize);
-            };
-            content.Add(fontSizeItem);
-
-            if (fontTypeItem != null)
-            {
-                content.Remove(fontTypeItem);
-            }
-
-            fontTypeItem = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_FONT_TYPE, SystemSettings.FontType.ToString());
-            fontTypeItem.Clicked += (o, e) =>
-            {
-                NavigateTo(MainMenuProvider.Display_FontType);
-            };
-            content.Add(fontTypeItem);
-        }
-
-        protected override View OnCreate()
-        {
-            base.OnCreate();
-
-            content = new View()
-            {
-                WidthSpecification = LayoutParamPolicies.MatchParent,
-                HeightSpecification = LayoutParamPolicies.MatchParent,
-                Layout = new LinearLayout()
-                {
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-
-            CreateItems();
-
-            SystemSettings.FontSizeChanged += SystemSettings_FontSizeChanged;
-            SystemSettings.FontTypeChanged += SystemSettings_FontTypeChanged;
-
-            return content;
-        }
-    }
-}
diff --git a/SettingMainGadget/Display/DisplayFontSizeGadget.cs b/SettingMainGadget/Display/DisplayFontSizeGadget.cs
deleted file mode 100644 (file)
index 0fc4014..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-using SettingCore.TextResources;
-using SettingCore;
-using SettingCore.Views;
-using System;
-using System.Collections.Generic;
-using Tizen.NUI;
-using Tizen.NUI.BaseComponents;
-using Tizen.NUI.Components;
-using Tizen.System;
-
-namespace Setting.Menu.Display
-{
-    public class DisplayFontSizeGadget : SettingCore.MenuGadget
-    {
-        public override string ProvideTitle() => Resources.IDS_ST_MBODY_FONT_SIZE;
-
-        private class FontsizeInfo
-        {
-            private readonly SystemSettingsFontSize Value;
-
-            public FontsizeInfo(SystemSettingsFontSize value)
-            {
-                Value = value;
-            }
-
-            public string GetName()
-            {
-                return Value.ToString();
-            }
-
-            public SystemSettingsFontSize GetValue()
-            {
-                return Value;
-            }
-        };
-
-        private List<FontsizeInfo> fontsizeList = new List<FontsizeInfo>();
-
-        protected override View OnCreate()
-        {
-            base.OnCreate();
-
-            var content = new ScrollableBase
-            {
-                WidthSpecification = LayoutParamPolicies.MatchParent,
-                HeightSpecification = LayoutParamPolicies.MatchParent,
-                ScrollingDirection = ScrollableBase.Direction.Vertical,
-                HideScrollbar = false,
-                Layout = new LinearLayout()
-                {
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-
-            foreach (SystemSettingsFontSize fontSize in Enum.GetValues(typeof(SystemSettingsFontSize)))
-            {
-                fontsizeList.Add(new FontsizeInfo(fontSize));
-            }
-
-            RadioButtonGroup radioButtonGroup = new RadioButtonGroup();
-
-            for (int i = 0; i < fontsizeList.Count; i++)
-            {
-                RadioButtonListItem item = new RadioButtonListItem(fontsizeList[i].GetName());
-                item.RadioButton.IsSelected = fontsizeList[i].GetValue() == SystemSettings.FontSize;
-
-                radioButtonGroup.Add(item.RadioButton);
-                content.Add(item);
-            }
-
-            radioButtonGroup.SelectedChanged += (o, e) =>
-            {
-                SetFontsize(fontsizeList[radioButtonGroup.SelectedIndex].GetValue());
-            };
-
-            return content;
-        }
-
-        private void SetFontsize(SystemSettingsFontSize fontsize)
-        {
-            SystemSettings.FontSize = fontsize;
-            Logger.Debug($"FontSize value changed to: {fontsize}");
-        }
-    }
-}
diff --git a/SettingMainGadget/Display/DisplayFontTypeGadget.cs b/SettingMainGadget/Display/DisplayFontTypeGadget.cs
deleted file mode 100644 (file)
index 908f7a2..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-using SettingCore.TextResources;
-using SettingCore;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using Tizen.NUI;
-using Tizen.NUI.BaseComponents;
-using Tizen.NUI.Components;
-using Tizen.System;
-using SettingCore.Views;
-
-namespace Setting.Menu.Display
-{
-    public class DisplayFontTypeGadget : SettingCore.MenuGadget
-    {
-        public override string ProvideTitle() => Resources.IDS_ST_BODY_FONT_TYPE;
-
-        protected override View OnCreate()
-        {
-            base.OnCreate();
-
-            var content = new ScrollableBase
-            {
-                WidthSpecification = LayoutParamPolicies.MatchParent,
-                HeightSpecification = LayoutParamPolicies.MatchParent,
-                ScrollingDirection = ScrollableBase.Direction.Vertical,
-                HideScrollbar = false,
-                Layout = new LinearLayout()
-                {
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-
-            var fontTypeList = MakeFontTypeList();
-
-            RadioButtonGroup radioButtonGroup = new RadioButtonGroup();
-
-            for (int i = 0; i < fontTypeList.Count; i++)
-            {
-                RadioButtonListItem item = new RadioButtonListItem(fontTypeList[i]);
-                item.RadioButton.IsSelected = fontTypeList[i] == SystemSettings.FontType;
-                item.RadioButton.TextLabel.FontFamily = fontTypeList[i];
-
-                radioButtonGroup.Add(item.RadioButton);
-                content.Add(item);
-            }
-
-            radioButtonGroup.SelectedChanged += (o, e) =>
-            {
-                SetFonttype(fontTypeList[radioButtonGroup.SelectedIndex]);
-            };
-
-            return content;
-        }
-
-        private List<string> MakeFontTypeList()
-        {
-            var systemFonts = FontClient.Instance.GetSystemFonts();
-
-            // only fonts from /usr/share/fonts/ folder are works properly.
-            // GetSystemFonts() also returns fonts from /usr/share/fallback_fonts/ folder, but with wrong family name.
-            var fontTypeList = systemFonts.Where(x => x.Path.Contains("/usr/share/fonts/")).Select(a => a.Family).Distinct().ToList();
-
-            if (SystemSettings.FontType.Equals("Default"))
-            {
-                SetFonttype(SystemSettings.DefaultFontType);
-            }
-
-            Logger.Debug($"SystemSettings.DefaultFontType: {SystemSettings.DefaultFontType}");
-            Logger.Debug($"SystemSettings.FontType: {SystemSettings.FontType}");
-
-            return fontTypeList;
-        }
-
-        private void SetFonttype(string fonttype)
-        {
-            try
-            {
-                SystemSettings.FontType = fonttype;
-                Logger.Debug($"FontType value changed to: {fonttype}");
-            }
-            catch (Exception ex)
-            {
-                Logger.Error($"{ex.GetType()}, {ex.Message}");
-            }
-        }
-    }
-}
diff --git a/SettingMainGadget/Display/DisplayGadget.cs b/SettingMainGadget/Display/DisplayGadget.cs
deleted file mode 100644 (file)
index 7227a2b..0000000
+++ /dev/null
@@ -1,280 +0,0 @@
-using SettingCore.TextResources;
-using SettingCore;
-using SettingCore.Views;
-using SettingMainGadget;
-using SettingMainGadget.Display;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using Tizen.NUI;
-using Tizen.NUI.BaseComponents;
-using Tizen.NUI.Components;
-using Tizen.System;
-
-namespace Setting.Menu
-{
-    public class DisplayGadget : SettingCore.MainMenuGadget
-    {
-        public override Color ProvideIconColor() => new Color(IsLightTheme ? "#0075FF" : "#1A85FF");
-
-        public override string ProvideIconPath() => GetResourcePath("display.svg");
-
-        public override string ProvideTitle() => Resources.IDS_ST_HEADER_DISPLAY;
-
-        private View content;
-        private Sections sections = new Sections();
-
-        private SliderListItem brightnessItem;
-        private TextListItem fontItem;
-        private TextListItem screenTimeOutItem;
-        private TextListItem themeItem;
-
-        private bool isBrightnessSupported;
-
-        private static readonly string[] iconPath = {
-            "display/Brightness_0.svg",
-            "display/Brightness_50.svg",
-            "display/Brightness_100.svg",
-        };
-
-        private static readonly string[] iconDisabledPath = {
-            "display/Brightness_light.svg",
-            "display/Brightness_dark.svg",
-        };
-
-        protected override View OnCreate()
-        {
-            base.OnCreate();
-
-            content = new ScrollableBase
-            {
-                WidthSpecification = LayoutParamPolicies.MatchParent,
-                HeightSpecification = LayoutParamPolicies.MatchParent,
-                ScrollingDirection = ScrollableBase.Direction.Vertical,
-                HideScrollbar = false,
-                Layout = new LinearLayout()
-                {
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-
-            SystemSettings.ScreenBacklightTimeChanged += SystemSettings_ScreenBacklightTimeChanged;
-            SystemSettings.FontSizeChanged += SystemSettings_FontSizeChanged;
-            SystemSettings.FontTypeChanged += SystemSettings_FontTypeChanged;
-            ThemeManager.ThemeChanged += ThemeManager_ThemeChanged;
-
-            CreateView();
-
-            return content;
-        }
-
-        protected override void OnDestroy()
-        {
-            SystemSettings.ScreenBacklightTimeChanged -= SystemSettings_ScreenBacklightTimeChanged;
-            SystemSettings.FontSizeChanged -= SystemSettings_FontSizeChanged;
-            SystemSettings.FontTypeChanged -= SystemSettings_FontTypeChanged;
-            ThemeManager.ThemeChanged -= ThemeManager_ThemeChanged;
-
-            base.OnDestroy();
-        }
-
-        private void CreateView()
-        {
-            sections.RemoveAllSectionsFromView(content);
-
-            // section: brightness
-
-            if (Tizen.System.Display.NumberOfDisplays > 0)
-            {
-                int brightness = 0;
-                int maxbrightness = 1;
-
-                try
-                {
-                    Tizen.System.Display.Displays[0].Brightness = Tizen.System.Display.Displays[0].Brightness;
-                    isBrightnessSupported = true;
-                }
-                catch (Exception)
-                {
-                    Logger.Warn($"Brightness is not supported on the device.");
-                }
-
-                
-                try
-                {
-                    brightness = Tizen.System.Display.Displays[0].Brightness;
-                    maxbrightness = Tizen.System.Display.Displays[0].MaxBrightness;
-
-                    Logger.Debug($"Current-Max display brightness: {brightness}-{maxbrightness}");
-                }
-                catch (Exception ex)
-                {
-                    Logger.Error($"Error while getting the display brightness: {ex.GetType()}, {ex.Message}");
-                }
-
-                GetBrightnessSliderIcon(brightness, out string iconpath);
-
-                brightnessItem = new SliderListItem(Resources.IDS_ST_BODY_BRIGHTNESS_M_POWER_SAVING, iconpath, (brightness * 1.0f) / maxbrightness);
-                if (brightnessItem != null)
-                {
-                    if(!isBrightnessSupported)
-                    {
-                        brightnessItem.Slider.CurrentValue = brightnessItem.Slider.MaxValue;
-                    }
-
-                    brightnessItem.Margin = new Extents(0, 0, 16, 0).SpToPx();
-                    brightnessItem.Slider.ValueChanged += MSlider_ValueChanged;
-                    brightnessItem.IsEnabled = isBrightnessSupported;
-                    sections.Add(MainMenuProvider.Display_Brightness, brightnessItem);
-                }
-            }
-            else
-            {
-                Logger.Warn($"There are no available displays. The Brightness section has not been created.");
-            }
-
-            // section: font
-
-            fontItem = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_FONT, $"{SystemSettings.FontSize}, {SystemSettings.FontType}");
-            if (fontItem != null)
-            {
-                fontItem.Clicked += (o, e) =>
-                {
-                    NavigateTo(MainMenuProvider.Display_Font);
-                };
-                sections.Add(MainMenuProvider.Display_Font, fontItem);
-            }
-
-            // section: TimeOut
-
-            screenTimeOutItem = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_SCREEN_TIMEOUT_ABB2, DisplayTimeOutManager.GetScreenTimeoutName());
-            if (screenTimeOutItem != null)
-            {
-                screenTimeOutItem.Clicked += (o, e) =>
-                {
-                    NavigateTo(MainMenuProvider.Display_Timeout);
-                };
-                sections.Add(MainMenuProvider.Display_Timeout, screenTimeOutItem);
-            }
-
-            // section: Theme
-
-            themeItem = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_THEME, DisplayThemeManager.GetThemeName());
-            if (themeItem != null)
-            {
-                themeItem.Clicked += (o, e) =>
-                {
-                    NavigateTo(MainMenuProvider.Display_Theme);
-                };
-                sections.Add(MainMenuProvider.Display_Theme, themeItem);
-            }
-
-            var customization = GetCustomization().OrderBy(c => c.Order);
-            Logger.Debug($"customization: {customization.Count()}");
-            foreach (var cust in customization)
-            {
-                string visibility = cust.IsVisible ? "visible" : "hidden";
-                Logger.Verbose($"Customization: {cust.MenuPath} - {visibility} - {cust.Order}");
-                if (cust.IsVisible && sections.TryGetValue(cust.MenuPath, out View row))
-                {
-                    content.Add(row);
-                }
-            }
-        }
-
-
-        protected override void OnCustomizationUpdate(IEnumerable<MenuCustomizationItem> items)
-        {
-            Logger.Verbose($"{nameof(DisplayGadget)} got customization with {items.Count()} items. Recreating view.");
-            CreateView();
-        }
-
-        private void GetBrightnessSliderIcon(int brightness, out string iconpath)
-        {
-            if(!isBrightnessSupported)
-            {
-                // TODO : create a theme helper that provides information about the current theme using an enum variable. 
-                iconpath = System.IO.Path.Combine(Tizen.Applications.Application.Current.DirectoryInfo.Resource, iconDisabledPath[DisplayThemeManager.GetThemeIndex()]);
-                return;
-            }
-
-            int iconlevel = iconPath.Length;
-
-            int mapped_level = 0;
-            if (iconlevel > 1)
-            {
-                int minbrightness = 1;
-                int maxbrightness = Tizen.System.Display.Displays[0].MaxBrightness;
-                if (brightness > minbrightness)
-                {
-                    int levelcount = maxbrightness - minbrightness;
-                    int level = brightness - (minbrightness + 1);
-                    mapped_level = (level * (iconlevel - 1) / levelcount) + 1;
-                }
-            }
-            Logger.Debug($"mapped_level: {mapped_level} {System.IO.Path.Combine(Tizen.Applications.Application.Current.DirectoryInfo.Resource, iconPath[mapped_level])}");
-
-            iconpath = System.IO.Path.Combine(Tizen.Applications.Application.Current.DirectoryInfo.Resource, iconPath[mapped_level]);
-        }
-
-        private void MSlider_ValueChanged(object sender, SliderValueChangedEventArgs args)
-        {
-            var slider = sender as Slider;
-
-            int minbrightness = 1;
-            int maxbrightness = Tizen.System.Display.Displays[0].MaxBrightness;
-
-            int brightness = (int)(slider.CurrentValue * (maxbrightness - minbrightness)) + minbrightness;
-            if (brightness >= maxbrightness) brightness = maxbrightness;
-
-            Logger.Debug($"maxbrightness : {maxbrightness}, brightness : {brightness}");
-
-            if (brightnessItem != null)
-            {
-                GetBrightnessSliderIcon(brightness, out string iconpath);
-                brightnessItem.IconPath = iconpath;
-            }
-
-            try
-            {
-                Tizen.System.Display.Displays[0].Brightness = brightness;
-            }
-            catch (Exception e)
-            {
-                Logger.Error(string.Format("error :({0}) {1} ", e.GetType().ToString(), e.Message));
-            }
-        }
-
-        private void SystemSettings_ScreenBacklightTimeChanged(object sender, ScreenBacklightTimeChangedEventArgs e)
-        {
-            if (screenTimeOutItem != null)
-                screenTimeOutItem.Secondary = DisplayTimeOutManager.GetScreenTimeoutName();
-        }
-
-        private void SystemSettings_FontSizeChanged(object sender, FontSizeChangedEventArgs e)
-        {
-            CreateView(); // TODO : change only secondary text instead of re-create all view
-        }
-
-        private void SystemSettings_FontTypeChanged(object sender, FontTypeChangedEventArgs e)
-        {
-            if(fontItem != null)
-                fontItem.Secondary = $"{SystemSettings.FontSize}, {SystemSettings.FontType}"; // TODO : show default BreezeSans if FontType = DefaultFontType
-        }
-
-        private void ThemeManager_ThemeChanged(object sender, ThemeChangedEventArgs e)
-        {
-            if (e.IsPlatformThemeChanged)
-            {
-                Logger.Debug($"theme changed to: {e.PlatformThemeId}");
-                themeItem.Secondary = DisplayThemeManager.GetThemeName();
-
-                // reassign CurrentValue to trigger slider icon path update
-                if (brightnessItem != null)
-                {
-                    brightnessItem.Slider.CurrentValue = brightnessItem.Slider.CurrentValue;
-                }
-            }
-        }
-    }
-}
diff --git a/SettingMainGadget/Display/DisplayThemeGadget.cs b/SettingMainGadget/Display/DisplayThemeGadget.cs
deleted file mode 100644 (file)
index 98892b5..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-using SettingCore.TextResources;
-using SettingCore.Views;
-using SettingMainGadget.Display;
-using System.Linq;
-using Tizen.NUI;
-using Tizen.NUI.BaseComponents;
-using Tizen.NUI.Components;
-
-namespace Setting.Menu.Display
-{
-    public class DisplayThemeGadget : SettingCore.MenuGadget
-    {
-        public override string ProvideTitle() => Resources.IDS_ST_BODY_THEME;
-
-        protected override View OnCreate()
-        {
-            var content = new ScrollableBase
-            {
-                WidthSpecification = LayoutParamPolicies.MatchParent,
-                HeightSpecification = LayoutParamPolicies.MatchParent,
-                ScrollingDirection = ScrollableBase.Direction.Vertical,
-                HideScrollbar = false,
-                Layout = new LinearLayout()
-                {
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-
-            RadioButtonGroup radioButtonGroup = new RadioButtonGroup();
-
-            var themeList = DisplayThemeManager.ThemeList.Select(a => a.GetName()).ToList();
-
-            for (int i = 0; i < themeList.Count; i++)
-            {
-                RadioButtonListItem item = new RadioButtonListItem(themeList[i]);
-                item.RadioButton.IsSelected = i.Equals(DisplayThemeManager.GetThemeIndex());
-
-                radioButtonGroup.Add(item.RadioButton);
-                content.Add(item);
-            }
-
-            radioButtonGroup.SelectedChanged += (o, e) =>
-            {
-                DisplayThemeManager.SetTheme(DisplayThemeManager.ThemeList[radioButtonGroup.SelectedIndex].GetId());
-            };
-
-            return content;
-        }
-    }
-}
diff --git a/SettingMainGadget/Display/DisplayThemeManager.cs b/SettingMainGadget/Display/DisplayThemeManager.cs
deleted file mode 100644 (file)
index 7571042..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-using SettingCore.TextResources;
-using SettingCore;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using Tizen.NUI;
-
-namespace SettingMainGadget.Display
-{
-    public class DisplayThemeManager
-    {
-        public class ThemeInfo
-        {
-            private string Name;
-            private string Id;
-
-            public ThemeInfo(string name, string id)
-            {
-                Name = name;
-                Id = id;
-            }
-
-            public string GetName()
-            {
-                return Name;
-            }
-
-            public string GetId()
-            {
-                return Id;
-            }
-        };
-
-        public static readonly List<ThemeInfo> ThemeList = new List<ThemeInfo>
-        {
-            new ThemeInfo("Light theme", "org.tizen.default-light-theme"),
-            new ThemeInfo("Dark theme", "org.tizen.default-dark-theme"),
-        }; // TODO : add name of the theme to the Resources so it can be translated when changing the language
-
-        public static void SetTheme(string Id)
-        {
-            try
-            {
-                ThemeManager.ApplyPlatformTheme(Id);
-            }
-            catch (Exception ex)
-            {
-                Logger.Error($"({Id}): {ex.Message}");
-            }
-        }
-
-        public static int GetThemeIndex()
-        {
-            string themeId = ThemeManager.PlatformThemeId;
-
-            if (string.IsNullOrEmpty(themeId))
-            {
-                Logger.Warn("Theme : Not Available");
-                return -1;
-            }
-
-            Logger.Debug($"Theme : {themeId}");
-
-            var theme = ThemeList.Where(x => x.GetId().Equals(themeId)).First();
-
-            if(theme != null)
-            {
-                return ThemeList.IndexOf(theme); 
-            }
-
-            return -1;
-        }
-
-        public static string GetThemeName()
-        {
-            int index = GetThemeIndex();
-
-            return index >= 0 ? ThemeList[index].GetName() : Resources.IDS_ST_HEADER_UNAVAILABLE;
-        }
-    }
-}
diff --git a/SettingMainGadget/Display/DisplayTimeOutGadget.cs b/SettingMainGadget/Display/DisplayTimeOutGadget.cs
deleted file mode 100644 (file)
index 7e63a26..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-using SettingCore.TextResources;
-using SettingCore.Views;
-using SettingMainGadget.Display;
-using System.Linq;
-using Tizen.NUI;
-using Tizen.NUI.BaseComponents;
-using Tizen.NUI.Components;
-
-namespace Setting.Menu.Display
-{
-    public class DisplayTimeOutGadget : SettingCore.MenuGadget
-    {
-        public override string ProvideTitle() => Resources.IDS_ST_BODY_SCREEN_TIMEOUT_ABB2;
-
-        protected override View OnCreate()
-        {
-            base.OnCreate();
-
-            var content = new ScrollableBase
-            {
-                WidthSpecification = LayoutParamPolicies.MatchParent,
-                HeightSpecification = LayoutParamPolicies.MatchParent,
-                ScrollingDirection = ScrollableBase.Direction.Vertical,
-                HideScrollbar = false,
-                Layout = new LinearLayout()
-                {
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-
-            RadioButtonGroup radioButtonGroup = new RadioButtonGroup();
-
-            var timeoutList = DisplayTimeOutManager.TimeoutList.Select(x => x.GetName()).ToList();
-
-            for (int i = 0; i < timeoutList.Count; i++)
-            {
-                RadioButtonListItem item = new RadioButtonListItem(timeoutList[i]);
-                item.RadioButton.IsSelected = i.Equals(DisplayTimeOutManager.GetScreenTimeoutIndex());
-
-                radioButtonGroup.Add(item.RadioButton);
-                content.Add(item);
-            }
-
-            radioButtonGroup.SelectedChanged += (o, e) =>
-            {
-                DisplayTimeOutManager.SetScreenTimeout(radioButtonGroup.SelectedIndex);
-            };
-
-            return content;
-        }
-    }
-}
diff --git a/SettingMainGadget/Display/DisplayTimeOutManager.cs b/SettingMainGadget/Display/DisplayTimeOutManager.cs
deleted file mode 100644 (file)
index fc9ac03..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-using SettingCore.TextResources;
-using SettingCore;
-using System.Collections.Generic;
-using Tizen.System;
-
-namespace SettingMainGadget.Display
-{
-    public class DisplayTimeOutManager
-    {
-        private const string VconfScreenTimeOut = "db/setting/lcd_backlight_normal";
-
-        public class ScreenTimeoutInfo
-        {
-            private readonly string Name = null;
-            private readonly int Value;
-
-            public ScreenTimeoutInfo(string name, int value)
-            {
-                Name = name;
-                Value = value;
-            }
-
-            public string GetName()
-            {
-                return Name;
-            }
-
-            public int GetValue()
-            {
-                return Value;
-            }
-        };
-
-        public static readonly List<ScreenTimeoutInfo> TimeoutList = new List<ScreenTimeoutInfo>
-        {
-            new ScreenTimeoutInfo(Resources.IDS_ST_BODY_ALWAYS_ON, 0),
-            new ScreenTimeoutInfo(Resources.IDS_ST_BODY_15SEC, 15),
-            new ScreenTimeoutInfo(Resources.IDS_ST_BODY_30SEC, 30),
-            new ScreenTimeoutInfo(Resources.IDS_ST_BODY_1_MINUTE, 60),
-            new ScreenTimeoutInfo(Resources.IDS_ST_BODY_2_MINUTES, 120),
-            new ScreenTimeoutInfo(Resources.IDS_ST_BODY_5_MINUTES, 300),
-            new ScreenTimeoutInfo(Resources.IDS_ST_BODY_10_MINUTES, 600)
-        };
-
-        public static int GetScreenTimeoutIndex()
-        {
-            if (!Tizen.Vconf.TryGetInt(VconfScreenTimeOut, out int value))
-            {
-                Logger.Warn($"could not get value for {VconfScreenTimeOut}");
-            }
-
-            Logger.Debug($"ScreenTimeout value: {value}");
-
-            int index;
-            if (value < 15)
-            {
-                index = 0;
-            }
-            else if (value >= 15 && value < 30)
-            {
-                index = 1;
-            }
-            else if (value >= 30 && value < 60)
-            {
-                index = 2;
-            }
-            else if (value >= 60 && value < 120)
-            {
-                index = 3;
-            }
-            else if (value >= 120 && value < 300)
-            {
-                index = 4;
-            }
-            else if (value >= 300 && value < 600)
-            {
-                index = 5;
-            }
-            else
-            {
-                index = 6;
-            }
-
-            return index;
-        }
-
-        public static string GetScreenTimeoutName()
-        {
-            return TimeoutList[GetScreenTimeoutIndex()].GetName();
-        }
-
-        public static void SetScreenTimeout(int index)
-        {
-            SystemSettings.ScreenBacklightTime = TimeoutList[index].GetValue();
-            Logger.Debug($"ScreenTimeOut changed value to: {TimeoutList[index].GetName()}");
-        }
-    }
-}
diff --git a/SettingMainGadget/LanguageInput/LanguageInputDisplayLanguageGadget.cs b/SettingMainGadget/LanguageInput/LanguageInputDisplayLanguageGadget.cs
deleted file mode 100644 (file)
index b5801a2..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-using SettingCore.TextResources;
-using SettingCore.Views;
-using SettingMainGadget.LanguageInput;
-using Tizen.NUI;
-using Tizen.NUI.BaseComponents;
-using Tizen.NUI.Components;
-
-namespace Setting.Menu.LanguageInput
-{
-    public class LanguageInputDisplayLanguageGadget : SettingCore.MenuGadget
-    {
-        public override string ProvideTitle() => Resources.IDS_ST_HEADER_DISPLAY_LANGUAGE;
-
-        protected override View OnCreate()
-        {
-            base.OnCreate();
-
-            var content = new ScrollableBase
-            {
-                WidthSpecification = LayoutParamPolicies.MatchParent,
-                HeightSpecification = LayoutParamPolicies.MatchParent,
-                ScrollingDirection = ScrollableBase.Direction.Vertical,
-                HideScrollbar = false,
-                Layout = new LinearLayout()
-                {
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-
-            RadioButtonGroup radioButtonGroup = new RadioButtonGroup();
-
-            for (int i = 0; i < LanguageInputDisplayLanguageManager.LanguageList.Count; i++)
-            {
-                RadioButtonListItem item = new RadioButtonListItem(LanguageInputDisplayLanguageManager.LanguageList[i].GetName());
-                item.RadioButton.IsSelected = i.Equals(LanguageInputDisplayLanguageManager.GetDisplayLanguageIndex());
-
-                radioButtonGroup.Add(item.RadioButton);
-                content.Add(item);
-            }
-
-            radioButtonGroup.SelectedChanged += (o, e) =>
-            {
-                LanguageInputDisplayLanguageManager.SetDisplayLanguage(LanguageInputDisplayLanguageManager.LanguageList[radioButtonGroup.SelectedIndex].GetLocale());
-            };
-
-            return content;
-        }
-    }
-}
diff --git a/SettingMainGadget/LanguageInput/LanguageInputDisplayLanguageManager.cs b/SettingMainGadget/LanguageInput/LanguageInputDisplayLanguageManager.cs
deleted file mode 100644 (file)
index 1cfef2e..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-using SettingCore.TextResources;
-using SettingCore;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using Tizen.System;
-
-namespace SettingMainGadget.LanguageInput
-{
-    public static class LanguageInputDisplayLanguageManager
-    {
-        private const string VconfRegionAutomatic = "db/setting/region_automatic";
-        private const string VconfLanguageAutomatic = "db/setting/lang_automatic";
-
-        private const string VconfWidgetLanguage = "db/menu_widget/language";
-
-        public class DisplayLanguageInfo
-        {
-            private readonly string Locale = null;
-            private readonly string Name = null;
-            private readonly string Language = null;
-            private readonly string Mcc = null;
-
-            public DisplayLanguageInfo(string locale, string name, string language, string mcc)
-            {
-                Locale = locale;
-                Name = name;
-                Language = language;
-                Mcc = mcc;
-            }
-
-            public string GetLocale() => Locale;
-
-            public string GetName() => Name;
-
-            public string GetLanguage() => Language;
-
-            public string GetMcc() => Mcc;
-        }
-
-        public static readonly List<DisplayLanguageInfo> LanguageList = new List<DisplayLanguageInfo>()
-        {
-            new DisplayLanguageInfo("en_US", "English (United States)", "English(US)", "310,311,313,316"),
-            new DisplayLanguageInfo("ko_KR", "한국어", "Korean", "450")
-        };
-
-        public static string GetDisplayLanguage()
-        {
-            if (!Tizen.Vconf.TryGetString(VconfWidgetLanguage, out string locale))
-            {
-                Logger.Warn($"could not get value for {VconfWidgetLanguage}");
-            }
-
-            String[] qStrings = locale.Split('.');
-            locale = qStrings[0];
-
-            return locale;
-        }
-
-        public static int GetDisplayLanguageIndex()
-        {
-            string curlanguage = GetDisplayLanguage();
-
-            var languageinfo = LanguageList.Where(x => x.GetLocale() == curlanguage).FirstOrDefault();
-
-            if(languageinfo != null)
-            {
-                return LanguageList.IndexOf(languageinfo);
-            }
-
-            return -1;
-        }
-
-        public static string GetDisplayLanguageName()
-        {
-            string title = "N/A";
-
-            if (!Tizen.Vconf.TryGetBool(VconfLanguageAutomatic, out bool lang_automatic))
-            {
-                Logger.Warn($"could not get value for {VconfLanguageAutomatic}");
-            }
-
-            if (lang_automatic)
-            {
-                return Resources.IDS_ST_BODY_ANSWERINGMODE_AUTOMATIC;
-            }
-
-            string locale = GetDisplayLanguage();
-
-            var displayLanguage = LanguageList.Where(x => x.GetLocale() == locale).FirstOrDefault();
-
-            if (displayLanguage != null)
-            {
-                return displayLanguage.GetName();
-            }
-
-            return title;
-        }
-
-        public static void SetDisplayLanguage(string locale)
-        {
-            /* [control] set automatic - TRUE */
-            Tizen.Vconf.SetBool("db/setting/lang_automatic", false);
-
-            /* [control] set vconf language */
-            // system_settings_set_value_string(SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, pnode->locale);
-            SystemSettings.LocaleLanguage = locale;
-            // TODO : NUI setting corresponding to elm_language_set(temp);
-
-            if (!Tizen.Vconf.TryGetBool(VconfRegionAutomatic, out bool region_automatic))
-            {
-                Logger.Warn($"could not get value for {VconfRegionAutomatic}");
-            }
-
-            if (region_automatic)
-            {
-                /* [control] region format set - if 'automatic region' */
-                SystemSettings.LocaleCountry = locale;
-            }
-
-            /* 2. GET SELECTED LANG */
-            if (!Tizen.Vconf.TryGetString(VconfWidgetLanguage, out string paLanguage))
-            {
-                Logger.Warn($"could not get value for {VconfWidgetLanguage}");
-            }
-
-            String[] qStrings = paLanguage.Split('.');
-            string qString = qStrings[0];
-            Logger.Debug($"language: {paLanguage}, {qString}");
-
-            /* 3. SET DEFAULT */
-            /* default UI language */
-            // i18n_ulocale_set_default(qString);
-            // To-do : NUI setting corresponding to i18n_ulocale_set_default();
-
-            SystemSettings.LocaleCountry = paLanguage;
-        }
-    }
-}
diff --git a/SettingMainGadget/LanguageInputGadget.cs b/SettingMainGadget/LanguageInputGadget.cs
deleted file mode 100644 (file)
index 9aa8307..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-using SettingCore.TextResources;
-using SettingCore;
-using SettingCore.Views;
-using SettingMainGadget;
-using SettingMainGadget.LanguageInput;
-using System.Collections.Generic;
-using System.Linq;
-using Tizen.NUI;
-using Tizen.NUI.BaseComponents;
-using Tizen.NUI.Components;
-using Tizen.PhonenumberUtils;
-using Tizen.System;
-
-namespace Setting.Menu
-{
-    public class LanguageInputGadget : SettingCore.MainMenuGadget
-    {
-        public override Color ProvideIconColor() => new Color(IsLightTheme ? "#205493" : "#2560A8");
-
-        public override string ProvideIconPath() => GetResourcePath("language_input.svg");
-
-        public override string ProvideTitle() => Resources.IDS_ST_HEADER_LANGUAGE_AND_INPUT;
-
-        private View content;
-        private Sections sections = new Sections();
-
-        protected override View OnCreate()
-        {
-            base.OnCreate();
-
-            SystemSettings.LocaleLanguageChanged += SystemSettings_LocaleLanguageChanged;
-
-            content = new ScrollableBase
-            {
-                WidthSpecification = LayoutParamPolicies.MatchParent,
-                HeightSpecification = LayoutParamPolicies.MatchParent,
-                ScrollingDirection = ScrollableBase.Direction.Vertical,
-                HideScrollbar = false,
-                Layout = new LinearLayout()
-                {
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-
-            CreateView();
-
-            return content;
-        }
-
-        protected override void OnDestroy()
-        {
-            SystemSettings.LocaleLanguageChanged -= SystemSettings_LocaleLanguageChanged;
-
-            base.OnDestroy();
-        }
-
-        protected override void OnCustomizationUpdate(IEnumerable<MenuCustomizationItem> items)
-        {
-            Logger.Verbose($"{nameof(DisplayGadget)} got customization with {items.Count()} items. Recreating view.");
-            CreateView();
-        }
-
-        private void CreateView()
-        {
-            sections.RemoveAllSectionsFromView(content);
-            TextListItem displayLanguageItem = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_HEADER_DISPLAY_LANGUAGE, LanguageInputDisplayLanguageManager.GetDisplayLanguageName());
-            if (displayLanguageItem != null)
-            {
-                displayLanguageItem.Clicked += (o, e) =>
-                {
-                    NavigateTo(MainMenuProvider.Language_Display);
-                };
-                sections.Add(MainMenuProvider.Language_Display, displayLanguageItem);
-            }
-
-            TextHeaderListItem keyboardHeaderItem = new TextHeaderListItem(Resources.IDS_ST_BODY_KEYBOARD);
-            if (keyboardHeaderItem != null)
-            {
-                sections.Add(MainMenuProvider.Language_KeyboardHeader, keyboardHeaderItem);
-            }
-
-            TextListItem keyboardItem = TextListItem.CreatePrimaryTextItem(Resources.IDS_ST_BODY_KEYBOARD);
-            if (keyboardItem != null)
-            {
-                keyboardItem.Clicked += (o, e) =>
-                {
-                    NavigateTo(MainMenuProvider.Language_InputMethod);
-                };
-                sections.Add(MainMenuProvider.Language_InputMethod, keyboardItem);
-            }
-
-            TextHeaderListItem inputAssistanceHeaderItem = new TextHeaderListItem(Resources.IDS_ST_BODY_INPUT_ASSISTANCE);
-            if (inputAssistanceHeaderItem != null)
-            {
-                sections.Add(MainMenuProvider.Language_InputAssistanceHeader, inputAssistanceHeaderItem);
-            }
-
-            TextListItem autofillServiceItem = TextListItem.CreatePrimaryTextItem(Resources.IDS_ST_BODY_AUTOFILL_SERVICE);
-            if (autofillServiceItem != null)
-            {
-                autofillServiceItem.Clicked += (o, e) =>
-                {
-                    NavigateTo(MainMenuProvider.Language_AutoFill);
-                };
-                sections.Add(MainMenuProvider.Language_AutoFill, autofillServiceItem);
-            }
-
-            TextHeaderListItem bodySpeachHeaderItem = new TextHeaderListItem(Resources.IDS_ST_BODY_SPEECH);
-            if (bodySpeachHeaderItem != null)
-            {
-                sections.Add(MainMenuProvider.Language_BodySpeach, bodySpeachHeaderItem);
-            }
-
-            TextListItem voiceControl = TextListItem.CreatePrimaryTextItem(Resources.IDS_VOICE_BODY_VOICE_CONTROL_ABB2);
-            if (voiceControl != null)
-            {
-                voiceControl.Clicked += (o, e) =>
-                {
-                    NavigateTo(MainMenuProvider.Language_VoiceControl);
-                };
-                sections.Add(MainMenuProvider.Language_VoiceControl, voiceControl);
-            }
-
-            TextListItem languageTTS = TextListItem.CreatePrimaryTextItem(Resources.IDS_VOICE_HEADER_TEXT_TO_SPEECH_HTTS);
-            if (languageTTS != null)
-            {
-                languageTTS.Clicked += (o, e) =>
-                {
-                    NavigateTo(MainMenuProvider.Language_TTS);
-                };
-                sections.Add(MainMenuProvider.Language_TTS, languageTTS);
-            }
-
-            TextListItem languageSTT = TextListItem.CreatePrimaryTextItem(Resources.IDS_VOICE_HEADER_SPEECH_TO_TEXT_HSTT);
-            if (languageSTT != null)
-            {
-                languageSTT.Clicked += (o, e) =>
-                {
-                    NavigateTo(MainMenuProvider.Language_STT);
-                };
-                sections.Add(MainMenuProvider.Language_STT, languageSTT);
-            }
-
-            var customization = GetCustomization().OrderBy(c => c.Order);
-            Logger.Debug($"customization: {customization.Count()}");
-            foreach (var cust in customization)
-            {
-                string visibility = cust.IsVisible ? "visible" : "hidden";
-                Logger.Verbose($"Customization: {cust.MenuPath} - {visibility} - {cust.Order}");
-                if (cust.IsVisible && sections.TryGetValue(cust.MenuPath, out View row))
-                {
-                    content.Add(row);
-                }
-            }
-        }
-
-        private void SystemSettings_LocaleLanguageChanged(object sender, LocaleLanguageChangedEventArgs e)
-        {
-            if (content != null)
-            {
-                CreateView();
-            }
-        }
-    }
-}
diff --git a/SettingMainGadget/MainMenuProvider.cs b/SettingMainGadget/MainMenuProvider.cs
deleted file mode 100644 (file)
index 937642d..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-using SettingCore;
-
-namespace SettingMainGadget
-{
-    public class MainMenuProvider : SettingMenuProvider
-    {
-        public static string Display = "Display";
-        public static string Display_Brightness = "Display.Brightness";
-        public static string Display_Font = "Display.Font";
-        public static string Display_FontSize = "Display.Font.FontSize";
-        public static string Display_FontType = "Display.Font.FontType";
-        public static string Display_Timeout = "Display.Timeout";
-        public static string Display_Theme = "Display.Theme";
-        public static string Sound = "Sound";
-        public static string Sound_Mode = "Sound.Mode";
-        public static string Sound_Notification = "Sound.Notification";
-        public static string Sound_Other = "Sound.Other";
-        public static string Sound_MediaSlider = "Sound.MediaSlider";
-        public static string Sound_NotificationSlider = "Sound.NotificationSlider";
-        public static string Sound_SystemSlider = "Sound.SystemSlider";
-        public static string DateTime = "DateTime";
-        public static string DateTime_AutoUpdate = "DateTime.AutoUpdate";
-        public static string DateTime_SetDate = "DateTime.SetDate";
-        public static string DateTime_SetTime = "DateTime.SetTime";
-        public static string DateTime_SetTimezone = "DateTime.SetTimezone";
-        public static string DateTime_TimeFormat = "DateTime.TimeFormat";
-        public static string Language = "Language";
-        public static string Language_Display = "Language.DisplayLanguage";
-        public static string Language_KeyboardHeader = "Language.KeyboardHeader";
-        public static string Language_InputAssistanceHeader = "Language.InputAssistanceHeader";
-        public static string Language_BodySpeach = "Language.BodySpeach";
-        public static string About = "About";
-        public static string About_ManageCertificates = "About.ManageCertificates";
-        public static string About_OpenSourceLicenses = "About.OpenSourceLicenses";
-        public static string About_ScalableUI = "About.ScalableUI";
-        public static string About_DeviceInfo = "About.DeviceInfo";
-        public static string About_RenameDevice = "About.RenameDevice";
-        public static string About_ModelNumber = "About.ModelNumber";
-        public static string About_TizenVersion = "About.TizenVersion";
-        public static string About_Cpu = "About.Cpu";
-        public static string About_Ram = "About.Ram";
-        public static string About_Resolution = "About.Resolution";
-        public static string About_DeviceStatus = "About.DeviceStatus";
-        public static string About_DeviceStatus_bt_address = "About.DeviceStatus.BluetoothAddress";
-        public static string About_DeviceStatus_wifi_mac_address = "About.DeviceStatus.WifiMacAddress";
-        public static string About_DeviceStatus_storage = "About.DeviceStatus.Storage";
-        public static string About_DeviceStatus_cpu_usage = "About.DeviceStatus.CpuUsage";
-
-        //storage
-        public static string Storage = "Storage";
-        public static string Storage_InternalUsage = "Storage.InternalUsage";
-        public static string Storage_Used = "Storage.Used";
-        public static string Storage_TotalInternal = "Storage.TotalInternal";
-        public static string Storage_FreeInternal = "Storage.FreeInternal";
-        public static string Storage_UsageSummary = "Storage.UsageSummary";
-        public static string Storage_UsageIndicator = "Storage.UsageIndicator";
-        public static string Storage_ExternalUsage = "Storage.ExternalUsage";
-        public static string Storage_ExternalStorage = "Storage.ExternalStorage";
-        public static string Storage_DefaultSettings = "Storage.DefaultSettings";
-
-        //external
-        public static string Language_InputMethod = "Language.InputMethod";
-        public static string Language_AutoFill = "Language.AutoFill";
-        public static string Language_VoiceControl = "Language.VoiceControl";
-        public static string Language_TTS = "Language.TTS";
-        public static string Language_STT = "Language.STT";
-
-        public override SettingMenu[] Provide()
-        {
-            return new SettingMenu[]
-            {
-                new SettingMenu(path: Display, defaultOrder: 30, type: typeof(Setting.Menu.DisplayGadget)),
-                new SettingMenu(path: Display_Brightness, defaultOrder: 31),
-                new SettingMenu(path: Display_Font, defaultOrder: 32, type: typeof(Setting.Menu.Display.DisplayFontGadget)),
-                new SettingMenu(path: Display_FontSize, defaultOrder: 33, type: typeof(Setting.Menu.Display.DisplayFontSizeGadget)),
-                new SettingMenu(path: Display_FontType, defaultOrder: 34, type: typeof(Setting.Menu.Display.DisplayFontTypeGadget)),
-                new SettingMenu(path: Display_Timeout, defaultOrder: 35, type: typeof(Setting.Menu.Display.DisplayTimeOutGadget)),
-                new SettingMenu(path: Display_Theme, defaultOrder: 36, type: typeof(Setting.Menu.Display.DisplayThemeGadget)),
-                new SettingMenu(path: Sound, defaultOrder: 40, type: typeof(Setting.Menu.SoundGadget)),
-                new SettingMenu(path: Sound_Mode, defaultOrder: 41, type: typeof(Setting.Menu.Sound.SoundmodeGadget)),
-                new SettingMenu(path: Sound_Notification, defaultOrder: 42, type: typeof(Setting.Menu.Sound.SoundnotificationGadget)),
-                new SettingMenu(path: Sound_Other, defaultOrder: 43, type: typeof(Setting.Menu.Sound.SoundotherGadget)),
-                new SettingMenu(path: Sound_MediaSlider, defaultOrder: 44),
-                new SettingMenu(path: Sound_NotificationSlider, defaultOrder: 45),
-                new SettingMenu(path: Sound_SystemSlider, defaultOrder: 46),
-                new SettingMenu(path: DateTime, defaultOrder: 50, type: typeof(Setting.Menu.DateTimeGadget)),
-                new SettingMenu(path: DateTime_AutoUpdate, defaultOrder: 51),
-                new SettingMenu(path: DateTime_SetDate, defaultOrder: 52, type: typeof(Setting.Menu.DateTime.DateTimeSetDateGadget)),
-                new SettingMenu(path: DateTime_SetTime, defaultOrder: 53, type: typeof(Setting.Menu.DateTime.DateTimeSetTimeGadget)),
-                new SettingMenu(path: DateTime_SetTimezone, defaultOrder: 54, type: typeof(Setting.Menu.DateTime.DateTimeSetTimezoneGadget)),
-                new SettingMenu(path: DateTime_TimeFormat, defaultOrder: 55),
-                new SettingMenu(path: Language, defaultOrder: 60, type: typeof(Setting.Menu.LanguageInputGadget)),
-                new SettingMenu(path: Language_Display, defaultOrder: 61, type: typeof(Setting.Menu.LanguageInput.LanguageInputDisplayLanguageGadget)),
-                new SettingMenu(path: Language_KeyboardHeader, defaultOrder: 62),
-                new SettingMenu(path: Language_InputMethod, defaultOrder: 63),
-                new SettingMenu(path: Language_InputAssistanceHeader, defaultOrder: 64),
-                new SettingMenu(path: Language_AutoFill, defaultOrder: 65),
-                new SettingMenu(path: Language_BodySpeach, defaultOrder: 66),
-                new SettingMenu(path: Language_VoiceControl, defaultOrder: 67),
-                new SettingMenu(path: Language_TTS, defaultOrder: 68),
-                new SettingMenu(path: Language_STT, defaultOrder: 69),
-                new SettingMenu(path: About, defaultOrder: 70, type: typeof(Setting.Menu.AboutGadget)),
-                new SettingMenu(path: About_ManageCertificates, defaultOrder: 10),
-                new SettingMenu(path: About_OpenSourceLicenses, defaultOrder: 20, type: typeof(Setting.Menu.AboutLegalInfoGadget)),
-                new SettingMenu(path: About_ScalableUI, defaultOrder: -30, type: typeof(SettingMainGadget.About.AboutScalableGadget)),
-                new SettingMenu(path: About_DeviceInfo, defaultOrder: 40),
-                new SettingMenu(path: About_RenameDevice, defaultOrder: 50),
-                new SettingMenu(path: About_ModelNumber, defaultOrder: 60),
-                new SettingMenu(path: About_TizenVersion, defaultOrder: 70),
-                new SettingMenu(path: About_Cpu, defaultOrder: 80),
-                new SettingMenu(path: About_Ram, defaultOrder: 90),
-                new SettingMenu(path: About_Resolution, defaultOrder: 100),
-                new SettingMenu(path: About_DeviceStatus, defaultOrder: 110, type: typeof(Setting.Menu.AboutDeviceStatusGadget)),
-                new SettingMenu(path: About_DeviceStatus_bt_address, defaultOrder: 10),
-                new SettingMenu(path: About_DeviceStatus_wifi_mac_address, defaultOrder: 20),
-                new SettingMenu(path: About_DeviceStatus_storage, defaultOrder: 30),
-                new SettingMenu(path: About_DeviceStatus_cpu_usage, defaultOrder: 40),
-                //storage
-                new SettingMenu(path: Storage, defaultOrder: 120, type: typeof(Setting.Menu.StorageGadget)),
-                new SettingMenu(path: Storage_InternalUsage, defaultOrder: 10),
-                new SettingMenu(path: Storage_Used, defaultOrder: 15),
-                new SettingMenu(path: Storage_UsageIndicator, defaultOrder: 20),
-                new SettingMenu(path: Storage_TotalInternal, defaultOrder: 25),
-                new SettingMenu(path: Storage_FreeInternal, defaultOrder: 30),
-                new SettingMenu(path: Storage_UsageSummary, defaultOrder: 35),
-                new SettingMenu(path: Storage_ExternalUsage, defaultOrder: 40),
-                new SettingMenu(path: Storage_ExternalStorage, defaultOrder: 45),
-                new SettingMenu(path: Storage_DefaultSettings, defaultOrder: 50, typeof(Setting.Menu.Storage.DefaultStorageGadget)),
-            };
-        }
-    }
-}
diff --git a/SettingMainGadget/SettingMainGadget.csproj b/SettingMainGadget/SettingMainGadget.csproj
deleted file mode 100644 (file)
index 7b3387b..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <TargetFramework>netcoreapp3.1</TargetFramework>
-    <RunPostBuildEvent>OnOutputUpdated</RunPostBuildEvent>
-  </PropertyGroup>
-
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugType>portable</DebugType>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>None</DebugType>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <PackageReference Include="Tizen.NET" Version="11.0.0.17739" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\SettingCore\SettingCore.csproj" />
-  </ItemGroup>
-
-  <Target Name="PostBuild" AfterTargets="PostBuildEvent">
-    <Exec Command="set PATH=%25PATH%25;C:\tizen-studio\tools\ide\bin\&#xD;&#xA;set PATH=%25PATH%25;C:\tizen-studio\tools\&#xD;&#xA;&#xD;&#xA;:: copy dll&#xD;&#xA;mkdir $(AssemblyName)\res\allowed\&#xD;&#xA;copy $(OutDir)$(AssemblyName).dll $(AssemblyName)\res\allowed\&#xD;&#xA;&#xD;&#xA;:: copy manifest file&#xD;&#xA;copy resources\tizen-manifest.xml $(AssemblyName)&#xD;&#xA;&#xD;&#xA;:: copy all resources except manifest file&#xD;&#xA;xcopy resources\ $(AssemblyName)\res\allowed\$(AssemblyName)\ /E/H/C/I&#xD;&#xA;del $(AssemblyName)\res\allowed\$(AssemblyName)\tizen-manifest.xml&#xD;&#xA;&#xD;&#xA;:: create rpk&#xD;&#xA;call tizen package -t rpk -- $(AssemblyName)\&#xD;&#xA;&#xD;&#xA;:: store rpk at artifacts dir&#xD;&#xA;mkdir artifacts\&#xD;&#xA;copy $(AssemblyName)\Package\*.rpk artifacts\&#xD;&#xA;&#xD;&#xA;:: cleanup final&#xD;&#xA;rmdir /s /q $(AssemblyName)&#xD;&#xA;&#xD;&#xA;:: install rpk&#xD;&#xA;call sdb install artifacts\*.rpk" />
-  </Target>
-
-</Project>
diff --git a/SettingMainGadget/SettingMainGadget.sln b/SettingMainGadget/SettingMainGadget.sln
new file mode 100644 (file)
index 0000000..ddad744
--- /dev/null
@@ -0,0 +1,36 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.31005.135
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SettingMainGadget", "SettingMainGadget\SettingMainGadget.csproj", "{DF56527C-4281-4711-B5EC-72FA104F4DCA}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{75551048-6BFB-448A-AC15-3054EF0F5BC0}"
+       ProjectSection(SolutionItems) = preProject
+               tizen_workspace.yaml = tizen_workspace.yaml
+       EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SettingCore", "..\SettingCore\SettingCore.csproj", "{6034C142-AC02-45F2-9826-FA79AD722BDE}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Any CPU = Debug|Any CPU
+               Release|Any CPU = Release|Any CPU
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {DF56527C-4281-4711-B5EC-72FA104F4DCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {DF56527C-4281-4711-B5EC-72FA104F4DCA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {DF56527C-4281-4711-B5EC-72FA104F4DCA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {DF56527C-4281-4711-B5EC-72FA104F4DCA}.Release|Any CPU.Build.0 = Release|Any CPU
+               {6034C142-AC02-45F2-9826-FA79AD722BDE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {6034C142-AC02-45F2-9826-FA79AD722BDE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {6034C142-AC02-45F2-9826-FA79AD722BDE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {6034C142-AC02-45F2-9826-FA79AD722BDE}.Release|Any CPU.Build.0 = Release|Any CPU
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+       GlobalSection(ExtensibilityGlobals) = postSolution
+               SolutionGuid = {4875D17B-E864-446F-AA80-422D0D492C1A}
+       EndGlobalSection
+EndGlobal
diff --git a/SettingMainGadget/SettingMainGadget/About/AboutDeviceStatusGadget.cs b/SettingMainGadget/SettingMainGadget/About/AboutDeviceStatusGadget.cs
new file mode 100644 (file)
index 0000000..ca7d81e
--- /dev/null
@@ -0,0 +1,187 @@
+using SettingCore.TextResources;
+using SettingCore;
+using SettingCore.Views;
+using SettingMainGadget;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+using Tizen.System;
+using Tizen.Telephony;
+
+namespace Setting.Menu
+{
+    public class AboutDeviceStatusGadget : SettingCore.MenuGadget
+    {
+        private SystemCpuUsage systemCpuUsage;
+        private TextListItem cpuUsage;
+        private Timer timer;
+        private View content;
+        private Sections sections = new Sections();
+
+        public override string ProvideTitle() => Resources.IDS_ST_MBODY_DEVICE_STATUS;
+    
+        protected override View OnCreate()
+        {
+            base.OnCreate();
+
+            content = new ScrollableBase()
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                ScrollingDirection = ScrollableBase.Direction.Vertical,
+                HideScrollbar = false,
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            CreateView();
+
+            return content;
+        }
+
+        protected override void OnDestroy()
+        {
+            base.OnDestroy();
+            timer.Tick -= timerTick;
+            timer.Stop();
+        }
+
+        private void CreateView()
+        {
+            sections.RemoveAllSectionsFromView(content);
+#if false
+            IEnumerable<SlotHandle> handlelist = Tizen.Telephony.Manager.Init();
+            if (handlelist != null)
+            {
+                IEnumerator<SlotHandle> enumerator = handlelist.GetEnumerator();
+
+                Sim sim = new Sim(enumerator.Current);
+                if (sim != null)
+                {
+                    item = SettingItemCreator.CreateItemWithCheck(Resources.IDS_ST_BODY_PHONE_NUMBER, sim.SubscriberNumber);
+                    content.Add(item);
+                }
+
+                Modem modem = new Modem(enumerator.Current);
+                if (modem != null)
+                {
+                    item = SettingItemCreator.CreateItemWithCheck(Resources.IDS_ST_BODY_IMEI, modem.Imei);
+                    content.Add(item);
+                }
+
+                Tizen.Telephony.Manager.Deinit();
+            }
+#endif
+
+
+#if true
+            string addressBT = Resources.IDS_ST_HEADER_UNAVAILABLE;
+            try
+            {
+                if (Tizen.Network.Bluetooth.BluetoothAdapter.IsBluetoothEnabled)
+                    addressBT = Tizen.Network.Bluetooth.BluetoothAdapter.Address;
+                else
+                    addressBT = Resources.IDS_ST_SBODY_DISABLED;
+            }
+            catch (Exception e)
+            {
+                Logger.Warn($"Could not get bluetooth address.");
+            }
+
+            var btAddress = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_MBODY_BLUETOOTH_ADDRESS, addressBT);
+            if (btAddress != null)
+            {
+                sections.Add(MainMenuProvider.About_DeviceStatus_bt_address, btAddress);
+            }
+#endif
+
+#if true
+            string addressMac = Resources.IDS_ST_HEADER_UNAVAILABLE;
+            if (Tizen.Network.WiFi.WiFiManager.IsActive)
+                addressMac = Tizen.Network.WiFi.WiFiManager.MacAddress;
+            else
+                addressMac = Resources.IDS_ST_SBODY_DISABLED;
+
+            var wifiMacAddress = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_WI_FI_MAC_ADDRESS, addressMac);
+            if (wifiMacAddress != null)
+            {
+                sections.Add(MainMenuProvider.About_DeviceStatus_wifi_mac_address, wifiMacAddress);
+
+            }
+#endif
+            ulong total = 0, available = 0;
+            foreach (var deviceStorage in StorageManager.Storages)
+            {
+                total += deviceStorage.TotalSpace;
+                available += deviceStorage.AvailableSpace;
+            }
+
+            var storage = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_STORAGE,
+                $"{bytesToGB(available).ToString("0.##")}GB available (Total {bytesToGB(total).ToString("0.##")}GB)");
+            if (storage != null)
+            {
+                sections.Add(MainMenuProvider.About_DeviceStatus_storage, storage);
+            }
+
+#if true
+            systemCpuUsage = new SystemCpuUsage();
+            cpuUsage = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_CPU_USAGE, getCpuUsageFormated());
+            if (cpuUsage != null)
+            {
+                sections.Add(MainMenuProvider.About_DeviceStatus_cpu_usage, cpuUsage);
+                startTimer();
+            }
+#endif
+
+            // add only visible sections to content view in required order
+            var customization = GetCustomization().OrderBy(c => c.Order);
+            foreach (var cust in customization)
+            {
+                string visibility = cust.IsVisible ? "visible" : "hidden";
+                Logger.Verbose($"Customization: {cust.MenuPath} - {visibility} - {cust.Order}");
+                if (cust.IsVisible && sections.TryGetValue(cust.MenuPath, out View row))
+                {
+                    content.Add(row);
+                }
+            }
+        }
+
+        protected override void OnCustomizationUpdate(IEnumerable<MenuCustomizationItem> items)
+        {
+            Logger.Verbose($"{nameof(AboutGadget)} got customization with {items.Count()} items. Recreating view.");
+            CreateView();
+        }
+        private double bytesToGB(double b)
+        {
+            return b / (1024 * 1024 * 1024);
+        }
+
+        private string getCpuUsageFormated()
+        {
+            string system = (systemCpuUsage.System/100).ToString("0.#%");
+            Logger.Verbose($"CPU usage: {system}");
+            return system;
+        }
+
+        private void startTimer()
+        {
+            timer = new Timer(1000);
+            timer.Tick += timerTick;
+            timer.Start();
+        }
+
+        private bool timerTick(object source, Timer.TickEventArgs e)
+        {
+            systemCpuUsage.Update();
+            var system = getCpuUsageFormated();
+            cpuUsage.Secondary = system;
+
+            return true;
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/About/AboutLegalInfoGadget.cs b/SettingMainGadget/SettingMainGadget/About/AboutLegalInfoGadget.cs
new file mode 100644 (file)
index 0000000..4086940
--- /dev/null
@@ -0,0 +1,20 @@
+using SettingCore.TextResources;
+using Tizen.NUI.BaseComponents;
+
+namespace Setting.Menu
+{
+    public class AboutLegalInfoGadget : SettingCore.MenuGadget
+    {
+        const string LegalinfoURL = "file:///usr/share/license.html";
+        public override string ProvideTitle() => Resources.IDS_ST_BODY_OPEN_SOURCE_LICENCES;
+
+        protected override View OnCreate()
+        {
+            base.OnCreate();
+            WebView view = new WebView();
+            view.LoadUrl(LegalinfoURL);
+
+            return view;
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/About/AboutManageCertificatesGadget.cs b/SettingMainGadget/SettingMainGadget/About/AboutManageCertificatesGadget.cs
new file mode 100644 (file)
index 0000000..035c2c4
--- /dev/null
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace SettingMainGadget.About
+{
+    public class AboutManageCertificatesGadget : SettingCore.MenuGadget
+    {
+        public override string ProvideTitle()
+        {
+            throw new NotImplementedException();
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/About/AboutScalableGadget.cs b/SettingMainGadget/SettingMainGadget/About/AboutScalableGadget.cs
new file mode 100644 (file)
index 0000000..414e526
--- /dev/null
@@ -0,0 +1,64 @@
+using SettingCore;
+using SettingCore.Views;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+
+namespace SettingMainGadget.About
+{
+    public class AboutScalableGadget : SettingCore.MenuGadget
+    {
+        public override string ProvideTitle() => "Scalable UI for Developers";
+
+        protected override View OnCreate()
+        {
+            base.OnCreate();
+
+            var content = new ScrollableBase()
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                ScrollingDirection = ScrollableBase.Direction.Vertical,
+                HideScrollbar = false,
+                ThemeChangeSensitive = true,
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            var scalable = new (string, string)[]
+            {
+                ("Scaling Factor", $"{GraphicsTypeManager.Instance.ScalingFactor}"),
+                ("DPI", $"{GraphicsTypeManager.Instance.Dpi}"),
+                ("Scaled DPI", $"{GraphicsTypeManager.Instance.ScaledDpi}"),
+                ("Baseline DPI", $"{GraphicsTypeManager.Instance.BaselineDpi}"),
+                ("Density", $"{GraphicsTypeManager.Instance.Density}"),
+                ("Scaled Density", $"{GraphicsTypeManager.Instance.ScaledDensity}"),
+                ("100dp scaled is displayed as:", $"{GraphicsTypeManager.Instance.ConvertScriptToPixel("100dp")}px"),
+                ("100sp scaled is displayed as:", $"{GraphicsTypeManager.Instance.ConvertScriptToPixel("100sp")}px"),
+            };
+            foreach (var (title, value) in scalable)
+            {
+                var row = TextListItem.CreatePrimaryTextItemWithSecondaryText(title, value);
+                content.Add(row);
+            }
+
+            var hideButton = new Button()
+            {
+                Text = "Hide menu: Scalable UI for Developers",
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+            };
+            hideButton.TextLabel.PixelSize = 24.SpToPx();
+            hideButton.TextLabel.Margin = new Extents(0, 0, 16, 16).SpToPx();
+            hideButton.Clicked += (s, e) =>
+            {
+                GadgetManager.Instance.ChangeMenuPathOrder(MainMenuProvider.About_ScalableUI, -30);
+                NavigateBack();
+            };
+            content.Add(hideButton);
+
+            return content;
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/AboutGadget.cs b/SettingMainGadget/SettingMainGadget/AboutGadget.cs
new file mode 100644 (file)
index 0000000..036268f
--- /dev/null
@@ -0,0 +1,364 @@
+using SettingCore.TextResources;
+using SettingCore;
+using SettingCore.Views;
+using SettingMainGadget;
+using System.Collections.Generic;
+using System.Linq;
+using Tizen;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+using Tizen.System;
+using System;
+
+namespace Setting.Menu
+{
+    public class AboutGadget : SettingCore.MainMenuGadget
+    {
+        private const int MAX_DEVICE_NAME_LEN = 32;
+        private TextListItem renameDevice;
+        private string VconfDeviceName = "db/setting/device_name";
+        private string SystemModelName = "tizen.org/system/model_name";
+
+        private Sections sections = new Sections();
+        private View content;
+        private TextField textField;
+        private TextLabel warning;
+        private Button renameButton;
+        private string deviceName;
+        private bool isLightTheme => ThemeManager.PlatformThemeId == "org.tizen.default-light-theme";
+
+        public override Color ProvideIconColor() => new Color(IsLightTheme ? "#301A4B" : "#CAB4E5");
+
+        public override string ProvideIconPath() => GetResourcePath("about.svg");
+
+        public override string ProvideTitle() => Resources.IDS_ST_BODY_ABOUT_DEVICE;
+
+        protected override View OnCreate()
+        {
+            base.OnCreate();
+            content = new ScrollableBase()
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                ScrollingDirection = ScrollableBase.Direction.Vertical,
+                HideScrollbar = false,
+                ThemeChangeSensitive = true,
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            SystemSettings.DeviceNameChanged += SystemSettings_DeviceNameChanged;
+            CreateView();
+
+            return content;
+        }
+
+        protected override void OnDestroy()
+        {
+            SystemSettings.DeviceNameChanged -= SystemSettings_DeviceNameChanged;
+
+            base.OnDestroy();
+        }
+
+        private void SystemSettings_DeviceNameChanged(object sender, DeviceNameChangedEventArgs e)
+        {
+            Logger.Verbose($"Device name changed: {e.Value}");
+            deviceName = e.Value;
+            renameDevice.Secondary = e.Value;
+        }
+
+
+        private void CreateView()
+        {
+            sections.RemoveAllSectionsFromView(content);
+
+            var manageCertificates = TextListItem.CreatePrimaryTextItem(Resources.IDS_ST_HEADER_MANAGE_CERTIFICATES_ABB);
+            manageCertificates.Clicked += (s, e) =>
+            {
+                NavigateTo(MainMenuProvider.About_ManageCertificates);
+            };
+            sections.Add(MainMenuProvider.About_ManageCertificates, manageCertificates);
+
+            var openSourceLicenses = TextListItem.CreatePrimaryTextItem(Resources.IDS_ST_BODY_OPEN_SOURCE_LICENCES);
+            openSourceLicenses.Clicked += (s, e) =>
+            {
+                NavigateTo(MainMenuProvider.About_OpenSourceLicenses);
+            };
+            sections.Add(MainMenuProvider.About_OpenSourceLicenses, openSourceLicenses);
+
+            var scalableUI = TextListItem.CreatePrimaryTextItem("Scalable UI for Developers");
+            scalableUI.Clicked += (s, e) =>
+            {
+                NavigateTo(MainMenuProvider.About_ScalableUI);
+            };
+            sections.Add(MainMenuProvider.About_ScalableUI, scalableUI);
+
+            var deviceInfo = new TextHeaderListItem(Resources.IDS_ST_BODY_DEVICE_INFO);
+            sections.Add(MainMenuProvider.About_DeviceInfo, deviceInfo);
+
+            if (Vconf.TryGetString(VconfDeviceName, out deviceName))
+            {
+                Logger.Warn($"Could not get vconf value: {VconfDeviceName}");
+            }
+
+            renameDevice = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_NAME, deviceName);
+            renameDevice.Clicked += (s, e) =>
+            {
+                ShowRenamePopup(deviceName);
+            };
+            sections.Add(MainMenuProvider.About_RenameDevice, renameDevice);
+
+            bool result = Tizen.System.Information.TryGetValue<string>("http://tizen.org/system/model_name", out string modelNumberText);
+            var modelNumber = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_MODEL_NUMBER, result ? modelNumberText : Resources.IDS_ST_HEADER_UNAVAILABLE);
+            sections.Add(MainMenuProvider.About_ModelNumber, modelNumber);
+
+            result = Tizen.System.Information.TryGetValue<string>("http://tizen.org/feature/platform.version", out string platformVersionText);
+            var platformVersion = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_MBODY_TIZEN_VERSION, result ? platformVersionText : Resources.IDS_ST_HEADER_UNAVAILABLE);
+            platformVersion.MultiTap += (s, e) =>
+            {
+                GadgetManager.Instance.ChangeMenuPathOrder(MainMenuProvider.About_ScalableUI, 30);
+
+                var toast = Notification.MakeToast("Scalable UI for Developers menu enabled", Notification.ToastCenter);
+                toast.Post(1000);
+            };
+            sections.Add(MainMenuProvider.About_TizenVersion, platformVersion);
+
+            result = Tizen.System.Information.TryGetValue<string>("http://tizen.org/system/platform.processor", out string platformProcessorText);
+            var cpu = TextListItem.CreatePrimaryTextItemWithSecondaryText("CPU", result ? platformProcessorText : Resources.IDS_ST_HEADER_UNAVAILABLE);
+            sections.Add(MainMenuProvider.About_Cpu, cpu);
+
+            var memusage = new Tizen.System.SystemMemoryUsage();
+            float ram_total_gb = memusage.Total / (float)(1024 * 1024);
+            var ram = TextListItem.CreatePrimaryTextItemWithSecondaryText("RAM", string.Format("{0:0.0} GB", ram_total_gb));
+            sections.Add(MainMenuProvider.About_Ram, ram);
+
+            bool result1 = Tizen.System.Information.TryGetValue<int>("http://tizen.org/feature/screen.width", out int screenwidth);
+            bool result2 = Tizen.System.Information.TryGetValue<int>("http://tizen.org/feature/screen.height", out int screenheight);
+
+            var resolution = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_RESOLUTION, result1 && result2 ? $"{screenwidth} x {screenheight}" : Resources.IDS_ST_HEADER_UNAVAILABLE);
+            sections.Add(MainMenuProvider.About_Resolution, resolution);
+
+            if (IsEmulBin() == false)
+            {
+                var showOther = TextListItem.CreatePrimaryTextItemWithSubText(Resources.IDS_ST_BODY_STATUS, Resources.IDS_ST_BODY_SHOW_NETWORK_STATUS_AND_OTHER_INFORMATION);
+                showOther.Clicked += (s, e) =>
+                {
+                    NavigateTo(MainMenuProvider.About_DeviceStatus);
+                };
+                sections.Add(MainMenuProvider.About_DeviceStatus, showOther);
+            }
+
+            // add only visible sections to content view in required order
+            var customization = GetCustomization().OrderBy(c => c.Order);
+            foreach (var cust in customization)
+            {
+                string visibility = cust.IsVisible ? "visible" : "hidden";
+                Logger.Verbose($"Customization: {cust.MenuPath} - {visibility} - {cust.Order}");
+                if (cust.IsVisible && sections.TryGetValue(cust.MenuPath, out View row))
+                {
+                    content.Add(row);
+                }
+            }
+        }
+
+        protected override void OnCustomizationUpdate(IEnumerable<MenuCustomizationItem> items)
+        {
+            Logger.Verbose($"{nameof(AboutGadget)} got customization with {items.Count()} items. Recreating view.");
+            CreateView();
+        }
+
+        private bool IsEmulBin()
+        {
+            Information.TryGetValue<string>(SystemModelName, out string model);
+            return (model.Equals("Emulator") || model.Equals("EMULATOR"));
+        }
+
+        private void ShowRenamePopup(string name)
+        {
+            var content = new View()
+            {
+                BackgroundColor = isLightTheme ? new Color("#FAFAFA") : new Color("#16131A"),
+                WidthSpecification = LayoutParamPolicies.WrapContent,
+                HeightSpecification = LayoutParamPolicies.WrapContent,
+                Layout = new LinearLayout()
+                {
+                    HorizontalAlignment = HorizontalAlignment.Center,
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            //title text
+            var textTitle = new TextLabel(Resources.IDS_ST_HEADER_RENAME_DEVICE)
+            {
+                FontFamily = "BreezeSans",
+                PixelSize = 24.SpToPx(),
+                Margin = new Extents(0, 0, 24, 16).SpToPx(),
+            };
+
+            content.Add(textTitle);
+
+            // main text
+            var textSubTitle = new TextLabel(Resources.IDS_ST_BODY_DEVICE_NAMES_ARE_DISPLAYED)
+            {
+                FontFamily = "BreezeSans",
+                PixelSize = 24.SpToPx(),
+                SizeWidth = 618.SpToPx(),
+                MultiLine = true,
+                LineWrapMode = LineWrapMode.Word,
+                Margin = new Extents(24, 24, 0, 24).SpToPx(),
+            };
+            content.Add(textSubTitle);
+
+            //entry view
+            PropertyMap placeholder = new PropertyMap();
+            placeholder.Add("color", new PropertyValue(isLightTheme ? new Color("#CACACA") : new Color("#666666")));
+            placeholder.Add("fontFamily", new PropertyValue("BreezeSans"));
+            placeholder.Add("pixelSize", new PropertyValue(24.SpToPx()));
+            placeholder.Add("text", new PropertyValue("Type text"));
+
+            View entryView = new View()
+            {
+                WidthSpecification = LayoutParamPolicies.WrapContent,
+                HeightSpecification = LayoutParamPolicies.WrapContent,
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Horizontal,
+                },
+                Margin = new Extents(48, 50, 0, 7).SpToPx(),
+            };
+            textField = new TextField
+            {
+                FontFamily = "BreezeSans",
+                SizeWidth = 544.SpToPx(),
+                Placeholder = placeholder,
+                BackgroundColor = isLightTheme ? new Color("#FAFAFA") : new Color("#1D1A21"),
+                MaxLength = MAX_DEVICE_NAME_LEN,
+                EnableCursorBlink = true,
+                PixelSize = 24.SpToPx(),
+                Text = name,
+                Margin = new Extents(0, 26, 0, 0).SpToPx(),
+            };
+            textField.TextChanged += TextField_TextChanged;
+            CancelButton cancelTextButton = new CancelButton();
+            cancelTextButton.Clicked += cancelTextButton_Clicked;
+
+            entryView.Add(textField);
+            entryView.Add(cancelTextButton);
+            content.Add(entryView);
+
+            // separator
+            View separatorWrapper = new View()
+            {
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            View separator = new View
+            {
+                Size = new Size(576.SpToPx(), 1),
+                BackgroundColor = new Color("#FF6200"),
+                Margin = new Extents(32, 82, 0, 16).SpToPx(),
+            };
+            separatorWrapper.Add(separator);
+            content.Add(separatorWrapper);
+
+            // warn label
+            View warningWrapper = new View()
+            {
+                WidthSpecification = LayoutParamPolicies.WrapContent,
+                HeightSpecification = LayoutParamPolicies.WrapContent,
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            warning = new TextLabel(Resources.IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED)
+            {
+                SizeWidth = 618.SpToPx(),
+                PixelSize = 16.SpToPx(),
+                TextColor = new Color("#A40404"),
+                Margin = new Extents(32, 40, 0, 25).SpToPx(),
+            };
+            warningWrapper.Add(warning);
+            content.Add(warningWrapper);
+
+            // buttons
+            View buttons = new View()
+            {
+                WidthSpecification = LayoutParamPolicies.WrapContent,
+                HeightSpecification = LayoutParamPolicies.WrapContent,
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Horizontal,
+                },
+                Padding = new Extents(32, 32, 0, 32).SpToPx(),
+            };
+
+            renameButton = new Button()
+            {
+                WidthResizePolicy = ResizePolicyType.FitToChildren,
+                HeightResizePolicy = ResizePolicyType.FitToChildren,
+                Text = Resources.IDS_ST_BUTTON_RENAME,
+                Size = new Size(252, 48).SpToPx(),
+                Margin = new Extents(61, 0, 0, 0).SpToPx(),
+            };
+            renameButton.Clicked += (object sender, ClickedEventArgs e) => {
+                Vconf.SetString(VconfDeviceName, textField.Text);
+                NUIApplication.GetDefaultWindow().GetDefaultNavigator().Pop();
+            };
+
+            var cancelButton = new Button("Tizen.NUI.Components.Button.Outlined")
+            {
+                WidthResizePolicy = ResizePolicyType.FitToChildren,
+                HeightResizePolicy = ResizePolicyType.FitToChildren,
+                Text = Resources.IDS_ST_BUTTON_CANCEL,
+                Size = new Size(252, 48).SpToPx(),
+                Margin = new Extents(61, 0, 0, 0).SpToPx(),
+            };
+
+            cancelButton.Clicked += (object sender, ClickedEventArgs e) => { NUIApplication.GetDefaultWindow().GetDefaultNavigator().Pop(); };
+            buttons.Add(cancelButton);
+            buttons.Add(renameButton);
+
+            content.Add(buttons);
+            checkNameLength(textField);
+
+            RoundedDialogPage.ShowDialog(content);
+        }
+
+        private void TextField_TextChanged(object sender, TextField.TextChangedEventArgs e)
+        {
+            checkNameLength(e.TextField);
+        }
+
+        private void checkNameLength(TextField textField)
+        {
+            if (textField.Text.Length >= MAX_DEVICE_NAME_LEN)
+            {
+                warning.Show();
+                renameButton.IsEnabled = false;
+            }
+            else
+            {
+                warning.Hide();
+                renameButton.IsEnabled = true;
+            }
+
+            if (textField.Text == string.Empty)
+            {
+                renameButton.IsEnabled = false;
+            }
+        }
+
+        private void cancelTextButton_Clicked(object sender, ClickedEventArgs e)
+        {
+            textField.Text = string.Empty;
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/DateTime/DateTimeManager.cs b/SettingMainGadget/SettingMainGadget/DateTime/DateTimeManager.cs
new file mode 100644 (file)
index 0000000..e7a8405
--- /dev/null
@@ -0,0 +1,54 @@
+using SettingCore;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace SettingMainGadget.DateTime
+{
+    public static class DateTimeManager
+    {
+        private const string VconfAutoDateTimeUpdate = "db/setting/automatic_time_update";
+        private const string VconfTimeFormat = "db/menu_widget/regionformat_time1224";
+
+        public static bool Is24HourFormat
+        {
+            get
+            {
+                if (!Tizen.Vconf.TryGetInt(VconfTimeFormat, out int timeformat))
+                {
+                    Logger.Warn($"could not get value for {VconfTimeFormat}");
+                }
+
+                return timeformat.Equals(2) ? true : false;
+            }
+            set
+            {
+                Tizen.Vconf.SetInt(VconfTimeFormat, value ? 2 : 1);
+                Logger.Debug(String.Format("time format changed to: {0}", value ? "24h" : "12h"));
+            }
+        }
+
+        public static bool AutoTimeUpdate
+        {
+            get
+            {
+                if (!Tizen.Vconf.TryGetBool(VconfAutoDateTimeUpdate, out bool autoUpdate))
+                {
+                    Logger.Warn($"could not get value for {VconfAutoDateTimeUpdate}");
+                }
+
+                return autoUpdate;
+            }
+            set
+            {
+                Tizen.Vconf.SetBool(VconfAutoDateTimeUpdate, value);
+                Logger.Debug($"date & time auto update value: {value}");
+            }
+        }
+
+        public static string FormattedTime
+        {
+            get => System.DateTime.Now.ToString(Is24HourFormat ? "HH:mm" : "h:mm tt");
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/DateTime/DateTimeSetDateGadget.cs b/SettingMainGadget/SettingMainGadget/DateTime/DateTimeSetDateGadget.cs
new file mode 100644 (file)
index 0000000..3f13d3c
--- /dev/null
@@ -0,0 +1,73 @@
+using SettingCore.TextResources;
+using SettingCore;
+using System;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+
+namespace Setting.Menu.DateTime
+{
+    public class DateTimeSetDateGadget : SettingCore.MenuGadget
+    {
+        public override string ProvideTitle() => Resources.IDS_ST_BODY_SET_DATE;
+
+        protected override View OnCreate()
+        {
+            base.OnCreate();
+
+            var content = new View()
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                Layout = new LinearLayout()
+                {
+                    HorizontalAlignment = HorizontalAlignment.Center,
+                    VerticalAlignment = VerticalAlignment.Center,
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            var datepicker = new DatePicker()
+            {
+                Date = System.DateTime.Now,
+                HeightResizePolicy = ResizePolicyType.FitToChildren,
+            };
+
+            var button = new Button("Tizen.NUI.Components.Button.Outlined")
+            {
+                Text = Resources.IDS_ST_BUTTON_OK,
+                Size = new Size(252, 48).SpToPx(),
+                WidthResizePolicy = ResizePolicyType.FitToChildren,
+                HeightResizePolicy = ResizePolicyType.FitToChildren,
+                Margin = new Extents(0, 0, 20, 0).SpToPx(),
+            };
+            button.Clicked += (bo, be) =>
+            {
+                SetSystemTime(datepicker.Date);
+                NavigateBack();
+            };
+
+            content.Add(datepicker);
+            content.Add(button);
+
+            return content;
+        }
+
+        private void SetSystemTime(System.DateTime date)
+        {
+            System.DateTime setTime = date;
+            System.DateTime curTime = System.DateTime.Now;
+
+            System.DateTime ltime = new System.DateTime(setTime.Year, setTime.Month, setTime.Day, curTime.Hour, curTime.Minute, curTime.Second, curTime.Millisecond);
+            System.DateTime utime2 = ltime.ToUniversalTime();
+
+            System.DateTime epoch = new System.DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
+            TimeSpan delta = utime2 - epoch;
+
+            Int64 timetick = Convert.ToInt64(delta.TotalSeconds);
+            SettingMainGadget.DateTime.Interop.Alarm.Alarmmgr_SetSystime(timetick);
+
+            Logger.Debug($"system date was changed to: {date}");
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/DateTime/DateTimeSetTimeGadget.cs b/SettingMainGadget/SettingMainGadget/DateTime/DateTimeSetTimeGadget.cs
new file mode 100644 (file)
index 0000000..5382466
--- /dev/null
@@ -0,0 +1,75 @@
+using SettingCore.TextResources;
+using SettingCore;
+using SettingMainGadget.DateTime;
+using System;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+
+namespace Setting.Menu.DateTime
+{
+    public class DateTimeSetTimeGadget : SettingCore.MenuGadget
+    {
+        public override string ProvideTitle() => Resources.IDS_ST_BODY_SET_TIME;
+
+        protected override View OnCreate()
+        {
+            base.OnCreate();
+
+            var content = new View()
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                Layout = new LinearLayout()
+                {
+                    HorizontalAlignment = HorizontalAlignment.Center,
+                    VerticalAlignment = VerticalAlignment.Center,
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            var timepicker = new TimePicker()
+            {
+                Time = System.DateTime.Now,
+                HeightResizePolicy = ResizePolicyType.FitToChildren,
+                Is24HourView = DateTimeManager.Is24HourFormat,
+            };
+
+            var button = new Button("Tizen.NUI.Components.Button.Outlined")
+            {
+                Text = Resources.IDS_ST_BUTTON_OK,
+                Size = new Size(252, 48).SpToPx(),
+                WidthResizePolicy = ResizePolicyType.FitToChildren,
+                HeightResizePolicy = ResizePolicyType.FitToChildren,
+                Margin = new Extents(0, 0, 20, 0).SpToPx(),
+            };
+            button.Clicked += (bo, be) =>
+            {
+                SetSystemTime(timepicker.Time);
+                NavigateBack();
+            };
+
+            content.Add(timepicker);
+            content.Add(button);
+
+            return content;
+        }
+
+        private void SetSystemTime(System.DateTime time)
+        {
+            System.DateTime setTime = time;
+            System.DateTime curTime = System.DateTime.Now;
+
+            System.DateTime ltime = new System.DateTime(curTime.Year, curTime.Month, curTime.Day, setTime.Hour, setTime.Minute, setTime.Second, setTime.Millisecond);
+            System.DateTime utime2 = ltime.ToUniversalTime();
+
+            System.DateTime epoch = new System.DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
+            TimeSpan delta = utime2 - epoch;
+
+            Int64 timetick = Convert.ToInt64(delta.TotalSeconds);
+            SettingMainGadget.DateTime.Interop.Alarm.Alarmmgr_SetSystime(timetick);
+
+            Logger.Debug($"system time was changed to: {time}");
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/DateTime/DateTimeSetTimezoneGadget.cs b/SettingMainGadget/SettingMainGadget/DateTime/DateTimeSetTimezoneGadget.cs
new file mode 100644 (file)
index 0000000..7e74ee9
--- /dev/null
@@ -0,0 +1,66 @@
+using SettingCore.TextResources;
+using SettingCore.Views;
+using SettingMainGadget.DateTime;
+using System.Linq;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+using Tizen.System;
+
+namespace Setting.Menu.DateTime
+{
+    public class DateTimeSetTimezoneGadget : SettingCore.MenuGadget
+    {
+        public override string ProvideTitle() => Resources.IDS_ST_BODY_TIME_ZONE;
+
+        private ScrollableBase content = null;
+
+        protected override View OnCreate()
+        {
+            base.OnCreate();
+
+            content = new ScrollableBase
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                ScrollingDirection = ScrollableBase.Direction.Vertical,
+                HideScrollbar = false,
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            RadioButtonGroup radioButtonGroup = new RadioButtonGroup();
+
+            var timeZones = DateTimeTimezoneManager.GetTimeZones();
+            timeZones = timeZones.OrderBy(a => a.City).ThenBy(x => x.Continent).ToList();
+
+            foreach (var timeZone in timeZones)
+            {
+                RadioButtonListItem item = new RadioButtonListItem(timeZone.DisplayName);
+                item.RadioButton.IsSelected = SystemSettings.LocaleTimeZone == timeZone.Info.Id;
+
+                radioButtonGroup.Add(item.RadioButton);
+                content.Add(item);
+            }
+
+            radioButtonGroup.SelectedChanged += (o, e) =>
+            {
+                DateTimeTimezoneManager.SetTimezone(timeZones[radioButtonGroup.SelectedIndex].Info.Id);
+            };
+
+            content.Relayout += (s, e) =>
+            {
+                var timeZone = timeZones.Where(x => x.Info.Id == SystemSettings.LocaleTimeZone).FirstOrDefault();
+
+                if (timeZone != null)
+                {
+                    content.ScrollToIndex(timeZones.IndexOf(timeZone));
+                }
+            };
+
+            return content;
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/DateTime/DateTimeTimezoneManager.cs b/SettingMainGadget/SettingMainGadget/DateTime/DateTimeTimezoneManager.cs
new file mode 100644 (file)
index 0000000..e7f61e2
--- /dev/null
@@ -0,0 +1,74 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Tizen.System;
+
+namespace SettingMainGadget.DateTime
+{
+    public static class DateTimeTimezoneManager
+    {
+        public static List<TimeZone> GetTimeZones()
+        {
+            var timeZones = new List<TimeZone>();
+            foreach (var timeZoneInfo in TimeZoneInfo.GetSystemTimeZones())
+            {
+                timeZones.Add(new TimeZone(timeZoneInfo));
+            }
+
+            return timeZones;
+        }
+
+        public static void SetTimezone(string timezoneId)
+        {
+            SystemSettings.LocaleTimeZone = timezoneId;
+        }
+
+        public static string GetTimezoneName()
+        {
+            // DO NOT USE TimeZoneInfo localtimezone = TimeZoneInfo.Local;
+            // It take long time to sync TimeZoneInfo.Local after setting SystemSettings.LocaleTimeZone
+
+            TimeZoneInfo localtimezone = TimeZoneInfo.FindSystemTimeZoneById(SystemSettings.LocaleTimeZone);
+            var date = System.DateTime.Now;
+            TimeSpan time = localtimezone.GetUtcOffset(date);
+            string offset = time < TimeSpan.Zero ? time.ToString(@"\-hh\:mm") : time.ToString(@"\+hh\:mm");
+
+            return $"GMT {offset}, {localtimezone.StandardName}";
+        }
+
+        public class TimeZone
+        {
+            public TimeZoneInfo Info { get; private set; }
+
+            public TimeZone(TimeZoneInfo timeZone)
+            {
+                this.Info = timeZone;
+            }
+
+            public string City
+            {
+                get => Info.Id.Split('/').Last();
+            }
+
+            public string Continent
+            {
+                get => Info.Id.Split('/').First();
+            }
+
+            public string DisplayName
+            {
+                get
+                {
+                    var identifiers = Info.Id.Split('/').Reverse().ToList();
+                    string place = String.Join(", ", identifiers.ToArray()).Replace('_', ' ');
+
+                    var displayName = Info.DisplayName;
+                    int index = displayName.LastIndexOf("Time") + 4;
+                    displayName = displayName.Substring(0, index);
+
+                    return $"{place} {displayName}";
+                }
+            }
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/DateTime/Interop.Alarm.cs b/SettingMainGadget/SettingMainGadget/DateTime/Interop.Alarm.cs
new file mode 100644 (file)
index 0000000..1ace6a4
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ *  Copyright (c) 2022 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.Runtime.InteropServices;
+
+namespace SettingMainGadget.DateTime
+{
+    internal static partial class Interop
+    {
+        internal static partial class Alarm
+        {
+            private const string LibraryAlarm = "libalarm.so.0";
+
+            [DllImport(LibraryAlarm, EntryPoint = "alarmmgr_set_systime64")]
+            internal static extern int Alarmmgr_SetSystime(Int64 utc_timestamp);
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/DateTimeGadget.cs b/SettingMainGadget/SettingMainGadget/DateTimeGadget.cs
new file mode 100644 (file)
index 0000000..6dd8926
--- /dev/null
@@ -0,0 +1,227 @@
+using SettingCore.TextResources;
+using SettingCore;
+using SettingCore.Views;
+using SettingMainGadget;
+using SettingMainGadget.DateTime;
+using System.Linq;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+using Tizen.System;
+
+namespace Setting.Menu
+{
+    public class DateTimeGadget : SettingCore.MainMenuGadget
+    {
+        public override Color ProvideIconColor() => new Color(IsLightTheme ? "#205493" : "#2560A8");
+
+        public override string ProvideIconPath() => GetResourcePath("datetime.svg");
+
+        public override string ProvideTitle() => Resources.IDS_ST_BODY_DATE_AND_TIME;
+
+        private Sections sections = new Sections();
+        private View content;
+
+        private TextListItem mDateItem = null;
+        private TextListItem mTimeItem = null;
+        private TextListItem mTimezoneItem = null;
+
+        private SwitchListItem autoUpdateItem = null;
+        private SwitchListItem timeFormatItem = null;
+
+        private bool isAutomaticTimeUpdateSupported;
+
+        protected override View OnCreate()
+        {
+            base.OnCreate();
+
+            AttachToEvents();
+
+            content = new ScrollableBase()
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                ScrollingDirection = ScrollableBase.Direction.Vertical,
+                HideScrollbar = false,
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            CreateView();
+
+            return content;
+        }
+
+        protected override void OnDestroy()
+        {
+            DetachFromEvents();
+
+            base.OnDestroy();
+        }
+
+        private void CreateView()
+        {
+            sections.RemoveAllSectionsFromView(content);
+
+            try
+            {
+                // RPI4 device unable to get isAutomaticTimeUpdate system setting
+                var autoUpdate = SystemSettings.AutomaticTimeUpdate;
+                isAutomaticTimeUpdateSupported = true;
+            }
+            catch (System.Exception e)
+            {
+                Logger.Warn($"AutomaticTimeUpdate is not supported: {e.Message}");
+            }
+
+            autoUpdateItem = new SwitchListItem(Resources.IDS_ST_MBODY_AUTO_UPDATE, isSelected: isAutomaticTimeUpdateSupported ? DateTimeManager.AutoTimeUpdate : false);
+            autoUpdateItem.IsEnabled = isAutomaticTimeUpdateSupported;
+            autoUpdateItem.Switch.SelectedChanged += (o, e) =>
+            {
+                DateTimeManager.AutoTimeUpdate = e.IsSelected;
+                ApplyAutomaticTimeUpdate();
+            };
+            sections.Add(MainMenuProvider.DateTime_AutoUpdate, autoUpdateItem);
+
+            mDateItem = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_SET_DATE, System.DateTime.Now.ToString("MMM d, yyyy"));
+            if (mDateItem != null)
+            {
+                mDateItem.Clicked += (o, e) =>
+                {
+                    NavigateTo(MainMenuProvider.DateTime_SetDate);
+                };
+                sections.Add(MainMenuProvider.DateTime_SetDate, mDateItem);
+            }
+
+            mTimeItem = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_SET_TIME, DateTimeManager.FormattedTime);
+            if (mTimeItem != null)
+            {
+                mTimeItem.Clicked += (o, e) =>
+                {
+                    NavigateTo(MainMenuProvider.DateTime_SetTime);
+                };
+                sections.Add(MainMenuProvider.DateTime_SetTime, mTimeItem);
+            }
+
+            mTimezoneItem = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_TIME_ZONE, DateTimeTimezoneManager.GetTimezoneName());
+            if (mTimezoneItem != null)
+            {
+                mTimezoneItem.Clicked += (o, e) =>
+                {
+                    NavigateTo(MainMenuProvider.DateTime_SetTimezone);
+                };
+                sections.Add(MainMenuProvider.DateTime_SetTimezone, mTimezoneItem);
+            }
+
+            timeFormatItem = new SwitchListItem(Resources.IDS_ST_MBODY_24_HOUR_CLOCK, Resources.IDS_ST_SBODY_SHOW_THE_TIME_IN_24_HOUR_FORMAT_INSTEAD_OF_12_HOUR_HAM_PM_FORMAT, DateTimeManager.Is24HourFormat);
+            timeFormatItem.Switch.SelectedChanged += (o, e) =>
+            {
+                DateTimeManager.Is24HourFormat = e.IsSelected;
+            };
+            sections.Add(MainMenuProvider.DateTime_TimeFormat, timeFormatItem);
+
+            ApplyAutomaticTimeUpdate();
+
+            var customization = GetCustomization().OrderBy(c => c.Order);
+            Logger.Debug($"customization: {customization.Count()}");
+            foreach (var cust in customization)
+            {
+                string visibility = cust.IsVisible ? "visible" : "hidden";
+                Logger.Verbose($"Customization: {cust.MenuPath} - {visibility} - {cust.Order}");
+                if (cust.IsVisible && sections.TryGetValue(cust.MenuPath, out View row))
+                {
+                    content.Add(row);
+                }
+            }
+        }
+
+        private void ApplyAutomaticTimeUpdate()
+        {
+            if (mDateItem != null) mDateItem.IsEnabled = !DateTimeManager.AutoTimeUpdate;
+            if (mTimeItem != null) mTimeItem.IsEnabled = !DateTimeManager.AutoTimeUpdate;
+            if (mTimezoneItem != null) mTimezoneItem.IsEnabled = !DateTimeManager.AutoTimeUpdate;
+        }
+
+        private void SystemSettings_TimeChanged(object sender, Tizen.System.TimeChangedEventArgs e)
+        {
+            if (mDateItem != null)
+                mDateItem.Secondary = System.DateTime.Now.ToString("MMM d, yyyy");
+            if (mTimeItem != null)
+                mTimeItem.Secondary = DateTimeManager.FormattedTime;
+        }
+
+        private void SystemSettings_LocaleTimeZoneChanged(object sender, LocaleTimeZoneChangedEventArgs e)
+        {
+            if (mTimezoneItem != null)
+                mTimezoneItem.Secondary = DateTimeTimezoneManager.GetTimezoneName();
+        }
+
+        private void SystemSettings_LocaleTimeFormat24HourSettingChanged(object sender, LocaleTimeFormat24HourSettingChangedEventArgs e)
+        {
+            if (mTimeItem != null)
+                mTimeItem.Secondary = DateTimeManager.FormattedTime;
+        }
+
+        private void AttachToEvents()
+        {
+            try
+            {
+                SystemSettings.TimeChanged += SystemSettings_TimeChanged;
+            }
+            catch (System.Exception e)
+            {
+                Logger.Warn($"Cannot attach to SystemSettings.TimeChanged ({e.GetType()})");
+            }
+
+            try
+            {
+                SystemSettings.LocaleTimeZoneChanged += SystemSettings_LocaleTimeZoneChanged;
+            }
+            catch (System.Exception e)
+            {
+                Logger.Warn($"Cannot attach to SystemSettings.LocaleTimeZoneChanged ({e.GetType()})");
+            }
+
+            try
+            {
+                SystemSettings.LocaleTimeFormat24HourSettingChanged += SystemSettings_LocaleTimeFormat24HourSettingChanged;
+            }
+            catch (System.Exception e)
+            {
+                Logger.Warn($"Cannot attach to SystemSettings.LocaleTimeFormat24HourSettingChanged ({e.GetType()})");
+            }
+        }
+
+        private void DetachFromEvents()
+        {
+            try
+            {
+                SystemSettings.TimeChanged -= SystemSettings_TimeChanged;
+            }
+            catch (System.Exception e)
+            {
+                Logger.Warn($"Cannot detach from SystemSettings.TimeChanged ({e.GetType()})");
+            }
+
+            try
+            {
+                SystemSettings.LocaleTimeZoneChanged -= SystemSettings_LocaleTimeZoneChanged;
+            }
+            catch (System.Exception e)
+            {
+                Logger.Warn($"Cannot detach from SystemSettings.LocaleTimeZoneChanged ({e.GetType()})");
+            }
+
+            try
+            {
+                SystemSettings.LocaleTimeFormat24HourSettingChanged -= SystemSettings_LocaleTimeFormat24HourSettingChanged;
+            }
+            catch (System.Exception e)
+            {
+                Logger.Warn($"Cannot detach from SystemSettings.LocaleTimeFormat24HourSettingChanged ({e.GetType()})");
+            }
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/Directory.Build.targets b/SettingMainGadget/SettingMainGadget/Directory.Build.targets
new file mode 100644 (file)
index 0000000..a468954
--- /dev/null
@@ -0,0 +1,21 @@
+<!--
+***********************************************************************************************
+<Build.Directory.targets>
+WARNING:  DO NOT MODIFY this file. Incorrect changes to this file will make it
+          impossible to load or build your projects from the IDE.
+
+***********************************************************************************************
+-->
+
+<Project>    
+       <Target Name="BuildDotnet" AfterTargets="TizenPackage" >
+        <Message Text="Tizen Build starts here ------------" Importance="high"/>
+        <Message Text="$(MSBuildProjectDirectory)" Importance="high"/>
+        <PropertyGroup>
+            <WorkspaceFolder>$([System.IO.Path]::GetDirectoryName($(MSBuildProjectDirectory)))</WorkspaceFolder>
+        </PropertyGroup>
+        <Message Text="Workspace: '$(WorkspaceFolder)'"  Importance="high" />
+
+               <Exec Command="C:\tizen-studio\tools\tizen-core\tz.exe pack  -S $(ProjectDir) $(WorkspaceFolder)"> </Exec>
+    </Target>
+</Project>
diff --git a/SettingMainGadget/SettingMainGadget/Display/DisplayFontGadget.cs b/SettingMainGadget/SettingMainGadget/Display/DisplayFontGadget.cs
new file mode 100644 (file)
index 0000000..e1b1862
--- /dev/null
@@ -0,0 +1,85 @@
+using SettingCore.Views;
+using SettingCore.TextResources;
+using SettingMainGadget;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.System;
+
+namespace Setting.Menu.Display
+{
+    public class DisplayFontGadget : SettingCore.MenuGadget
+    {
+        public override string ProvideTitle() => Resources.IDS_ST_BODY_FONT;
+        private TextListItem fontSizeItem;
+        private TextListItem fontTypeItem;
+        private View content;
+
+        protected override void OnDestroy()
+        {
+            SystemSettings.FontSizeChanged -= SystemSettings_FontSizeChanged;
+            SystemSettings.FontTypeChanged -= SystemSettings_FontTypeChanged;
+
+            base.OnDestroy();
+        }
+
+        private void SystemSettings_FontSizeChanged(object sender, FontSizeChangedEventArgs e)
+        {
+            CreateItems();
+        }
+
+        private void SystemSettings_FontTypeChanged(object sender, FontTypeChangedEventArgs e)
+        {
+            if (fontTypeItem != null)
+                fontTypeItem.Secondary = SystemSettings.FontType.ToString();
+        }
+
+        private void CreateItems()
+        {
+            if(fontSizeItem != null)
+            {
+                content.Remove(fontSizeItem);
+            }
+
+            fontSizeItem = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_MBODY_FONT_SIZE, SystemSettings.FontSize.ToString());
+            fontSizeItem.Clicked += (o, e) =>
+            {
+                NavigateTo(MainMenuProvider.Display_FontSize);
+            };
+            content.Add(fontSizeItem);
+
+            if (fontTypeItem != null)
+            {
+                content.Remove(fontTypeItem);
+            }
+
+            fontTypeItem = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_FONT_TYPE, SystemSettings.FontType.ToString());
+            fontTypeItem.Clicked += (o, e) =>
+            {
+                NavigateTo(MainMenuProvider.Display_FontType);
+            };
+            content.Add(fontTypeItem);
+        }
+
+        protected override View OnCreate()
+        {
+            base.OnCreate();
+
+            content = new View()
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            CreateItems();
+
+            SystemSettings.FontSizeChanged += SystemSettings_FontSizeChanged;
+            SystemSettings.FontTypeChanged += SystemSettings_FontTypeChanged;
+
+            return content;
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/Display/DisplayFontSizeGadget.cs b/SettingMainGadget/SettingMainGadget/Display/DisplayFontSizeGadget.cs
new file mode 100644 (file)
index 0000000..0fc4014
--- /dev/null
@@ -0,0 +1,85 @@
+using SettingCore.TextResources;
+using SettingCore;
+using SettingCore.Views;
+using System;
+using System.Collections.Generic;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+using Tizen.System;
+
+namespace Setting.Menu.Display
+{
+    public class DisplayFontSizeGadget : SettingCore.MenuGadget
+    {
+        public override string ProvideTitle() => Resources.IDS_ST_MBODY_FONT_SIZE;
+
+        private class FontsizeInfo
+        {
+            private readonly SystemSettingsFontSize Value;
+
+            public FontsizeInfo(SystemSettingsFontSize value)
+            {
+                Value = value;
+            }
+
+            public string GetName()
+            {
+                return Value.ToString();
+            }
+
+            public SystemSettingsFontSize GetValue()
+            {
+                return Value;
+            }
+        };
+
+        private List<FontsizeInfo> fontsizeList = new List<FontsizeInfo>();
+
+        protected override View OnCreate()
+        {
+            base.OnCreate();
+
+            var content = new ScrollableBase
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                ScrollingDirection = ScrollableBase.Direction.Vertical,
+                HideScrollbar = false,
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            foreach (SystemSettingsFontSize fontSize in Enum.GetValues(typeof(SystemSettingsFontSize)))
+            {
+                fontsizeList.Add(new FontsizeInfo(fontSize));
+            }
+
+            RadioButtonGroup radioButtonGroup = new RadioButtonGroup();
+
+            for (int i = 0; i < fontsizeList.Count; i++)
+            {
+                RadioButtonListItem item = new RadioButtonListItem(fontsizeList[i].GetName());
+                item.RadioButton.IsSelected = fontsizeList[i].GetValue() == SystemSettings.FontSize;
+
+                radioButtonGroup.Add(item.RadioButton);
+                content.Add(item);
+            }
+
+            radioButtonGroup.SelectedChanged += (o, e) =>
+            {
+                SetFontsize(fontsizeList[radioButtonGroup.SelectedIndex].GetValue());
+            };
+
+            return content;
+        }
+
+        private void SetFontsize(SystemSettingsFontSize fontsize)
+        {
+            SystemSettings.FontSize = fontsize;
+            Logger.Debug($"FontSize value changed to: {fontsize}");
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/Display/DisplayFontTypeGadget.cs b/SettingMainGadget/SettingMainGadget/Display/DisplayFontTypeGadget.cs
new file mode 100644 (file)
index 0000000..908f7a2
--- /dev/null
@@ -0,0 +1,88 @@
+using SettingCore.TextResources;
+using SettingCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+using Tizen.System;
+using SettingCore.Views;
+
+namespace Setting.Menu.Display
+{
+    public class DisplayFontTypeGadget : SettingCore.MenuGadget
+    {
+        public override string ProvideTitle() => Resources.IDS_ST_BODY_FONT_TYPE;
+
+        protected override View OnCreate()
+        {
+            base.OnCreate();
+
+            var content = new ScrollableBase
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                ScrollingDirection = ScrollableBase.Direction.Vertical,
+                HideScrollbar = false,
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            var fontTypeList = MakeFontTypeList();
+
+            RadioButtonGroup radioButtonGroup = new RadioButtonGroup();
+
+            for (int i = 0; i < fontTypeList.Count; i++)
+            {
+                RadioButtonListItem item = new RadioButtonListItem(fontTypeList[i]);
+                item.RadioButton.IsSelected = fontTypeList[i] == SystemSettings.FontType;
+                item.RadioButton.TextLabel.FontFamily = fontTypeList[i];
+
+                radioButtonGroup.Add(item.RadioButton);
+                content.Add(item);
+            }
+
+            radioButtonGroup.SelectedChanged += (o, e) =>
+            {
+                SetFonttype(fontTypeList[radioButtonGroup.SelectedIndex]);
+            };
+
+            return content;
+        }
+
+        private List<string> MakeFontTypeList()
+        {
+            var systemFonts = FontClient.Instance.GetSystemFonts();
+
+            // only fonts from /usr/share/fonts/ folder are works properly.
+            // GetSystemFonts() also returns fonts from /usr/share/fallback_fonts/ folder, but with wrong family name.
+            var fontTypeList = systemFonts.Where(x => x.Path.Contains("/usr/share/fonts/")).Select(a => a.Family).Distinct().ToList();
+
+            if (SystemSettings.FontType.Equals("Default"))
+            {
+                SetFonttype(SystemSettings.DefaultFontType);
+            }
+
+            Logger.Debug($"SystemSettings.DefaultFontType: {SystemSettings.DefaultFontType}");
+            Logger.Debug($"SystemSettings.FontType: {SystemSettings.FontType}");
+
+            return fontTypeList;
+        }
+
+        private void SetFonttype(string fonttype)
+        {
+            try
+            {
+                SystemSettings.FontType = fonttype;
+                Logger.Debug($"FontType value changed to: {fonttype}");
+            }
+            catch (Exception ex)
+            {
+                Logger.Error($"{ex.GetType()}, {ex.Message}");
+            }
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/Display/DisplayGadget.cs b/SettingMainGadget/SettingMainGadget/Display/DisplayGadget.cs
new file mode 100644 (file)
index 0000000..7227a2b
--- /dev/null
@@ -0,0 +1,280 @@
+using SettingCore.TextResources;
+using SettingCore;
+using SettingCore.Views;
+using SettingMainGadget;
+using SettingMainGadget.Display;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+using Tizen.System;
+
+namespace Setting.Menu
+{
+    public class DisplayGadget : SettingCore.MainMenuGadget
+    {
+        public override Color ProvideIconColor() => new Color(IsLightTheme ? "#0075FF" : "#1A85FF");
+
+        public override string ProvideIconPath() => GetResourcePath("display.svg");
+
+        public override string ProvideTitle() => Resources.IDS_ST_HEADER_DISPLAY;
+
+        private View content;
+        private Sections sections = new Sections();
+
+        private SliderListItem brightnessItem;
+        private TextListItem fontItem;
+        private TextListItem screenTimeOutItem;
+        private TextListItem themeItem;
+
+        private bool isBrightnessSupported;
+
+        private static readonly string[] iconPath = {
+            "display/Brightness_0.svg",
+            "display/Brightness_50.svg",
+            "display/Brightness_100.svg",
+        };
+
+        private static readonly string[] iconDisabledPath = {
+            "display/Brightness_light.svg",
+            "display/Brightness_dark.svg",
+        };
+
+        protected override View OnCreate()
+        {
+            base.OnCreate();
+
+            content = new ScrollableBase
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                ScrollingDirection = ScrollableBase.Direction.Vertical,
+                HideScrollbar = false,
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            SystemSettings.ScreenBacklightTimeChanged += SystemSettings_ScreenBacklightTimeChanged;
+            SystemSettings.FontSizeChanged += SystemSettings_FontSizeChanged;
+            SystemSettings.FontTypeChanged += SystemSettings_FontTypeChanged;
+            ThemeManager.ThemeChanged += ThemeManager_ThemeChanged;
+
+            CreateView();
+
+            return content;
+        }
+
+        protected override void OnDestroy()
+        {
+            SystemSettings.ScreenBacklightTimeChanged -= SystemSettings_ScreenBacklightTimeChanged;
+            SystemSettings.FontSizeChanged -= SystemSettings_FontSizeChanged;
+            SystemSettings.FontTypeChanged -= SystemSettings_FontTypeChanged;
+            ThemeManager.ThemeChanged -= ThemeManager_ThemeChanged;
+
+            base.OnDestroy();
+        }
+
+        private void CreateView()
+        {
+            sections.RemoveAllSectionsFromView(content);
+
+            // section: brightness
+
+            if (Tizen.System.Display.NumberOfDisplays > 0)
+            {
+                int brightness = 0;
+                int maxbrightness = 1;
+
+                try
+                {
+                    Tizen.System.Display.Displays[0].Brightness = Tizen.System.Display.Displays[0].Brightness;
+                    isBrightnessSupported = true;
+                }
+                catch (Exception)
+                {
+                    Logger.Warn($"Brightness is not supported on the device.");
+                }
+
+                
+                try
+                {
+                    brightness = Tizen.System.Display.Displays[0].Brightness;
+                    maxbrightness = Tizen.System.Display.Displays[0].MaxBrightness;
+
+                    Logger.Debug($"Current-Max display brightness: {brightness}-{maxbrightness}");
+                }
+                catch (Exception ex)
+                {
+                    Logger.Error($"Error while getting the display brightness: {ex.GetType()}, {ex.Message}");
+                }
+
+                GetBrightnessSliderIcon(brightness, out string iconpath);
+
+                brightnessItem = new SliderListItem(Resources.IDS_ST_BODY_BRIGHTNESS_M_POWER_SAVING, iconpath, (brightness * 1.0f) / maxbrightness);
+                if (brightnessItem != null)
+                {
+                    if(!isBrightnessSupported)
+                    {
+                        brightnessItem.Slider.CurrentValue = brightnessItem.Slider.MaxValue;
+                    }
+
+                    brightnessItem.Margin = new Extents(0, 0, 16, 0).SpToPx();
+                    brightnessItem.Slider.ValueChanged += MSlider_ValueChanged;
+                    brightnessItem.IsEnabled = isBrightnessSupported;
+                    sections.Add(MainMenuProvider.Display_Brightness, brightnessItem);
+                }
+            }
+            else
+            {
+                Logger.Warn($"There are no available displays. The Brightness section has not been created.");
+            }
+
+            // section: font
+
+            fontItem = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_FONT, $"{SystemSettings.FontSize}, {SystemSettings.FontType}");
+            if (fontItem != null)
+            {
+                fontItem.Clicked += (o, e) =>
+                {
+                    NavigateTo(MainMenuProvider.Display_Font);
+                };
+                sections.Add(MainMenuProvider.Display_Font, fontItem);
+            }
+
+            // section: TimeOut
+
+            screenTimeOutItem = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_SCREEN_TIMEOUT_ABB2, DisplayTimeOutManager.GetScreenTimeoutName());
+            if (screenTimeOutItem != null)
+            {
+                screenTimeOutItem.Clicked += (o, e) =>
+                {
+                    NavigateTo(MainMenuProvider.Display_Timeout);
+                };
+                sections.Add(MainMenuProvider.Display_Timeout, screenTimeOutItem);
+            }
+
+            // section: Theme
+
+            themeItem = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_THEME, DisplayThemeManager.GetThemeName());
+            if (themeItem != null)
+            {
+                themeItem.Clicked += (o, e) =>
+                {
+                    NavigateTo(MainMenuProvider.Display_Theme);
+                };
+                sections.Add(MainMenuProvider.Display_Theme, themeItem);
+            }
+
+            var customization = GetCustomization().OrderBy(c => c.Order);
+            Logger.Debug($"customization: {customization.Count()}");
+            foreach (var cust in customization)
+            {
+                string visibility = cust.IsVisible ? "visible" : "hidden";
+                Logger.Verbose($"Customization: {cust.MenuPath} - {visibility} - {cust.Order}");
+                if (cust.IsVisible && sections.TryGetValue(cust.MenuPath, out View row))
+                {
+                    content.Add(row);
+                }
+            }
+        }
+
+
+        protected override void OnCustomizationUpdate(IEnumerable<MenuCustomizationItem> items)
+        {
+            Logger.Verbose($"{nameof(DisplayGadget)} got customization with {items.Count()} items. Recreating view.");
+            CreateView();
+        }
+
+        private void GetBrightnessSliderIcon(int brightness, out string iconpath)
+        {
+            if(!isBrightnessSupported)
+            {
+                // TODO : create a theme helper that provides information about the current theme using an enum variable. 
+                iconpath = System.IO.Path.Combine(Tizen.Applications.Application.Current.DirectoryInfo.Resource, iconDisabledPath[DisplayThemeManager.GetThemeIndex()]);
+                return;
+            }
+
+            int iconlevel = iconPath.Length;
+
+            int mapped_level = 0;
+            if (iconlevel > 1)
+            {
+                int minbrightness = 1;
+                int maxbrightness = Tizen.System.Display.Displays[0].MaxBrightness;
+                if (brightness > minbrightness)
+                {
+                    int levelcount = maxbrightness - minbrightness;
+                    int level = brightness - (minbrightness + 1);
+                    mapped_level = (level * (iconlevel - 1) / levelcount) + 1;
+                }
+            }
+            Logger.Debug($"mapped_level: {mapped_level} {System.IO.Path.Combine(Tizen.Applications.Application.Current.DirectoryInfo.Resource, iconPath[mapped_level])}");
+
+            iconpath = System.IO.Path.Combine(Tizen.Applications.Application.Current.DirectoryInfo.Resource, iconPath[mapped_level]);
+        }
+
+        private void MSlider_ValueChanged(object sender, SliderValueChangedEventArgs args)
+        {
+            var slider = sender as Slider;
+
+            int minbrightness = 1;
+            int maxbrightness = Tizen.System.Display.Displays[0].MaxBrightness;
+
+            int brightness = (int)(slider.CurrentValue * (maxbrightness - minbrightness)) + minbrightness;
+            if (brightness >= maxbrightness) brightness = maxbrightness;
+
+            Logger.Debug($"maxbrightness : {maxbrightness}, brightness : {brightness}");
+
+            if (brightnessItem != null)
+            {
+                GetBrightnessSliderIcon(brightness, out string iconpath);
+                brightnessItem.IconPath = iconpath;
+            }
+
+            try
+            {
+                Tizen.System.Display.Displays[0].Brightness = brightness;
+            }
+            catch (Exception e)
+            {
+                Logger.Error(string.Format("error :({0}) {1} ", e.GetType().ToString(), e.Message));
+            }
+        }
+
+        private void SystemSettings_ScreenBacklightTimeChanged(object sender, ScreenBacklightTimeChangedEventArgs e)
+        {
+            if (screenTimeOutItem != null)
+                screenTimeOutItem.Secondary = DisplayTimeOutManager.GetScreenTimeoutName();
+        }
+
+        private void SystemSettings_FontSizeChanged(object sender, FontSizeChangedEventArgs e)
+        {
+            CreateView(); // TODO : change only secondary text instead of re-create all view
+        }
+
+        private void SystemSettings_FontTypeChanged(object sender, FontTypeChangedEventArgs e)
+        {
+            if(fontItem != null)
+                fontItem.Secondary = $"{SystemSettings.FontSize}, {SystemSettings.FontType}"; // TODO : show default BreezeSans if FontType = DefaultFontType
+        }
+
+        private void ThemeManager_ThemeChanged(object sender, ThemeChangedEventArgs e)
+        {
+            if (e.IsPlatformThemeChanged)
+            {
+                Logger.Debug($"theme changed to: {e.PlatformThemeId}");
+                themeItem.Secondary = DisplayThemeManager.GetThemeName();
+
+                // reassign CurrentValue to trigger slider icon path update
+                if (brightnessItem != null)
+                {
+                    brightnessItem.Slider.CurrentValue = brightnessItem.Slider.CurrentValue;
+                }
+            }
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/Display/DisplayThemeGadget.cs b/SettingMainGadget/SettingMainGadget/Display/DisplayThemeGadget.cs
new file mode 100644 (file)
index 0000000..98892b5
--- /dev/null
@@ -0,0 +1,50 @@
+using SettingCore.TextResources;
+using SettingCore.Views;
+using SettingMainGadget.Display;
+using System.Linq;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+
+namespace Setting.Menu.Display
+{
+    public class DisplayThemeGadget : SettingCore.MenuGadget
+    {
+        public override string ProvideTitle() => Resources.IDS_ST_BODY_THEME;
+
+        protected override View OnCreate()
+        {
+            var content = new ScrollableBase
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                ScrollingDirection = ScrollableBase.Direction.Vertical,
+                HideScrollbar = false,
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            RadioButtonGroup radioButtonGroup = new RadioButtonGroup();
+
+            var themeList = DisplayThemeManager.ThemeList.Select(a => a.GetName()).ToList();
+
+            for (int i = 0; i < themeList.Count; i++)
+            {
+                RadioButtonListItem item = new RadioButtonListItem(themeList[i]);
+                item.RadioButton.IsSelected = i.Equals(DisplayThemeManager.GetThemeIndex());
+
+                radioButtonGroup.Add(item.RadioButton);
+                content.Add(item);
+            }
+
+            radioButtonGroup.SelectedChanged += (o, e) =>
+            {
+                DisplayThemeManager.SetTheme(DisplayThemeManager.ThemeList[radioButtonGroup.SelectedIndex].GetId());
+            };
+
+            return content;
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/Display/DisplayThemeManager.cs b/SettingMainGadget/SettingMainGadget/Display/DisplayThemeManager.cs
new file mode 100644 (file)
index 0000000..7571042
--- /dev/null
@@ -0,0 +1,81 @@
+using SettingCore.TextResources;
+using SettingCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Tizen.NUI;
+
+namespace SettingMainGadget.Display
+{
+    public class DisplayThemeManager
+    {
+        public class ThemeInfo
+        {
+            private string Name;
+            private string Id;
+
+            public ThemeInfo(string name, string id)
+            {
+                Name = name;
+                Id = id;
+            }
+
+            public string GetName()
+            {
+                return Name;
+            }
+
+            public string GetId()
+            {
+                return Id;
+            }
+        };
+
+        public static readonly List<ThemeInfo> ThemeList = new List<ThemeInfo>
+        {
+            new ThemeInfo("Light theme", "org.tizen.default-light-theme"),
+            new ThemeInfo("Dark theme", "org.tizen.default-dark-theme"),
+        }; // TODO : add name of the theme to the Resources so it can be translated when changing the language
+
+        public static void SetTheme(string Id)
+        {
+            try
+            {
+                ThemeManager.ApplyPlatformTheme(Id);
+            }
+            catch (Exception ex)
+            {
+                Logger.Error($"({Id}): {ex.Message}");
+            }
+        }
+
+        public static int GetThemeIndex()
+        {
+            string themeId = ThemeManager.PlatformThemeId;
+
+            if (string.IsNullOrEmpty(themeId))
+            {
+                Logger.Warn("Theme : Not Available");
+                return -1;
+            }
+
+            Logger.Debug($"Theme : {themeId}");
+
+            var theme = ThemeList.Where(x => x.GetId().Equals(themeId)).First();
+
+            if(theme != null)
+            {
+                return ThemeList.IndexOf(theme); 
+            }
+
+            return -1;
+        }
+
+        public static string GetThemeName()
+        {
+            int index = GetThemeIndex();
+
+            return index >= 0 ? ThemeList[index].GetName() : Resources.IDS_ST_HEADER_UNAVAILABLE;
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/Display/DisplayTimeOutGadget.cs b/SettingMainGadget/SettingMainGadget/Display/DisplayTimeOutGadget.cs
new file mode 100644 (file)
index 0000000..7e63a26
--- /dev/null
@@ -0,0 +1,52 @@
+using SettingCore.TextResources;
+using SettingCore.Views;
+using SettingMainGadget.Display;
+using System.Linq;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+
+namespace Setting.Menu.Display
+{
+    public class DisplayTimeOutGadget : SettingCore.MenuGadget
+    {
+        public override string ProvideTitle() => Resources.IDS_ST_BODY_SCREEN_TIMEOUT_ABB2;
+
+        protected override View OnCreate()
+        {
+            base.OnCreate();
+
+            var content = new ScrollableBase
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                ScrollingDirection = ScrollableBase.Direction.Vertical,
+                HideScrollbar = false,
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            RadioButtonGroup radioButtonGroup = new RadioButtonGroup();
+
+            var timeoutList = DisplayTimeOutManager.TimeoutList.Select(x => x.GetName()).ToList();
+
+            for (int i = 0; i < timeoutList.Count; i++)
+            {
+                RadioButtonListItem item = new RadioButtonListItem(timeoutList[i]);
+                item.RadioButton.IsSelected = i.Equals(DisplayTimeOutManager.GetScreenTimeoutIndex());
+
+                radioButtonGroup.Add(item.RadioButton);
+                content.Add(item);
+            }
+
+            radioButtonGroup.SelectedChanged += (o, e) =>
+            {
+                DisplayTimeOutManager.SetScreenTimeout(radioButtonGroup.SelectedIndex);
+            };
+
+            return content;
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/Display/DisplayTimeOutManager.cs b/SettingMainGadget/SettingMainGadget/Display/DisplayTimeOutManager.cs
new file mode 100644 (file)
index 0000000..fc9ac03
--- /dev/null
@@ -0,0 +1,98 @@
+using SettingCore.TextResources;
+using SettingCore;
+using System.Collections.Generic;
+using Tizen.System;
+
+namespace SettingMainGadget.Display
+{
+    public class DisplayTimeOutManager
+    {
+        private const string VconfScreenTimeOut = "db/setting/lcd_backlight_normal";
+
+        public class ScreenTimeoutInfo
+        {
+            private readonly string Name = null;
+            private readonly int Value;
+
+            public ScreenTimeoutInfo(string name, int value)
+            {
+                Name = name;
+                Value = value;
+            }
+
+            public string GetName()
+            {
+                return Name;
+            }
+
+            public int GetValue()
+            {
+                return Value;
+            }
+        };
+
+        public static readonly List<ScreenTimeoutInfo> TimeoutList = new List<ScreenTimeoutInfo>
+        {
+            new ScreenTimeoutInfo(Resources.IDS_ST_BODY_ALWAYS_ON, 0),
+            new ScreenTimeoutInfo(Resources.IDS_ST_BODY_15SEC, 15),
+            new ScreenTimeoutInfo(Resources.IDS_ST_BODY_30SEC, 30),
+            new ScreenTimeoutInfo(Resources.IDS_ST_BODY_1_MINUTE, 60),
+            new ScreenTimeoutInfo(Resources.IDS_ST_BODY_2_MINUTES, 120),
+            new ScreenTimeoutInfo(Resources.IDS_ST_BODY_5_MINUTES, 300),
+            new ScreenTimeoutInfo(Resources.IDS_ST_BODY_10_MINUTES, 600)
+        };
+
+        public static int GetScreenTimeoutIndex()
+        {
+            if (!Tizen.Vconf.TryGetInt(VconfScreenTimeOut, out int value))
+            {
+                Logger.Warn($"could not get value for {VconfScreenTimeOut}");
+            }
+
+            Logger.Debug($"ScreenTimeout value: {value}");
+
+            int index;
+            if (value < 15)
+            {
+                index = 0;
+            }
+            else if (value >= 15 && value < 30)
+            {
+                index = 1;
+            }
+            else if (value >= 30 && value < 60)
+            {
+                index = 2;
+            }
+            else if (value >= 60 && value < 120)
+            {
+                index = 3;
+            }
+            else if (value >= 120 && value < 300)
+            {
+                index = 4;
+            }
+            else if (value >= 300 && value < 600)
+            {
+                index = 5;
+            }
+            else
+            {
+                index = 6;
+            }
+
+            return index;
+        }
+
+        public static string GetScreenTimeoutName()
+        {
+            return TimeoutList[GetScreenTimeoutIndex()].GetName();
+        }
+
+        public static void SetScreenTimeout(int index)
+        {
+            SystemSettings.ScreenBacklightTime = TimeoutList[index].GetValue();
+            Logger.Debug($"ScreenTimeOut changed value to: {TimeoutList[index].GetName()}");
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/LanguageInput/LanguageInputDisplayLanguageGadget.cs b/SettingMainGadget/SettingMainGadget/LanguageInput/LanguageInputDisplayLanguageGadget.cs
new file mode 100644 (file)
index 0000000..b5801a2
--- /dev/null
@@ -0,0 +1,49 @@
+using SettingCore.TextResources;
+using SettingCore.Views;
+using SettingMainGadget.LanguageInput;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+
+namespace Setting.Menu.LanguageInput
+{
+    public class LanguageInputDisplayLanguageGadget : SettingCore.MenuGadget
+    {
+        public override string ProvideTitle() => Resources.IDS_ST_HEADER_DISPLAY_LANGUAGE;
+
+        protected override View OnCreate()
+        {
+            base.OnCreate();
+
+            var content = new ScrollableBase
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                ScrollingDirection = ScrollableBase.Direction.Vertical,
+                HideScrollbar = false,
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            RadioButtonGroup radioButtonGroup = new RadioButtonGroup();
+
+            for (int i = 0; i < LanguageInputDisplayLanguageManager.LanguageList.Count; i++)
+            {
+                RadioButtonListItem item = new RadioButtonListItem(LanguageInputDisplayLanguageManager.LanguageList[i].GetName());
+                item.RadioButton.IsSelected = i.Equals(LanguageInputDisplayLanguageManager.GetDisplayLanguageIndex());
+
+                radioButtonGroup.Add(item.RadioButton);
+                content.Add(item);
+            }
+
+            radioButtonGroup.SelectedChanged += (o, e) =>
+            {
+                LanguageInputDisplayLanguageManager.SetDisplayLanguage(LanguageInputDisplayLanguageManager.LanguageList[radioButtonGroup.SelectedIndex].GetLocale());
+            };
+
+            return content;
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/LanguageInput/LanguageInputDisplayLanguageManager.cs b/SettingMainGadget/SettingMainGadget/LanguageInput/LanguageInputDisplayLanguageManager.cs
new file mode 100644 (file)
index 0000000..1cfef2e
--- /dev/null
@@ -0,0 +1,139 @@
+using SettingCore.TextResources;
+using SettingCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Tizen.System;
+
+namespace SettingMainGadget.LanguageInput
+{
+    public static class LanguageInputDisplayLanguageManager
+    {
+        private const string VconfRegionAutomatic = "db/setting/region_automatic";
+        private const string VconfLanguageAutomatic = "db/setting/lang_automatic";
+
+        private const string VconfWidgetLanguage = "db/menu_widget/language";
+
+        public class DisplayLanguageInfo
+        {
+            private readonly string Locale = null;
+            private readonly string Name = null;
+            private readonly string Language = null;
+            private readonly string Mcc = null;
+
+            public DisplayLanguageInfo(string locale, string name, string language, string mcc)
+            {
+                Locale = locale;
+                Name = name;
+                Language = language;
+                Mcc = mcc;
+            }
+
+            public string GetLocale() => Locale;
+
+            public string GetName() => Name;
+
+            public string GetLanguage() => Language;
+
+            public string GetMcc() => Mcc;
+        }
+
+        public static readonly List<DisplayLanguageInfo> LanguageList = new List<DisplayLanguageInfo>()
+        {
+            new DisplayLanguageInfo("en_US", "English (United States)", "English(US)", "310,311,313,316"),
+            new DisplayLanguageInfo("ko_KR", "한국어", "Korean", "450")
+        };
+
+        public static string GetDisplayLanguage()
+        {
+            if (!Tizen.Vconf.TryGetString(VconfWidgetLanguage, out string locale))
+            {
+                Logger.Warn($"could not get value for {VconfWidgetLanguage}");
+            }
+
+            String[] qStrings = locale.Split('.');
+            locale = qStrings[0];
+
+            return locale;
+        }
+
+        public static int GetDisplayLanguageIndex()
+        {
+            string curlanguage = GetDisplayLanguage();
+
+            var languageinfo = LanguageList.Where(x => x.GetLocale() == curlanguage).FirstOrDefault();
+
+            if(languageinfo != null)
+            {
+                return LanguageList.IndexOf(languageinfo);
+            }
+
+            return -1;
+        }
+
+        public static string GetDisplayLanguageName()
+        {
+            string title = "N/A";
+
+            if (!Tizen.Vconf.TryGetBool(VconfLanguageAutomatic, out bool lang_automatic))
+            {
+                Logger.Warn($"could not get value for {VconfLanguageAutomatic}");
+            }
+
+            if (lang_automatic)
+            {
+                return Resources.IDS_ST_BODY_ANSWERINGMODE_AUTOMATIC;
+            }
+
+            string locale = GetDisplayLanguage();
+
+            var displayLanguage = LanguageList.Where(x => x.GetLocale() == locale).FirstOrDefault();
+
+            if (displayLanguage != null)
+            {
+                return displayLanguage.GetName();
+            }
+
+            return title;
+        }
+
+        public static void SetDisplayLanguage(string locale)
+        {
+            /* [control] set automatic - TRUE */
+            Tizen.Vconf.SetBool("db/setting/lang_automatic", false);
+
+            /* [control] set vconf language */
+            // system_settings_set_value_string(SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, pnode->locale);
+            SystemSettings.LocaleLanguage = locale;
+            // TODO : NUI setting corresponding to elm_language_set(temp);
+
+            if (!Tizen.Vconf.TryGetBool(VconfRegionAutomatic, out bool region_automatic))
+            {
+                Logger.Warn($"could not get value for {VconfRegionAutomatic}");
+            }
+
+            if (region_automatic)
+            {
+                /* [control] region format set - if 'automatic region' */
+                SystemSettings.LocaleCountry = locale;
+            }
+
+            /* 2. GET SELECTED LANG */
+            if (!Tizen.Vconf.TryGetString(VconfWidgetLanguage, out string paLanguage))
+            {
+                Logger.Warn($"could not get value for {VconfWidgetLanguage}");
+            }
+
+            String[] qStrings = paLanguage.Split('.');
+            string qString = qStrings[0];
+            Logger.Debug($"language: {paLanguage}, {qString}");
+
+            /* 3. SET DEFAULT */
+            /* default UI language */
+            // i18n_ulocale_set_default(qString);
+            // To-do : NUI setting corresponding to i18n_ulocale_set_default();
+
+            SystemSettings.LocaleCountry = paLanguage;
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/LanguageInputGadget.cs b/SettingMainGadget/SettingMainGadget/LanguageInputGadget.cs
new file mode 100644 (file)
index 0000000..9aa8307
--- /dev/null
@@ -0,0 +1,165 @@
+using SettingCore.TextResources;
+using SettingCore;
+using SettingCore.Views;
+using SettingMainGadget;
+using SettingMainGadget.LanguageInput;
+using System.Collections.Generic;
+using System.Linq;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+using Tizen.PhonenumberUtils;
+using Tizen.System;
+
+namespace Setting.Menu
+{
+    public class LanguageInputGadget : SettingCore.MainMenuGadget
+    {
+        public override Color ProvideIconColor() => new Color(IsLightTheme ? "#205493" : "#2560A8");
+
+        public override string ProvideIconPath() => GetResourcePath("language_input.svg");
+
+        public override string ProvideTitle() => Resources.IDS_ST_HEADER_LANGUAGE_AND_INPUT;
+
+        private View content;
+        private Sections sections = new Sections();
+
+        protected override View OnCreate()
+        {
+            base.OnCreate();
+
+            SystemSettings.LocaleLanguageChanged += SystemSettings_LocaleLanguageChanged;
+
+            content = new ScrollableBase
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                ScrollingDirection = ScrollableBase.Direction.Vertical,
+                HideScrollbar = false,
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            CreateView();
+
+            return content;
+        }
+
+        protected override void OnDestroy()
+        {
+            SystemSettings.LocaleLanguageChanged -= SystemSettings_LocaleLanguageChanged;
+
+            base.OnDestroy();
+        }
+
+        protected override void OnCustomizationUpdate(IEnumerable<MenuCustomizationItem> items)
+        {
+            Logger.Verbose($"{nameof(DisplayGadget)} got customization with {items.Count()} items. Recreating view.");
+            CreateView();
+        }
+
+        private void CreateView()
+        {
+            sections.RemoveAllSectionsFromView(content);
+            TextListItem displayLanguageItem = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_HEADER_DISPLAY_LANGUAGE, LanguageInputDisplayLanguageManager.GetDisplayLanguageName());
+            if (displayLanguageItem != null)
+            {
+                displayLanguageItem.Clicked += (o, e) =>
+                {
+                    NavigateTo(MainMenuProvider.Language_Display);
+                };
+                sections.Add(MainMenuProvider.Language_Display, displayLanguageItem);
+            }
+
+            TextHeaderListItem keyboardHeaderItem = new TextHeaderListItem(Resources.IDS_ST_BODY_KEYBOARD);
+            if (keyboardHeaderItem != null)
+            {
+                sections.Add(MainMenuProvider.Language_KeyboardHeader, keyboardHeaderItem);
+            }
+
+            TextListItem keyboardItem = TextListItem.CreatePrimaryTextItem(Resources.IDS_ST_BODY_KEYBOARD);
+            if (keyboardItem != null)
+            {
+                keyboardItem.Clicked += (o, e) =>
+                {
+                    NavigateTo(MainMenuProvider.Language_InputMethod);
+                };
+                sections.Add(MainMenuProvider.Language_InputMethod, keyboardItem);
+            }
+
+            TextHeaderListItem inputAssistanceHeaderItem = new TextHeaderListItem(Resources.IDS_ST_BODY_INPUT_ASSISTANCE);
+            if (inputAssistanceHeaderItem != null)
+            {
+                sections.Add(MainMenuProvider.Language_InputAssistanceHeader, inputAssistanceHeaderItem);
+            }
+
+            TextListItem autofillServiceItem = TextListItem.CreatePrimaryTextItem(Resources.IDS_ST_BODY_AUTOFILL_SERVICE);
+            if (autofillServiceItem != null)
+            {
+                autofillServiceItem.Clicked += (o, e) =>
+                {
+                    NavigateTo(MainMenuProvider.Language_AutoFill);
+                };
+                sections.Add(MainMenuProvider.Language_AutoFill, autofillServiceItem);
+            }
+
+            TextHeaderListItem bodySpeachHeaderItem = new TextHeaderListItem(Resources.IDS_ST_BODY_SPEECH);
+            if (bodySpeachHeaderItem != null)
+            {
+                sections.Add(MainMenuProvider.Language_BodySpeach, bodySpeachHeaderItem);
+            }
+
+            TextListItem voiceControl = TextListItem.CreatePrimaryTextItem(Resources.IDS_VOICE_BODY_VOICE_CONTROL_ABB2);
+            if (voiceControl != null)
+            {
+                voiceControl.Clicked += (o, e) =>
+                {
+                    NavigateTo(MainMenuProvider.Language_VoiceControl);
+                };
+                sections.Add(MainMenuProvider.Language_VoiceControl, voiceControl);
+            }
+
+            TextListItem languageTTS = TextListItem.CreatePrimaryTextItem(Resources.IDS_VOICE_HEADER_TEXT_TO_SPEECH_HTTS);
+            if (languageTTS != null)
+            {
+                languageTTS.Clicked += (o, e) =>
+                {
+                    NavigateTo(MainMenuProvider.Language_TTS);
+                };
+                sections.Add(MainMenuProvider.Language_TTS, languageTTS);
+            }
+
+            TextListItem languageSTT = TextListItem.CreatePrimaryTextItem(Resources.IDS_VOICE_HEADER_SPEECH_TO_TEXT_HSTT);
+            if (languageSTT != null)
+            {
+                languageSTT.Clicked += (o, e) =>
+                {
+                    NavigateTo(MainMenuProvider.Language_STT);
+                };
+                sections.Add(MainMenuProvider.Language_STT, languageSTT);
+            }
+
+            var customization = GetCustomization().OrderBy(c => c.Order);
+            Logger.Debug($"customization: {customization.Count()}");
+            foreach (var cust in customization)
+            {
+                string visibility = cust.IsVisible ? "visible" : "hidden";
+                Logger.Verbose($"Customization: {cust.MenuPath} - {visibility} - {cust.Order}");
+                if (cust.IsVisible && sections.TryGetValue(cust.MenuPath, out View row))
+                {
+                    content.Add(row);
+                }
+            }
+        }
+
+        private void SystemSettings_LocaleLanguageChanged(object sender, LocaleLanguageChangedEventArgs e)
+        {
+            if (content != null)
+            {
+                CreateView();
+            }
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/MainMenuProvider.cs b/SettingMainGadget/SettingMainGadget/MainMenuProvider.cs
new file mode 100644 (file)
index 0000000..937642d
--- /dev/null
@@ -0,0 +1,132 @@
+using SettingCore;
+
+namespace SettingMainGadget
+{
+    public class MainMenuProvider : SettingMenuProvider
+    {
+        public static string Display = "Display";
+        public static string Display_Brightness = "Display.Brightness";
+        public static string Display_Font = "Display.Font";
+        public static string Display_FontSize = "Display.Font.FontSize";
+        public static string Display_FontType = "Display.Font.FontType";
+        public static string Display_Timeout = "Display.Timeout";
+        public static string Display_Theme = "Display.Theme";
+        public static string Sound = "Sound";
+        public static string Sound_Mode = "Sound.Mode";
+        public static string Sound_Notification = "Sound.Notification";
+        public static string Sound_Other = "Sound.Other";
+        public static string Sound_MediaSlider = "Sound.MediaSlider";
+        public static string Sound_NotificationSlider = "Sound.NotificationSlider";
+        public static string Sound_SystemSlider = "Sound.SystemSlider";
+        public static string DateTime = "DateTime";
+        public static string DateTime_AutoUpdate = "DateTime.AutoUpdate";
+        public static string DateTime_SetDate = "DateTime.SetDate";
+        public static string DateTime_SetTime = "DateTime.SetTime";
+        public static string DateTime_SetTimezone = "DateTime.SetTimezone";
+        public static string DateTime_TimeFormat = "DateTime.TimeFormat";
+        public static string Language = "Language";
+        public static string Language_Display = "Language.DisplayLanguage";
+        public static string Language_KeyboardHeader = "Language.KeyboardHeader";
+        public static string Language_InputAssistanceHeader = "Language.InputAssistanceHeader";
+        public static string Language_BodySpeach = "Language.BodySpeach";
+        public static string About = "About";
+        public static string About_ManageCertificates = "About.ManageCertificates";
+        public static string About_OpenSourceLicenses = "About.OpenSourceLicenses";
+        public static string About_ScalableUI = "About.ScalableUI";
+        public static string About_DeviceInfo = "About.DeviceInfo";
+        public static string About_RenameDevice = "About.RenameDevice";
+        public static string About_ModelNumber = "About.ModelNumber";
+        public static string About_TizenVersion = "About.TizenVersion";
+        public static string About_Cpu = "About.Cpu";
+        public static string About_Ram = "About.Ram";
+        public static string About_Resolution = "About.Resolution";
+        public static string About_DeviceStatus = "About.DeviceStatus";
+        public static string About_DeviceStatus_bt_address = "About.DeviceStatus.BluetoothAddress";
+        public static string About_DeviceStatus_wifi_mac_address = "About.DeviceStatus.WifiMacAddress";
+        public static string About_DeviceStatus_storage = "About.DeviceStatus.Storage";
+        public static string About_DeviceStatus_cpu_usage = "About.DeviceStatus.CpuUsage";
+
+        //storage
+        public static string Storage = "Storage";
+        public static string Storage_InternalUsage = "Storage.InternalUsage";
+        public static string Storage_Used = "Storage.Used";
+        public static string Storage_TotalInternal = "Storage.TotalInternal";
+        public static string Storage_FreeInternal = "Storage.FreeInternal";
+        public static string Storage_UsageSummary = "Storage.UsageSummary";
+        public static string Storage_UsageIndicator = "Storage.UsageIndicator";
+        public static string Storage_ExternalUsage = "Storage.ExternalUsage";
+        public static string Storage_ExternalStorage = "Storage.ExternalStorage";
+        public static string Storage_DefaultSettings = "Storage.DefaultSettings";
+
+        //external
+        public static string Language_InputMethod = "Language.InputMethod";
+        public static string Language_AutoFill = "Language.AutoFill";
+        public static string Language_VoiceControl = "Language.VoiceControl";
+        public static string Language_TTS = "Language.TTS";
+        public static string Language_STT = "Language.STT";
+
+        public override SettingMenu[] Provide()
+        {
+            return new SettingMenu[]
+            {
+                new SettingMenu(path: Display, defaultOrder: 30, type: typeof(Setting.Menu.DisplayGadget)),
+                new SettingMenu(path: Display_Brightness, defaultOrder: 31),
+                new SettingMenu(path: Display_Font, defaultOrder: 32, type: typeof(Setting.Menu.Display.DisplayFontGadget)),
+                new SettingMenu(path: Display_FontSize, defaultOrder: 33, type: typeof(Setting.Menu.Display.DisplayFontSizeGadget)),
+                new SettingMenu(path: Display_FontType, defaultOrder: 34, type: typeof(Setting.Menu.Display.DisplayFontTypeGadget)),
+                new SettingMenu(path: Display_Timeout, defaultOrder: 35, type: typeof(Setting.Menu.Display.DisplayTimeOutGadget)),
+                new SettingMenu(path: Display_Theme, defaultOrder: 36, type: typeof(Setting.Menu.Display.DisplayThemeGadget)),
+                new SettingMenu(path: Sound, defaultOrder: 40, type: typeof(Setting.Menu.SoundGadget)),
+                new SettingMenu(path: Sound_Mode, defaultOrder: 41, type: typeof(Setting.Menu.Sound.SoundmodeGadget)),
+                new SettingMenu(path: Sound_Notification, defaultOrder: 42, type: typeof(Setting.Menu.Sound.SoundnotificationGadget)),
+                new SettingMenu(path: Sound_Other, defaultOrder: 43, type: typeof(Setting.Menu.Sound.SoundotherGadget)),
+                new SettingMenu(path: Sound_MediaSlider, defaultOrder: 44),
+                new SettingMenu(path: Sound_NotificationSlider, defaultOrder: 45),
+                new SettingMenu(path: Sound_SystemSlider, defaultOrder: 46),
+                new SettingMenu(path: DateTime, defaultOrder: 50, type: typeof(Setting.Menu.DateTimeGadget)),
+                new SettingMenu(path: DateTime_AutoUpdate, defaultOrder: 51),
+                new SettingMenu(path: DateTime_SetDate, defaultOrder: 52, type: typeof(Setting.Menu.DateTime.DateTimeSetDateGadget)),
+                new SettingMenu(path: DateTime_SetTime, defaultOrder: 53, type: typeof(Setting.Menu.DateTime.DateTimeSetTimeGadget)),
+                new SettingMenu(path: DateTime_SetTimezone, defaultOrder: 54, type: typeof(Setting.Menu.DateTime.DateTimeSetTimezoneGadget)),
+                new SettingMenu(path: DateTime_TimeFormat, defaultOrder: 55),
+                new SettingMenu(path: Language, defaultOrder: 60, type: typeof(Setting.Menu.LanguageInputGadget)),
+                new SettingMenu(path: Language_Display, defaultOrder: 61, type: typeof(Setting.Menu.LanguageInput.LanguageInputDisplayLanguageGadget)),
+                new SettingMenu(path: Language_KeyboardHeader, defaultOrder: 62),
+                new SettingMenu(path: Language_InputMethod, defaultOrder: 63),
+                new SettingMenu(path: Language_InputAssistanceHeader, defaultOrder: 64),
+                new SettingMenu(path: Language_AutoFill, defaultOrder: 65),
+                new SettingMenu(path: Language_BodySpeach, defaultOrder: 66),
+                new SettingMenu(path: Language_VoiceControl, defaultOrder: 67),
+                new SettingMenu(path: Language_TTS, defaultOrder: 68),
+                new SettingMenu(path: Language_STT, defaultOrder: 69),
+                new SettingMenu(path: About, defaultOrder: 70, type: typeof(Setting.Menu.AboutGadget)),
+                new SettingMenu(path: About_ManageCertificates, defaultOrder: 10),
+                new SettingMenu(path: About_OpenSourceLicenses, defaultOrder: 20, type: typeof(Setting.Menu.AboutLegalInfoGadget)),
+                new SettingMenu(path: About_ScalableUI, defaultOrder: -30, type: typeof(SettingMainGadget.About.AboutScalableGadget)),
+                new SettingMenu(path: About_DeviceInfo, defaultOrder: 40),
+                new SettingMenu(path: About_RenameDevice, defaultOrder: 50),
+                new SettingMenu(path: About_ModelNumber, defaultOrder: 60),
+                new SettingMenu(path: About_TizenVersion, defaultOrder: 70),
+                new SettingMenu(path: About_Cpu, defaultOrder: 80),
+                new SettingMenu(path: About_Ram, defaultOrder: 90),
+                new SettingMenu(path: About_Resolution, defaultOrder: 100),
+                new SettingMenu(path: About_DeviceStatus, defaultOrder: 110, type: typeof(Setting.Menu.AboutDeviceStatusGadget)),
+                new SettingMenu(path: About_DeviceStatus_bt_address, defaultOrder: 10),
+                new SettingMenu(path: About_DeviceStatus_wifi_mac_address, defaultOrder: 20),
+                new SettingMenu(path: About_DeviceStatus_storage, defaultOrder: 30),
+                new SettingMenu(path: About_DeviceStatus_cpu_usage, defaultOrder: 40),
+                //storage
+                new SettingMenu(path: Storage, defaultOrder: 120, type: typeof(Setting.Menu.StorageGadget)),
+                new SettingMenu(path: Storage_InternalUsage, defaultOrder: 10),
+                new SettingMenu(path: Storage_Used, defaultOrder: 15),
+                new SettingMenu(path: Storage_UsageIndicator, defaultOrder: 20),
+                new SettingMenu(path: Storage_TotalInternal, defaultOrder: 25),
+                new SettingMenu(path: Storage_FreeInternal, defaultOrder: 30),
+                new SettingMenu(path: Storage_UsageSummary, defaultOrder: 35),
+                new SettingMenu(path: Storage_ExternalUsage, defaultOrder: 40),
+                new SettingMenu(path: Storage_ExternalStorage, defaultOrder: 45),
+                new SettingMenu(path: Storage_DefaultSettings, defaultOrder: 50, typeof(Setting.Menu.Storage.DefaultStorageGadget)),
+            };
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/SettingMainGadget.csproj b/SettingMainGadget/SettingMainGadget/SettingMainGadget.csproj
new file mode 100644 (file)
index 0000000..e90cfa5
--- /dev/null
@@ -0,0 +1,24 @@
+<Project Sdk="Tizen.NET.Sdk/1.1.9">
+
+  <PropertyGroup>
+     <TargetFramework>netcoreapp3.1</TargetFramework>
+     <TizenCreateTpkOnBuild>false</TizenCreateTpkOnBuild>
+  </PropertyGroup>
+
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugType>portable</DebugType>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>None</DebugType>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Tizen.NET" Version="11.0.0.17739" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\SettingCore\SettingCore.csproj" />
+  </ItemGroup>
+
+</Project>
+
diff --git a/SettingMainGadget/SettingMainGadget/Sound/SettingAudioManager.cs b/SettingMainGadget/SettingMainGadget/Sound/SettingAudioManager.cs
new file mode 100644 (file)
index 0000000..f90b451
--- /dev/null
@@ -0,0 +1,78 @@
+using SettingCore;
+using System;
+using Tizen.Multimedia;
+using Tizen.NUI;
+using Tizen.System;
+
+namespace SettingMainGadget.Sound
+{
+    class SettingAudioManager
+    {
+        private const string ringtone = "media/Ringtones/ringtone_sdk.mp3";
+        public const string VconfRingtonePath = "db/setting/sound/noti/msg_ringtone_path";
+
+        private static AudioVolume audioVolume = AudioManager.VolumeController;
+
+        public static int GetVolumeLevel(AudioVolumeType type)
+        {
+            return audioVolume.Level[type];
+        }
+
+        public static int GetMaxVolumeLevel(AudioVolumeType type)
+        {
+            return audioVolume.MaxLevel[type];
+        }
+
+        public static float GetPercentageVolumeLevel(AudioVolumeType type)
+        {
+            return (float)audioVolume.Level[type] / audioVolume.MaxLevel[type];
+        }
+
+        public static void SetVolumeLevel(AudioVolumeType type, int volume)
+        {
+            volume = volume < 0 ? 0 : volume;
+            volume = volume > audioVolume.MaxLevel[type] ? audioVolume.MaxLevel[type] : volume;
+
+            audioVolume.Level[type] = volume;
+            Logger.Debug($"SET {type} Volume : {audioVolume.Level[type]}");        
+        }
+
+        public static void PlayAudio(AudioStreamType type)
+        {
+            string path = String.Empty;
+
+            switch (type)
+            {
+                case AudioStreamType.Media:
+                    string callingAssemblyName = System.Reflection.Assembly.GetCallingAssembly().GetName().Name;
+                    string absoluteDirPath = System.IO.Path.Combine(Tizen.Applications.Application.Current.DirectoryInfo.Resource, "mount/allowed/", callingAssemblyName);
+                    path = System.IO.Path.Combine(absoluteDirPath, ringtone);
+                    break;
+                case AudioStreamType.Notification:
+                    if (!Tizen.Vconf.TryGetString(VconfRingtonePath, out string value))
+                    {
+                        Logger.Warn($"could not get vaule for {VconfRingtonePath}");
+                        //return; FIXME : uncomment when TryGetString will work properly 
+                    }
+                    path = value;
+                    break;
+                case AudioStreamType.System:
+                    Feedback feedback = new Feedback();
+                    if (feedback.IsSupportedPattern(FeedbackType.Sound, "Tap"))
+                    {
+                        feedback.Play(FeedbackType.Sound, "Tap");
+                    }
+                    return;
+            }
+
+            try
+            {
+                WavPlayer.StartAsync(path, new AudioStreamPolicy(type));
+            }
+            catch (Exception ex)
+            {
+                Logger.Error($"WavPlayer {type} Error: {ex.Message}");
+            }
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/Sound/SoundGadget.cs b/SettingMainGadget/SettingMainGadget/Sound/SoundGadget.cs
new file mode 100644 (file)
index 0000000..4cd2452
--- /dev/null
@@ -0,0 +1,255 @@
+using SettingCore.TextResources;
+using SettingCore;
+using SettingCore.Views;
+using SettingMainGadget;
+using SettingMainGadget.Sound;
+using System.Collections.Generic;
+using System.Linq;
+using Tizen.Multimedia;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+using Tizen.System;
+
+namespace Setting.Menu
+{
+    public class SoundGadget : SettingCore.MainMenuGadget
+    {
+        private View content;
+        private Sections sections = new Sections();
+
+        private TextListItem soundMode;
+        private TextListItem notificationSound;
+
+        public override Color ProvideIconColor() => new Color(IsLightTheme  ? "#DB3069" : "#DF4679");
+
+        public override string ProvideIconPath() => GetResourcePath("sound.svg");
+
+        public override string ProvideTitle() => Resources.IDS_ST_HEADER_SOUND;
+
+        protected override View OnCreate()
+        {
+            base.OnCreate();
+            AttachToEvents();
+
+            content = new ScrollableBase
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                ScrollingDirection = ScrollableBase.Direction.Vertical,
+                HideScrollbar = false,
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+            CreateView();
+
+            return content;
+        }
+
+        protected override void OnDestroy()
+        {
+            DetachFromEvents();
+            base.OnDestroy();
+        }
+
+        private void AttachToEvents()
+        {
+            try
+            {
+                Tizen.System.SystemSettings.SoundSilentModeSettingChanged += SystemSettings_SoundSilentModeSettingChanged;
+            }
+            catch (System.Exception e)
+            {
+                Logger.Warn($"Cannot attach to SystemSettings.SoundSilentModeSettingChanged ({e.GetType()})");
+            }
+
+            try
+            {
+                Tizen.System.SystemSettings.VibrationChanged += SystemSettings_VibrationChanged;
+            }
+            catch (System.Exception e)
+            {
+                Logger.Warn($"Cannot attach to SystemSettings.VibrationChanged ({e.GetType()})");
+            }
+
+            try
+            {
+                Tizen.System.SystemSettings.SoundNotificationChanged += SystemSettings_NotificationSoundChanged;
+            }
+            catch (System.Exception e)
+            {
+                Logger.Warn($"Cannot attach to SystemSettings.SoundNotificationChanged ({e.GetType()})");
+            }
+        }
+
+        private void DetachFromEvents()
+        {
+            try
+            {
+                Tizen.System.SystemSettings.SoundSilentModeSettingChanged -= SystemSettings_SoundSilentModeSettingChanged;
+            }
+            catch (System.Exception e)
+            {
+                Logger.Warn($"Cannot detach from SystemSettings.SoundSilentModeSettingChanged ({e.GetType()})");
+            }
+
+            try
+            {
+                Tizen.System.SystemSettings.VibrationChanged -= SystemSettings_VibrationChanged;
+            }
+            catch (System.Exception e)
+            {
+                Logger.Warn($"Cannot detach from SystemSettings.VibrationChanged ({e.GetType()})");
+            }
+
+            try
+            {
+                Tizen.System.SystemSettings.SoundNotificationChanged -= SystemSettings_NotificationSoundChanged;
+            }
+            catch (System.Exception e)
+            {
+                Logger.Warn($"Cannot detach from SystemSettings.SoundNotificationChanged ({e.GetType()})");
+            }
+        }
+
+        private void CreateView()
+        {
+            // remove all sections from content view
+            sections.RemoveAllSectionsFromView(content);
+
+            // section: sound mode
+
+            string soundModeName = SoundmodeManager.GetSoundmodeName(SoundmodeManager.GetSoundmode());
+            soundMode = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_HEADER_SOUND_MODE, soundModeName);
+            if (soundMode != null)
+            {
+                soundMode.Clicked += (o, e) =>
+                {
+                    NavigateTo(MainMenuProvider.Sound_Mode);
+                };
+            }
+            sections.Add(MainMenuProvider.Sound_Mode, soundMode);
+
+            // section: notification sound
+
+            string notificationSoundName = SoundNotificationManager.GetNotificationSoundName();
+            notificationSound = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_NOTIFICATIONS, notificationSoundName);
+            if (notificationSound != null)
+            {
+                notificationSound.Clicked += (o, e) =>
+                {
+                    NavigateTo(MainMenuProvider.Sound_Notification);
+                };
+            }
+            sections.Add(MainMenuProvider.Sound_Notification, notificationSound);
+
+            // section: other sounds
+
+            var otherSounds = TextListItem.CreatePrimaryTextItem(Resources.IDS_ST_MBODY_OTHER_SOUNDS);
+            if (otherSounds != null)
+            {
+                otherSounds.Clicked += (o, e) =>
+                {
+                    NavigateTo(MainMenuProvider.Sound_Other);
+                };
+            }
+            sections.Add(MainMenuProvider.Sound_Other, otherSounds);
+
+            Logger.Debug($"GET {AudioVolumeType.Media} Volume : {SettingAudioManager.GetVolumeLevel(AudioVolumeType.Media)}");
+            Logger.Debug($"GET {AudioVolumeType.Notification} Volume : {SettingAudioManager.GetVolumeLevel(AudioVolumeType.Notification)}");
+            Logger.Debug($"GET {AudioVolumeType.System} Volume : {SettingAudioManager.GetVolumeLevel(AudioVolumeType.System)}");
+
+            string soundSliderIconPath = GetResourcePath("sound/sound_slider_icon_default.png");
+
+            // section: media
+
+            var mediaSlider = new SliderListItem(Resources.IDS_ST_BODY_MEDIA, soundSliderIconPath, SettingAudioManager.GetPercentageVolumeLevel(AudioVolumeType.Media));
+            mediaSlider.Slider.SlidingFinished += OnMediaSlidingFinished;
+            mediaSlider.Margin = new Extents(0, 0, 16, 0).SpToPx();
+            sections.Add(MainMenuProvider.Sound_MediaSlider, mediaSlider);
+
+            // section: notification
+
+            var notificationSlider = new SliderListItem(Resources.IDS_ST_BODY_NOTIFICATIONS, soundSliderIconPath, SettingAudioManager.GetPercentageVolumeLevel(AudioVolumeType.Notification));
+            notificationSlider.Slider.ValueChanged += OnNofificationSlider_ValueChanged;
+            notificationSlider.Margin = new Extents(0, 0, 16, 0).SpToPx();
+            sections.Add(MainMenuProvider.Sound_NotificationSlider, notificationSlider);
+
+            // section: system
+
+            var systemSlider = new SliderListItem(Resources.IDS_ST_BODY_SYSTEM, soundSliderIconPath, SettingAudioManager.GetPercentageVolumeLevel(AudioVolumeType.System));
+            systemSlider.Slider.ValueChanged += OnSystemSlider_ValueChanged;
+            systemSlider.Margin = new Extents(0, 0, 16, 0).SpToPx();
+            sections.Add(MainMenuProvider.Sound_SystemSlider, systemSlider);
+
+            // add only visible sections to content view in required order
+            var customization = GetCustomization().OrderBy(c => c.Order);
+            foreach (var cust in customization)
+            {
+                string visibility = cust.IsVisible ? "visible" : "hidden";
+                Logger.Verbose($"Customization: {cust.MenuPath} - {visibility} - {cust.Order}");
+                if (cust.IsVisible && sections.TryGetValue(cust.MenuPath, out View row))
+                {
+                    content.Add(row);
+                }
+            }
+        }
+
+        protected override void OnCustomizationUpdate(IEnumerable<MenuCustomizationItem> items)
+        {
+            Logger.Verbose($"{nameof(SoundGadget)} got customization with {items.Count()} items. Recreating view.");
+            CreateView();
+        }
+
+        private void SystemSettings_SoundSilentModeSettingChanged(object sender, SoundSilentModeSettingChangedEventArgs e)
+        {
+            if (soundMode != null)
+                soundMode.Secondary = SoundmodeManager.GetSoundmodeName(SoundmodeManager.GetSoundmode());
+        }
+
+        private void SystemSettings_VibrationChanged(object sender, VibrationChangedEventArgs e)
+        {
+            if (soundMode != null)
+                soundMode.Secondary = SoundmodeManager.GetSoundmodeName(SoundmodeManager.GetSoundmode());
+        }
+
+        private static void OnMediaSlidingFinished(object sender, SliderSlidingFinishedEventArgs e)
+        {
+            int volume = (int)(e.CurrentValue * SettingAudioManager.GetMaxVolumeLevel(AudioVolumeType.Media));
+
+            if (volume != SettingAudioManager.GetVolumeLevel(AudioVolumeType.Media))
+            {
+                SettingAudioManager.SetVolumeLevel(AudioVolumeType.Media, volume);
+                SettingAudioManager.PlayAudio(AudioStreamType.Media);
+            }
+        }
+        private static void OnNofificationSlider_ValueChanged(object sender, SliderValueChangedEventArgs e)
+        {
+            int volume = (int)(e.CurrentValue * SettingAudioManager.GetMaxVolumeLevel(AudioVolumeType.Notification));
+
+            if (volume != SettingAudioManager.GetVolumeLevel(AudioVolumeType.Notification))
+            {
+                SettingAudioManager.SetVolumeLevel(AudioVolumeType.Notification, volume);
+                SettingAudioManager.PlayAudio(AudioStreamType.Notification);
+            }
+        }
+        private static void OnSystemSlider_ValueChanged(object sender, SliderValueChangedEventArgs e)
+        {
+            int volume = (int)(e.CurrentValue * SettingAudioManager.GetMaxVolumeLevel(AudioVolumeType.System));
+
+            if (volume != SettingAudioManager.GetVolumeLevel(AudioVolumeType.System))
+            {
+                SettingAudioManager.SetVolumeLevel(AudioVolumeType.System, volume);
+                SettingAudioManager.PlayAudio(AudioStreamType.System);
+            }
+        }
+
+        private void SystemSettings_NotificationSoundChanged(object sender, SoundNotificationChangedEventArgs e)
+        {
+            if (notificationSound != null)
+                notificationSound.Secondary = SoundNotificationManager.GetNotificationSoundName();
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/Sound/SoundNotificationManager.cs b/SettingMainGadget/SettingMainGadget/Sound/SoundNotificationManager.cs
new file mode 100644 (file)
index 0000000..e7ac41f
--- /dev/null
@@ -0,0 +1,58 @@
+using SettingCore.TextResources;
+using SettingCore;
+using System;
+using System.Linq;
+using Tizen.Multimedia;
+
+namespace SettingMainGadget.Sound
+{
+    public class SoundNotificationManager
+    {
+        public static void SetNotificationSound(string notificationsound)
+        {
+            Tizen.Vconf.SetString(SettingAudioManager.VconfRingtonePath, notificationsound);
+        }
+
+        public static string GetNotificationSound()
+        {
+            // FIXME: ignoring return value
+            Tizen.Vconf.TryGetString(SettingAudioManager.VconfRingtonePath, out string value);
+
+            return value;
+        }
+
+        public static string GetFileName(string path)
+        {
+            String[] folders = path.Split('/');
+
+            return folders.Length > 0 ? folders.Last() : path;
+        }
+
+        public static string SettingMediaBasename(string path)
+        {
+            if (string.IsNullOrEmpty(path))
+                return Resources.IDS_ST_BODY_PHONEPROFILES_SILENT;
+
+            string title = String.Empty;
+
+            try
+            {
+                var extractor = new MetadataExtractor(path);
+                Metadata metadata = extractor.GetMetadata();
+                title = metadata.Title;
+            }
+            catch (Exception ex)
+            {
+                Logger.Error(ex.Message);
+            }
+
+            return !string.IsNullOrEmpty(title) ? title : GetFileName(path);
+        }
+
+        public static string GetNotificationSoundName()
+        {
+            string path = GetNotificationSound();
+            return SettingMediaBasename(path);
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/Sound/SoundmodeGadget.cs b/SettingMainGadget/SettingMainGadget/Sound/SoundmodeGadget.cs
new file mode 100644 (file)
index 0000000..874684b
--- /dev/null
@@ -0,0 +1,57 @@
+using SettingCore.TextResources;
+using SettingCore.Views;
+using SettingMainGadget.Sound;
+using System.Linq;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+
+namespace Setting.Menu.Sound
+{
+    public class SoundmodeGadget : SettingCore.MenuGadget
+    {
+        public override string ProvideTitle() => Resources.IDS_ST_HEADER_SOUND_MODE;
+
+        private SettingMainGadget.Sound.Soundmode[] sounds = new[] {
+            Soundmode.SOUND_MODE_SOUND,
+            Soundmode.SOUND_MODE_VIBRATE,
+            Soundmode.SOUND_MODE_MUTE,
+        };
+
+        protected override View OnCreate()
+        {
+            base.OnCreate();
+
+            var content = new ScrollableBase
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                ScrollingDirection = ScrollableBase.Direction.Vertical,
+                HideScrollbar = false,
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            RadioButtonGroup radioButtonGroup = new RadioButtonGroup();
+
+            for (int i = 0; i < sounds.Length; i++)
+            {
+                RadioButtonListItem item = new RadioButtonListItem(SoundmodeManager.GetSoundmodeName(sounds[i]));
+                item.RadioButton.IsSelected = i.Equals(sounds.ToList().IndexOf(SoundmodeManager.GetSoundmode()));
+
+                radioButtonGroup.Add(item.RadioButton);
+                content.Add(item);
+            }
+
+            radioButtonGroup.SelectedChanged += (o, e) =>
+            {
+                var current = sounds[radioButtonGroup.SelectedIndex];
+                SoundmodeManager.SetSoundmode(current);
+            };
+
+            return content;
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/Sound/SoundmodeManager.cs b/SettingMainGadget/SettingMainGadget/Sound/SoundmodeManager.cs
new file mode 100644 (file)
index 0000000..26a0302
--- /dev/null
@@ -0,0 +1,79 @@
+using SettingCore.TextResources;
+using SettingCore;
+
+namespace SettingMainGadget.Sound
+{
+    public enum Soundmode
+    {
+        SOUND_MODE_SOUND,
+        SOUND_MODE_VIBRATE,
+        SOUND_MODE_MUTE
+    };
+
+    internal class SoundmodeManager
+    {
+        private const string VconfSoundOn = "db/setting/sound/sound_on";
+        private const string VconfVibrationOn = "db/setting/sound/vibration_on";
+
+        public static Soundmode GetSoundmode()
+        {
+            if (!Tizen.Vconf.TryGetBool(VconfSoundOn, out bool isSoundOn))
+            {
+                Logger.Warn($"could not get value for {VconfSoundOn}");
+            }
+            if (!Tizen.Vconf.TryGetBool(VconfVibrationOn, out bool isVibrationOn))
+            {
+                Logger.Warn($"could not get value for {VconfVibrationOn}");
+            }
+
+            if (isSoundOn)
+                return Soundmode.SOUND_MODE_SOUND;
+            else if (isVibrationOn)
+                return Soundmode.SOUND_MODE_VIBRATE;
+
+            return Soundmode.SOUND_MODE_MUTE;
+        }
+
+        public static void SetSoundmode(Soundmode soundmode)
+        {
+            bool have_sound = false, have_vibrations = false;
+
+            switch (soundmode)
+            {
+                case Soundmode.SOUND_MODE_SOUND:
+                    have_sound = true;
+                    have_vibrations = false;
+                    break;
+                case Soundmode.SOUND_MODE_VIBRATE:
+                    have_sound = false;
+                    have_vibrations = true;
+                    break;
+                case Soundmode.SOUND_MODE_MUTE:
+                    have_sound = false;
+                    have_vibrations = false;
+                    break;
+            };
+
+            if (!Tizen.Vconf.SetBool(VconfSoundOn, have_sound))
+            {
+                Logger.Warn($"could not set key {VconfSoundOn} with value {have_sound}");
+            }
+
+            if (!Tizen.Vconf.SetBool(VconfVibrationOn, have_vibrations))
+            {
+                Logger.Warn($"could not set key {VconfVibrationOn} with value {have_vibrations}");
+            }
+        }
+
+        public static string GetSoundmodeName(Soundmode soundmode)
+        {
+            return soundmode switch
+            {
+                Soundmode.SOUND_MODE_SOUND => Resources.IDS_ST_HEADER_SOUND,
+                Soundmode.SOUND_MODE_VIBRATE => Resources.IDS_ST_HEADER_VIBRATE,
+                Soundmode.SOUND_MODE_MUTE => Resources.IDS_ST_HEADER_MUTE,
+                _ => string.Empty,
+            };
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/Sound/SoundnotificationGadget.cs b/SettingMainGadget/SettingMainGadget/Sound/SoundnotificationGadget.cs
new file mode 100644 (file)
index 0000000..54ddf4f
--- /dev/null
@@ -0,0 +1,82 @@
+using SettingCore.TextResources;
+using SettingCore;
+using SettingMainGadget.Sound;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+using SettingCore.Views;
+
+namespace Setting.Menu.Sound
+{
+    public class SoundnotificationGadget : SettingCore.MenuGadget
+    {
+        public override string ProvideTitle() => Resources.IDS_ST_BODY_NOTIFICATIONS;
+
+        private const string soundpath = "/opt/usr/data/settings/Alerts";
+
+        protected override View OnCreate()
+        {
+            base.OnCreate();
+
+            var content = new ScrollableBase
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                ScrollingDirection = ScrollableBase.Direction.Vertical,
+                HideScrollbar = false,
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            RadioButtonGroup radioButtonGroup = new RadioButtonGroup();
+
+            var soundList = CreateSoundList();
+
+            for (int i = 0; i < soundList.Count; i++)
+            {
+                RadioButtonListItem item = new RadioButtonListItem(SoundNotificationManager.SettingMediaBasename(soundList[i].ToString()));
+                item.RadioButton.IsSelected = i.Equals(GetNotificationSoundIndex(soundList));
+
+                radioButtonGroup.Add(item.RadioButton);
+                content.Add(item);
+            }
+
+            radioButtonGroup.SelectedChanged += (o, e) =>
+            {
+                SoundNotificationManager.SetNotificationSound(soundList[radioButtonGroup.SelectedIndex]);
+            };
+
+            return content;
+        }
+
+        private IList<string> CreateSoundList()
+        {
+            var soundList = new List<string>() { string.Empty }; // Silent
+
+            Logger.Debug($"sound path : {soundpath}");
+
+            DirectoryInfo directory = new DirectoryInfo(soundpath);
+            var files = Enumerable.Concat(directory.GetFiles("*.wav"), directory.GetFiles("*.mp3"));
+
+            foreach (var file in files)
+            {
+                Logger.Debug($"[{soundList.Count}] {file.Name}");
+                soundList.Add(System.IO.Path.Combine(soundpath, file.Name));
+            }
+
+            return soundList;
+        }
+
+        private int GetNotificationSoundIndex(IList<string> soundlist)
+        {
+            string sound = SoundNotificationManager.GetNotificationSound();
+
+            return soundlist.IndexOf(sound);
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/Sound/SoundotherGadget.cs b/SettingMainGadget/SettingMainGadget/Sound/SoundotherGadget.cs
new file mode 100644 (file)
index 0000000..cb368cf
--- /dev/null
@@ -0,0 +1,55 @@
+using SettingCore.TextResources;
+using SettingCore;
+using SettingCore.Views;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+
+namespace Setting.Menu.Sound
+{
+    public class SoundotherGadget : SettingCore.MenuGadget
+    {
+        public override string ProvideTitle() => Resources.IDS_ST_MBODY_OTHER_SOUNDS;
+
+        private const string keyTouchSound = "db/setting/sound/touch_sounds";
+        private const string keyKeyboardSound = "db/setting/sound/button_sounds";
+
+        protected override View OnCreate()
+        {
+            base.OnCreate();
+
+            var content = new ScrollableBase
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                ScrollingDirection = ScrollableBase.Direction.Vertical,
+                HideScrollbar = false,
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            Tizen.Vconf.TryGetBool(keyTouchSound, out bool bTouchSound);
+            Tizen.Vconf.TryGetBool(keyKeyboardSound, out bool bKeyboardSound);
+
+            var item = new SwitchListItem(Resources.IDS_ST_MBODY_TOUCH_SOUND, Resources.IDS_ST_BODY_PLAY_SOUNDS_WHEN_LOCKING_AND_UNLOCKING_SCREEN, bTouchSound);
+            item.Switch.SelectedChanged += (o, e) =>
+            {
+                Tizen.Vconf.SetBool(keyTouchSound, e.IsSelected);
+                Logger.Debug($"Touch Sound enabled: {e.IsSelected}");
+            };
+            content.Add(item);
+
+            item = new SwitchListItem(Resources.IDS_ST_MBODY_KEYBOARD_SOUND, Resources.IDS_ST_BODY_SOUND_FEEDBACK_FOR_SYSTEM_KEYBOARD, bKeyboardSound);
+            item.Switch.SelectedChanged += (o, e) =>
+            {
+                Tizen.Vconf.SetBool(keyKeyboardSound, e.IsSelected);
+                Logger.Debug($"Keyboard Sound enabled: {e.IsSelected}");
+            };
+            content.Add(item);
+
+            return content;
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/Storage/DefaultStorageGadget.cs b/SettingMainGadget/SettingMainGadget/Storage/DefaultStorageGadget.cs
new file mode 100644 (file)
index 0000000..ffd212d
--- /dev/null
@@ -0,0 +1,167 @@
+using SettingCore.TextResources;
+using SettingCore.Views;
+using System;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI;
+using Tizen.NUI.Components;
+using SettingCore;
+using Tizen;
+
+namespace Setting.Menu.Storage
+{
+    public class DefaultStorageGadget : SettingCore.MenuGadget
+    {
+        public override string ProvideTitle() => Resources.IDS_SM_HEADER_DEFAULT_STORAGE_SETTINGS_ABB;
+
+        private const string VconfSharedContent = "db/setting/default_memory/wifi_direct";
+        private const string VconfAppInstall = "db/setting/default_memory/install_applications";
+        private const string VconfCardStatus = "memory/sysman/mmc";
+
+        private ScrollableBase content;
+
+        protected override View OnCreate()
+        {
+            base.OnCreate();
+
+            content = new ScrollableBase()
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                ScrollingDirection = ScrollableBase.Direction.Vertical,
+                HideScrollbar = false,
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            CreateItems();
+
+            Vconf.Notify(VconfCardStatus, OnCardStatusChanged);
+
+            return content;
+        }
+
+        protected override void OnDestroy()
+        {
+            Vconf.Ignore(VconfCardStatus, OnCardStatusChanged);
+
+            base.OnDestroy();
+        }
+
+        private void CreateItems()
+        {
+            content.RemoveAllChildren(true);
+
+            GetStorageStatus(out int shared, out int app, out int status);
+
+            // Shared contents
+            var headerItem = new TextHeaderListItem(Resources.IDS_ST_HEADER_SHARED_CONTENT);
+            content.Add(headerItem);
+
+            headerItem = new TextHeaderListItem(Resources.IDS_SM_BODY_SELECT_THE_DEFAULT_STORAGE_LOCATION_FOR_CONTENT_SHARED_VIA_BLUETOOTH_OR_WI_FI_DIRECT, true);
+            content.Add(headerItem);
+
+            RadioButtonGroup radioButtonStorageGroup = new RadioButtonGroup();
+
+            RadioButtonListItem device = new RadioButtonListItem(Resources.IDS_ST_BODY_DEVICE_STORAGE);
+            device.RadioButton.IsSelected = shared == 0;
+
+            RadioButtonListItem card = new RadioButtonListItem(Resources.IDS_ST_BODY_SD_CARD);
+            // disable storage selection if the card is not mounted 
+            if (status != 1)
+            {
+                card.IsEnabled = false;
+            }
+            card.RadioButton.IsSelected = shared == 1;
+
+            radioButtonStorageGroup.SelectedChanged += (o, e) =>
+            {
+                Vconf.SetInt(VconfSharedContent, radioButtonStorageGroup.SelectedIndex);
+                Logger.Debug($"Default storage of Shared Content is {radioButtonStorageGroup.GetSelectedItem().Text}.");
+            };
+
+            radioButtonStorageGroup.Add(device.RadioButton);
+            radioButtonStorageGroup.Add(card.RadioButton);
+
+            content.Add(device);
+            content.Add(card);
+
+            // App installation
+            headerItem = new TextHeaderListItem("App installation"); // TODO : add translation to Resources
+            content.Add(headerItem);
+
+            headerItem = new TextHeaderListItem(Resources.IDS_SM_BODY_SELECT_THE_DEFAULT_LOCATION_FOR_INSTALLING_APPS_WHERE_APPS_CAN_BE_SAVED_DEPENDS_ON_THE_TYPE_OF_APP_AND_THE_AVAILABILITY_OF_THE_LOCATION, true);
+            content.Add(headerItem);
+
+            RadioButtonGroup radioButtonAppGroup = new RadioButtonGroup();
+
+            RadioButtonListItem deviceStorage = new RadioButtonListItem(Resources.IDS_ST_BODY_DEVICE_STORAGE);
+            deviceStorage.RadioButton.IsSelected = app == 0;
+
+            RadioButtonListItem cardStorage = new RadioButtonListItem(Resources.IDS_ST_BODY_SD_CARD);
+            // disable storage selection if the card is not mounted
+            if (status != 1)
+            {
+                cardStorage.IsEnabled = false;
+            }
+            cardStorage.RadioButton.IsSelected = app == 1;
+
+            radioButtonAppGroup.SelectedChanged += (o, e) =>
+            {
+                Vconf.SetInt(VconfAppInstall, radioButtonAppGroup.SelectedIndex);
+                Logger.Debug($"Default storage of App instalation is {radioButtonAppGroup.GetSelectedItem().Text}.");
+            };
+
+            radioButtonAppGroup.Add(deviceStorage.RadioButton);
+            radioButtonAppGroup.Add(cardStorage.RadioButton);
+
+            content.Add(deviceStorage);
+            content.Add(cardStorage);
+        }
+
+        private void GetStorageStatus(out int shared, out int app, out int status)
+        {
+            if (!Vconf.TryGetInt(VconfSharedContent, out shared))
+            {
+                Logger.Warn($"could not get value for {VconfSharedContent}");
+            }
+
+            if (!Vconf.TryGetInt(VconfAppInstall, out app))
+            {
+                Logger.Warn($"could not get value for {VconfAppInstall}");
+            }
+
+            if (!Vconf.TryGetInt(VconfCardStatus, out status))
+            {
+                Logger.Warn($"could not get value for {VconfCardStatus}");
+            }
+
+            // set device as default shared content and app instalation storage if card was umounted
+            // FIXME : remove it if the change of card status (memory/sysman/mmc) will affect wifi_direct and install_applications
+            if (status != 1)
+            {
+                if (app == 1)
+                {
+                    Vconf.SetInt(VconfAppInstall, 0);
+                    app = 0;
+                }
+
+                if (shared == 1)
+                {
+                    Vconf.SetInt(VconfSharedContent, 0);
+                    shared = 0;
+                }
+            }
+        }
+
+        private void OnCardStatusChanged(string key, Type type, dynamic arg)
+        {
+            // update content when card was removed (0) or mounted (1)
+            if (arg == 0 || arg == 1)
+            {
+                CreateItems();
+            }
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/StorageGadget.cs b/SettingMainGadget/SettingMainGadget/StorageGadget.cs
new file mode 100644 (file)
index 0000000..a4ec273
--- /dev/null
@@ -0,0 +1,516 @@
+using SettingCore.TextResources;
+using SettingCore;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI;
+using SettingCore.Views;
+using SettingMainGadget.DateTime;
+using System.Linq;
+using Tizen.NUI.Components;
+using Tizen.System;
+using SettingMainGadget;
+using Tizen.Pims.Contacts.ContactsViews;
+using System.Threading.Tasks;
+using Tizen.Applications;
+using Tizen.Content.MediaContent;
+using static System.Collections.Specialized.BitVector32;
+using Tizen;
+
+namespace Setting.Menu
+{
+    public class StorageGadget : MainMenuGadget
+    {
+        public override Color ProvideIconColor() => new Color(IsLightTheme ? "#7F2982" : "#922F95");
+
+        public override string ProvideIconPath() => GetResourcePath("storage.svg");
+
+        public override string ProvideTitle() => Resources.IDS_ST_BODY_DEVICE_STORAGE;
+
+        private const string VconfCardStatus = "memory/sysman/mmc";
+
+        private bool isLightTheme => ThemeManager.PlatformThemeId == "org.tizen.default-light-theme";
+
+        private Sections sections = new Sections();
+        private View content;
+
+        private TextWithIconListItem appsItem;
+        private TextWithIconListItem cacheItem;
+        private TextWithIconListItem systemItem;
+
+        private StorageIndicator storageIndicator;
+
+        private double nonSystemSpace = 0;
+
+        protected override View OnCreate()
+        {
+            base.OnCreate();
+
+            content = new ScrollableBase()
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.MatchParent,
+                ScrollingDirection = ScrollableBase.Direction.Vertical,
+                HideScrollbar = false,
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            CreateView();
+
+            StartCalculatingAppCacheSize();
+
+            return content;
+        }
+
+        protected override void OnDestroy()
+        {
+            base.OnDestroy();
+        }
+
+        private void CreateView()
+        {
+            sections.RemoveAllSectionsFromView(content);
+
+            // Internal storage
+            var internalUsageItem = new TextHeaderListItem("Device storage usage"); // TODO : add translation to Resources
+            sections.Add(MainMenuProvider.Storage_InternalUsage, internalUsageItem);
+
+            GetStorageStatus(out int InternalCount, out double InternalTotal, out int ExternalCount, out double InternalAvailable, out double ExternalTotal, out double ExternalAvailable);
+
+            if (InternalCount > 0)
+            {
+                var usedItem = TextListItem.CreatePrimaryTextItem(GetMediaSizeString(InternalTotal - InternalAvailable));
+                sections.Add(MainMenuProvider.Storage_Used, usedItem);
+
+                // TODO : add size dependency
+                storageIndicator = new StorageIndicator();
+                sections.Add(MainMenuProvider.Storage_UsageIndicator, storageIndicator);
+
+                var totalItem = TextListItem.CreatePrimaryTextItemWithSecondaryText($"{Resources.IDS_ST_HEADER_TOTAL_SPACE}:", GetMediaSizeString(InternalTotal));
+                sections.Add(MainMenuProvider.Storage_TotalInternal, totalItem);
+
+                var freeItem = TextListItem.CreatePrimaryTextItemWithSecondaryText("Free space:", GetMediaSizeString(InternalAvailable)); // TODO : add translation to Resources
+                sections.Add(MainMenuProvider.Storage_FreeInternal, freeItem);
+            }
+
+            GetMediaInfo(out double sizeImage, out double sizeVideo, out double sizeAudio);
+            GetMiscInfo(out double sizeMisc);
+
+            nonSystemSpace = InternalTotal - InternalAvailable - sizeImage - sizeVideo - sizeAudio - sizeMisc;
+
+            var usageSummary = new View()
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.WrapContent,
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            appsItem = new TextWithIconListItem(Resources.IDS_SM_TMBODY_APPS_ABB, new Color("#FFC700"), subText: Resources.IDS_SM_SBODY_CALCULATING_ING);
+            appsItem.Clicked += (s, e) =>
+            {
+                // TODO : add apps info gadget 
+            };
+            usageSummary.Add(appsItem);
+
+            var imageItem = new TextWithIconListItem(Resources.IDS_ST_BODY_IMAGES, new Color("#FF8A00"), subText: GetMediaSizeString(sizeImage));
+            imageItem.Clicked += (s, e) =>
+            {
+                // TODO : add media files info gadget 
+            };
+            usageSummary.Add(imageItem);
+
+            var videoItem = new TextWithIconListItem(Resources.IDS_ST_BODY_VIDEOS, new Color("#FF6200"), subText: GetMediaSizeString(sizeVideo));
+            videoItem.Clicked += (s, e) =>
+            {
+                // TODO : add media files info gadget 
+            };
+            usageSummary.Add(videoItem);
+
+            var audioItem = new TextWithIconListItem(Resources.IDS_ST_BODY_AUDIO, new Color("#A40404"), subText: GetMediaSizeString(sizeAudio));
+            audioItem.Clicked += (s, e) =>
+            {
+                // TODO : add media files info gadget 
+            };
+            usageSummary.Add(audioItem);
+
+            // TODO : add documents item
+
+            var miscItem = new TextWithIconListItem(Resources.IDS_ST_BODY_MISCELLANEOUS_FILES, new Color("#28262B"), subText: GetMediaSizeString(sizeMisc));
+            miscItem.Clicked += (s, e) =>
+            {
+                // TODO : add miscellaneous info gadget 
+            };
+            usageSummary.Add(miscItem);
+
+            cacheItem = new TextWithIconListItem(Resources.IDS_ST_BODY_CACHED_DATA_ABB, new Color("#3641FA"), subText: Resources.IDS_SM_SBODY_CALCULATING_ING);
+            cacheItem.Clicked += (s, e) =>
+            {
+                ShowCachePopup();
+            };
+            usageSummary.Add(cacheItem);            
+            
+            systemItem = new TextWithIconListItem(Resources.IDS_ST_BODY_SYSTEM_STORAGE, new Color("#17234D"), subText: Resources.IDS_SM_SBODY_CALCULATING_ING);
+            usageSummary.Add(systemItem);
+
+            sections.Add(MainMenuProvider.Storage_UsageSummary, usageSummary);
+
+            // External storage
+            var externalUsageItem = new TextHeaderListItem("External storage usage"); // TODO : add translation to Resources
+            sections.Add(MainMenuProvider.Storage_ExternalUsage, externalUsageItem);
+
+            var externalStorage = new View()
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.WrapContent,
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            if (ExternalCount > 0)
+            {
+                // VCONFKEY_SYSMAN_MMC_STATUS
+                // 0 : VCONFKEY_SYSMAN_MMC_REMOVED
+                // 1 : VCONFKEY_SYSMAN_MMC_MOUNTED
+                // 2 : VCONFKEY_SYSMAN_MMC_INSERTED_NOT_MOUNTED
+                if (!Tizen.Vconf.TryGetInt(VconfCardStatus, out int status))
+                {
+                    Logger.Warn($"could not get value for {VconfCardStatus}");
+                }
+
+                var totalItem = TextListItem.CreatePrimaryTextItemWithSecondaryText($"{Resources.IDS_ST_HEADER_TOTAL_SPACE}:", GetMediaSizeString(ExternalTotal));
+                externalStorage.Add(totalItem);
+
+                var freeItem = TextListItem.CreatePrimaryTextItemWithSecondaryText("Free space:", GetMediaSizeString(ExternalAvailable)); // TODO : add translation to Resources
+                externalStorage.Add(freeItem);
+
+                var unmount = TextListItem.CreatePrimaryTextItem(Resources.IDS_ST_BODY_UNMOUNT_SD_CARD);
+                unmount.Clicked += (s, e) =>
+                {
+                    // TODO : add popup with unmount functionality (storage_request_unmount_mmc)
+                };
+                externalStorage.Add(unmount);
+
+                var format = TextListItem.CreatePrimaryTextItem(Resources.IDS_ST_BODY_FORMAT_SD_CARD);
+                format.Clicked += (s, e) =>
+                {
+                    // TODO : add popup with format card functionality (storage_request_format_mmc)
+                };
+                externalStorage.Add(format);
+            }
+            else
+            {
+                var item = TextListItem.CreatePrimaryTextItemWithSubText("No SD card", Resources.IDS_ST_BODY_INSERT_SD_CARD); // TODO : add translation to Resources
+                item.IsEnabled = false;
+                externalStorage.Add(item);
+            }
+            sections.Add(MainMenuProvider.Storage_ExternalStorage, externalStorage);
+
+            // Default storage
+            var defaultSettings = new View()
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.WrapContent,
+                Layout = new LinearLayout()
+                {
+                    LinearOrientation = LinearLayout.Orientation.Vertical,
+                },
+            };
+
+            var defaultSettingsItem = new TextHeaderListItem("Storage usage"); // TODO : add translation to Resources
+            var storageLocationItem = TextListItem.CreatePrimaryTextItemWithSubText("Default storage settings", "Device/Storage"); // FIXME : sub text should be dynamic & add translation to Resources
+            storageLocationItem.Clicked += (s, e) =>
+            {
+                NavigateTo(MainMenuProvider.Storage_DefaultSettings);
+            };
+
+            defaultSettings.Add(defaultSettingsItem);
+            defaultSettings.Add(storageLocationItem);
+            sections.Add(MainMenuProvider.Storage_DefaultSettings, defaultSettings);
+
+            var customization = GetCustomization().OrderBy(c => c.Order);
+            Logger.Debug($"customization: {customization.Count()}");
+            foreach (var cust in customization)
+            {
+                string visibility = cust.IsVisible ? "visible" : "hidden";
+                Logger.Verbose($"Customization: {cust.MenuPath} - {visibility} - {cust.Order}");
+                if (cust.IsVisible && sections.TryGetValue(cust.MenuPath, out View row))
+                {
+                    content.Add(row);
+                }
+            }
+        }
+
+        private void GetStorageStatus(out int InternalCount, out double InternalTotal, out int ExternalCount, out double InternalAvailable, out double ExternalTotal, out double ExternalAvailable)
+        {
+            InternalCount = ExternalCount = 0;
+            InternalTotal = ExternalTotal = 0.0;
+            InternalAvailable = ExternalAvailable = 0.0;
+
+            var storages = StorageManager.Storages.ToList();
+
+            foreach (var storage in storages)
+            {
+                if (storage.StorageType == StorageArea.Internal || storage.StorageType == StorageArea.ExtendedInternal)
+                {
+                    InternalCount++;
+                    InternalTotal += storage.TotalSpace;
+                    InternalAvailable += storage.AvailableSpace;
+                }
+                else if (storage.StorageType == StorageArea.External)
+                {
+                    ExternalCount++;
+                    ExternalTotal += storage.TotalSpace;
+                    ExternalAvailable += storage.AvailableSpace;
+                }
+            }
+
+            Logger.Debug("Storage space : ");
+            Logger.Debug($"     - InternalTotal : {GetMediaSizeString(InternalTotal)}");
+            Logger.Debug($"     - InternalAvailable : {GetMediaSizeString(InternalAvailable)}");
+
+            if (ExternalCount > 0)
+            {
+                Logger.Debug($"     - ExternalTotal : {GetMediaSizeString(ExternalTotal)} - {ExternalTotal}");
+                Logger.Debug($"     - ExternalAvailable : {GetMediaSizeString(ExternalAvailable)} - {ExternalAvailable}");
+            }
+        }
+
+        private string GetMediaSizeString(double size)
+        {
+            string[] suffixes = { "Bytes", "KB", "MB", "GB"};
+            int counter = 0;
+
+            while (Math.Round(size / 1024, 2) >= 1)
+            {
+                size = size / 1024;
+                counter++;
+            }
+
+            return string.Format("{0:0.##} {1}", size, suffixes[counter]);
+        }
+
+        private void StartCalculatingAppCacheSize()
+        {
+            Task<PackageSizeInformation> task = PackageManager.GetTotalSizeInformationAsync();
+            task.ContinueWith(x =>
+            {
+                PackageSizeInformation sizeinfo = x.Result;
+                long sizeApp = sizeinfo.AppSize;
+                long sizeCache = sizeinfo.CacheSize;
+
+                if (appsItem != null)
+                {
+                    appsItem.SubText = GetMediaSizeString(sizeApp);
+                }
+                if (cacheItem != null)
+                {
+                    cacheItem.SubText = GetMediaSizeString(sizeCache);
+                }
+                if (systemItem != null)
+                {
+                    systemItem.SubText = GetMediaSizeString(nonSystemSpace - sizeApp - sizeCache);
+                }
+
+            }, TaskScheduler.FromCurrentSynchronizationContext());
+        }
+
+        private void GetMediaInfo(out double sizeImage, out double sizeVideo, out double sizeAudio)
+        {
+            sizeImage = sizeVideo = sizeAudio = 0;
+
+            var mediaDatabase = new MediaDatabase();
+            mediaDatabase.Connect();
+            MediaDatabase.MediaInfoUpdated += OnMediaInfoUpdated;
+            MediaDatabase.FolderUpdated += OnFolderUpdated;
+
+            MediaInfoCommand mediaInfoCmd = new MediaInfoCommand(mediaDatabase);
+
+            var selectArguments = new SelectArguments()
+            {
+                /* 0-image, 1-video, 2-sound, 3-music, 4-other
+                cond = "((MEDIA_TYPE < 4) AND (MEDIA_STORAGE_TYPE=0))";
+                FilterExpression = "((MEDIA_TYPE < 4) AND (MEDIA_STORAGE_TYPE=0))",
+                SortOrder = "{MediaInfoColumns.DisplayName} COLLATE NOCASE DESC"
+                FilterExpression = $"{MediaInfoColumns.DisplayName} LIKE '%%.png'" */
+                FilterExpression = $"{MediaInfoColumns.MediaType}={(int)Media​Type.Image} OR {MediaInfoColumns.MediaType}={(int)Media​Type.Video} OR {MediaInfoColumns.MediaType}={(int)Media​Type.Music} OR {MediaInfoColumns.MediaType}={(int)Media​Type.Sound}",
+            };
+
+            using (var mediaDataReader = mediaInfoCmd.SelectMedia(selectArguments))
+            {
+                while (mediaDataReader.Read())
+                {
+                    var mediaInfo = mediaDataReader.Current;
+
+                    switch (mediaInfo.MediaType)
+                    {
+                        case MediaType.Image:
+                            ImageInfo imageInfo = mediaInfo as ImageInfo;
+                            sizeImage += imageInfo.FileSize;
+                            break;
+
+                        case MediaType.Video:
+                            VideoInfo videoInfo = mediaInfo as VideoInfo;
+                            sizeVideo += videoInfo.FileSize;
+                            break;
+
+                        case MediaType.Sound:
+                        case MediaType.Music:
+                            AudioInfo audioInfo = mediaInfo as AudioInfo;
+                            sizeAudio += audioInfo.FileSize;
+                            break;
+
+                        default:
+                            Logger.Warn($"Invalid Type : {mediaInfo.MediaType}");
+                            break;
+                    }
+                }
+            }
+
+            Logger.Debug("Total Size : ");
+            Logger.Debug($"     - Image : {GetMediaSizeString(sizeImage)}");
+            Logger.Debug($"     - Video : {GetMediaSizeString(sizeVideo)}" );
+            Logger.Debug($"     - Audio : {GetMediaSizeString(sizeAudio)}");
+
+            MediaDatabase.MediaInfoUpdated -= OnMediaInfoUpdated;
+            MediaDatabase.FolderUpdated -= OnFolderUpdated;
+            mediaDatabase.Disconnect();
+        }
+
+        private void GetMiscInfo(out double sizeMisc)
+        {
+            sizeMisc = 0;
+
+            var mediaDatabase = new MediaDatabase();
+            mediaDatabase.Connect();
+            MediaDatabase.MediaInfoUpdated += OnMediaInfoUpdated;
+            MediaDatabase.FolderUpdated += OnFolderUpdated;
+
+            MediaInfoCommand mediaInfoCmd = new MediaInfoCommand(mediaDatabase);
+
+            var selectArguments = new SelectArguments()
+            {
+                FilterExpression = $"{MediaInfoColumns.MediaType}!={(int)Media​Type.Image} AND {MediaInfoColumns.MediaType}!={(int)Media​Type.Video} AND {MediaInfoColumns.MediaType}!={(int)Media​Type.Music} AND {MediaInfoColumns.MediaType}!={(int)Media​Type.Sound}",
+            };
+
+            using (var mediaDataReader = mediaInfoCmd.SelectMedia(selectArguments))
+            {
+                while (mediaDataReader.Read())
+                {
+                    sizeMisc += mediaDataReader.Current.FileSize;
+                }
+            }
+
+            Logger.Debug($"Misc size: {GetMediaSizeString(sizeMisc)}");
+
+            MediaDatabase.MediaInfoUpdated -= OnMediaInfoUpdated;
+            MediaDatabase.FolderUpdated -= OnFolderUpdated;
+            mediaDatabase.Disconnect();
+        }
+
+        private void ShowCachePopup()
+        {
+            var content = new View()
+            {
+                BackgroundColor = isLightTheme ? new Color("#FAFAFA") : new Color("#16131A"),
+                SizeWidth = 690.SpToPx(),
+                HeightSpecification = LayoutParamPolicies.WrapContent,
+                Layout = new FlexLayout()
+                {
+                    Justification = FlexLayout.FlexJustification.Center,
+                    Direction = FlexLayout.FlexDirection.Column, 
+                    Alignment = FlexLayout.AlignmentType.Center,
+                },
+            };
+
+            //title text
+            var textTitle = new TextLabel("Clear cache data") // TODO : add translation to Resources
+            {
+                FontFamily = "BreezeSans",
+                PixelSize = 24.SpToPx(),
+                Margin = new Extents(0, 0, 24, 16).SpToPx(),
+            };
+            FlexLayout.SetFlexAlignmentSelf(textTitle, FlexLayout.AlignmentType.Center);
+
+            content.Add(textTitle);
+
+            // main text
+            var textSubTitle = new TextLabel("Cached data will be cleared for all apps.") // TODO : add translation to Resources
+            {
+                FontFamily = "BreezeSans",
+                PixelSize = 24.SpToPx(),
+                Ellipsis = true,
+                Margin = new Extents(32, 32, 0, 40).SpToPx(),
+            };
+            FlexLayout.SetFlexAlignmentSelf(textSubTitle, FlexLayout.AlignmentType.FlexStart);
+            content.Add(textSubTitle);
+
+            // buttons
+            View buttons = new View()
+            {
+                WidthSpecification = LayoutParamPolicies.MatchParent,
+                HeightSpecification = LayoutParamPolicies.WrapContent,
+                Layout = new FlexLayout()
+                {
+                    Direction = FlexLayout.FlexDirection.Row,
+                    Justification = FlexLayout.FlexJustification.SpaceBetween,
+                },
+            };
+
+            var clearButton = new Button()
+            {
+                WidthResizePolicy = ResizePolicyType.FitToChildren,
+                HeightResizePolicy = ResizePolicyType.FitToChildren,
+                Text = "Clear", // TODO : add translation to Resources
+                Size = new Size(252, 48).SpToPx(),
+                Margin = new Extents(61, 32, 0, 32).SpToPx(),
+            };
+            clearButton.Clicked += (s, e) => 
+            {
+                PackageManager.ClearAllCacheDirectory();
+                // TODO : update cache info
+
+                NUIApplication.GetDefaultWindow().GetDefaultNavigator().Pop();
+            };
+
+            var cancelButton = new Button("Tizen.NUI.Components.Button.Outlined")
+            {
+                WidthResizePolicy = ResizePolicyType.FitToChildren,
+                HeightResizePolicy = ResizePolicyType.FitToChildren,
+                Text = Resources.IDS_ST_BUTTON_CANCEL,
+                Size = new Size(252, 48).SpToPx(),
+                Margin = new Extents(32, 61, 0, 32).SpToPx(),
+            };
+
+            cancelButton.Clicked += (s, e) => 
+            { 
+                NUIApplication.GetDefaultWindow().GetDefaultNavigator().Pop(); 
+            };
+
+            buttons.Add(cancelButton);
+            buttons.Add(clearButton);
+
+            content.Add(buttons);
+
+            RoundedDialogPage.ShowDialog(content);
+        }
+
+        private void OnMediaInfoUpdated(object sender, MediaInfoUpdatedEventArgs args)
+        {
+            Logger.Debug($"MediaInfo updated: Id = {args.Id}, Operation = {args.OperationType}");
+        }
+
+        private void OnFolderUpdated(object sender, FolderUpdatedEventArgs args)
+        {
+            Logger.Debug($"Folder updated: Id = {args.Id}, Operation = {args.OperationType}");
+        }
+    }
+}
diff --git a/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/about.svg b/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/about.svg
new file mode 100644 (file)
index 0000000..ec646df
--- /dev/null
@@ -0,0 +1,4 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M16.2522 10.9122C16.6613 10.9364 17.0635 10.798 17.3712 10.5272C17.5095 10.3851 17.6166 10.2155 17.6855 10.0295C17.7544 9.84354 17.7836 9.64517 17.7712 9.4472C17.7823 9.25207 17.7525 9.05676 17.6836 8.87386C17.6147 8.69095 17.5083 8.5245 17.3712 8.38521C17.052 8.1356 16.6584 8 16.2532 8C15.848 8 15.4544 8.1356 15.1352 8.38521C14.9968 8.52756 14.8898 8.69726 14.8209 8.88342C14.752 9.06958 14.7228 9.26809 14.7352 9.4662C14.7242 9.66117 14.7541 9.85629 14.823 10.039C14.8918 10.2217 14.9982 10.388 15.1352 10.5272C15.4423 10.7976 15.8437 10.9359 16.2522 10.9122Z" fill="#FAFAFA"/>
+<path d="M14 12.2461V13.3651H14.976V22.5011H17.531V12.2461H14Z" fill="#FAFAFA"/>
+</svg>
diff --git a/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/datetime.svg b/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/datetime.svg
new file mode 100644 (file)
index 0000000..6563ebe
--- /dev/null
@@ -0,0 +1,5 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M27.1867 17.008C26.6552 16.3896 25.9794 15.9118 25.2191 15.6169C24.4588 15.322 23.6376 15.2191 22.828 15.3174C22.0185 15.4157 21.2458 15.7121 20.5782 16.1804C19.9106 16.6486 19.3687 17.2743 19.0007 18.002C18.6326 18.7296 18.4497 19.5368 18.4681 20.3521C18.4865 21.1674 18.7056 21.9655 19.1061 22.6758C19.5066 23.3862 20.0761 23.9868 20.7641 24.4244C21.4522 24.8621 22.2376 25.1234 23.0507 25.1851C23.178 25.1951 23.3057 25.2 23.4337 25.2C24.3821 25.1987 25.3103 24.9253 26.1081 24.4125C26.9059 23.8996 27.5398 23.1687 27.9349 22.3065C28.3299 21.4442 28.4694 20.4868 28.3368 19.5477C28.2042 18.6086 27.805 17.7272 27.1867 17.008ZM25.9717 23.2031C25.4941 23.6135 24.9243 23.9025 24.311 24.0453C23.6976 24.1881 23.0588 24.1805 22.449 24.0231C21.8391 23.8658 21.2764 23.5634 20.8087 23.1416C20.341 22.7199 19.9822 22.1913 19.7628 21.601C19.5434 21.0107 19.47 20.376 19.5488 19.7512C19.6276 19.1264 19.8562 18.5299 20.2153 18.0125C20.5744 17.4951 21.0532 17.0722 21.6109 16.7797C22.1687 16.4873 22.7889 16.3341 23.4187 16.333C23.5187 16.333 23.6187 16.333 23.7187 16.344C24.4892 16.4023 25.2252 16.6877 25.8335 17.1642C26.4419 17.6408 26.8952 18.287 27.1363 19.0212C27.3773 19.7554 27.3953 20.5445 27.1878 21.2889C26.9803 22.0333 26.5567 22.6994 25.9707 23.2031H25.9717Z" fill="#FAFAFA"/>
+<path d="M18.5471 22.86H10.2081C9.68566 22.8592 9.18492 22.6513 8.81561 22.2818C8.44631 21.9123 8.23857 21.4114 8.23804 20.889V12.863H23.7161V14.713C24.1352 14.7348 24.5504 14.8039 24.954 14.919V11.21C24.9532 10.3595 24.6151 9.54395 24.0136 8.9425C23.4122 8.34106 22.5967 8.00281 21.7461 8.00201H21.0541V6.651C21.0541 6.47835 20.9855 6.31276 20.8634 6.19067C20.7413 6.06859 20.5757 6 20.4031 6H20.0031C19.8306 6.00026 19.6653 6.06898 19.5434 6.19104C19.4215 6.3131 19.3531 6.47852 19.3531 6.651V8.00201H16.826V6.651C16.826 6.47852 16.7576 6.3131 16.6357 6.19104C16.5139 6.06898 16.3486 6.00026 16.1761 6H15.7761C15.6036 6.00026 15.4383 6.06898 15.3164 6.19104C15.1945 6.3131 15.126 6.47852 15.126 6.651V8.00201H12.5701V6.651C12.5701 6.47835 12.5015 6.31276 12.3794 6.19067C12.2573 6.06859 12.0917 6 11.9191 6H11.519C11.3464 6 11.1808 6.06859 11.0587 6.19067C10.9366 6.31276 10.868 6.47835 10.868 6.651V8.00201H10.204C9.35347 8.00281 8.53797 8.34106 7.93652 8.9425C7.33508 9.54395 6.99689 10.3595 6.99609 11.21V20.89C6.99689 21.7407 7.33505 22.5563 7.93646 23.1579C8.53788 23.7595 9.35338 24.0979 10.204 24.099H19.4561C19.3761 24.017 19.2951 23.938 19.2201 23.851C18.9607 23.5459 18.7351 23.2136 18.5471 22.86ZM8.23804 11.209C8.23883 10.6868 8.44664 10.1862 8.81592 9.81689C9.18519 9.44762 9.68584 9.23981 10.2081 9.23901H10.8721V9.599C10.8721 9.68444 10.8889 9.76907 10.9216 9.84799C10.9544 9.92692 11.0023 9.99862 11.0628 10.059C11.1233 10.1194 11.195 10.1672 11.274 10.1998C11.353 10.2324 11.4376 10.2492 11.5231 10.249H11.923C12.0955 10.249 12.261 10.1806 12.3831 10.0587C12.5051 9.93682 12.5738 9.77148 12.574 9.599V9.23901H15.139V9.599C15.139 9.77139 15.2076 9.93673 15.3295 10.0586C15.4514 10.1805 15.6167 10.249 15.7891 10.249H16.1891C16.3615 10.249 16.5268 10.1805 16.6487 10.0586C16.7706 9.93673 16.8391 9.77139 16.8391 9.599V9.23901H19.3661V9.599C19.3661 9.77139 19.4346 9.93673 19.5565 10.0586C19.6784 10.1805 19.8437 10.249 20.0161 10.249H20.4161C20.5015 10.2492 20.5861 10.2324 20.6651 10.1998C20.7441 10.1672 20.8159 10.1194 20.8763 10.059C20.9368 9.99862 20.9848 9.92692 21.0175 9.84799C21.0502 9.76907 21.0671 9.68444 21.0671 9.599V9.23901H21.759C22.2813 9.23981 22.7819 9.44762 23.1512 9.81689C23.5205 10.1862 23.7283 10.6868 23.7291 11.209V11.624H8.23804V11.209Z" fill="#FAFAFA"/>
+<path d="M26.1592 20.2512H23.7343V17.7611C23.7298 17.6821 23.6952 17.6078 23.6376 17.5534C23.5801 17.499 23.5039 17.4688 23.4247 17.4688C23.3456 17.4688 23.2694 17.499 23.2119 17.5534C23.1543 17.6078 23.1197 17.6821 23.1152 17.7611V20.5612C23.1152 20.6434 23.1479 20.7222 23.2061 20.7803C23.2642 20.8385 23.343 20.8712 23.4252 20.8712H26.1602C26.2023 20.8736 26.2445 20.8673 26.2842 20.8528C26.3238 20.8384 26.3601 20.816 26.3907 20.787C26.4214 20.758 26.4458 20.7231 26.4625 20.6843C26.4792 20.6456 26.4879 20.6038 26.4879 20.5616C26.4879 20.5195 26.4792 20.4777 26.4625 20.439C26.4458 20.4002 26.4214 20.3653 26.3907 20.3363C26.3601 20.3073 26.3238 20.2849 26.2842 20.2704C26.2445 20.256 26.2023 20.2497 26.1602 20.2521L26.1592 20.2512Z" fill="#FAFAFA"/>
+</svg>
diff --git a/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/display.svg b/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/display.svg
new file mode 100644 (file)
index 0000000..bbf9b7c
--- /dev/null
@@ -0,0 +1,43 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+  <path d="M16.5527 20.4454C19.2451 20.4454 21.4277 18.2623 21.4277 15.5694C21.4277 12.8764 19.2451 10.6934 16.5527 10.6934C13.8603 10.6934 11.6777 12.8764 11.6777 15.5694C11.6777 18.2623 13.8603 20.4454 16.5527 20.4454Z" stroke="#FAFAFA" stroke-width="1.15"/>
+  <path d="M24.885 14.8481C24.6713 14.8481 24.498 15.0211 24.498 15.2346C24.498 15.4481 24.6713 15.6211 24.885 15.6211H25.282C25.4958 15.6211 25.669 15.4481 25.669 15.2346C25.669 15.0211 25.4958 14.8481 25.282 14.8481H24.885Z" fill="#FAFAFA"/>
+  <path d="M24.885 14.8461C24.6713 14.8461 24.498 15.0192 24.498 15.2326C24.498 15.4461 24.6713 15.6191 24.885 15.6191H25.282C25.4958 15.6191 25.669 15.4461 25.669 15.2326C25.669 15.0192 25.4958 14.8461 25.282 14.8461H24.885Z" fill="#FAFAFA"/>
+  <path d="M7.44169 14.85C7.22795 14.85 7.05469 15.0231 7.05469 15.2365C7.05469 15.45 7.22795 15.623 7.44169 15.623H7.83869C8.05242 15.623 8.22569 15.45 8.22569 15.2365C8.22569 15.0231 8.05242 14.85 7.83869 14.85H7.44169Z" fill="#FAFAFA"/>
+  <path d="M7.44169 14.8481C7.22795 14.8481 7.05469 15.0211 7.05469 15.2346C7.05469 15.4481 7.22795 15.6211 7.44169 15.6211H7.83869C8.05242 15.6211 8.22569 15.4481 8.22569 15.2346C8.22569 15.0211 8.05242 14.8481 7.83869 14.8481H7.44169Z" fill="#FAFAFA"/>
+  <path d="M16.7535 6.44559C16.7535 6.23186 16.5804 6.05859 16.367 6.05859C16.1535 6.05859 15.9805 6.23186 15.9805 6.44559V6.84259C15.9805 7.05633 16.1535 7.22959 16.367 7.22959C16.5804 7.22959 16.7535 7.05633 16.7535 6.84259V6.44559Z" fill="#FAFAFA"/>
+  <path d="M16.7554 6.44559C16.7554 6.23186 16.5824 6.05859 16.3689 6.05859C16.1555 6.05859 15.9824 6.23186 15.9824 6.44559V6.84259C15.9824 7.05633 16.1555 7.22959 16.3689 7.22959C16.5824 7.22959 16.7554 7.05633 16.7554 6.84259V6.44559Z" fill="#FAFAFA"/>
+  <path d="M16.7535 23.9163C16.7535 23.7026 16.5804 23.5293 16.367 23.5293C16.1535 23.5293 15.9805 23.7026 15.9805 23.9163V24.3133C15.9805 24.527 16.1535 24.7003 16.367 24.7003C16.5804 24.7003 16.7535 24.527 16.7535 24.3133V23.9163Z" fill="#FAFAFA"/>
+  <path d="M16.7554 23.9163C16.7554 23.7026 16.5824 23.5293 16.3689 23.5293C16.1555 23.5293 15.9824 23.7026 15.9824 23.9163V24.3133C15.9824 24.527 16.1555 24.7003 16.3689 24.7003C16.5824 24.7003 16.7554 24.527 16.7554 24.3133V23.9163Z" fill="#FAFAFA"/>
+  <path d="M22.4541 8.85371C22.5952 8.69316 22.5796 8.44879 22.4192 8.30788C22.2589 8.16696 22.0145 8.18288 21.8734 8.34343L21.6114 8.64164C21.4703 8.80218 21.4859 9.04656 21.6462 9.18747C21.8066 9.32838 22.0509 9.31246 22.192 9.15192L22.4541 8.85371Z" fill="#FAFAFA"/>
+  <path d="M22.456 8.85371C22.5971 8.69316 22.5815 8.44878 22.4212 8.30787C22.2608 8.16696 22.0165 8.18288 21.8754 8.34343L21.6133 8.64164C21.4722 8.80219 21.4878 9.04657 21.6482 9.18748C21.8085 9.32839 22.0529 9.31247 22.194 9.15192L22.456 8.85371Z" fill="#FAFAFA"/>
+  <path d="M10.9697 22.0744C11.1108 21.9139 11.0952 21.6695 10.9349 21.5286C10.7745 21.3877 10.5302 21.4036 10.3891 21.5641L10.127 21.8623C9.9859 22.0229 10.0015 22.2673 10.1618 22.4082C10.3222 22.5491 10.5665 22.5332 10.7076 22.3726L10.9697 22.0744Z" fill="#FAFAFA"/>
+  <path d="M10.9717 22.0764C11.1128 21.9158 11.0971 21.6714 10.9368 21.5305C10.7765 21.3896 10.5321 21.4055 10.391 21.5661L10.129 21.8643C9.98786 22.0248 10.0035 22.2692 10.1638 22.4101C10.3241 22.551 10.5685 22.5351 10.7096 22.3746L10.9717 22.0764Z" fill="#FAFAFA"/>
+  <path d="M9.44316 10.2119C9.60371 10.353 9.84809 10.3374 9.989 10.177C10.1299 10.0167 10.114 9.77234 9.95345 9.63125L9.65524 9.36918C9.49469 9.22808 9.25031 9.24368 9.1094 9.40402C8.96849 9.56436 8.98441 9.80872 9.14496 9.94981L9.44316 10.2119Z" fill="#FAFAFA"/>
+  <path d="M9.44122 10.2139C9.60176 10.3549 9.84614 10.3393 9.98705 10.179C10.128 10.0187 10.112 9.7743 9.95149 9.63321L9.65328 9.37114C9.49273 9.23005 9.24835 9.24565 9.10744 9.406C8.96653 9.56634 8.98246 9.81069 9.14301 9.95179L9.44122 10.2139Z" fill="#FAFAFA"/>
+  <path d="M23.1072 21.1494C23.2678 21.2905 23.5122 21.2749 23.6531 21.1145C23.794 20.9542 23.7781 20.7098 23.6175 20.5687L23.3193 20.3067C23.1588 20.1656 22.9144 20.1812 22.7735 20.3415C22.6326 20.5019 22.6485 20.7462 22.809 20.8873L23.1072 21.1494Z" fill="#FAFAFA"/>
+  <path d="M23.1053 21.1514C23.2658 21.2924 23.5102 21.2768 23.6511 21.1165C23.792 20.9562 23.7761 20.7118 23.6156 20.5707L23.3173 20.3086C23.1568 20.1675 22.9124 20.1832 22.7715 20.3435C22.6306 20.5038 22.6465 20.7482 22.8071 20.8893L23.1053 21.1514Z" fill="#FAFAFA"/>
+  <path d="M24.8442 14.7589C24.5807 14.7589 24.3672 14.9725 24.3672 15.2359C24.3672 15.4993 24.5807 15.7129 24.8442 15.7129H25.3352C25.5986 15.7129 25.8122 15.4993 25.8122 15.2359C25.8122 14.9725 25.5986 14.7589 25.3352 14.7589H24.8442Z" fill="#FAFAFA"/>
+  <path d="M24.885 14.8481C24.6713 14.8481 24.498 15.0211 24.498 15.2346C24.498 15.4481 24.6713 15.6211 24.885 15.6211H25.282C25.4958 15.6211 25.669 15.4481 25.669 15.2346C25.669 15.0211 25.4958 14.8481 25.282 14.8481H24.885Z" fill="#FAFAFA"/>
+  <path d="M24.0371 15.2337V15.2347C24.0371 15.6185 24.3483 15.9297 24.7321 15.9297H25.4481C25.8319 15.9297 26.1431 15.6185 26.1431 15.2347V15.2337C26.1431 14.8498 25.8319 14.5387 25.4481 14.5387H24.7321C24.3483 14.5387 24.0371 14.8498 24.0371 15.2337Z" fill="#FAFAFA"/>
+  <path d="M7.38716 14.7608C7.12372 14.7608 6.91016 14.9744 6.91016 15.2378C6.91016 15.5013 7.12372 15.7148 7.38716 15.7148H7.87816C8.1416 15.7148 8.35516 15.5013 8.35516 15.2378C8.35516 14.9744 8.1416 14.7608 7.87816 14.7608H7.38716Z" fill="#FAFAFA"/>
+  <path d="M7.44169 14.85C7.22795 14.85 7.05469 15.0231 7.05469 15.2365C7.05469 15.45 7.22795 15.623 7.44169 15.623H7.83869C8.05242 15.623 8.22569 15.45 8.22569 15.2365C8.22569 15.0231 8.05242 14.85 7.83869 14.85H7.44169Z" fill="#FAFAFA"/>
+  <path d="M6.58008 15.2356V15.2366C6.58008 15.6205 6.89124 15.9316 7.27508 15.9316H7.99108C8.37492 15.9316 8.68608 15.6205 8.68608 15.2366V15.2356C8.68608 14.8518 8.37492 14.5406 7.99108 14.5406H7.27508C6.89124 14.5406 6.58008 14.8518 6.58008 15.2356Z" fill="#FAFAFA"/>
+  <path d="M16.8427 6.39106C16.8427 6.12762 16.6291 5.91406 16.3657 5.91406C16.1022 5.91406 15.8887 6.12762 15.8887 6.39106V6.88206C15.8887 7.1455 16.1022 7.35906 16.3657 7.35906C16.6291 7.35906 16.8427 7.1455 16.8427 6.88206V6.39106Z" fill="#FAFAFA"/>
+  <path d="M16.7535 6.44559C16.7535 6.23186 16.5804 6.05859 16.367 6.05859C16.1535 6.05859 15.9805 6.23186 15.9805 6.44559V6.84259C15.9805 7.05633 16.1535 7.22959 16.367 7.22959C16.5804 7.22959 16.7535 7.05633 16.7535 6.84259V6.44559Z" fill="#FAFAFA"/>
+  <path d="M17.0619 6.27898C17.0619 5.89515 16.7507 5.58398 16.3669 5.58398C15.983 5.58398 15.6719 5.89515 15.6719 6.27898V6.99498C15.6719 7.37882 15.983 7.68998 16.3669 7.68998C16.7507 7.68998 17.0619 7.37882 17.0619 6.99498V6.27898Z" fill="#FAFAFA"/>
+  <path d="M16.8427 23.8618C16.8427 23.5983 16.6291 23.3848 16.3657 23.3848C16.1022 23.3848 15.8887 23.5983 15.8887 23.8618V24.3528C15.8887 24.6162 16.1022 24.8298 16.3657 24.8298C16.6291 24.8298 16.8427 24.6162 16.8427 24.3528V23.8618Z" fill="#FAFAFA"/>
+  <path d="M16.7535 23.9163C16.7535 23.7026 16.5804 23.5293 16.367 23.5293C16.1535 23.5293 15.9805 23.7026 15.9805 23.9163V24.3133C15.9805 24.527 16.1535 24.7003 16.367 24.7003C16.5804 24.7003 16.7535 24.527 16.7535 24.3133V23.9163Z" fill="#FAFAFA"/>
+  <path d="M17.0619 23.7497C17.0619 23.3658 16.7507 23.0547 16.3669 23.0547C15.983 23.0547 15.6719 23.3658 15.6719 23.7497V24.4657C15.6719 24.8495 15.983 25.1607 16.3669 25.1607C16.7507 25.1607 17.0619 24.8495 17.0619 24.4657V23.7497Z" fill="#FAFAFA"/>
+  <path d="M22.556 8.87088C22.7299 8.67299 22.7105 8.3716 22.5126 8.1977C22.3147 8.02379 22.0133 8.04323 21.8394 8.24111L21.5153 8.60993C21.3414 8.80781 21.3608 9.1092 21.5587 9.28311C21.7566 9.45701 22.058 9.43757 22.2319 9.23969L22.556 8.87088Z" fill="#FAFAFA"/>
+  <path d="M22.4541 8.85371C22.5952 8.69316 22.5796 8.44879 22.4192 8.30788C22.2589 8.16696 22.0145 8.18288 21.8734 8.34343L21.6114 8.64164C21.4703 8.80218 21.4859 9.04656 21.6462 9.18747C21.8066 9.32838 22.0509 9.31246 22.192 9.15192L22.4541 8.85371Z" fill="#FAFAFA"/>
+  <path d="M22.7337 7.95163L22.733 7.95097C22.4447 7.69759 22.0055 7.72592 21.7522 8.01424L21.2795 8.55207C21.0261 8.8404 21.0545 9.27954 21.3428 9.53291L21.3435 9.53357C21.6319 9.78695 22.071 9.75863 22.3244 9.4703L22.797 8.93247C23.0504 8.64415 23.0221 8.20501 22.7337 7.95163Z" fill="#FAFAFA"/>
+  <path d="M11.0716 22.0916C11.2455 21.8937 11.2261 21.5923 11.0282 21.4184C10.8303 21.2445 10.5289 21.2639 10.355 21.4618L10.0309 21.8306C9.85701 22.0285 9.87645 22.3299 10.0743 22.5038C10.2722 22.6777 10.5736 22.6583 10.7475 22.4604L11.0716 22.0916Z" fill="#FAFAFA"/>
+  <path d="M10.9697 22.0744C11.1108 21.9139 11.0952 21.6695 10.9349 21.5286C10.7745 21.3877 10.5302 21.4036 10.3891 21.5641L10.127 21.8623C9.9859 22.0229 10.0015 22.2673 10.1618 22.4082C10.3222 22.5491 10.5665 22.5332 10.7076 22.3726L10.9697 22.0744Z" fill="#FAFAFA"/>
+  <path d="M11.2494 21.1723L11.2486 21.1717C10.9603 20.9183 10.5212 20.9466 10.2678 21.2349L9.79513 21.7728C9.54175 22.0611 9.57008 22.5002 9.85841 22.7536L9.85916 22.7543C10.1475 23.0077 10.5866 22.9793 10.84 22.691L11.3126 22.1532C11.566 21.8648 11.5377 21.4257 11.2494 21.1723Z" fill="#FAFAFA"/>
+  <path d="M9.42405 10.3138C9.62193 10.4877 9.92332 10.4683 10.0972 10.2704C10.2711 10.0725 10.2517 9.77113 10.0538 9.59723L9.685 9.2731C9.48711 9.0992 9.18572 9.11863 9.01181 9.31652C8.83791 9.5144 8.85735 9.81579 9.05523 9.9897L9.42405 10.3138Z" fill="#FAFAFA"/>
+  <path d="M9.44316 10.2119C9.60371 10.353 9.84809 10.3374 9.989 10.177C10.1299 10.0167 10.114 9.77234 9.95345 9.63125L9.65524 9.36918C9.49469 9.22808 9.25031 9.24368 9.1094 9.40402C8.96849 9.56436 8.98441 9.80872 9.14496 9.94981L9.44316 10.2119Z" fill="#FAFAFA"/>
+  <path d="M9.36506 10.5541C9.65339 10.8075 10.0925 10.7791 10.3459 10.4908C10.5993 10.2025 10.571 9.76335 10.2826 9.50997L9.7448 9.03732C9.45648 8.78394 9.01734 8.81227 8.76396 9.10059C8.51058 9.38892 8.53891 9.82806 8.82723 10.0814L9.36506 10.5541Z" fill="#FAFAFA"/>
+  <path d="M23.0881 21.2513C23.286 21.4252 23.5874 21.4058 23.7613 21.2079C23.9352 21.01 23.9158 20.7086 23.7179 20.5347L23.3491 20.2106C23.1512 20.0367 22.8498 20.0561 22.6759 20.254C22.502 20.4519 22.5214 20.7533 22.7193 20.9272L23.0881 21.2513Z" fill="#FAFAFA"/>
+  <path d="M23.1053 21.1494C23.2658 21.2905 23.5102 21.2749 23.6511 21.1145C23.792 20.9542 23.7761 20.7098 23.6156 20.5687L23.3173 20.3067C23.1568 20.1656 22.9124 20.1812 22.7715 20.3415C22.6306 20.5019 22.6465 20.7462 22.8071 20.8873L23.1053 21.1494Z" fill="#FAFAFA"/>
+  <path d="M23.0272 21.4896C23.3155 21.743 23.7546 21.7147 24.008 21.4264C24.2614 21.138 24.2331 20.6989 23.9447 20.4455L23.4069 19.9729C23.1186 19.7195 22.6794 19.7478 22.4261 20.0361C22.1727 20.3245 22.201 20.7636 22.4893 21.017L23.0272 21.4896Z" fill="#FAFAFA"/>
+</svg>
diff --git a/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/fonts/ClimateCrisis-Regular.ttf b/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/fonts/ClimateCrisis-Regular.ttf
new file mode 100644 (file)
index 0000000..ea19ff2
Binary files /dev/null and b/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/fonts/ClimateCrisis-Regular.ttf differ
diff --git a/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/fonts/DancingScript-Regular.ttf b/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/fonts/DancingScript-Regular.ttf
new file mode 100644 (file)
index 0000000..076e5c9
Binary files /dev/null and b/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/fonts/DancingScript-Regular.ttf differ
diff --git a/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/fonts/Sono-Regular.ttf b/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/fonts/Sono-Regular.ttf
new file mode 100644 (file)
index 0000000..dcefea6
Binary files /dev/null and b/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/fonts/Sono-Regular.ttf differ
diff --git a/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/language_input.svg b/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/language_input.svg
new file mode 100644 (file)
index 0000000..a698d08
--- /dev/null
@@ -0,0 +1,6 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M16 24C14.4177 24 12.871 23.5308 11.5554 22.6518C10.2398 21.7727 9.21443 20.5232 8.60893 19.0614C8.00343 17.5996 7.84505 15.9911 8.15373 14.4392C8.46241 12.8874 9.22431 11.4619 10.3431 10.3431C11.4619 9.22429 12.8874 8.4624 14.4393 8.15372C15.9911 7.84504 17.5996 8.00348 19.0614 8.60898C20.5233 9.21448 21.7727 10.2399 22.6518 11.5555C23.5308 12.871 24 14.4177 24 16C23.9976 18.121 23.154 20.1544 21.6542 21.6542C20.1544 23.154 18.121 23.9976 16 24ZM16 9.20999C14.6571 9.20979 13.3442 9.6078 12.2275 10.3537C11.1108 11.0997 10.2403 12.16 9.72624 13.4007C9.21214 14.6413 9.07748 16.0065 9.33928 17.3237C9.60108 18.6409 10.2475 19.8508 11.197 20.8006C12.1465 21.7503 13.3562 22.3971 14.6733 22.6593C15.9904 22.9215 17.3557 22.7873 18.5965 22.2735C19.8373 21.7598 20.8979 20.8897 21.6442 19.7732C22.3904 18.6567 22.7888 17.3439 22.789 16.001C22.7866 14.201 22.0706 12.4753 20.798 11.2024C19.5254 9.92938 17.8 9.2129 16 9.20999Z" fill="#FAFAFA"/>
+<path d="M23.0013 14.5828H9.00134C8.84135 14.5763 8.69003 14.5083 8.5791 14.3928C8.46817 14.2773 8.40625 14.1234 8.40625 13.9633C8.40625 13.8031 8.46817 13.6492 8.5791 13.5338C8.69003 13.4183 8.84135 13.3502 9.00134 13.3438H23.0013C23.1613 13.3502 23.3127 13.4183 23.4236 13.5338C23.5345 13.6492 23.5964 13.8031 23.5964 13.9633C23.5964 14.1234 23.5345 14.2773 23.4236 14.3928C23.3127 14.5083 23.1613 14.5763 23.0013 14.5828Z" fill="#FAFAFA"/>
+<path d="M22.8639 19.197H9.20789C9.04345 19.197 8.88574 19.1317 8.76947 19.0154C8.6532 18.8992 8.58789 18.7415 8.58789 18.577C8.58789 18.4126 8.6532 18.2549 8.76947 18.1386C8.88574 18.0223 9.04345 17.957 9.20789 17.957H22.8639C23.0283 17.957 23.186 18.0223 23.3023 18.1386C23.4186 18.2549 23.4839 18.4126 23.4839 18.577C23.4839 18.7415 23.4186 18.8992 23.3023 19.0154C23.186 19.1317 23.0283 19.197 22.8639 19.197Z" fill="#FAFAFA"/>
+<path d="M15.9121 23.9074C13.9121 23.9074 12.8711 19.9234 12.8711 15.9884C12.8711 12.0534 13.9151 8.06836 15.9121 8.06836C17.9091 8.06836 18.9531 12.0524 18.9531 15.9884C18.9531 19.9244 17.9121 23.9074 15.9121 23.9074ZM15.9121 9.27936C15.3011 9.27936 14.1121 11.6474 14.1121 15.9884C14.1121 20.3294 15.3031 22.6974 15.9121 22.6974C16.5481 22.6974 17.7121 20.1504 17.7121 15.9884C17.7121 11.8264 16.5531 9.27936 15.9121 9.27936Z" fill="#FAFAFA"/>
+</svg>
diff --git a/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/media/Ringtones/ringtone_sdk.mp3 b/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/media/Ringtones/ringtone_sdk.mp3
new file mode 100644 (file)
index 0000000..f159e35
Binary files /dev/null and b/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/media/Ringtones/ringtone_sdk.mp3 differ
diff --git a/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/sound.svg b/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/sound.svg
new file mode 100644 (file)
index 0000000..412365a
--- /dev/null
@@ -0,0 +1,5 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+  <path d="M18.0103 7.8111C17.7667 7.68842 17.4938 7.63607 17.2221 7.65992C16.9504 7.68376 16.6908 7.78287 16.4723 7.94611L11.3573 11.7551H8.70129C8.12549 11.7559 7.57348 11.985 7.16632 12.3921C6.75916 12.7993 6.53009 13.3513 6.5293 13.9271V17.4801C6.53009 18.0559 6.75916 18.6079 7.16632 19.0151C7.57348 19.4222 8.12549 19.6513 8.70129 19.6521H11.5323L16.4663 23.3621C16.6848 23.5261 16.9446 23.626 17.2167 23.6506C17.4887 23.6752 17.7623 23.6236 18.0067 23.5015C18.2511 23.3794 18.4566 23.1917 18.6003 22.9594C18.744 22.7271 18.8202 22.4593 18.8203 22.1861V9.12711C18.8213 8.85406 18.746 8.58616 18.6029 8.35363C18.4598 8.1211 18.2545 7.93318 18.0103 7.8111ZM17.4483 22.1821C17.4495 22.2007 17.4449 22.2192 17.4353 22.2351C17.4256 22.251 17.4113 22.2636 17.3943 22.2711C17.3786 22.2798 17.3606 22.2836 17.3427 22.2818C17.3248 22.28 17.3079 22.2728 17.2943 22.2611L11.9943 18.2771H10.3673V16.0721C10.3673 15.89 10.2949 15.7154 10.1662 15.5867C10.0375 15.4579 9.86286 15.3856 9.68079 15.3856C9.49871 15.3856 9.32409 15.4579 9.19534 15.5867C9.0666 15.7154 8.99429 15.89 8.99429 16.0721V18.2801H8.70529C8.49312 18.2801 8.28962 18.1958 8.13959 18.0458C7.98956 17.8958 7.90527 17.6923 7.90527 17.4801V13.9311C7.90527 13.7189 7.98956 13.5155 8.13959 13.3654C8.28962 13.2154 8.49312 13.1311 8.70529 13.1311H10.9243V15.4621C10.9243 15.6442 10.9966 15.8188 11.1254 15.9475C11.2541 16.0763 11.4287 16.1486 11.6108 16.1486C11.7929 16.1486 11.9675 16.0763 12.0962 15.9475C12.225 15.8188 12.2973 15.6442 12.2973 15.4621V12.7731L17.2973 9.0501C17.3109 9.03831 17.3279 9.03112 17.3458 9.0295C17.3638 9.02789 17.3818 9.03193 17.3973 9.0411C17.4142 9.04845 17.4285 9.06085 17.4382 9.07659C17.4478 9.09233 17.4524 9.11067 17.4513 9.12911L17.4483 22.1821Z" fill="#FAFAFA"/>
+  <path d="M24.4972 21.3797C24.3683 21.38 24.2421 21.3435 24.1332 21.2747C23.9789 21.1781 23.8693 21.0242 23.8285 20.8468C23.7876 20.6694 23.8188 20.4831 23.9152 20.3287C24.7805 18.9438 25.2104 17.3311 25.1495 15.6992C25.0885 14.0673 24.5394 12.4912 23.5732 11.1747C23.5161 11.1024 23.4743 11.0193 23.45 10.9304C23.4258 10.8415 23.4196 10.7487 23.432 10.6574C23.4443 10.5661 23.4749 10.4782 23.5219 10.399C23.5689 10.3198 23.6314 10.2508 23.7055 10.1962C23.7797 10.1416 23.8642 10.1025 23.9538 10.0812C24.0434 10.0598 24.1364 10.0568 24.2272 10.0721C24.3181 10.0874 24.4049 10.1209 24.4825 10.1705C24.5602 10.2201 24.627 10.2848 24.6792 10.3607C25.8088 11.8995 26.4508 13.7417 26.5221 15.6493C26.5934 17.5568 26.0908 19.4419 25.0792 21.0607C25.017 21.1587 24.931 21.2394 24.8293 21.2952C24.7275 21.3509 24.6132 21.38 24.4972 21.3797Z" fill="#FAFAFA"/>
+  <path d="M21.7329 20.2081C21.6052 20.2083 21.4799 20.1728 21.3712 20.1058C21.2625 20.0387 21.1746 19.9426 21.1175 19.8283C21.0603 19.7141 21.0362 19.5861 21.0477 19.4589C21.0593 19.3317 21.1061 19.2102 21.1829 19.1081C21.8499 18.2129 22.2114 17.127 22.2143 16.0107C22.2172 14.8944 21.8612 13.8067 21.1989 12.9081C21.1414 12.8358 21.099 12.7527 21.0743 12.6637C21.0496 12.5747 21.043 12.4816 21.0551 12.3901C21.0672 12.2985 21.0977 12.2103 21.1446 12.1307C21.1916 12.0512 21.2541 11.9819 21.3284 11.9271C21.4028 11.8723 21.4874 11.833 21.5773 11.8116C21.6672 11.7902 21.7604 11.7872 21.8515 11.8027C21.9425 11.8182 22.0295 11.8519 22.1073 11.9018C22.185 11.9517 22.2519 12.0168 22.3039 12.0931C23.1401 13.2289 23.5894 14.6032 23.5856 16.0135C23.5818 17.4239 23.1252 18.7958 22.2829 19.9271C22.2196 20.0136 22.1368 20.0841 22.0413 20.1329C21.9458 20.1817 21.8402 20.2074 21.7329 20.2081Z" fill="#FAFAFA"/>
+</svg>
diff --git a/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/sound/sound_slider_icon_default.png b/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/sound/sound_slider_icon_default.png
new file mode 100644 (file)
index 0000000..c534eb8
Binary files /dev/null and b/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/sound/sound_slider_icon_default.png differ
diff --git a/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/storage.svg b/SettingMainGadget/SettingMainGadget/res/allowed/SettingMainGadget/storage.svg
new file mode 100644 (file)
index 0000000..6083204
--- /dev/null
@@ -0,0 +1,4 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M16.5027 15.512L15.7307 8L15.1397 8.06401C13.2094 8.27106 11.4205 9.17363 10.107 10.6032C8.79348 12.0328 8.04522 13.8916 8.00198 15.8324C7.95875 17.7733 8.62345 19.6636 9.87198 21.1502C11.1205 22.6369 12.8675 23.6182 14.7867 23.911C15.1886 23.9703 15.5943 24 16.0006 24C17.9182 24.0004 19.7721 23.312 21.2246 22.0602C22.6772 20.8084 23.6318 19.0766 23.9146 17.18L24.0006 16.594L16.5027 15.512ZM20.1026 21.444C19.2856 22.0627 18.3395 22.4891 17.3347 22.6914C16.33 22.8937 15.2926 22.8668 14.2998 22.6125C13.3069 22.3583 12.3842 21.8833 11.6004 21.223C10.8165 20.5627 10.1918 19.7341 9.77267 18.7988C9.35352 17.8635 9.15078 16.8458 9.17954 15.8213C9.20829 14.7968 9.4678 13.792 9.93875 12.8818C10.4097 11.9715 11.0799 11.1792 11.8996 10.5639C12.7192 9.94861 13.6671 9.52615 14.6726 9.328L15.4146 16.549L22.6377 17.593C22.2713 19.1333 21.3759 20.4962 20.1076 21.444H20.1026Z" fill="#FAFAFA"/>
+<path d="M16.8215 9.24952C18.3422 9.42677 19.7582 10.1137 20.8387 11.1985C21.9191 12.2833 22.6004 13.702 22.7715 15.2235C22.7881 15.3676 22.8571 15.5006 22.9653 15.5971C23.0735 15.6937 23.2135 15.7473 23.3585 15.7475C23.3805 15.7475 23.4035 15.7475 23.4275 15.7475C23.5832 15.7295 23.7253 15.6503 23.8226 15.5275C23.92 15.4047 23.9645 15.2482 23.9465 15.0925C23.7456 13.3066 22.9459 11.6413 21.6777 10.3678C20.4096 9.09438 18.7476 8.28783 16.9625 8.07952C16.8071 8.06303 16.6514 8.10782 16.5285 8.20437C16.4056 8.30092 16.3252 8.44162 16.3045 8.59652C16.287 8.75157 16.3316 8.90724 16.4284 9.02957C16.5253 9.1519 16.6665 9.23097 16.8215 9.24952V9.24952Z" fill="#FAFAFA"/>
+</svg>
diff --git a/SettingMainGadget/SettingMainGadget/tizen-manifest.xml b/SettingMainGadget/SettingMainGadget/tizen-manifest.xml
new file mode 100644 (file)
index 0000000..00c3220
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" api-version="6.5"
+  package="org.tizen.settings.main" version="1.1.6"
+  res-type="org.tizen.appfw.gadget.Settings" res-version="1.5.0">
+  <allowed-package id="org.tizen.*">
+    <required-privileges>
+      <!--sound-->
+      <privilege>http://tizen.org/privilege/volume.set</privilege>
+      <!--display-->
+         <privilege>http://tizen.org/privilege/systemsettings.admin</privilege>
+               
+               <!--storage-->
+               <privilege>http://tizen.org/privilege/mediastorage</privilege>
+               <privilege>http://tizen.org/privilege/packagemanager.admin</privilege>
+               <privilege>http://tizen.org/privilege/packagemanager.clearcache</privilege>
+    </required-privileges>
+  </allowed-package>
+  <metadata key="http://tizen.org/metadata/ui-gadget/dll" value="SettingMainGadget.dll"/>
+</manifest>
diff --git a/SettingMainGadget/SettingMainGadget/tizen_dotnet_project.yaml b/SettingMainGadget/SettingMainGadget/tizen_dotnet_project.yaml
new file mode 100644 (file)
index 0000000..86dfb1f
--- /dev/null
@@ -0,0 +1,12 @@
+# csproj file path
+csproj_file: SettingMainGadget.csproj
+
+# files monitored for dirty/modified status
+files:
+
+# Enable to pack as rpk
+pack_as_rpk: true
+
+# List of resource files to be packed in rpk
+resources:
+  - res/
diff --git a/SettingMainGadget/Sound/SettingAudioManager.cs b/SettingMainGadget/Sound/SettingAudioManager.cs
deleted file mode 100644 (file)
index f90b451..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-using SettingCore;
-using System;
-using Tizen.Multimedia;
-using Tizen.NUI;
-using Tizen.System;
-
-namespace SettingMainGadget.Sound
-{
-    class SettingAudioManager
-    {
-        private const string ringtone = "media/Ringtones/ringtone_sdk.mp3";
-        public const string VconfRingtonePath = "db/setting/sound/noti/msg_ringtone_path";
-
-        private static AudioVolume audioVolume = AudioManager.VolumeController;
-
-        public static int GetVolumeLevel(AudioVolumeType type)
-        {
-            return audioVolume.Level[type];
-        }
-
-        public static int GetMaxVolumeLevel(AudioVolumeType type)
-        {
-            return audioVolume.MaxLevel[type];
-        }
-
-        public static float GetPercentageVolumeLevel(AudioVolumeType type)
-        {
-            return (float)audioVolume.Level[type] / audioVolume.MaxLevel[type];
-        }
-
-        public static void SetVolumeLevel(AudioVolumeType type, int volume)
-        {
-            volume = volume < 0 ? 0 : volume;
-            volume = volume > audioVolume.MaxLevel[type] ? audioVolume.MaxLevel[type] : volume;
-
-            audioVolume.Level[type] = volume;
-            Logger.Debug($"SET {type} Volume : {audioVolume.Level[type]}");        
-        }
-
-        public static void PlayAudio(AudioStreamType type)
-        {
-            string path = String.Empty;
-
-            switch (type)
-            {
-                case AudioStreamType.Media:
-                    string callingAssemblyName = System.Reflection.Assembly.GetCallingAssembly().GetName().Name;
-                    string absoluteDirPath = System.IO.Path.Combine(Tizen.Applications.Application.Current.DirectoryInfo.Resource, "mount/allowed/", callingAssemblyName);
-                    path = System.IO.Path.Combine(absoluteDirPath, ringtone);
-                    break;
-                case AudioStreamType.Notification:
-                    if (!Tizen.Vconf.TryGetString(VconfRingtonePath, out string value))
-                    {
-                        Logger.Warn($"could not get vaule for {VconfRingtonePath}");
-                        //return; FIXME : uncomment when TryGetString will work properly 
-                    }
-                    path = value;
-                    break;
-                case AudioStreamType.System:
-                    Feedback feedback = new Feedback();
-                    if (feedback.IsSupportedPattern(FeedbackType.Sound, "Tap"))
-                    {
-                        feedback.Play(FeedbackType.Sound, "Tap");
-                    }
-                    return;
-            }
-
-            try
-            {
-                WavPlayer.StartAsync(path, new AudioStreamPolicy(type));
-            }
-            catch (Exception ex)
-            {
-                Logger.Error($"WavPlayer {type} Error: {ex.Message}");
-            }
-        }
-    }
-}
diff --git a/SettingMainGadget/Sound/SoundGadget.cs b/SettingMainGadget/Sound/SoundGadget.cs
deleted file mode 100644 (file)
index 4cd2452..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-using SettingCore.TextResources;
-using SettingCore;
-using SettingCore.Views;
-using SettingMainGadget;
-using SettingMainGadget.Sound;
-using System.Collections.Generic;
-using System.Linq;
-using Tizen.Multimedia;
-using Tizen.NUI;
-using Tizen.NUI.BaseComponents;
-using Tizen.NUI.Components;
-using Tizen.System;
-
-namespace Setting.Menu
-{
-    public class SoundGadget : SettingCore.MainMenuGadget
-    {
-        private View content;
-        private Sections sections = new Sections();
-
-        private TextListItem soundMode;
-        private TextListItem notificationSound;
-
-        public override Color ProvideIconColor() => new Color(IsLightTheme  ? "#DB3069" : "#DF4679");
-
-        public override string ProvideIconPath() => GetResourcePath("sound.svg");
-
-        public override string ProvideTitle() => Resources.IDS_ST_HEADER_SOUND;
-
-        protected override View OnCreate()
-        {
-            base.OnCreate();
-            AttachToEvents();
-
-            content = new ScrollableBase
-            {
-                WidthSpecification = LayoutParamPolicies.MatchParent,
-                HeightSpecification = LayoutParamPolicies.MatchParent,
-                ScrollingDirection = ScrollableBase.Direction.Vertical,
-                HideScrollbar = false,
-                Layout = new LinearLayout()
-                {
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-            CreateView();
-
-            return content;
-        }
-
-        protected override void OnDestroy()
-        {
-            DetachFromEvents();
-            base.OnDestroy();
-        }
-
-        private void AttachToEvents()
-        {
-            try
-            {
-                Tizen.System.SystemSettings.SoundSilentModeSettingChanged += SystemSettings_SoundSilentModeSettingChanged;
-            }
-            catch (System.Exception e)
-            {
-                Logger.Warn($"Cannot attach to SystemSettings.SoundSilentModeSettingChanged ({e.GetType()})");
-            }
-
-            try
-            {
-                Tizen.System.SystemSettings.VibrationChanged += SystemSettings_VibrationChanged;
-            }
-            catch (System.Exception e)
-            {
-                Logger.Warn($"Cannot attach to SystemSettings.VibrationChanged ({e.GetType()})");
-            }
-
-            try
-            {
-                Tizen.System.SystemSettings.SoundNotificationChanged += SystemSettings_NotificationSoundChanged;
-            }
-            catch (System.Exception e)
-            {
-                Logger.Warn($"Cannot attach to SystemSettings.SoundNotificationChanged ({e.GetType()})");
-            }
-        }
-
-        private void DetachFromEvents()
-        {
-            try
-            {
-                Tizen.System.SystemSettings.SoundSilentModeSettingChanged -= SystemSettings_SoundSilentModeSettingChanged;
-            }
-            catch (System.Exception e)
-            {
-                Logger.Warn($"Cannot detach from SystemSettings.SoundSilentModeSettingChanged ({e.GetType()})");
-            }
-
-            try
-            {
-                Tizen.System.SystemSettings.VibrationChanged -= SystemSettings_VibrationChanged;
-            }
-            catch (System.Exception e)
-            {
-                Logger.Warn($"Cannot detach from SystemSettings.VibrationChanged ({e.GetType()})");
-            }
-
-            try
-            {
-                Tizen.System.SystemSettings.SoundNotificationChanged -= SystemSettings_NotificationSoundChanged;
-            }
-            catch (System.Exception e)
-            {
-                Logger.Warn($"Cannot detach from SystemSettings.SoundNotificationChanged ({e.GetType()})");
-            }
-        }
-
-        private void CreateView()
-        {
-            // remove all sections from content view
-            sections.RemoveAllSectionsFromView(content);
-
-            // section: sound mode
-
-            string soundModeName = SoundmodeManager.GetSoundmodeName(SoundmodeManager.GetSoundmode());
-            soundMode = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_HEADER_SOUND_MODE, soundModeName);
-            if (soundMode != null)
-            {
-                soundMode.Clicked += (o, e) =>
-                {
-                    NavigateTo(MainMenuProvider.Sound_Mode);
-                };
-            }
-            sections.Add(MainMenuProvider.Sound_Mode, soundMode);
-
-            // section: notification sound
-
-            string notificationSoundName = SoundNotificationManager.GetNotificationSoundName();
-            notificationSound = TextListItem.CreatePrimaryTextItemWithSecondaryText(Resources.IDS_ST_BODY_NOTIFICATIONS, notificationSoundName);
-            if (notificationSound != null)
-            {
-                notificationSound.Clicked += (o, e) =>
-                {
-                    NavigateTo(MainMenuProvider.Sound_Notification);
-                };
-            }
-            sections.Add(MainMenuProvider.Sound_Notification, notificationSound);
-
-            // section: other sounds
-
-            var otherSounds = TextListItem.CreatePrimaryTextItem(Resources.IDS_ST_MBODY_OTHER_SOUNDS);
-            if (otherSounds != null)
-            {
-                otherSounds.Clicked += (o, e) =>
-                {
-                    NavigateTo(MainMenuProvider.Sound_Other);
-                };
-            }
-            sections.Add(MainMenuProvider.Sound_Other, otherSounds);
-
-            Logger.Debug($"GET {AudioVolumeType.Media} Volume : {SettingAudioManager.GetVolumeLevel(AudioVolumeType.Media)}");
-            Logger.Debug($"GET {AudioVolumeType.Notification} Volume : {SettingAudioManager.GetVolumeLevel(AudioVolumeType.Notification)}");
-            Logger.Debug($"GET {AudioVolumeType.System} Volume : {SettingAudioManager.GetVolumeLevel(AudioVolumeType.System)}");
-
-            string soundSliderIconPath = GetResourcePath("sound/sound_slider_icon_default.png");
-
-            // section: media
-
-            var mediaSlider = new SliderListItem(Resources.IDS_ST_BODY_MEDIA, soundSliderIconPath, SettingAudioManager.GetPercentageVolumeLevel(AudioVolumeType.Media));
-            mediaSlider.Slider.SlidingFinished += OnMediaSlidingFinished;
-            mediaSlider.Margin = new Extents(0, 0, 16, 0).SpToPx();
-            sections.Add(MainMenuProvider.Sound_MediaSlider, mediaSlider);
-
-            // section: notification
-
-            var notificationSlider = new SliderListItem(Resources.IDS_ST_BODY_NOTIFICATIONS, soundSliderIconPath, SettingAudioManager.GetPercentageVolumeLevel(AudioVolumeType.Notification));
-            notificationSlider.Slider.ValueChanged += OnNofificationSlider_ValueChanged;
-            notificationSlider.Margin = new Extents(0, 0, 16, 0).SpToPx();
-            sections.Add(MainMenuProvider.Sound_NotificationSlider, notificationSlider);
-
-            // section: system
-
-            var systemSlider = new SliderListItem(Resources.IDS_ST_BODY_SYSTEM, soundSliderIconPath, SettingAudioManager.GetPercentageVolumeLevel(AudioVolumeType.System));
-            systemSlider.Slider.ValueChanged += OnSystemSlider_ValueChanged;
-            systemSlider.Margin = new Extents(0, 0, 16, 0).SpToPx();
-            sections.Add(MainMenuProvider.Sound_SystemSlider, systemSlider);
-
-            // add only visible sections to content view in required order
-            var customization = GetCustomization().OrderBy(c => c.Order);
-            foreach (var cust in customization)
-            {
-                string visibility = cust.IsVisible ? "visible" : "hidden";
-                Logger.Verbose($"Customization: {cust.MenuPath} - {visibility} - {cust.Order}");
-                if (cust.IsVisible && sections.TryGetValue(cust.MenuPath, out View row))
-                {
-                    content.Add(row);
-                }
-            }
-        }
-
-        protected override void OnCustomizationUpdate(IEnumerable<MenuCustomizationItem> items)
-        {
-            Logger.Verbose($"{nameof(SoundGadget)} got customization with {items.Count()} items. Recreating view.");
-            CreateView();
-        }
-
-        private void SystemSettings_SoundSilentModeSettingChanged(object sender, SoundSilentModeSettingChangedEventArgs e)
-        {
-            if (soundMode != null)
-                soundMode.Secondary = SoundmodeManager.GetSoundmodeName(SoundmodeManager.GetSoundmode());
-        }
-
-        private void SystemSettings_VibrationChanged(object sender, VibrationChangedEventArgs e)
-        {
-            if (soundMode != null)
-                soundMode.Secondary = SoundmodeManager.GetSoundmodeName(SoundmodeManager.GetSoundmode());
-        }
-
-        private static void OnMediaSlidingFinished(object sender, SliderSlidingFinishedEventArgs e)
-        {
-            int volume = (int)(e.CurrentValue * SettingAudioManager.GetMaxVolumeLevel(AudioVolumeType.Media));
-
-            if (volume != SettingAudioManager.GetVolumeLevel(AudioVolumeType.Media))
-            {
-                SettingAudioManager.SetVolumeLevel(AudioVolumeType.Media, volume);
-                SettingAudioManager.PlayAudio(AudioStreamType.Media);
-            }
-        }
-        private static void OnNofificationSlider_ValueChanged(object sender, SliderValueChangedEventArgs e)
-        {
-            int volume = (int)(e.CurrentValue * SettingAudioManager.GetMaxVolumeLevel(AudioVolumeType.Notification));
-
-            if (volume != SettingAudioManager.GetVolumeLevel(AudioVolumeType.Notification))
-            {
-                SettingAudioManager.SetVolumeLevel(AudioVolumeType.Notification, volume);
-                SettingAudioManager.PlayAudio(AudioStreamType.Notification);
-            }
-        }
-        private static void OnSystemSlider_ValueChanged(object sender, SliderValueChangedEventArgs e)
-        {
-            int volume = (int)(e.CurrentValue * SettingAudioManager.GetMaxVolumeLevel(AudioVolumeType.System));
-
-            if (volume != SettingAudioManager.GetVolumeLevel(AudioVolumeType.System))
-            {
-                SettingAudioManager.SetVolumeLevel(AudioVolumeType.System, volume);
-                SettingAudioManager.PlayAudio(AudioStreamType.System);
-            }
-        }
-
-        private void SystemSettings_NotificationSoundChanged(object sender, SoundNotificationChangedEventArgs e)
-        {
-            if (notificationSound != null)
-                notificationSound.Secondary = SoundNotificationManager.GetNotificationSoundName();
-        }
-    }
-}
diff --git a/SettingMainGadget/Sound/SoundNotificationManager.cs b/SettingMainGadget/Sound/SoundNotificationManager.cs
deleted file mode 100644 (file)
index e7ac41f..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-using SettingCore.TextResources;
-using SettingCore;
-using System;
-using System.Linq;
-using Tizen.Multimedia;
-
-namespace SettingMainGadget.Sound
-{
-    public class SoundNotificationManager
-    {
-        public static void SetNotificationSound(string notificationsound)
-        {
-            Tizen.Vconf.SetString(SettingAudioManager.VconfRingtonePath, notificationsound);
-        }
-
-        public static string GetNotificationSound()
-        {
-            // FIXME: ignoring return value
-            Tizen.Vconf.TryGetString(SettingAudioManager.VconfRingtonePath, out string value);
-
-            return value;
-        }
-
-        public static string GetFileName(string path)
-        {
-            String[] folders = path.Split('/');
-
-            return folders.Length > 0 ? folders.Last() : path;
-        }
-
-        public static string SettingMediaBasename(string path)
-        {
-            if (string.IsNullOrEmpty(path))
-                return Resources.IDS_ST_BODY_PHONEPROFILES_SILENT;
-
-            string title = String.Empty;
-
-            try
-            {
-                var extractor = new MetadataExtractor(path);
-                Metadata metadata = extractor.GetMetadata();
-                title = metadata.Title;
-            }
-            catch (Exception ex)
-            {
-                Logger.Error(ex.Message);
-            }
-
-            return !string.IsNullOrEmpty(title) ? title : GetFileName(path);
-        }
-
-        public static string GetNotificationSoundName()
-        {
-            string path = GetNotificationSound();
-            return SettingMediaBasename(path);
-        }
-    }
-}
diff --git a/SettingMainGadget/Sound/SoundmodeGadget.cs b/SettingMainGadget/Sound/SoundmodeGadget.cs
deleted file mode 100644 (file)
index 874684b..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-using SettingCore.TextResources;
-using SettingCore.Views;
-using SettingMainGadget.Sound;
-using System.Linq;
-using Tizen.NUI;
-using Tizen.NUI.BaseComponents;
-using Tizen.NUI.Components;
-
-namespace Setting.Menu.Sound
-{
-    public class SoundmodeGadget : SettingCore.MenuGadget
-    {
-        public override string ProvideTitle() => Resources.IDS_ST_HEADER_SOUND_MODE;
-
-        private SettingMainGadget.Sound.Soundmode[] sounds = new[] {
-            Soundmode.SOUND_MODE_SOUND,
-            Soundmode.SOUND_MODE_VIBRATE,
-            Soundmode.SOUND_MODE_MUTE,
-        };
-
-        protected override View OnCreate()
-        {
-            base.OnCreate();
-
-            var content = new ScrollableBase
-            {
-                WidthSpecification = LayoutParamPolicies.MatchParent,
-                HeightSpecification = LayoutParamPolicies.MatchParent,
-                ScrollingDirection = ScrollableBase.Direction.Vertical,
-                HideScrollbar = false,
-                Layout = new LinearLayout()
-                {
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-
-            RadioButtonGroup radioButtonGroup = new RadioButtonGroup();
-
-            for (int i = 0; i < sounds.Length; i++)
-            {
-                RadioButtonListItem item = new RadioButtonListItem(SoundmodeManager.GetSoundmodeName(sounds[i]));
-                item.RadioButton.IsSelected = i.Equals(sounds.ToList().IndexOf(SoundmodeManager.GetSoundmode()));
-
-                radioButtonGroup.Add(item.RadioButton);
-                content.Add(item);
-            }
-
-            radioButtonGroup.SelectedChanged += (o, e) =>
-            {
-                var current = sounds[radioButtonGroup.SelectedIndex];
-                SoundmodeManager.SetSoundmode(current);
-            };
-
-            return content;
-        }
-    }
-}
diff --git a/SettingMainGadget/Sound/SoundmodeManager.cs b/SettingMainGadget/Sound/SoundmodeManager.cs
deleted file mode 100644 (file)
index 26a0302..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-using SettingCore.TextResources;
-using SettingCore;
-
-namespace SettingMainGadget.Sound
-{
-    public enum Soundmode
-    {
-        SOUND_MODE_SOUND,
-        SOUND_MODE_VIBRATE,
-        SOUND_MODE_MUTE
-    };
-
-    internal class SoundmodeManager
-    {
-        private const string VconfSoundOn = "db/setting/sound/sound_on";
-        private const string VconfVibrationOn = "db/setting/sound/vibration_on";
-
-        public static Soundmode GetSoundmode()
-        {
-            if (!Tizen.Vconf.TryGetBool(VconfSoundOn, out bool isSoundOn))
-            {
-                Logger.Warn($"could not get value for {VconfSoundOn}");
-            }
-            if (!Tizen.Vconf.TryGetBool(VconfVibrationOn, out bool isVibrationOn))
-            {
-                Logger.Warn($"could not get value for {VconfVibrationOn}");
-            }
-
-            if (isSoundOn)
-                return Soundmode.SOUND_MODE_SOUND;
-            else if (isVibrationOn)
-                return Soundmode.SOUND_MODE_VIBRATE;
-
-            return Soundmode.SOUND_MODE_MUTE;
-        }
-
-        public static void SetSoundmode(Soundmode soundmode)
-        {
-            bool have_sound = false, have_vibrations = false;
-
-            switch (soundmode)
-            {
-                case Soundmode.SOUND_MODE_SOUND:
-                    have_sound = true;
-                    have_vibrations = false;
-                    break;
-                case Soundmode.SOUND_MODE_VIBRATE:
-                    have_sound = false;
-                    have_vibrations = true;
-                    break;
-                case Soundmode.SOUND_MODE_MUTE:
-                    have_sound = false;
-                    have_vibrations = false;
-                    break;
-            };
-
-            if (!Tizen.Vconf.SetBool(VconfSoundOn, have_sound))
-            {
-                Logger.Warn($"could not set key {VconfSoundOn} with value {have_sound}");
-            }
-
-            if (!Tizen.Vconf.SetBool(VconfVibrationOn, have_vibrations))
-            {
-                Logger.Warn($"could not set key {VconfVibrationOn} with value {have_vibrations}");
-            }
-        }
-
-        public static string GetSoundmodeName(Soundmode soundmode)
-        {
-            return soundmode switch
-            {
-                Soundmode.SOUND_MODE_SOUND => Resources.IDS_ST_HEADER_SOUND,
-                Soundmode.SOUND_MODE_VIBRATE => Resources.IDS_ST_HEADER_VIBRATE,
-                Soundmode.SOUND_MODE_MUTE => Resources.IDS_ST_HEADER_MUTE,
-                _ => string.Empty,
-            };
-        }
-    }
-}
diff --git a/SettingMainGadget/Sound/SoundnotificationGadget.cs b/SettingMainGadget/Sound/SoundnotificationGadget.cs
deleted file mode 100644 (file)
index 54ddf4f..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-using SettingCore.TextResources;
-using SettingCore;
-using SettingMainGadget.Sound;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using Tizen.NUI;
-using Tizen.NUI.BaseComponents;
-using Tizen.NUI.Components;
-using SettingCore.Views;
-
-namespace Setting.Menu.Sound
-{
-    public class SoundnotificationGadget : SettingCore.MenuGadget
-    {
-        public override string ProvideTitle() => Resources.IDS_ST_BODY_NOTIFICATIONS;
-
-        private const string soundpath = "/opt/usr/data/settings/Alerts";
-
-        protected override View OnCreate()
-        {
-            base.OnCreate();
-
-            var content = new ScrollableBase
-            {
-                WidthSpecification = LayoutParamPolicies.MatchParent,
-                HeightSpecification = LayoutParamPolicies.MatchParent,
-                ScrollingDirection = ScrollableBase.Direction.Vertical,
-                HideScrollbar = false,
-                Layout = new LinearLayout()
-                {
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-
-            RadioButtonGroup radioButtonGroup = new RadioButtonGroup();
-
-            var soundList = CreateSoundList();
-
-            for (int i = 0; i < soundList.Count; i++)
-            {
-                RadioButtonListItem item = new RadioButtonListItem(SoundNotificationManager.SettingMediaBasename(soundList[i].ToString()));
-                item.RadioButton.IsSelected = i.Equals(GetNotificationSoundIndex(soundList));
-
-                radioButtonGroup.Add(item.RadioButton);
-                content.Add(item);
-            }
-
-            radioButtonGroup.SelectedChanged += (o, e) =>
-            {
-                SoundNotificationManager.SetNotificationSound(soundList[radioButtonGroup.SelectedIndex]);
-            };
-
-            return content;
-        }
-
-        private IList<string> CreateSoundList()
-        {
-            var soundList = new List<string>() { string.Empty }; // Silent
-
-            Logger.Debug($"sound path : {soundpath}");
-
-            DirectoryInfo directory = new DirectoryInfo(soundpath);
-            var files = Enumerable.Concat(directory.GetFiles("*.wav"), directory.GetFiles("*.mp3"));
-
-            foreach (var file in files)
-            {
-                Logger.Debug($"[{soundList.Count}] {file.Name}");
-                soundList.Add(System.IO.Path.Combine(soundpath, file.Name));
-            }
-
-            return soundList;
-        }
-
-        private int GetNotificationSoundIndex(IList<string> soundlist)
-        {
-            string sound = SoundNotificationManager.GetNotificationSound();
-
-            return soundlist.IndexOf(sound);
-        }
-    }
-}
diff --git a/SettingMainGadget/Sound/SoundotherGadget.cs b/SettingMainGadget/Sound/SoundotherGadget.cs
deleted file mode 100644 (file)
index cb368cf..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-using SettingCore.TextResources;
-using SettingCore;
-using SettingCore.Views;
-using Tizen.NUI;
-using Tizen.NUI.BaseComponents;
-using Tizen.NUI.Components;
-
-namespace Setting.Menu.Sound
-{
-    public class SoundotherGadget : SettingCore.MenuGadget
-    {
-        public override string ProvideTitle() => Resources.IDS_ST_MBODY_OTHER_SOUNDS;
-
-        private const string keyTouchSound = "db/setting/sound/touch_sounds";
-        private const string keyKeyboardSound = "db/setting/sound/button_sounds";
-
-        protected override View OnCreate()
-        {
-            base.OnCreate();
-
-            var content = new ScrollableBase
-            {
-                WidthSpecification = LayoutParamPolicies.MatchParent,
-                HeightSpecification = LayoutParamPolicies.MatchParent,
-                ScrollingDirection = ScrollableBase.Direction.Vertical,
-                HideScrollbar = false,
-                Layout = new LinearLayout()
-                {
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-
-            Tizen.Vconf.TryGetBool(keyTouchSound, out bool bTouchSound);
-            Tizen.Vconf.TryGetBool(keyKeyboardSound, out bool bKeyboardSound);
-
-            var item = new SwitchListItem(Resources.IDS_ST_MBODY_TOUCH_SOUND, Resources.IDS_ST_BODY_PLAY_SOUNDS_WHEN_LOCKING_AND_UNLOCKING_SCREEN, bTouchSound);
-            item.Switch.SelectedChanged += (o, e) =>
-            {
-                Tizen.Vconf.SetBool(keyTouchSound, e.IsSelected);
-                Logger.Debug($"Touch Sound enabled: {e.IsSelected}");
-            };
-            content.Add(item);
-
-            item = new SwitchListItem(Resources.IDS_ST_MBODY_KEYBOARD_SOUND, Resources.IDS_ST_BODY_SOUND_FEEDBACK_FOR_SYSTEM_KEYBOARD, bKeyboardSound);
-            item.Switch.SelectedChanged += (o, e) =>
-            {
-                Tizen.Vconf.SetBool(keyKeyboardSound, e.IsSelected);
-                Logger.Debug($"Keyboard Sound enabled: {e.IsSelected}");
-            };
-            content.Add(item);
-
-            return content;
-        }
-    }
-}
diff --git a/SettingMainGadget/Storage/DefaultStorageGadget.cs b/SettingMainGadget/Storage/DefaultStorageGadget.cs
deleted file mode 100644 (file)
index ffd212d..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-using SettingCore.TextResources;
-using SettingCore.Views;
-using System;
-using Tizen.NUI.BaseComponents;
-using Tizen.NUI;
-using Tizen.NUI.Components;
-using SettingCore;
-using Tizen;
-
-namespace Setting.Menu.Storage
-{
-    public class DefaultStorageGadget : SettingCore.MenuGadget
-    {
-        public override string ProvideTitle() => Resources.IDS_SM_HEADER_DEFAULT_STORAGE_SETTINGS_ABB;
-
-        private const string VconfSharedContent = "db/setting/default_memory/wifi_direct";
-        private const string VconfAppInstall = "db/setting/default_memory/install_applications";
-        private const string VconfCardStatus = "memory/sysman/mmc";
-
-        private ScrollableBase content;
-
-        protected override View OnCreate()
-        {
-            base.OnCreate();
-
-            content = new ScrollableBase()
-            {
-                WidthSpecification = LayoutParamPolicies.MatchParent,
-                HeightSpecification = LayoutParamPolicies.MatchParent,
-                ScrollingDirection = ScrollableBase.Direction.Vertical,
-                HideScrollbar = false,
-                Layout = new LinearLayout()
-                {
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-
-            CreateItems();
-
-            Vconf.Notify(VconfCardStatus, OnCardStatusChanged);
-
-            return content;
-        }
-
-        protected override void OnDestroy()
-        {
-            Vconf.Ignore(VconfCardStatus, OnCardStatusChanged);
-
-            base.OnDestroy();
-        }
-
-        private void CreateItems()
-        {
-            content.RemoveAllChildren(true);
-
-            GetStorageStatus(out int shared, out int app, out int status);
-
-            // Shared contents
-            var headerItem = new TextHeaderListItem(Resources.IDS_ST_HEADER_SHARED_CONTENT);
-            content.Add(headerItem);
-
-            headerItem = new TextHeaderListItem(Resources.IDS_SM_BODY_SELECT_THE_DEFAULT_STORAGE_LOCATION_FOR_CONTENT_SHARED_VIA_BLUETOOTH_OR_WI_FI_DIRECT, true);
-            content.Add(headerItem);
-
-            RadioButtonGroup radioButtonStorageGroup = new RadioButtonGroup();
-
-            RadioButtonListItem device = new RadioButtonListItem(Resources.IDS_ST_BODY_DEVICE_STORAGE);
-            device.RadioButton.IsSelected = shared == 0;
-
-            RadioButtonListItem card = new RadioButtonListItem(Resources.IDS_ST_BODY_SD_CARD);
-            // disable storage selection if the card is not mounted 
-            if (status != 1)
-            {
-                card.IsEnabled = false;
-            }
-            card.RadioButton.IsSelected = shared == 1;
-
-            radioButtonStorageGroup.SelectedChanged += (o, e) =>
-            {
-                Vconf.SetInt(VconfSharedContent, radioButtonStorageGroup.SelectedIndex);
-                Logger.Debug($"Default storage of Shared Content is {radioButtonStorageGroup.GetSelectedItem().Text}.");
-            };
-
-            radioButtonStorageGroup.Add(device.RadioButton);
-            radioButtonStorageGroup.Add(card.RadioButton);
-
-            content.Add(device);
-            content.Add(card);
-
-            // App installation
-            headerItem = new TextHeaderListItem("App installation"); // TODO : add translation to Resources
-            content.Add(headerItem);
-
-            headerItem = new TextHeaderListItem(Resources.IDS_SM_BODY_SELECT_THE_DEFAULT_LOCATION_FOR_INSTALLING_APPS_WHERE_APPS_CAN_BE_SAVED_DEPENDS_ON_THE_TYPE_OF_APP_AND_THE_AVAILABILITY_OF_THE_LOCATION, true);
-            content.Add(headerItem);
-
-            RadioButtonGroup radioButtonAppGroup = new RadioButtonGroup();
-
-            RadioButtonListItem deviceStorage = new RadioButtonListItem(Resources.IDS_ST_BODY_DEVICE_STORAGE);
-            deviceStorage.RadioButton.IsSelected = app == 0;
-
-            RadioButtonListItem cardStorage = new RadioButtonListItem(Resources.IDS_ST_BODY_SD_CARD);
-            // disable storage selection if the card is not mounted
-            if (status != 1)
-            {
-                cardStorage.IsEnabled = false;
-            }
-            cardStorage.RadioButton.IsSelected = app == 1;
-
-            radioButtonAppGroup.SelectedChanged += (o, e) =>
-            {
-                Vconf.SetInt(VconfAppInstall, radioButtonAppGroup.SelectedIndex);
-                Logger.Debug($"Default storage of App instalation is {radioButtonAppGroup.GetSelectedItem().Text}.");
-            };
-
-            radioButtonAppGroup.Add(deviceStorage.RadioButton);
-            radioButtonAppGroup.Add(cardStorage.RadioButton);
-
-            content.Add(deviceStorage);
-            content.Add(cardStorage);
-        }
-
-        private void GetStorageStatus(out int shared, out int app, out int status)
-        {
-            if (!Vconf.TryGetInt(VconfSharedContent, out shared))
-            {
-                Logger.Warn($"could not get value for {VconfSharedContent}");
-            }
-
-            if (!Vconf.TryGetInt(VconfAppInstall, out app))
-            {
-                Logger.Warn($"could not get value for {VconfAppInstall}");
-            }
-
-            if (!Vconf.TryGetInt(VconfCardStatus, out status))
-            {
-                Logger.Warn($"could not get value for {VconfCardStatus}");
-            }
-
-            // set device as default shared content and app instalation storage if card was umounted
-            // FIXME : remove it if the change of card status (memory/sysman/mmc) will affect wifi_direct and install_applications
-            if (status != 1)
-            {
-                if (app == 1)
-                {
-                    Vconf.SetInt(VconfAppInstall, 0);
-                    app = 0;
-                }
-
-                if (shared == 1)
-                {
-                    Vconf.SetInt(VconfSharedContent, 0);
-                    shared = 0;
-                }
-            }
-        }
-
-        private void OnCardStatusChanged(string key, Type type, dynamic arg)
-        {
-            // update content when card was removed (0) or mounted (1)
-            if (arg == 0 || arg == 1)
-            {
-                CreateItems();
-            }
-        }
-    }
-}
diff --git a/SettingMainGadget/StorageGadget.cs b/SettingMainGadget/StorageGadget.cs
deleted file mode 100644 (file)
index a4ec273..0000000
+++ /dev/null
@@ -1,516 +0,0 @@
-using SettingCore.TextResources;
-using SettingCore;
-using System;
-using System.Collections.Generic;
-using System.Text;
-using Tizen.NUI.BaseComponents;
-using Tizen.NUI;
-using SettingCore.Views;
-using SettingMainGadget.DateTime;
-using System.Linq;
-using Tizen.NUI.Components;
-using Tizen.System;
-using SettingMainGadget;
-using Tizen.Pims.Contacts.ContactsViews;
-using System.Threading.Tasks;
-using Tizen.Applications;
-using Tizen.Content.MediaContent;
-using static System.Collections.Specialized.BitVector32;
-using Tizen;
-
-namespace Setting.Menu
-{
-    public class StorageGadget : MainMenuGadget
-    {
-        public override Color ProvideIconColor() => new Color(IsLightTheme ? "#7F2982" : "#922F95");
-
-        public override string ProvideIconPath() => GetResourcePath("storage.svg");
-
-        public override string ProvideTitle() => Resources.IDS_ST_BODY_DEVICE_STORAGE;
-
-        private const string VconfCardStatus = "memory/sysman/mmc";
-
-        private bool isLightTheme => ThemeManager.PlatformThemeId == "org.tizen.default-light-theme";
-
-        private Sections sections = new Sections();
-        private View content;
-
-        private TextWithIconListItem appsItem;
-        private TextWithIconListItem cacheItem;
-        private TextWithIconListItem systemItem;
-
-        private StorageIndicator storageIndicator;
-
-        private double nonSystemSpace = 0;
-
-        protected override View OnCreate()
-        {
-            base.OnCreate();
-
-            content = new ScrollableBase()
-            {
-                WidthSpecification = LayoutParamPolicies.MatchParent,
-                HeightSpecification = LayoutParamPolicies.MatchParent,
-                ScrollingDirection = ScrollableBase.Direction.Vertical,
-                HideScrollbar = false,
-                Layout = new LinearLayout()
-                {
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-
-            CreateView();
-
-            StartCalculatingAppCacheSize();
-
-            return content;
-        }
-
-        protected override void OnDestroy()
-        {
-            base.OnDestroy();
-        }
-
-        private void CreateView()
-        {
-            sections.RemoveAllSectionsFromView(content);
-
-            // Internal storage
-            var internalUsageItem = new TextHeaderListItem("Device storage usage"); // TODO : add translation to Resources
-            sections.Add(MainMenuProvider.Storage_InternalUsage, internalUsageItem);
-
-            GetStorageStatus(out int InternalCount, out double InternalTotal, out int ExternalCount, out double InternalAvailable, out double ExternalTotal, out double ExternalAvailable);
-
-            if (InternalCount > 0)
-            {
-                var usedItem = TextListItem.CreatePrimaryTextItem(GetMediaSizeString(InternalTotal - InternalAvailable));
-                sections.Add(MainMenuProvider.Storage_Used, usedItem);
-
-                // TODO : add size dependency
-                storageIndicator = new StorageIndicator();
-                sections.Add(MainMenuProvider.Storage_UsageIndicator, storageIndicator);
-
-                var totalItem = TextListItem.CreatePrimaryTextItemWithSecondaryText($"{Resources.IDS_ST_HEADER_TOTAL_SPACE}:", GetMediaSizeString(InternalTotal));
-                sections.Add(MainMenuProvider.Storage_TotalInternal, totalItem);
-
-                var freeItem = TextListItem.CreatePrimaryTextItemWithSecondaryText("Free space:", GetMediaSizeString(InternalAvailable)); // TODO : add translation to Resources
-                sections.Add(MainMenuProvider.Storage_FreeInternal, freeItem);
-            }
-
-            GetMediaInfo(out double sizeImage, out double sizeVideo, out double sizeAudio);
-            GetMiscInfo(out double sizeMisc);
-
-            nonSystemSpace = InternalTotal - InternalAvailable - sizeImage - sizeVideo - sizeAudio - sizeMisc;
-
-            var usageSummary = new View()
-            {
-                WidthSpecification = LayoutParamPolicies.MatchParent,
-                HeightSpecification = LayoutParamPolicies.WrapContent,
-                Layout = new LinearLayout()
-                {
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-
-            appsItem = new TextWithIconListItem(Resources.IDS_SM_TMBODY_APPS_ABB, new Color("#FFC700"), subText: Resources.IDS_SM_SBODY_CALCULATING_ING);
-            appsItem.Clicked += (s, e) =>
-            {
-                // TODO : add apps info gadget 
-            };
-            usageSummary.Add(appsItem);
-
-            var imageItem = new TextWithIconListItem(Resources.IDS_ST_BODY_IMAGES, new Color("#FF8A00"), subText: GetMediaSizeString(sizeImage));
-            imageItem.Clicked += (s, e) =>
-            {
-                // TODO : add media files info gadget 
-            };
-            usageSummary.Add(imageItem);
-
-            var videoItem = new TextWithIconListItem(Resources.IDS_ST_BODY_VIDEOS, new Color("#FF6200"), subText: GetMediaSizeString(sizeVideo));
-            videoItem.Clicked += (s, e) =>
-            {
-                // TODO : add media files info gadget 
-            };
-            usageSummary.Add(videoItem);
-
-            var audioItem = new TextWithIconListItem(Resources.IDS_ST_BODY_AUDIO, new Color("#A40404"), subText: GetMediaSizeString(sizeAudio));
-            audioItem.Clicked += (s, e) =>
-            {
-                // TODO : add media files info gadget 
-            };
-            usageSummary.Add(audioItem);
-
-            // TODO : add documents item
-
-            var miscItem = new TextWithIconListItem(Resources.IDS_ST_BODY_MISCELLANEOUS_FILES, new Color("#28262B"), subText: GetMediaSizeString(sizeMisc));
-            miscItem.Clicked += (s, e) =>
-            {
-                // TODO : add miscellaneous info gadget 
-            };
-            usageSummary.Add(miscItem);
-
-            cacheItem = new TextWithIconListItem(Resources.IDS_ST_BODY_CACHED_DATA_ABB, new Color("#3641FA"), subText: Resources.IDS_SM_SBODY_CALCULATING_ING);
-            cacheItem.Clicked += (s, e) =>
-            {
-                ShowCachePopup();
-            };
-            usageSummary.Add(cacheItem);            
-            
-            systemItem = new TextWithIconListItem(Resources.IDS_ST_BODY_SYSTEM_STORAGE, new Color("#17234D"), subText: Resources.IDS_SM_SBODY_CALCULATING_ING);
-            usageSummary.Add(systemItem);
-
-            sections.Add(MainMenuProvider.Storage_UsageSummary, usageSummary);
-
-            // External storage
-            var externalUsageItem = new TextHeaderListItem("External storage usage"); // TODO : add translation to Resources
-            sections.Add(MainMenuProvider.Storage_ExternalUsage, externalUsageItem);
-
-            var externalStorage = new View()
-            {
-                WidthSpecification = LayoutParamPolicies.MatchParent,
-                HeightSpecification = LayoutParamPolicies.WrapContent,
-                Layout = new LinearLayout()
-                {
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-
-            if (ExternalCount > 0)
-            {
-                // VCONFKEY_SYSMAN_MMC_STATUS
-                // 0 : VCONFKEY_SYSMAN_MMC_REMOVED
-                // 1 : VCONFKEY_SYSMAN_MMC_MOUNTED
-                // 2 : VCONFKEY_SYSMAN_MMC_INSERTED_NOT_MOUNTED
-                if (!Tizen.Vconf.TryGetInt(VconfCardStatus, out int status))
-                {
-                    Logger.Warn($"could not get value for {VconfCardStatus}");
-                }
-
-                var totalItem = TextListItem.CreatePrimaryTextItemWithSecondaryText($"{Resources.IDS_ST_HEADER_TOTAL_SPACE}:", GetMediaSizeString(ExternalTotal));
-                externalStorage.Add(totalItem);
-
-                var freeItem = TextListItem.CreatePrimaryTextItemWithSecondaryText("Free space:", GetMediaSizeString(ExternalAvailable)); // TODO : add translation to Resources
-                externalStorage.Add(freeItem);
-
-                var unmount = TextListItem.CreatePrimaryTextItem(Resources.IDS_ST_BODY_UNMOUNT_SD_CARD);
-                unmount.Clicked += (s, e) =>
-                {
-                    // TODO : add popup with unmount functionality (storage_request_unmount_mmc)
-                };
-                externalStorage.Add(unmount);
-
-                var format = TextListItem.CreatePrimaryTextItem(Resources.IDS_ST_BODY_FORMAT_SD_CARD);
-                format.Clicked += (s, e) =>
-                {
-                    // TODO : add popup with format card functionality (storage_request_format_mmc)
-                };
-                externalStorage.Add(format);
-            }
-            else
-            {
-                var item = TextListItem.CreatePrimaryTextItemWithSubText("No SD card", Resources.IDS_ST_BODY_INSERT_SD_CARD); // TODO : add translation to Resources
-                item.IsEnabled = false;
-                externalStorage.Add(item);
-            }
-            sections.Add(MainMenuProvider.Storage_ExternalStorage, externalStorage);
-
-            // Default storage
-            var defaultSettings = new View()
-            {
-                WidthSpecification = LayoutParamPolicies.MatchParent,
-                HeightSpecification = LayoutParamPolicies.WrapContent,
-                Layout = new LinearLayout()
-                {
-                    LinearOrientation = LinearLayout.Orientation.Vertical,
-                },
-            };
-
-            var defaultSettingsItem = new TextHeaderListItem("Storage usage"); // TODO : add translation to Resources
-            var storageLocationItem = TextListItem.CreatePrimaryTextItemWithSubText("Default storage settings", "Device/Storage"); // FIXME : sub text should be dynamic & add translation to Resources
-            storageLocationItem.Clicked += (s, e) =>
-            {
-                NavigateTo(MainMenuProvider.Storage_DefaultSettings);
-            };
-
-            defaultSettings.Add(defaultSettingsItem);
-            defaultSettings.Add(storageLocationItem);
-            sections.Add(MainMenuProvider.Storage_DefaultSettings, defaultSettings);
-
-            var customization = GetCustomization().OrderBy(c => c.Order);
-            Logger.Debug($"customization: {customization.Count()}");
-            foreach (var cust in customization)
-            {
-                string visibility = cust.IsVisible ? "visible" : "hidden";
-                Logger.Verbose($"Customization: {cust.MenuPath} - {visibility} - {cust.Order}");
-                if (cust.IsVisible && sections.TryGetValue(cust.MenuPath, out View row))
-                {
-                    content.Add(row);
-                }
-            }
-        }
-
-        private void GetStorageStatus(out int InternalCount, out double InternalTotal, out int ExternalCount, out double InternalAvailable, out double ExternalTotal, out double ExternalAvailable)
-        {
-            InternalCount = ExternalCount = 0;
-            InternalTotal = ExternalTotal = 0.0;
-            InternalAvailable = ExternalAvailable = 0.0;
-
-            var storages = StorageManager.Storages.ToList();
-
-            foreach (var storage in storages)
-            {
-                if (storage.StorageType == StorageArea.Internal || storage.StorageType == StorageArea.ExtendedInternal)
-                {
-                    InternalCount++;
-                    InternalTotal += storage.TotalSpace;
-                    InternalAvailable += storage.AvailableSpace;
-                }
-                else if (storage.StorageType == StorageArea.External)
-                {
-                    ExternalCount++;
-                    ExternalTotal += storage.TotalSpace;
-                    ExternalAvailable += storage.AvailableSpace;
-                }
-            }
-
-            Logger.Debug("Storage space : ");
-            Logger.Debug($"     - InternalTotal : {GetMediaSizeString(InternalTotal)}");
-            Logger.Debug($"     - InternalAvailable : {GetMediaSizeString(InternalAvailable)}");
-
-            if (ExternalCount > 0)
-            {
-                Logger.Debug($"     - ExternalTotal : {GetMediaSizeString(ExternalTotal)} - {ExternalTotal}");
-                Logger.Debug($"     - ExternalAvailable : {GetMediaSizeString(ExternalAvailable)} - {ExternalAvailable}");
-            }
-        }
-
-        private string GetMediaSizeString(double size)
-        {
-            string[] suffixes = { "Bytes", "KB", "MB", "GB"};
-            int counter = 0;
-
-            while (Math.Round(size / 1024, 2) >= 1)
-            {
-                size = size / 1024;
-                counter++;
-            }
-
-            return string.Format("{0:0.##} {1}", size, suffixes[counter]);
-        }
-
-        private void StartCalculatingAppCacheSize()
-        {
-            Task<PackageSizeInformation> task = PackageManager.GetTotalSizeInformationAsync();
-            task.ContinueWith(x =>
-            {
-                PackageSizeInformation sizeinfo = x.Result;
-                long sizeApp = sizeinfo.AppSize;
-                long sizeCache = sizeinfo.CacheSize;
-
-                if (appsItem != null)
-                {
-                    appsItem.SubText = GetMediaSizeString(sizeApp);
-                }
-                if (cacheItem != null)
-                {
-                    cacheItem.SubText = GetMediaSizeString(sizeCache);
-                }
-                if (systemItem != null)
-                {
-                    systemItem.SubText = GetMediaSizeString(nonSystemSpace - sizeApp - sizeCache);
-                }
-
-            }, TaskScheduler.FromCurrentSynchronizationContext());
-        }
-
-        private void GetMediaInfo(out double sizeImage, out double sizeVideo, out double sizeAudio)
-        {
-            sizeImage = sizeVideo = sizeAudio = 0;
-
-            var mediaDatabase = new MediaDatabase();
-            mediaDatabase.Connect();
-            MediaDatabase.MediaInfoUpdated += OnMediaInfoUpdated;
-            MediaDatabase.FolderUpdated += OnFolderUpdated;
-
-            MediaInfoCommand mediaInfoCmd = new MediaInfoCommand(mediaDatabase);
-
-            var selectArguments = new SelectArguments()
-            {
-                /* 0-image, 1-video, 2-sound, 3-music, 4-other
-                cond = "((MEDIA_TYPE < 4) AND (MEDIA_STORAGE_TYPE=0))";
-                FilterExpression = "((MEDIA_TYPE < 4) AND (MEDIA_STORAGE_TYPE=0))",
-                SortOrder = "{MediaInfoColumns.DisplayName} COLLATE NOCASE DESC"
-                FilterExpression = $"{MediaInfoColumns.DisplayName} LIKE '%%.png'" */
-                FilterExpression = $"{MediaInfoColumns.MediaType}={(int)Media​Type.Image} OR {MediaInfoColumns.MediaType}={(int)Media​Type.Video} OR {MediaInfoColumns.MediaType}={(int)Media​Type.Music} OR {MediaInfoColumns.MediaType}={(int)Media​Type.Sound}",
-            };
-
-            using (var mediaDataReader = mediaInfoCmd.SelectMedia(selectArguments))
-            {
-                while (mediaDataReader.Read())
-                {
-                    var mediaInfo = mediaDataReader.Current;
-
-                    switch (mediaInfo.MediaType)
-                    {
-                        case MediaType.Image:
-                            ImageInfo imageInfo = mediaInfo as ImageInfo;
-                            sizeImage += imageInfo.FileSize;
-                            break;
-
-                        case MediaType.Video:
-                            VideoInfo videoInfo = mediaInfo as VideoInfo;
-                            sizeVideo += videoInfo.FileSize;
-                            break;
-
-                        case MediaType.Sound:
-                        case MediaType.Music:
-                            AudioInfo audioInfo = mediaInfo as AudioInfo;
-                            sizeAudio += audioInfo.FileSize;
-                            break;
-
-                        default:
-                            Logger.Warn($"Invalid Type : {mediaInfo.MediaType}");
-                            break;
-                    }
-                }
-            }
-
-            Logger.Debug("Total Size : ");
-            Logger.Debug($"     - Image : {GetMediaSizeString(sizeImage)}");
-            Logger.Debug($"     - Video : {GetMediaSizeString(sizeVideo)}" );
-            Logger.Debug($"     - Audio : {GetMediaSizeString(sizeAudio)}");
-
-            MediaDatabase.MediaInfoUpdated -= OnMediaInfoUpdated;
-            MediaDatabase.FolderUpdated -= OnFolderUpdated;
-            mediaDatabase.Disconnect();
-        }
-
-        private void GetMiscInfo(out double sizeMisc)
-        {
-            sizeMisc = 0;
-
-            var mediaDatabase = new MediaDatabase();
-            mediaDatabase.Connect();
-            MediaDatabase.MediaInfoUpdated += OnMediaInfoUpdated;
-            MediaDatabase.FolderUpdated += OnFolderUpdated;
-
-            MediaInfoCommand mediaInfoCmd = new MediaInfoCommand(mediaDatabase);
-
-            var selectArguments = new SelectArguments()
-            {
-                FilterExpression = $"{MediaInfoColumns.MediaType}!={(int)Media​Type.Image} AND {MediaInfoColumns.MediaType}!={(int)Media​Type.Video} AND {MediaInfoColumns.MediaType}!={(int)Media​Type.Music} AND {MediaInfoColumns.MediaType}!={(int)Media​Type.Sound}",
-            };
-
-            using (var mediaDataReader = mediaInfoCmd.SelectMedia(selectArguments))
-            {
-                while (mediaDataReader.Read())
-                {
-                    sizeMisc += mediaDataReader.Current.FileSize;
-                }
-            }
-
-            Logger.Debug($"Misc size: {GetMediaSizeString(sizeMisc)}");
-
-            MediaDatabase.MediaInfoUpdated -= OnMediaInfoUpdated;
-            MediaDatabase.FolderUpdated -= OnFolderUpdated;
-            mediaDatabase.Disconnect();
-        }
-
-        private void ShowCachePopup()
-        {
-            var content = new View()
-            {
-                BackgroundColor = isLightTheme ? new Color("#FAFAFA") : new Color("#16131A"),
-                SizeWidth = 690.SpToPx(),
-                HeightSpecification = LayoutParamPolicies.WrapContent,
-                Layout = new FlexLayout()
-                {
-                    Justification = FlexLayout.FlexJustification.Center,
-                    Direction = FlexLayout.FlexDirection.Column, 
-                    Alignment = FlexLayout.AlignmentType.Center,
-                },
-            };
-
-            //title text
-            var textTitle = new TextLabel("Clear cache data") // TODO : add translation to Resources
-            {
-                FontFamily = "BreezeSans",
-                PixelSize = 24.SpToPx(),
-                Margin = new Extents(0, 0, 24, 16).SpToPx(),
-            };
-            FlexLayout.SetFlexAlignmentSelf(textTitle, FlexLayout.AlignmentType.Center);
-
-            content.Add(textTitle);
-
-            // main text
-            var textSubTitle = new TextLabel("Cached data will be cleared for all apps.") // TODO : add translation to Resources
-            {
-                FontFamily = "BreezeSans",
-                PixelSize = 24.SpToPx(),
-                Ellipsis = true,
-                Margin = new Extents(32, 32, 0, 40).SpToPx(),
-            };
-            FlexLayout.SetFlexAlignmentSelf(textSubTitle, FlexLayout.AlignmentType.FlexStart);
-            content.Add(textSubTitle);
-
-            // buttons
-            View buttons = new View()
-            {
-                WidthSpecification = LayoutParamPolicies.MatchParent,
-                HeightSpecification = LayoutParamPolicies.WrapContent,
-                Layout = new FlexLayout()
-                {
-                    Direction = FlexLayout.FlexDirection.Row,
-                    Justification = FlexLayout.FlexJustification.SpaceBetween,
-                },
-            };
-
-            var clearButton = new Button()
-            {
-                WidthResizePolicy = ResizePolicyType.FitToChildren,
-                HeightResizePolicy = ResizePolicyType.FitToChildren,
-                Text = "Clear", // TODO : add translation to Resources
-                Size = new Size(252, 48).SpToPx(),
-                Margin = new Extents(61, 32, 0, 32).SpToPx(),
-            };
-            clearButton.Clicked += (s, e) => 
-            {
-                PackageManager.ClearAllCacheDirectory();
-                // TODO : update cache info
-
-                NUIApplication.GetDefaultWindow().GetDefaultNavigator().Pop();
-            };
-
-            var cancelButton = new Button("Tizen.NUI.Components.Button.Outlined")
-            {
-                WidthResizePolicy = ResizePolicyType.FitToChildren,
-                HeightResizePolicy = ResizePolicyType.FitToChildren,
-                Text = Resources.IDS_ST_BUTTON_CANCEL,
-                Size = new Size(252, 48).SpToPx(),
-                Margin = new Extents(32, 61, 0, 32).SpToPx(),
-            };
-
-            cancelButton.Clicked += (s, e) => 
-            { 
-                NUIApplication.GetDefaultWindow().GetDefaultNavigator().Pop(); 
-            };
-
-            buttons.Add(cancelButton);
-            buttons.Add(clearButton);
-
-            content.Add(buttons);
-
-            RoundedDialogPage.ShowDialog(content);
-        }
-
-        private void OnMediaInfoUpdated(object sender, MediaInfoUpdatedEventArgs args)
-        {
-            Logger.Debug($"MediaInfo updated: Id = {args.Id}, Operation = {args.OperationType}");
-        }
-
-        private void OnFolderUpdated(object sender, FolderUpdatedEventArgs args)
-        {
-            Logger.Debug($"Folder updated: Id = {args.Id}, Operation = {args.OperationType}");
-        }
-    }
-}
diff --git a/SettingMainGadget/index.d.ts b/SettingMainGadget/index.d.ts
new file mode 100644 (file)
index 0000000..24eedcb
--- /dev/null
@@ -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 AddressBookId = DOMString
+type SyncProfileId = DOMString
+type MessageConvId = DOMString
+type ContentDirectoryId = DOMString
+type CalendarId = DOMString
+type CalendarTaskId = DOMString
+type ContactId = DOMString
+type WidgetId = DOMString
+type WidgetInstanceId = DOMString
+type AlarmId = DOMString
+type ApplicationContextId = DOMString
+type BluetoothLESolicitationUUID = DOMString
+type ContactGroupId = DOMString
+type ResourceInterface = DOMString
+type AID = DOMString
+type RawData = DOMString
+type ApplicationId = DOMString
+type BluetoothUUID = DOMString
+type InputDeviceKeyName = DOMString
+type MessageAttachmentId = DOMString
+type BluetoothAddress = DOMString
+type PersonId = DOMString
+type ResourceType = DOMString
+type Path = DOMString
+type MessageId = DOMString
+type NotificationId = DOMString
+type PackageId = DOMString
+type PushRegistrationId = DOMString
+type ContentId = DOMString
+type PlaylistId = DOMString
+type MessageFolderId = 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/SettingMainGadget/jsconfig.json b/SettingMainGadget/jsconfig.json
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/SettingMainGadget/resources/about.svg b/SettingMainGadget/resources/about.svg
deleted file mode 100644 (file)
index ec646df..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M16.2522 10.9122C16.6613 10.9364 17.0635 10.798 17.3712 10.5272C17.5095 10.3851 17.6166 10.2155 17.6855 10.0295C17.7544 9.84354 17.7836 9.64517 17.7712 9.4472C17.7823 9.25207 17.7525 9.05676 17.6836 8.87386C17.6147 8.69095 17.5083 8.5245 17.3712 8.38521C17.052 8.1356 16.6584 8 16.2532 8C15.848 8 15.4544 8.1356 15.1352 8.38521C14.9968 8.52756 14.8898 8.69726 14.8209 8.88342C14.752 9.06958 14.7228 9.26809 14.7352 9.4662C14.7242 9.66117 14.7541 9.85629 14.823 10.039C14.8918 10.2217 14.9982 10.388 15.1352 10.5272C15.4423 10.7976 15.8437 10.9359 16.2522 10.9122Z" fill="#FAFAFA"/>
-<path d="M14 12.2461V13.3651H14.976V22.5011H17.531V12.2461H14Z" fill="#FAFAFA"/>
-</svg>
diff --git a/SettingMainGadget/resources/datetime.svg b/SettingMainGadget/resources/datetime.svg
deleted file mode 100644 (file)
index 6563ebe..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M27.1867 17.008C26.6552 16.3896 25.9794 15.9118 25.2191 15.6169C24.4588 15.322 23.6376 15.2191 22.828 15.3174C22.0185 15.4157 21.2458 15.7121 20.5782 16.1804C19.9106 16.6486 19.3687 17.2743 19.0007 18.002C18.6326 18.7296 18.4497 19.5368 18.4681 20.3521C18.4865 21.1674 18.7056 21.9655 19.1061 22.6758C19.5066 23.3862 20.0761 23.9868 20.7641 24.4244C21.4522 24.8621 22.2376 25.1234 23.0507 25.1851C23.178 25.1951 23.3057 25.2 23.4337 25.2C24.3821 25.1987 25.3103 24.9253 26.1081 24.4125C26.9059 23.8996 27.5398 23.1687 27.9349 22.3065C28.3299 21.4442 28.4694 20.4868 28.3368 19.5477C28.2042 18.6086 27.805 17.7272 27.1867 17.008ZM25.9717 23.2031C25.4941 23.6135 24.9243 23.9025 24.311 24.0453C23.6976 24.1881 23.0588 24.1805 22.449 24.0231C21.8391 23.8658 21.2764 23.5634 20.8087 23.1416C20.341 22.7199 19.9822 22.1913 19.7628 21.601C19.5434 21.0107 19.47 20.376 19.5488 19.7512C19.6276 19.1264 19.8562 18.5299 20.2153 18.0125C20.5744 17.4951 21.0532 17.0722 21.6109 16.7797C22.1687 16.4873 22.7889 16.3341 23.4187 16.333C23.5187 16.333 23.6187 16.333 23.7187 16.344C24.4892 16.4023 25.2252 16.6877 25.8335 17.1642C26.4419 17.6408 26.8952 18.287 27.1363 19.0212C27.3773 19.7554 27.3953 20.5445 27.1878 21.2889C26.9803 22.0333 26.5567 22.6994 25.9707 23.2031H25.9717Z" fill="#FAFAFA"/>
-<path d="M18.5471 22.86H10.2081C9.68566 22.8592 9.18492 22.6513 8.81561 22.2818C8.44631 21.9123 8.23857 21.4114 8.23804 20.889V12.863H23.7161V14.713C24.1352 14.7348 24.5504 14.8039 24.954 14.919V11.21C24.9532 10.3595 24.6151 9.54395 24.0136 8.9425C23.4122 8.34106 22.5967 8.00281 21.7461 8.00201H21.0541V6.651C21.0541 6.47835 20.9855 6.31276 20.8634 6.19067C20.7413 6.06859 20.5757 6 20.4031 6H20.0031C19.8306 6.00026 19.6653 6.06898 19.5434 6.19104C19.4215 6.3131 19.3531 6.47852 19.3531 6.651V8.00201H16.826V6.651C16.826 6.47852 16.7576 6.3131 16.6357 6.19104C16.5139 6.06898 16.3486 6.00026 16.1761 6H15.7761C15.6036 6.00026 15.4383 6.06898 15.3164 6.19104C15.1945 6.3131 15.126 6.47852 15.126 6.651V8.00201H12.5701V6.651C12.5701 6.47835 12.5015 6.31276 12.3794 6.19067C12.2573 6.06859 12.0917 6 11.9191 6H11.519C11.3464 6 11.1808 6.06859 11.0587 6.19067C10.9366 6.31276 10.868 6.47835 10.868 6.651V8.00201H10.204C9.35347 8.00281 8.53797 8.34106 7.93652 8.9425C7.33508 9.54395 6.99689 10.3595 6.99609 11.21V20.89C6.99689 21.7407 7.33505 22.5563 7.93646 23.1579C8.53788 23.7595 9.35338 24.0979 10.204 24.099H19.4561C19.3761 24.017 19.2951 23.938 19.2201 23.851C18.9607 23.5459 18.7351 23.2136 18.5471 22.86ZM8.23804 11.209C8.23883 10.6868 8.44664 10.1862 8.81592 9.81689C9.18519 9.44762 9.68584 9.23981 10.2081 9.23901H10.8721V9.599C10.8721 9.68444 10.8889 9.76907 10.9216 9.84799C10.9544 9.92692 11.0023 9.99862 11.0628 10.059C11.1233 10.1194 11.195 10.1672 11.274 10.1998C11.353 10.2324 11.4376 10.2492 11.5231 10.249H11.923C12.0955 10.249 12.261 10.1806 12.3831 10.0587C12.5051 9.93682 12.5738 9.77148 12.574 9.599V9.23901H15.139V9.599C15.139 9.77139 15.2076 9.93673 15.3295 10.0586C15.4514 10.1805 15.6167 10.249 15.7891 10.249H16.1891C16.3615 10.249 16.5268 10.1805 16.6487 10.0586C16.7706 9.93673 16.8391 9.77139 16.8391 9.599V9.23901H19.3661V9.599C19.3661 9.77139 19.4346 9.93673 19.5565 10.0586C19.6784 10.1805 19.8437 10.249 20.0161 10.249H20.4161C20.5015 10.2492 20.5861 10.2324 20.6651 10.1998C20.7441 10.1672 20.8159 10.1194 20.8763 10.059C20.9368 9.99862 20.9848 9.92692 21.0175 9.84799C21.0502 9.76907 21.0671 9.68444 21.0671 9.599V9.23901H21.759C22.2813 9.23981 22.7819 9.44762 23.1512 9.81689C23.5205 10.1862 23.7283 10.6868 23.7291 11.209V11.624H8.23804V11.209Z" fill="#FAFAFA"/>
-<path d="M26.1592 20.2512H23.7343V17.7611C23.7298 17.6821 23.6952 17.6078 23.6376 17.5534C23.5801 17.499 23.5039 17.4688 23.4247 17.4688C23.3456 17.4688 23.2694 17.499 23.2119 17.5534C23.1543 17.6078 23.1197 17.6821 23.1152 17.7611V20.5612C23.1152 20.6434 23.1479 20.7222 23.2061 20.7803C23.2642 20.8385 23.343 20.8712 23.4252 20.8712H26.1602C26.2023 20.8736 26.2445 20.8673 26.2842 20.8528C26.3238 20.8384 26.3601 20.816 26.3907 20.787C26.4214 20.758 26.4458 20.7231 26.4625 20.6843C26.4792 20.6456 26.4879 20.6038 26.4879 20.5616C26.4879 20.5195 26.4792 20.4777 26.4625 20.439C26.4458 20.4002 26.4214 20.3653 26.3907 20.3363C26.3601 20.3073 26.3238 20.2849 26.2842 20.2704C26.2445 20.256 26.2023 20.2497 26.1602 20.2521L26.1592 20.2512Z" fill="#FAFAFA"/>
-</svg>
diff --git a/SettingMainGadget/resources/display.svg b/SettingMainGadget/resources/display.svg
deleted file mode 100644 (file)
index bbf9b7c..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
-  <path d="M16.5527 20.4454C19.2451 20.4454 21.4277 18.2623 21.4277 15.5694C21.4277 12.8764 19.2451 10.6934 16.5527 10.6934C13.8603 10.6934 11.6777 12.8764 11.6777 15.5694C11.6777 18.2623 13.8603 20.4454 16.5527 20.4454Z" stroke="#FAFAFA" stroke-width="1.15"/>
-  <path d="M24.885 14.8481C24.6713 14.8481 24.498 15.0211 24.498 15.2346C24.498 15.4481 24.6713 15.6211 24.885 15.6211H25.282C25.4958 15.6211 25.669 15.4481 25.669 15.2346C25.669 15.0211 25.4958 14.8481 25.282 14.8481H24.885Z" fill="#FAFAFA"/>
-  <path d="M24.885 14.8461C24.6713 14.8461 24.498 15.0192 24.498 15.2326C24.498 15.4461 24.6713 15.6191 24.885 15.6191H25.282C25.4958 15.6191 25.669 15.4461 25.669 15.2326C25.669 15.0192 25.4958 14.8461 25.282 14.8461H24.885Z" fill="#FAFAFA"/>
-  <path d="M7.44169 14.85C7.22795 14.85 7.05469 15.0231 7.05469 15.2365C7.05469 15.45 7.22795 15.623 7.44169 15.623H7.83869C8.05242 15.623 8.22569 15.45 8.22569 15.2365C8.22569 15.0231 8.05242 14.85 7.83869 14.85H7.44169Z" fill="#FAFAFA"/>
-  <path d="M7.44169 14.8481C7.22795 14.8481 7.05469 15.0211 7.05469 15.2346C7.05469 15.4481 7.22795 15.6211 7.44169 15.6211H7.83869C8.05242 15.6211 8.22569 15.4481 8.22569 15.2346C8.22569 15.0211 8.05242 14.8481 7.83869 14.8481H7.44169Z" fill="#FAFAFA"/>
-  <path d="M16.7535 6.44559C16.7535 6.23186 16.5804 6.05859 16.367 6.05859C16.1535 6.05859 15.9805 6.23186 15.9805 6.44559V6.84259C15.9805 7.05633 16.1535 7.22959 16.367 7.22959C16.5804 7.22959 16.7535 7.05633 16.7535 6.84259V6.44559Z" fill="#FAFAFA"/>
-  <path d="M16.7554 6.44559C16.7554 6.23186 16.5824 6.05859 16.3689 6.05859C16.1555 6.05859 15.9824 6.23186 15.9824 6.44559V6.84259C15.9824 7.05633 16.1555 7.22959 16.3689 7.22959C16.5824 7.22959 16.7554 7.05633 16.7554 6.84259V6.44559Z" fill="#FAFAFA"/>
-  <path d="M16.7535 23.9163C16.7535 23.7026 16.5804 23.5293 16.367 23.5293C16.1535 23.5293 15.9805 23.7026 15.9805 23.9163V24.3133C15.9805 24.527 16.1535 24.7003 16.367 24.7003C16.5804 24.7003 16.7535 24.527 16.7535 24.3133V23.9163Z" fill="#FAFAFA"/>
-  <path d="M16.7554 23.9163C16.7554 23.7026 16.5824 23.5293 16.3689 23.5293C16.1555 23.5293 15.9824 23.7026 15.9824 23.9163V24.3133C15.9824 24.527 16.1555 24.7003 16.3689 24.7003C16.5824 24.7003 16.7554 24.527 16.7554 24.3133V23.9163Z" fill="#FAFAFA"/>
-  <path d="M22.4541 8.85371C22.5952 8.69316 22.5796 8.44879 22.4192 8.30788C22.2589 8.16696 22.0145 8.18288 21.8734 8.34343L21.6114 8.64164C21.4703 8.80218 21.4859 9.04656 21.6462 9.18747C21.8066 9.32838 22.0509 9.31246 22.192 9.15192L22.4541 8.85371Z" fill="#FAFAFA"/>
-  <path d="M22.456 8.85371C22.5971 8.69316 22.5815 8.44878 22.4212 8.30787C22.2608 8.16696 22.0165 8.18288 21.8754 8.34343L21.6133 8.64164C21.4722 8.80219 21.4878 9.04657 21.6482 9.18748C21.8085 9.32839 22.0529 9.31247 22.194 9.15192L22.456 8.85371Z" fill="#FAFAFA"/>
-  <path d="M10.9697 22.0744C11.1108 21.9139 11.0952 21.6695 10.9349 21.5286C10.7745 21.3877 10.5302 21.4036 10.3891 21.5641L10.127 21.8623C9.9859 22.0229 10.0015 22.2673 10.1618 22.4082C10.3222 22.5491 10.5665 22.5332 10.7076 22.3726L10.9697 22.0744Z" fill="#FAFAFA"/>
-  <path d="M10.9717 22.0764C11.1128 21.9158 11.0971 21.6714 10.9368 21.5305C10.7765 21.3896 10.5321 21.4055 10.391 21.5661L10.129 21.8643C9.98786 22.0248 10.0035 22.2692 10.1638 22.4101C10.3241 22.551 10.5685 22.5351 10.7096 22.3746L10.9717 22.0764Z" fill="#FAFAFA"/>
-  <path d="M9.44316 10.2119C9.60371 10.353 9.84809 10.3374 9.989 10.177C10.1299 10.0167 10.114 9.77234 9.95345 9.63125L9.65524 9.36918C9.49469 9.22808 9.25031 9.24368 9.1094 9.40402C8.96849 9.56436 8.98441 9.80872 9.14496 9.94981L9.44316 10.2119Z" fill="#FAFAFA"/>
-  <path d="M9.44122 10.2139C9.60176 10.3549 9.84614 10.3393 9.98705 10.179C10.128 10.0187 10.112 9.7743 9.95149 9.63321L9.65328 9.37114C9.49273 9.23005 9.24835 9.24565 9.10744 9.406C8.96653 9.56634 8.98246 9.81069 9.14301 9.95179L9.44122 10.2139Z" fill="#FAFAFA"/>
-  <path d="M23.1072 21.1494C23.2678 21.2905 23.5122 21.2749 23.6531 21.1145C23.794 20.9542 23.7781 20.7098 23.6175 20.5687L23.3193 20.3067C23.1588 20.1656 22.9144 20.1812 22.7735 20.3415C22.6326 20.5019 22.6485 20.7462 22.809 20.8873L23.1072 21.1494Z" fill="#FAFAFA"/>
-  <path d="M23.1053 21.1514C23.2658 21.2924 23.5102 21.2768 23.6511 21.1165C23.792 20.9562 23.7761 20.7118 23.6156 20.5707L23.3173 20.3086C23.1568 20.1675 22.9124 20.1832 22.7715 20.3435C22.6306 20.5038 22.6465 20.7482 22.8071 20.8893L23.1053 21.1514Z" fill="#FAFAFA"/>
-  <path d="M24.8442 14.7589C24.5807 14.7589 24.3672 14.9725 24.3672 15.2359C24.3672 15.4993 24.5807 15.7129 24.8442 15.7129H25.3352C25.5986 15.7129 25.8122 15.4993 25.8122 15.2359C25.8122 14.9725 25.5986 14.7589 25.3352 14.7589H24.8442Z" fill="#FAFAFA"/>
-  <path d="M24.885 14.8481C24.6713 14.8481 24.498 15.0211 24.498 15.2346C24.498 15.4481 24.6713 15.6211 24.885 15.6211H25.282C25.4958 15.6211 25.669 15.4481 25.669 15.2346C25.669 15.0211 25.4958 14.8481 25.282 14.8481H24.885Z" fill="#FAFAFA"/>
-  <path d="M24.0371 15.2337V15.2347C24.0371 15.6185 24.3483 15.9297 24.7321 15.9297H25.4481C25.8319 15.9297 26.1431 15.6185 26.1431 15.2347V15.2337C26.1431 14.8498 25.8319 14.5387 25.4481 14.5387H24.7321C24.3483 14.5387 24.0371 14.8498 24.0371 15.2337Z" fill="#FAFAFA"/>
-  <path d="M7.38716 14.7608C7.12372 14.7608 6.91016 14.9744 6.91016 15.2378C6.91016 15.5013 7.12372 15.7148 7.38716 15.7148H7.87816C8.1416 15.7148 8.35516 15.5013 8.35516 15.2378C8.35516 14.9744 8.1416 14.7608 7.87816 14.7608H7.38716Z" fill="#FAFAFA"/>
-  <path d="M7.44169 14.85C7.22795 14.85 7.05469 15.0231 7.05469 15.2365C7.05469 15.45 7.22795 15.623 7.44169 15.623H7.83869C8.05242 15.623 8.22569 15.45 8.22569 15.2365C8.22569 15.0231 8.05242 14.85 7.83869 14.85H7.44169Z" fill="#FAFAFA"/>
-  <path d="M6.58008 15.2356V15.2366C6.58008 15.6205 6.89124 15.9316 7.27508 15.9316H7.99108C8.37492 15.9316 8.68608 15.6205 8.68608 15.2366V15.2356C8.68608 14.8518 8.37492 14.5406 7.99108 14.5406H7.27508C6.89124 14.5406 6.58008 14.8518 6.58008 15.2356Z" fill="#FAFAFA"/>
-  <path d="M16.8427 6.39106C16.8427 6.12762 16.6291 5.91406 16.3657 5.91406C16.1022 5.91406 15.8887 6.12762 15.8887 6.39106V6.88206C15.8887 7.1455 16.1022 7.35906 16.3657 7.35906C16.6291 7.35906 16.8427 7.1455 16.8427 6.88206V6.39106Z" fill="#FAFAFA"/>
-  <path d="M16.7535 6.44559C16.7535 6.23186 16.5804 6.05859 16.367 6.05859C16.1535 6.05859 15.9805 6.23186 15.9805 6.44559V6.84259C15.9805 7.05633 16.1535 7.22959 16.367 7.22959C16.5804 7.22959 16.7535 7.05633 16.7535 6.84259V6.44559Z" fill="#FAFAFA"/>
-  <path d="M17.0619 6.27898C17.0619 5.89515 16.7507 5.58398 16.3669 5.58398C15.983 5.58398 15.6719 5.89515 15.6719 6.27898V6.99498C15.6719 7.37882 15.983 7.68998 16.3669 7.68998C16.7507 7.68998 17.0619 7.37882 17.0619 6.99498V6.27898Z" fill="#FAFAFA"/>
-  <path d="M16.8427 23.8618C16.8427 23.5983 16.6291 23.3848 16.3657 23.3848C16.1022 23.3848 15.8887 23.5983 15.8887 23.8618V24.3528C15.8887 24.6162 16.1022 24.8298 16.3657 24.8298C16.6291 24.8298 16.8427 24.6162 16.8427 24.3528V23.8618Z" fill="#FAFAFA"/>
-  <path d="M16.7535 23.9163C16.7535 23.7026 16.5804 23.5293 16.367 23.5293C16.1535 23.5293 15.9805 23.7026 15.9805 23.9163V24.3133C15.9805 24.527 16.1535 24.7003 16.367 24.7003C16.5804 24.7003 16.7535 24.527 16.7535 24.3133V23.9163Z" fill="#FAFAFA"/>
-  <path d="M17.0619 23.7497C17.0619 23.3658 16.7507 23.0547 16.3669 23.0547C15.983 23.0547 15.6719 23.3658 15.6719 23.7497V24.4657C15.6719 24.8495 15.983 25.1607 16.3669 25.1607C16.7507 25.1607 17.0619 24.8495 17.0619 24.4657V23.7497Z" fill="#FAFAFA"/>
-  <path d="M22.556 8.87088C22.7299 8.67299 22.7105 8.3716 22.5126 8.1977C22.3147 8.02379 22.0133 8.04323 21.8394 8.24111L21.5153 8.60993C21.3414 8.80781 21.3608 9.1092 21.5587 9.28311C21.7566 9.45701 22.058 9.43757 22.2319 9.23969L22.556 8.87088Z" fill="#FAFAFA"/>
-  <path d="M22.4541 8.85371C22.5952 8.69316 22.5796 8.44879 22.4192 8.30788C22.2589 8.16696 22.0145 8.18288 21.8734 8.34343L21.6114 8.64164C21.4703 8.80218 21.4859 9.04656 21.6462 9.18747C21.8066 9.32838 22.0509 9.31246 22.192 9.15192L22.4541 8.85371Z" fill="#FAFAFA"/>
-  <path d="M22.7337 7.95163L22.733 7.95097C22.4447 7.69759 22.0055 7.72592 21.7522 8.01424L21.2795 8.55207C21.0261 8.8404 21.0545 9.27954 21.3428 9.53291L21.3435 9.53357C21.6319 9.78695 22.071 9.75863 22.3244 9.4703L22.797 8.93247C23.0504 8.64415 23.0221 8.20501 22.7337 7.95163Z" fill="#FAFAFA"/>
-  <path d="M11.0716 22.0916C11.2455 21.8937 11.2261 21.5923 11.0282 21.4184C10.8303 21.2445 10.5289 21.2639 10.355 21.4618L10.0309 21.8306C9.85701 22.0285 9.87645 22.3299 10.0743 22.5038C10.2722 22.6777 10.5736 22.6583 10.7475 22.4604L11.0716 22.0916Z" fill="#FAFAFA"/>
-  <path d="M10.9697 22.0744C11.1108 21.9139 11.0952 21.6695 10.9349 21.5286C10.7745 21.3877 10.5302 21.4036 10.3891 21.5641L10.127 21.8623C9.9859 22.0229 10.0015 22.2673 10.1618 22.4082C10.3222 22.5491 10.5665 22.5332 10.7076 22.3726L10.9697 22.0744Z" fill="#FAFAFA"/>
-  <path d="M11.2494 21.1723L11.2486 21.1717C10.9603 20.9183 10.5212 20.9466 10.2678 21.2349L9.79513 21.7728C9.54175 22.0611 9.57008 22.5002 9.85841 22.7536L9.85916 22.7543C10.1475 23.0077 10.5866 22.9793 10.84 22.691L11.3126 22.1532C11.566 21.8648 11.5377 21.4257 11.2494 21.1723Z" fill="#FAFAFA"/>
-  <path d="M9.42405 10.3138C9.62193 10.4877 9.92332 10.4683 10.0972 10.2704C10.2711 10.0725 10.2517 9.77113 10.0538 9.59723L9.685 9.2731C9.48711 9.0992 9.18572 9.11863 9.01181 9.31652C8.83791 9.5144 8.85735 9.81579 9.05523 9.9897L9.42405 10.3138Z" fill="#FAFAFA"/>
-  <path d="M9.44316 10.2119C9.60371 10.353 9.84809 10.3374 9.989 10.177C10.1299 10.0167 10.114 9.77234 9.95345 9.63125L9.65524 9.36918C9.49469 9.22808 9.25031 9.24368 9.1094 9.40402C8.96849 9.56436 8.98441 9.80872 9.14496 9.94981L9.44316 10.2119Z" fill="#FAFAFA"/>
-  <path d="M9.36506 10.5541C9.65339 10.8075 10.0925 10.7791 10.3459 10.4908C10.5993 10.2025 10.571 9.76335 10.2826 9.50997L9.7448 9.03732C9.45648 8.78394 9.01734 8.81227 8.76396 9.10059C8.51058 9.38892 8.53891 9.82806 8.82723 10.0814L9.36506 10.5541Z" fill="#FAFAFA"/>
-  <path d="M23.0881 21.2513C23.286 21.4252 23.5874 21.4058 23.7613 21.2079C23.9352 21.01 23.9158 20.7086 23.7179 20.5347L23.3491 20.2106C23.1512 20.0367 22.8498 20.0561 22.6759 20.254C22.502 20.4519 22.5214 20.7533 22.7193 20.9272L23.0881 21.2513Z" fill="#FAFAFA"/>
-  <path d="M23.1053 21.1494C23.2658 21.2905 23.5102 21.2749 23.6511 21.1145C23.792 20.9542 23.7761 20.7098 23.6156 20.5687L23.3173 20.3067C23.1568 20.1656 22.9124 20.1812 22.7715 20.3415C22.6306 20.5019 22.6465 20.7462 22.8071 20.8873L23.1053 21.1494Z" fill="#FAFAFA"/>
-  <path d="M23.0272 21.4896C23.3155 21.743 23.7546 21.7147 24.008 21.4264C24.2614 21.138 24.2331 20.6989 23.9447 20.4455L23.4069 19.9729C23.1186 19.7195 22.6794 19.7478 22.4261 20.0361C22.1727 20.3245 22.201 20.7636 22.4893 21.017L23.0272 21.4896Z" fill="#FAFAFA"/>
-</svg>
diff --git a/SettingMainGadget/resources/fonts/ClimateCrisis-Regular.ttf b/SettingMainGadget/resources/fonts/ClimateCrisis-Regular.ttf
deleted file mode 100644 (file)
index ea19ff2..0000000
Binary files a/SettingMainGadget/resources/fonts/ClimateCrisis-Regular.ttf and /dev/null differ
diff --git a/SettingMainGadget/resources/fonts/DancingScript-Regular.ttf b/SettingMainGadget/resources/fonts/DancingScript-Regular.ttf
deleted file mode 100644 (file)
index 076e5c9..0000000
Binary files a/SettingMainGadget/resources/fonts/DancingScript-Regular.ttf and /dev/null differ
diff --git a/SettingMainGadget/resources/fonts/Sono-Regular.ttf b/SettingMainGadget/resources/fonts/Sono-Regular.ttf
deleted file mode 100644 (file)
index dcefea6..0000000
Binary files a/SettingMainGadget/resources/fonts/Sono-Regular.ttf and /dev/null differ
diff --git a/SettingMainGadget/resources/language_input.svg b/SettingMainGadget/resources/language_input.svg
deleted file mode 100644 (file)
index a698d08..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M16 24C14.4177 24 12.871 23.5308 11.5554 22.6518C10.2398 21.7727 9.21443 20.5232 8.60893 19.0614C8.00343 17.5996 7.84505 15.9911 8.15373 14.4392C8.46241 12.8874 9.22431 11.4619 10.3431 10.3431C11.4619 9.22429 12.8874 8.4624 14.4393 8.15372C15.9911 7.84504 17.5996 8.00348 19.0614 8.60898C20.5233 9.21448 21.7727 10.2399 22.6518 11.5555C23.5308 12.871 24 14.4177 24 16C23.9976 18.121 23.154 20.1544 21.6542 21.6542C20.1544 23.154 18.121 23.9976 16 24ZM16 9.20999C14.6571 9.20979 13.3442 9.6078 12.2275 10.3537C11.1108 11.0997 10.2403 12.16 9.72624 13.4007C9.21214 14.6413 9.07748 16.0065 9.33928 17.3237C9.60108 18.6409 10.2475 19.8508 11.197 20.8006C12.1465 21.7503 13.3562 22.3971 14.6733 22.6593C15.9904 22.9215 17.3557 22.7873 18.5965 22.2735C19.8373 21.7598 20.8979 20.8897 21.6442 19.7732C22.3904 18.6567 22.7888 17.3439 22.789 16.001C22.7866 14.201 22.0706 12.4753 20.798 11.2024C19.5254 9.92938 17.8 9.2129 16 9.20999Z" fill="#FAFAFA"/>
-<path d="M23.0013 14.5828H9.00134C8.84135 14.5763 8.69003 14.5083 8.5791 14.3928C8.46817 14.2773 8.40625 14.1234 8.40625 13.9633C8.40625 13.8031 8.46817 13.6492 8.5791 13.5338C8.69003 13.4183 8.84135 13.3502 9.00134 13.3438H23.0013C23.1613 13.3502 23.3127 13.4183 23.4236 13.5338C23.5345 13.6492 23.5964 13.8031 23.5964 13.9633C23.5964 14.1234 23.5345 14.2773 23.4236 14.3928C23.3127 14.5083 23.1613 14.5763 23.0013 14.5828Z" fill="#FAFAFA"/>
-<path d="M22.8639 19.197H9.20789C9.04345 19.197 8.88574 19.1317 8.76947 19.0154C8.6532 18.8992 8.58789 18.7415 8.58789 18.577C8.58789 18.4126 8.6532 18.2549 8.76947 18.1386C8.88574 18.0223 9.04345 17.957 9.20789 17.957H22.8639C23.0283 17.957 23.186 18.0223 23.3023 18.1386C23.4186 18.2549 23.4839 18.4126 23.4839 18.577C23.4839 18.7415 23.4186 18.8992 23.3023 19.0154C23.186 19.1317 23.0283 19.197 22.8639 19.197Z" fill="#FAFAFA"/>
-<path d="M15.9121 23.9074C13.9121 23.9074 12.8711 19.9234 12.8711 15.9884C12.8711 12.0534 13.9151 8.06836 15.9121 8.06836C17.9091 8.06836 18.9531 12.0524 18.9531 15.9884C18.9531 19.9244 17.9121 23.9074 15.9121 23.9074ZM15.9121 9.27936C15.3011 9.27936 14.1121 11.6474 14.1121 15.9884C14.1121 20.3294 15.3031 22.6974 15.9121 22.6974C16.5481 22.6974 17.7121 20.1504 17.7121 15.9884C17.7121 11.8264 16.5531 9.27936 15.9121 9.27936Z" fill="#FAFAFA"/>
-</svg>
diff --git a/SettingMainGadget/resources/media/Ringtones/ringtone_sdk.mp3 b/SettingMainGadget/resources/media/Ringtones/ringtone_sdk.mp3
deleted file mode 100644 (file)
index f159e35..0000000
Binary files a/SettingMainGadget/resources/media/Ringtones/ringtone_sdk.mp3 and /dev/null differ
diff --git a/SettingMainGadget/resources/sound.svg b/SettingMainGadget/resources/sound.svg
deleted file mode 100644 (file)
index 412365a..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
-  <path d="M18.0103 7.8111C17.7667 7.68842 17.4938 7.63607 17.2221 7.65992C16.9504 7.68376 16.6908 7.78287 16.4723 7.94611L11.3573 11.7551H8.70129C8.12549 11.7559 7.57348 11.985 7.16632 12.3921C6.75916 12.7993 6.53009 13.3513 6.5293 13.9271V17.4801C6.53009 18.0559 6.75916 18.6079 7.16632 19.0151C7.57348 19.4222 8.12549 19.6513 8.70129 19.6521H11.5323L16.4663 23.3621C16.6848 23.5261 16.9446 23.626 17.2167 23.6506C17.4887 23.6752 17.7623 23.6236 18.0067 23.5015C18.2511 23.3794 18.4566 23.1917 18.6003 22.9594C18.744 22.7271 18.8202 22.4593 18.8203 22.1861V9.12711C18.8213 8.85406 18.746 8.58616 18.6029 8.35363C18.4598 8.1211 18.2545 7.93318 18.0103 7.8111ZM17.4483 22.1821C17.4495 22.2007 17.4449 22.2192 17.4353 22.2351C17.4256 22.251 17.4113 22.2636 17.3943 22.2711C17.3786 22.2798 17.3606 22.2836 17.3427 22.2818C17.3248 22.28 17.3079 22.2728 17.2943 22.2611L11.9943 18.2771H10.3673V16.0721C10.3673 15.89 10.2949 15.7154 10.1662 15.5867C10.0375 15.4579 9.86286 15.3856 9.68079 15.3856C9.49871 15.3856 9.32409 15.4579 9.19534 15.5867C9.0666 15.7154 8.99429 15.89 8.99429 16.0721V18.2801H8.70529C8.49312 18.2801 8.28962 18.1958 8.13959 18.0458C7.98956 17.8958 7.90527 17.6923 7.90527 17.4801V13.9311C7.90527 13.7189 7.98956 13.5155 8.13959 13.3654C8.28962 13.2154 8.49312 13.1311 8.70529 13.1311H10.9243V15.4621C10.9243 15.6442 10.9966 15.8188 11.1254 15.9475C11.2541 16.0763 11.4287 16.1486 11.6108 16.1486C11.7929 16.1486 11.9675 16.0763 12.0962 15.9475C12.225 15.8188 12.2973 15.6442 12.2973 15.4621V12.7731L17.2973 9.0501C17.3109 9.03831 17.3279 9.03112 17.3458 9.0295C17.3638 9.02789 17.3818 9.03193 17.3973 9.0411C17.4142 9.04845 17.4285 9.06085 17.4382 9.07659C17.4478 9.09233 17.4524 9.11067 17.4513 9.12911L17.4483 22.1821Z" fill="#FAFAFA"/>
-  <path d="M24.4972 21.3797C24.3683 21.38 24.2421 21.3435 24.1332 21.2747C23.9789 21.1781 23.8693 21.0242 23.8285 20.8468C23.7876 20.6694 23.8188 20.4831 23.9152 20.3287C24.7805 18.9438 25.2104 17.3311 25.1495 15.6992C25.0885 14.0673 24.5394 12.4912 23.5732 11.1747C23.5161 11.1024 23.4743 11.0193 23.45 10.9304C23.4258 10.8415 23.4196 10.7487 23.432 10.6574C23.4443 10.5661 23.4749 10.4782 23.5219 10.399C23.5689 10.3198 23.6314 10.2508 23.7055 10.1962C23.7797 10.1416 23.8642 10.1025 23.9538 10.0812C24.0434 10.0598 24.1364 10.0568 24.2272 10.0721C24.3181 10.0874 24.4049 10.1209 24.4825 10.1705C24.5602 10.2201 24.627 10.2848 24.6792 10.3607C25.8088 11.8995 26.4508 13.7417 26.5221 15.6493C26.5934 17.5568 26.0908 19.4419 25.0792 21.0607C25.017 21.1587 24.931 21.2394 24.8293 21.2952C24.7275 21.3509 24.6132 21.38 24.4972 21.3797Z" fill="#FAFAFA"/>
-  <path d="M21.7329 20.2081C21.6052 20.2083 21.4799 20.1728 21.3712 20.1058C21.2625 20.0387 21.1746 19.9426 21.1175 19.8283C21.0603 19.7141 21.0362 19.5861 21.0477 19.4589C21.0593 19.3317 21.1061 19.2102 21.1829 19.1081C21.8499 18.2129 22.2114 17.127 22.2143 16.0107C22.2172 14.8944 21.8612 13.8067 21.1989 12.9081C21.1414 12.8358 21.099 12.7527 21.0743 12.6637C21.0496 12.5747 21.043 12.4816 21.0551 12.3901C21.0672 12.2985 21.0977 12.2103 21.1446 12.1307C21.1916 12.0512 21.2541 11.9819 21.3284 11.9271C21.4028 11.8723 21.4874 11.833 21.5773 11.8116C21.6672 11.7902 21.7604 11.7872 21.8515 11.8027C21.9425 11.8182 22.0295 11.8519 22.1073 11.9018C22.185 11.9517 22.2519 12.0168 22.3039 12.0931C23.1401 13.2289 23.5894 14.6032 23.5856 16.0135C23.5818 17.4239 23.1252 18.7958 22.2829 19.9271C22.2196 20.0136 22.1368 20.0841 22.0413 20.1329C21.9458 20.1817 21.8402 20.2074 21.7329 20.2081Z" fill="#FAFAFA"/>
-</svg>
diff --git a/SettingMainGadget/resources/sound/sound_slider_icon_default.png b/SettingMainGadget/resources/sound/sound_slider_icon_default.png
deleted file mode 100644 (file)
index c534eb8..0000000
Binary files a/SettingMainGadget/resources/sound/sound_slider_icon_default.png and /dev/null differ
diff --git a/SettingMainGadget/resources/storage.svg b/SettingMainGadget/resources/storage.svg
deleted file mode 100644 (file)
index 6083204..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M16.5027 15.512L15.7307 8L15.1397 8.06401C13.2094 8.27106 11.4205 9.17363 10.107 10.6032C8.79348 12.0328 8.04522 13.8916 8.00198 15.8324C7.95875 17.7733 8.62345 19.6636 9.87198 21.1502C11.1205 22.6369 12.8675 23.6182 14.7867 23.911C15.1886 23.9703 15.5943 24 16.0006 24C17.9182 24.0004 19.7721 23.312 21.2246 22.0602C22.6772 20.8084 23.6318 19.0766 23.9146 17.18L24.0006 16.594L16.5027 15.512ZM20.1026 21.444C19.2856 22.0627 18.3395 22.4891 17.3347 22.6914C16.33 22.8937 15.2926 22.8668 14.2998 22.6125C13.3069 22.3583 12.3842 21.8833 11.6004 21.223C10.8165 20.5627 10.1918 19.7341 9.77267 18.7988C9.35352 17.8635 9.15078 16.8458 9.17954 15.8213C9.20829 14.7968 9.4678 13.792 9.93875 12.8818C10.4097 11.9715 11.0799 11.1792 11.8996 10.5639C12.7192 9.94861 13.6671 9.52615 14.6726 9.328L15.4146 16.549L22.6377 17.593C22.2713 19.1333 21.3759 20.4962 20.1076 21.444H20.1026Z" fill="#FAFAFA"/>
-<path d="M16.8215 9.24952C18.3422 9.42677 19.7582 10.1137 20.8387 11.1985C21.9191 12.2833 22.6004 13.702 22.7715 15.2235C22.7881 15.3676 22.8571 15.5006 22.9653 15.5971C23.0735 15.6937 23.2135 15.7473 23.3585 15.7475C23.3805 15.7475 23.4035 15.7475 23.4275 15.7475C23.5832 15.7295 23.7253 15.6503 23.8226 15.5275C23.92 15.4047 23.9645 15.2482 23.9465 15.0925C23.7456 13.3066 22.9459 11.6413 21.6777 10.3678C20.4096 9.09438 18.7476 8.28783 16.9625 8.07952C16.8071 8.06303 16.6514 8.10782 16.5285 8.20437C16.4056 8.30092 16.3252 8.44162 16.3045 8.59652C16.287 8.75157 16.3316 8.90724 16.4284 9.02957C16.5253 9.1519 16.6665 9.23097 16.8215 9.24952V9.24952Z" fill="#FAFAFA"/>
-</svg>
diff --git a/SettingMainGadget/resources/tizen-manifest.xml b/SettingMainGadget/resources/tizen-manifest.xml
deleted file mode 100644 (file)
index 00c3220..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns="http://tizen.org/ns/packages" api-version="6.5"
-  package="org.tizen.settings.main" version="1.1.6"
-  res-type="org.tizen.appfw.gadget.Settings" res-version="1.5.0">
-  <allowed-package id="org.tizen.*">
-    <required-privileges>
-      <!--sound-->
-      <privilege>http://tizen.org/privilege/volume.set</privilege>
-      <!--display-->
-         <privilege>http://tizen.org/privilege/systemsettings.admin</privilege>
-               
-               <!--storage-->
-               <privilege>http://tizen.org/privilege/mediastorage</privilege>
-               <privilege>http://tizen.org/privilege/packagemanager.admin</privilege>
-               <privilege>http://tizen.org/privilege/packagemanager.clearcache</privilege>
-    </required-privileges>
-  </allowed-package>
-  <metadata key="http://tizen.org/metadata/ui-gadget/dll" value="SettingMainGadget.dll"/>
-</manifest>
diff --git a/SettingMainGadget/tizen_workspace.yaml b/SettingMainGadget/tizen_workspace.yaml
new file mode 100644 (file)
index 0000000..2174ae5
--- /dev/null
@@ -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: mobile
+#  Tizen API version
+api_version: 7.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:
+#  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.1.9
+#  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:
+#  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: C:\tizen-studio\tools\websimulator\sdk-profile-data
+#  Default path for Samsung Tizen TV Simulator
+tv_simulator_path: C:\tizen-studio\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: C:\tizen-studio-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:
+  SettingMainGadget: []
+#  Skip generating files needed for VS
+skip_vs_files: false
index 73cd05baa457afe6cce632fdb6d4cd6c566e3f73..123198a6c7b9230ec3a43671e8e28468f40a6a35 100644 (file)
@@ -23,7 +23,6 @@
   </ItemGroup>
 
   <ItemGroup>
-    <ProjectReference Include="..\SettingMainGadget\SettingMainGadget.csproj" />
     <ProjectReference Include="..\SettingCore\SettingCore.csproj" />
   </ItemGroup>
 
index c5b7fcfcf0c0edd5b7970861a96fb015ee4d80ea..39dc67613af4c1f69c53e607b9042d5567606030 100644 (file)
@@ -7,8 +7,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SettingView", "SettingView\
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SettingCore", "SettingCore\SettingCore.csproj", "{3A1849FF-1220-4F96-803C-3F505E6DFAE3}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SettingMainGadget", "SettingMainGadget\SettingMainGadget.csproj", "{A8E884F0-1FFE-42EA-9BA6-E40686F763D4}"
-EndProject
 Global
        GlobalSection(SolutionConfigurationPlatforms) = preSolution
                Debug|Any CPU = Debug|Any CPU
@@ -23,10 +21,6 @@ Global
                {3A1849FF-1220-4F96-803C-3F505E6DFAE3}.Debug|Any CPU.Build.0 = Debug|Any CPU
                {3A1849FF-1220-4F96-803C-3F505E6DFAE3}.Release|Any CPU.ActiveCfg = Release|Any CPU
                {3A1849FF-1220-4F96-803C-3F505E6DFAE3}.Release|Any CPU.Build.0 = Release|Any CPU
-               {A8E884F0-1FFE-42EA-9BA6-E40686F763D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-               {A8E884F0-1FFE-42EA-9BA6-E40686F763D4}.Debug|Any CPU.Build.0 = Debug|Any CPU
-               {A8E884F0-1FFE-42EA-9BA6-E40686F763D4}.Release|Any CPU.ActiveCfg = Release|Any CPU
-               {A8E884F0-1FFE-42EA-9BA6-E40686F763D4}.Release|Any CPU.Build.0 = Release|Any CPU
        EndGlobalSection
        GlobalSection(SolutionProperties) = preSolution
                HideSolutionNode = FALSE