<?xml version='1.0' encoding='utf-8'?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you 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.
-->

<widget id="whatever" version="1.1.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name short="Hello">HelloWorld</name>
    <description>
        A sample Apache Cordova application.
    </description>
    <author email="dev@cordova.com" href="http://cordova.io">
        Cordova Team
    </author>
    <license>Apache 2.0 License</license>
    <preference name="Orientation" value="landscape" />
    <preference name="StatusBarBackgroundColor" value="0xff0000ff"/>
    <plugin name="cordova-plugin-whitelist" spec="1" />
    <access origin="*" />
    <allow-intent href="http://*/*" />
    <allow-intent href="https://*/*" />
    <allow-intent href="tel:*" />
    <allow-intent href="sms:*" />
    <allow-intent href="mailto:*" />
    <allow-intent href="geo:*" />
    <platform name="android">
        <allow-intent href="market:*" />
    </platform>
    <platform name="ios">
        <allow-intent href="itms:*" />
        <allow-intent href="itms-apps:*" />
    </platform>
    <platform name="electron">
        <icon src="res/electron/cordova.png" />
        <icon src="res/electron/cordova@1.5.png" />
        <icon src="res/electron/cordova@2.png" />
        <icon src="res/electron/cordova@3.png" />
        <icon src="res/electron/cordova@4.png" />
        <icon src="res/electron/cordova@8.png" />
        <icon src="res/electron/cordova@16.png" />
        <icon src="res/electron/cordova_512.png" target="installer" />
    </platform>
    <engine name="electron" spec="github:Apache/cordova-electron" />
</widget>
