<!--
         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.
-->
<!DOCTYPE HTML>
<html>
  <head>
    <meta name="viewport" content="width=320; user-scalable=no" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
    <title>Cordova Tests</title>
      <link rel="stylesheet" href="master.css" type="text/css" media="screen" title="no title">
      <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
      <script type="text/javascript" charset="utf-8" src="main.js"></script>
      <script>
      function startActivity(className) {
          cordova.exec(function() {console.log("Success");}, function(e) {console.log("Error: "+e);}, "Activity", "start", [className]);
      };
      
      localStorage.lifecyclestatus = "";
      localStorage.backgroundstatus = "";
      </script>

  </head>
  <body onload="init();" id="stage" class="theme">
    <h1>Cordova Android Native Tests</h1>
    <div id="info">
        <h4>Cordova: <span id="cordova"> &nbsp;</span></h4>
        <h4>Deviceready: <span id="deviceready"> &nbsp;</span></h4>
     </div>
    <div id="info">
        <h4>Run each of the test activities below:</h4>
    </div>
    <button class="btn large" onclick="startActivity('org.apache.cordova.test.jqmtabbackbutton');">Backbutton jQM tab</button>
    <button class="btn large" onclick="startActivity('org.apache.cordova.test.backbuttonmultipage');">Backbutton with multiple pages</button>
    <button class="btn large" onclick="startActivity('org.apache.cordova.test.backgroundcolor');">Background Color</button>
    <button class="btn large" onclick="startActivity('org.apache.cordova.test.basicauth');">Basic Authentication</button>
    <button class="btn large" onclick="startActivity('org.apache.cordova.test.errorurl');">Error URL</button>
    <button class="btn large" onclick="startActivity('org.apache.cordova.test.fullscreen');">Full Screen</button>
    <button class="btn large" onclick="startActivity('org.apache.cordova.test.htmlnotfound');">HTML not found</button>
    <button class="btn large" onclick="startActivity('org.apache.cordova.test.iframe');">IFrame</button>
    <button class="btn large" onclick="startActivity('org.apache.cordova.test.lifecycle');">Lifecycle</button>
    <button class="btn large" onclick="startActivity('org.apache.cordova.test.loading');">Loading indicator</button>
    <button class="btn large" onclick="startActivity('org.apache.cordova.test.menus');">Menus</button>
    <button class="btn large" onclick="startActivity('org.apache.cordova.test.background');">No multitasking</button>
    <button class="btn large" onclick="startActivity('org.apache.cordova.test.splashscreen');">Splash screen</button>
    <button class="btn large" onclick="startActivity('org.apache.cordova.test.timeout');">Load timeout</button>
    <button class="btn large" onclick="startActivity('org.apache.cordova.test.userwebview');">User WebView/Client/Chrome</button>
    <button class="btn large" onclick="startActivity('org.apache.cordova.test.whitelist');">Whitelist</button>
    <button class="btn large" onclick="startActivity('org.apache.cordova.test.xhr');">XHR</button>
  </body>
</html>
