/* * 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. */ #include "WebForm.h" WebForm::WebForm(void) :__pWeb(null), __cordovaCommand(null) { geolocation = null; device = null; accel = null; network = null; console = null; compass = null; contacts = null; } WebForm::~WebForm(void) { } bool WebForm::Initialize() { return true; } result WebForm::OnInitializing(void) { result r = E_SUCCESS; // TODO: Add your initialization code here r = CreateWebControl(); if (IsFailed(r)) { AppLog("CreateMainForm() has failed.\n"); goto CATCH; } __pWeb->LoadUrl("file:///Res/index.html"); //__pWeb->LoadUrl("file:///Res/mobile-spec/index.html"); return r; CATCH: return false; } result WebForm::OnTerminating(void) { result r = E_SUCCESS; // delete __cordovaCommand; // delete geolocation; // delete device; // delete accel; // delete network; // delete console; // delete compass; // delete contacts; // delete notification; // delete camera; return r; } void WebForm::OnActionPerformed(const Osp::Ui::Control& source, int actionId) { switch(actionId) { default: break; } } void WebForm::LaunchBrowser(const String& url) { ArrayList* pDataList = null; pDataList = new ArrayList(); pDataList->Construct(); String* pData = null; pData = new String(L"url:"); pData->Append(url); AppLogDebug("Launching Stock Browser with %S", pData->GetPointer()); pDataList->Add(*pData); AppControl* pAc = AppManager::FindAppControlN(APPCONTROL_BROWSER, ""); if(pAc) { pAc->Start(pDataList, null); delete pAc; } pDataList->RemoveAll(true); delete pDataList; } bool WebForm::OnLoadingRequested (const Osp::Base::String& url, WebNavigationType type) { AppLogDebug("URL REQUESTED %S", url.GetPointer()); if(url.StartsWith("gap://", 0)) { // __cordovaCommand = null; __cordovaCommand = new String(url); // FIXME: for some reason this does not work if we return true. Web freezes. // __pWeb->StopLoading(); // String* test; // test = __pWeb->EvaluateJavascriptN(L"'test'"); // AppLogDebug("String is %S", test->GetPointer()); // delete test; // return true; return false; } else if(url.StartsWith("http://", 0) || url.StartsWith("https://", 0)) { AppLogDebug("Non Cordova command. External URL. Launching WebBrowser"); LaunchBrowser(url); return false; } return false; } void WebForm::OnLoadingCompleted() { // Setting DeviceInfo to initialize Cordova (should be done only once) and firing onNativeReady event String* deviceInfo; deviceInfo = __pWeb->EvaluateJavascriptN(L"window.device.uuid"); if(deviceInfo->IsEmpty()) { device->SetDeviceInfo(); __pWeb->EvaluateJavascriptN("Cordova.onNativeReady.fire();"); } else { //AppLogDebug("DeviceInfo = %S;", deviceInfo->GetPointer()); } delete deviceInfo; // Analyzing Cordova command if(__cordovaCommand) { if(__cordovaCommand->StartsWith(L"gap://org.apache.cordova.Geolocation", 0)) { geolocation->Run(*__cordovaCommand); } else if(__cordovaCommand->StartsWith(L"gap://org.apache.cordova.Accelerometer", 0)) { accel->Run(*__cordovaCommand); } else if(__cordovaCommand->StartsWith(L"gap://org.apache.cordova.Network", 0)) { network->Run(*__cordovaCommand); } else if(__cordovaCommand->StartsWith(L"gap://org.apache.cordova.DebugConsole", 0)) { console->Run(*__cordovaCommand); } else if(__cordovaCommand->StartsWith(L"gap://org.apache.cordova.Compass", 0)) { compass->Run(*__cordovaCommand); } else if(__cordovaCommand->StartsWith(L"gap://org.apache.cordova.Contacts", 0)) { contacts->Run(*__cordovaCommand); } else if(__cordovaCommand->StartsWith(L"gap://org.apache.cordova.Notification", 0)) { notification->Run(*__cordovaCommand); } else if(__cordovaCommand->StartsWith(L"gap://org.apache.cordova.Camera", 0)) { camera->Run(*__cordovaCommand); } // Tell the JS code that we got this command, and we're ready for another __pWeb->EvaluateJavascriptN(L"Cordova.queue.ready = true;"); delete __cordovaCommand; __cordovaCommand = null; } else { AppLogDebug("Non Cordova command completed"); } } result WebForm::CreateWebControl(void) { result r = E_SUCCESS; int screen_width = 0; int screen_height = 0; /*screen*/ r = SystemInfo::GetValue("ScreenWidth", screen_width); TryCatch(r == E_SUCCESS, , "SystemInfo: To get a value is failed"); r = SystemInfo::GetValue("ScreenHeight", screen_height); TryCatch(r == E_SUCCESS, , "SystemInfo: To get a value is failed"); /*Web*/ __pWeb = new Web(); r = __pWeb->Construct(Rectangle(0, 0, screen_width, screen_height - 38)); TryCatch(r == E_SUCCESS, ,"Web is not constructed\n "); r = this->AddControl(*__pWeb); TryCatch(r == E_SUCCESS, ,"Web is not attached\n "); __pWeb->SetLoadingListener(this); __pWeb->SetFocus(); if(__pWeb) { geolocation = new GeoLocation(__pWeb); device = new Device(__pWeb); accel = new Accelerometer(__pWeb); network = new Network(__pWeb); console = new DebugConsole(__pWeb); compass = new Compass(__pWeb); contacts = new Contacts(__pWeb); notification = new Notification(__pWeb); camera = new Kamera(__pWeb); } return r; CATCH: AppLog("Error = %s\n", GetErrorMessage(r)); return r; }