From 1e19ed6bcf68e3d4f682bb704bec0321050a9b4b Mon Sep 17 00:00:00 2001 From: Fred Grott Date: Tue, 13 Jan 2009 10:58:59 -0600 Subject: [PATCH 01/12] added copyright license blurbs --- src/com/nitobi/phonegap/AccelTuple.java | 23 +++++++++++++++++++- src/com/nitobi/phonegap/CameraHandler.java | 23 +++++++++++++++++++- src/com/nitobi/phonegap/CameraListener.java | 23 +++++++++++++++++++- src/com/nitobi/phonegap/DroidGap.java | 23 +++++++++++++++++++- src/com/nitobi/phonegap/GeoTuple.java | 23 +++++++++++++++++++- src/com/nitobi/phonegap/GpsListener.java | 23 +++++++++++++++++++- src/com/nitobi/phonegap/NetworkListener.java | 23 +++++++++++++++++++- src/com/nitobi/phonegap/Orientation.java | 23 +++++++++++++++++++- src/com/nitobi/phonegap/PhoneGap.java | 23 +++++++++++++++++++- 9 files changed, 198 insertions(+), 9 deletions(-) diff --git a/src/com/nitobi/phonegap/AccelTuple.java b/src/com/nitobi/phonegap/AccelTuple.java index aa78a975..a8c8ab34 100644 --- a/src/com/nitobi/phonegap/AccelTuple.java +++ b/src/com/nitobi/phonegap/AccelTuple.java @@ -1,5 +1,26 @@ package com.nitobi.phonegap; - +/* License (MIT) + * Copyright (c) 2008 Nitobi + * website: http://phonegap.com + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * “Software”), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ public class AccelTuple { public long accelX; public long accelY; diff --git a/src/com/nitobi/phonegap/CameraHandler.java b/src/com/nitobi/phonegap/CameraHandler.java index 5a065b4f..661f89fa 100644 --- a/src/com/nitobi/phonegap/CameraHandler.java +++ b/src/com/nitobi/phonegap/CameraHandler.java @@ -1,5 +1,26 @@ package com.nitobi.phonegap; - +/* License (MIT) + * Copyright (c) 2008 Nitobi + * website: http://phonegap.com + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * “Software”), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ import java.io.OutputStream; import java.text.SimpleDateFormat; diff --git a/src/com/nitobi/phonegap/CameraListener.java b/src/com/nitobi/phonegap/CameraListener.java index 20f425c4..9d50ed7c 100644 --- a/src/com/nitobi/phonegap/CameraListener.java +++ b/src/com/nitobi/phonegap/CameraListener.java @@ -1,5 +1,26 @@ package com.nitobi.phonegap; - +/* License (MIT) + * Copyright (c) 2008 Nitobi + * website: http://phonegap.com + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * “Software”), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ import java.io.FileNotFoundException; import java.io.OutputStream; import java.text.SimpleDateFormat; diff --git a/src/com/nitobi/phonegap/DroidGap.java b/src/com/nitobi/phonegap/DroidGap.java index e2fc81c8..bbf87673 100644 --- a/src/com/nitobi/phonegap/DroidGap.java +++ b/src/com/nitobi/phonegap/DroidGap.java @@ -1,5 +1,26 @@ package com.nitobi.phonegap; - +/* License (MIT) + * Copyright (c) 2008 Nitobi + * website: http://phonegap.com + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * “Software”), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field; diff --git a/src/com/nitobi/phonegap/GeoTuple.java b/src/com/nitobi/phonegap/GeoTuple.java index 60f618a0..a01f9ba9 100644 --- a/src/com/nitobi/phonegap/GeoTuple.java +++ b/src/com/nitobi/phonegap/GeoTuple.java @@ -1,5 +1,26 @@ package com.nitobi.phonegap; - +/* License (MIT) + * Copyright (c) 2008 Nitobi + * website: http://phonegap.com + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * “Software”), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ public class GeoTuple { public double lat; diff --git a/src/com/nitobi/phonegap/GpsListener.java b/src/com/nitobi/phonegap/GpsListener.java index 054100bb..d89f32c8 100644 --- a/src/com/nitobi/phonegap/GpsListener.java +++ b/src/com/nitobi/phonegap/GpsListener.java @@ -1,5 +1,26 @@ package com.nitobi.phonegap; - +/* License (MIT) + * Copyright (c) 2008 Nitobi + * website: http://phonegap.com + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * “Software”), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ import android.content.Context; import android.hardware.SensorManager; import android.location.Location; diff --git a/src/com/nitobi/phonegap/NetworkListener.java b/src/com/nitobi/phonegap/NetworkListener.java index d54f4794..42c8a926 100644 --- a/src/com/nitobi/phonegap/NetworkListener.java +++ b/src/com/nitobi/phonegap/NetworkListener.java @@ -1,5 +1,26 @@ package com.nitobi.phonegap; - +/* License (MIT) + * Copyright (c) 2008 Nitobi + * website: http://phonegap.com + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * “Software”), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ import android.content.Context; import android.hardware.SensorManager; import android.location.Location; diff --git a/src/com/nitobi/phonegap/Orientation.java b/src/com/nitobi/phonegap/Orientation.java index ae38e44e..05b1828f 100644 --- a/src/com/nitobi/phonegap/Orientation.java +++ b/src/com/nitobi/phonegap/Orientation.java @@ -1,5 +1,26 @@ package com.nitobi.phonegap; - +/* License (MIT) + * Copyright (c) 2008 Nitobi + * website: http://phonegap.com + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * “Software”), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ import android.content.Context; import android.hardware.SensorManager; diff --git a/src/com/nitobi/phonegap/PhoneGap.java b/src/com/nitobi/phonegap/PhoneGap.java index fef91410..65b61b4e 100644 --- a/src/com/nitobi/phonegap/PhoneGap.java +++ b/src/com/nitobi/phonegap/PhoneGap.java @@ -1,5 +1,26 @@ package com.nitobi.phonegap; - +/* License (MIT) + * Copyright (c) 2008 Nitobi + * website: http://phonegap.com + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * “Software”), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ import java.io.IOException; import android.content.Context; From ee2d4f720060a0386aca32eeb2aa195eaece4634 Mon Sep 17 00:00:00 2001 From: Fred Grott Date: Tue, 13 Jan 2009 11:26:10 -0600 Subject: [PATCH 02/12] added assets folder and modified gap.js file gap.js modfied to get Android stuff working, can now read OS properties via javascript and phoenGap properties --- assets/gap.js | 262 ++++++++++++++++++++++++ src/com/nitobi/phonegap/AccelTuple.java | 1 + 2 files changed, 263 insertions(+) create mode 100644 assets/gap.js diff --git a/assets/gap.js b/assets/gap.js new file mode 100644 index 00000000..54b30827 --- /dev/null +++ b/assets/gap.js @@ -0,0 +1,262 @@ +// Utils +/* License (MIT) + * Copyright (c) 2008 Nitobi + * website: http://phonegap.com + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * “Software”), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +try { + $ // Test if it is alread used +} catch(e) { + $ = function(id){ + return document.getElementById(id) + }; +} + +// Acceleration Handling + +var accelX = 0; +var accelY = 0; +var accelZ = 0; + +function gotAcceleration(x,y,z){ + x = eval(x); + y = eval(y); + z = eval(z); + if ((!isNaN(x)) && (!isNaN(y)) && (!isNaN(z))) { + accelX = x; + accelY = y; + accelZ = z; + } + return x + " " + y + " " + z; +} + +// A little more abstract + +var DEBUG = true; +if (!window.console || !DEBUG) { + console = { + log: function(){ + }, + error: function(){ + } + } +} + +var Device = { + + available: false, + model: "", + version: "", + uuid: "", + isIPhone: null, + isIPod: null, + isAndroid: null, + isSymbian: null, + isBlackberry: null, + whatPlatform: "", + osversion: "", + sdkfwversion: "", + + FNModel: "", + FNVersion: "", + FNOSVersion: "", + FNSDKFWVersion: "", + FNUUID: "", + FNGapVersion: "", + + + + init: function(model, version) { + + // We check against native appName in window.appName.exists() + // call to determine what platform as native AndroidName is + // DroidGap an diPhone is IPhoneGap and etc + // Than we can set the var for the if statements + // At this time we have no clear way + // to avoid having the library/framework user + // avoid the work of renaming window.AppTitle + // to their AppTitle + // yes the hack sucks..but its working at this point so.. + + + + + if (window.DroidGap) + { + Device.whatPlatform = "Android"; + + Device.model = window.DroidGap.getModel(); + + Device.version = window.DroidGap.getProductName(); + + Device.osversion = window.DroidGap.getOSVersion(); + + Device.sdkfwversion = window.DroidGap.getSDKVersion(); + + Device.available = true; + + Device.uuid = window.DroidGap.getUuid(); + + Device.gapVersion = window.DroidGap.getVersion(); + + } + if (window.IPhoneGap) + { + Device.whatPlatform = "IPhone"; + + Device.model = window.IPhoneGap.getModel(); + + Device.version = window.IPhoneGap.getProductName(); + + Device.osversion = window.IPhoneGap.getOSVersion(); + + Device.sdkfwversion = window.IPhonedGap.getSDKVersion(); + + Device.available = true; + + Device.uuid = window.IPhoneGap.getUuid(); + + Device.gapVersion = window.IPhoneGap.getVersion(); + + } + if (window.IPodGap) + { + Device.whatPlatform = "IPod"; + + Device.model = window.IPodGap.getModel(); + + Device.version = window.IPodGap.getProductName(); + + Device.osversion = window.IPodGap.getOSVersion(); + + Device.sdkfwversion = window.IPodGap.getSDKVersion(); + + Device.available = true; + + Device.uuid = window.IPodGap.getUuid(); + + Device.gapVersion = window.IPoddGap.getVersion(); + + } + + + }, + + exec: function(command) { + // Different platforms have different ways the js browser bridge is called + // to get a native object so we handle each difference + + + if (Device.available || Device.whatPlatform == "IPhone") { + try { + document.location = "gap:" + command; + } catch(e) { + console.log("Command '" + command + "' has not been executed, because of exception: " + e); + alert("Error executing command '" + command + "'.") + } + } + if (Device.available || Device.whatPlatform == "IPod") { + try { + document.location = "gap:" + command; + } catch(e) { + console.log("Command '" + command + "' has not been executed, because of exception: " + e); + alert("Error executing command '" + command + "'.") + } + } + if (Device.available || Device.whatPlatform == "Android") { + try { + document.location = "javascript:" + "window.DroidGap." + command + "()"; + } catch(e) { + console.log("Command '" + command + "' has not been executed, because of exception: " + e); + alert("Error executing command '" + command + "'.") + } + } + + }, + + Location: { + // available: true, + + lon: null, + lat: null, + callback: null, + + init: function() { + Device.exec("getloc"); + }, + + set: function(lat, lon) { + Device.Location.lat = lat; + Device.Location.lon = lon; + if(Device.Location.callback != null) { + Device.Location.callback(lat, lon) + Device.Location.callback = null; + } + }, + + wait: function(func) { + Device.Location.callback = func + Device.exec("getloc"); + } + + }, + + Image: { + + //available: true, + + callback: null, + + getFromPhotoLibrary: function() { + return Device.exec("getphoto" + ":" + Device.Image.callback) + }, + + getFromCamera: function() { + return Device.exec("getphoto" + ":" + Device.Image.callback) + }, + + getFromSavedPhotosAlbum: function() { + return Device.exec("getphoto" + ":" + Device.Image.callback) + } + + }, + + vibrate: function() { + return Device.exec("vibrate") + }, + + playSound: function(clip) { + xsound = "sound:"; + if (Device.whatPlatform == "Android") { + xsound = "playSound"; + return Device.exec(xsound + clip); + } + + return Device.exec(xsound + clip); + } + +} + +function gotLocation(lat, lon) { + return Device.Location.set(lat, lon) +} + diff --git a/src/com/nitobi/phonegap/AccelTuple.java b/src/com/nitobi/phonegap/AccelTuple.java index a8c8ab34..fb1c2dda 100644 --- a/src/com/nitobi/phonegap/AccelTuple.java +++ b/src/com/nitobi/phonegap/AccelTuple.java @@ -21,6 +21,7 @@ package com.nitobi.phonegap; * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + public class AccelTuple { public long accelX; public long accelY; From ba73ad2a29fecc4d403100c3f9658d77c7cd9684 Mon Sep 17 00:00:00 2001 From: Fred Grott Date: Wed, 14 Jan 2009 06:59:18 -0600 Subject: [PATCH 03/12] forgot the not Gap supported device if statement in my gap.js modifications --- assets/gap.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/assets/gap.js b/assets/gap.js index 54b30827..68e51f16 100644 --- a/assets/gap.js +++ b/assets/gap.js @@ -157,7 +157,18 @@ var Device = { Device.gapVersion = window.IPoddGap.getVersion(); } - + if (!window.DroidGap || !window.IPhoneGap || !window.IPodGap ) + { + Device.available = "__gap"; + Device.model = "__gap_device_model"; + Device.version = "__gap_device_version"; + Device.osversion = "_gap_device_os"; + Device.sdkfwversion = "_gap_device_sdkversion"; + + Device.gapVersion = "__gap_version"; + Device.uuid = "__gap_device_uniqueid"; + alert("GAP is not supported!"); + } }, From 6448e16d8236238f43de2fec4c108a26b0c203d2 Mon Sep 17 00:00:00 2001 From: Fred Grott Date: Wed, 14 Jan 2009 11:44:48 -0600 Subject: [PATCH 04/12] added demo2 stuff so that any PhoneGap_andorid library user can run demo2 and see it working --- assets/backButton.png | Bin 0 -> 816 bytes assets/blueButton.png | Bin 0 -> 517 bytes assets/cancel.png | Bin 0 -> 362 bytes assets/grayButton.png | Bin 0 -> 943 bytes assets/index.html | 151 ++++++++++++++++ assets/iui.css | 372 ++++++++++++++++++++++++++++++++++++++ assets/iui.js | 383 ++++++++++++++++++++++++++++++++++++++++ assets/listArrow.png | Bin 0 -> 259 bytes assets/listArrowSel.png | Bin 0 -> 308 bytes assets/listGroup.png | Bin 0 -> 2867 bytes assets/loading.gif | Bin 0 -> 1435 bytes assets/pinstripes.png | Bin 0 -> 117 bytes assets/selection.png | Bin 0 -> 159 bytes assets/thumb.png | Bin 0 -> 2835 bytes assets/toggle.png | Bin 0 -> 2815 bytes assets/toggleOn.png | Bin 0 -> 163 bytes assets/toolButton.png | Bin 0 -> 531 bytes assets/toolbar.png | Bin 0 -> 171 bytes assets/whiteButton.png | Bin 0 -> 978 bytes 19 files changed, 906 insertions(+) create mode 100644 assets/backButton.png create mode 100644 assets/blueButton.png create mode 100644 assets/cancel.png create mode 100644 assets/grayButton.png create mode 100644 assets/index.html create mode 100644 assets/iui.css create mode 100644 assets/iui.js create mode 100644 assets/listArrow.png create mode 100644 assets/listArrowSel.png create mode 100644 assets/listGroup.png create mode 100644 assets/loading.gif create mode 100644 assets/pinstripes.png create mode 100644 assets/selection.png create mode 100644 assets/thumb.png create mode 100644 assets/toggle.png create mode 100644 assets/toggleOn.png create mode 100644 assets/toolButton.png create mode 100644 assets/toolbar.png create mode 100644 assets/whiteButton.png diff --git a/assets/backButton.png b/assets/backButton.png new file mode 100644 index 0000000000000000000000000000000000000000..e27ea8cdf9a4f3b35c78f6bb0a407a4047e72e12 GIT binary patch literal 816 zcmV-01JC@4P)bjHXOOu;C=bm%!b8qQKFBYiNkNO|%7ySIJu2Y@Z0Ra$@|h{{KDF!wUiay4ePIl$1|oy7p)(1ow7 zpJZTzo@Ujo_5>tq2Mlrozr48EHFO7XNgA_29ANiNAo}}5{S52Sbo1IDYVdhwS+_Wy zoKFX!%mpCCX3~4hOG}-xdkE2FW}D0a0cPL4n(>DQ$e1)=fCCL&TtG%ONRX*&K$Hs1 z^0Wo3~(tBk?t!FTGG|Z4oXdx zId|<57s|Dp6h>m#K}vyEsFVO0D?%#V(Rz3m{w?xMP4Uv?Xp}Cb@AZxCtZ0}cc6*JNbM-_bh@vw>o;~9>&@|ZG&9()b uZiGWt*08@evNu^#lbM`SC`$WRfB^uXx!j#d-gDys00006a2G$37eJC1 zL6jIkkr_sy8b+TQNTnJ{ryEPG98R(wN1Gi_wH;8m9Z|X-OQs%7s2)_n9#p{}Rl^@v z#UEG3Aw!5EM2R9qhayFZB464gM~)*%kR)Q>CrXbeWZx)Cjwn*4DpRK}PK_>U;4fOR zFlyj4ZQwa@;X!xfLwMsxdgDlGuSsvbO@HK6gymI&z*vXoS%~IaiRNI9=VXuQXOie{ zi?eTqv2l&Fa)_mKiKTOkymODWb&jxhkFa)+v3i!di=fGsp0SywyPT-NrL)GTwa4zB zu!H~r0J=#;K~xyijmXy$!9W;>;SV7zS{9M$y@u#r5MA#7g3PRw{bw9_&fXWkf9`}J z1UhHm$9o*K`Xixl1;=mfRA;%_3Y(>)9#FT}61$1aVkKFm!Dj@AF(nLS9U==pBsfww zkwRiXBoOZsal{%#3|fuQz{&)Jk|Pu-Ch=p0=?EiFM-h38D55||>5ox0_qa}&ZhXto+2n%b?bJ&~1lBv41sCu<^TcbQd%6WH^KYEFCb>M6lGmB5Yk=QN{x?{B^{XMUP{gvn9ib>3s1 zH?T*~9Jgun6TdTj{!@8wKFcS3#uNS_qcgE!iy1C(p6~dcyy%V`I28q33JVB*RL#r1M2rxNM@=b3by}%6L@3@8Q0(;Sjy)I%7R94p3rUrL+5@vYP9ueYhGNu!f<0K{ z6jZFp!Ms?N02!A_izYnYs}jO#5=IGxf>i&EI&r&A$;Ao;v{Q&GzhTh211rL@0i)f{HoZbRpr95k0S}e8R{OJAhV^m zVT~$T*zmi;G~u6yM`To3i(J}zY2;8J+w=0jrP6Hlo2*N(m38k%-Zx1Wb%chJ@D#tXX2=Gj8NT9dY=dKxAd2~TYrWSK?vHPKQnOR$Xu2W z@F?C`kpoFcLh3r{rh6<8&6e4_FzVbJ4v);cu+VsUvlbeh)3e&tvP2q>->GC8B#}LN z%8uzS4Z0iK+Y>EUv$=F_r`(+jHR@W%5@W` + + + + + +PhoneGap 0.1 + + + + + + + +
+

Main

+ +
+ + + +
+

PhoneGap

+
+ +
+ + +
+
+ +

Device

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ +
+ +

Location

+
+
+ + +
+
+ + +
+ +
+ +
+ +
+ +

Accelerometer

+
+
+ + +
+
+ + +
+
+ + +
+
+
+ + + +
\ No newline at end of file diff --git a/assets/iui.css b/assets/iui.css new file mode 100644 index 00000000..b11dc483 --- /dev/null +++ b/assets/iui.css @@ -0,0 +1,372 @@ +/* iui.css (c) 2007 by iUI Project Members, see LICENSE.txt for license */ +body { + margin: 0; + font-family: Helvetica; + background: #FFFFFF; + color: #000000; + overflow-x: hidden; + -webkit-user-select: none; + -webkit-text-size-adjust: none; +} + +body > *:not(.toolbar) { + display: none; + position: absolute; + margin: 0; + padding: 0; + left: 0; + top: 45px; + width: 100%; + min-height: 372px; +} + +body[orient="landscape"] > *:not(.toolbar) { + min-height: 268px; +} + +body > *[selected="true"] { + display: block; +} + +a[selected], a:active { + background-color: #194fdb !important; + background-image: url(file:///android_asset/listArrowSel.png), url(file:///android_asset/selection.png) !important; + background-repeat: no-repeat, repeat-x; + background-position: right center, left top; + color: #FFFFFF !important; +} + +a[selected="progress"] { + background-image: url(file:///android_asset/loading.gif), url(file:///android_asset/selection.png) !important; +} + +/************************************************************************************************/ + +body > .toolbar { + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + border-bottom: 1px solid #2d3642; + border-top: 1px solid #6d84a2; + padding: 10px; + height: 45px; + background: url(file:///android_asset/toolbar.png) #6d84a2 repeat-x; +} + +.toolbar > h1 { + position: absolute; + overflow: hidden; + left: 50%; + margin: 1px 0 0 -75px; + height: 45px; + font-size: 20px; + width: 150px; + font-weight: bold; + text-shadow: rgba(0, 0, 0, 0.4) 0px -1px 0; + text-align: center; + text-overflow: ellipsis; + white-space: nowrap; + color: #FFFFFF; +} + +body[orient="landscape"] > .toolbar > h1 { + margin-left: -125px; + width: 250px; +} + +.button { + position: absolute; + overflow: hidden; + top: 8px; + right: 6px; + margin: 0; + border-width: 0 5px; + padding: 0 3px; + width: auto; + height: 30px; + line-height: 30px; + font-family: inherit; + font-size: 12px; + font-weight: bold; + color: #FFFFFF; + text-shadow: rgba(0, 0, 0, 0.6) 0px -1px 0; + text-overflow: ellipsis; + text-decoration: none; + white-space: nowrap; + background: none; + -webkit-border-image: url(file:///android_asset/toolButton.png) 0 5 0 5; +} + +.blueButton { + -webkit-border-image: url(file:///android_asset/blueButton.png) 0 5 0 5; + border-width: 0 5px; +} + +.leftButton { + left: 6px; + right: auto; +} + +#backButton { + display: none; + left: 6px; + right: auto; + padding: 0; + max-width: 55px; + border-width: 0 8px 0 14px; + -webkit-border-image: url(file:///android_asset/backButton.png) 0 8 0 14; +} + +.whiteButton, +.grayButton { + display: block; + border-width: 0 12px; + padding: 10px; + text-align: center; + font-size: 20px; + font-weight: bold; + text-decoration: inherit; + color: inherit; +} + +.whiteButton { + -webkit-border-image: url(file:///android_asset/whiteButton.png) 0 12 0 12; + text-shadow: rgba(255, 255, 255, 0.7) 0 1px 0; +} + +.grayButton { + -webkit-border-image: url(file:///android_asset/grayButton.png) 0 12 0 12; + color: #FFFFFF; +} + +/************************************************************************************************/ + +body > ul > li { + position: relative; + margin: 0; + border-bottom: 1px solid #E0E0E0; + padding: 8px 0 8px 10px; + font-size: 20px; + font-weight: bold; + list-style: none; +} + +body > ul > li.group { + position: relative; + top: -1px; + margin-bottom: -2px; + border-top: 1px solid #7d7d7d; + border-bottom: 1px solid #999999; + padding: 1px 10px; + background: url(file:///android_asset/listGroup.png) repeat-x; + font-size: 17px; + font-weight: bold; + text-shadow: rgba(0, 0, 0, 0.4) 0 1px 0; + color: #FFFFFF; +} + +body > ul > li.group:first-child { + top: 0; + border-top: none; +} + +body > ul > li > a { + display: block; + margin: -8px 0 -8px -10px; + padding: 8px 32px 8px 10px; + text-decoration: none; + color: inherit; + background: url(file:///android_asset/listArrow.png) no-repeat right center; +} + +a[target="_replace"] { + box-sizing: border-box; + -webkit-box-sizing: border-box; + padding-top: 25px; + padding-bottom: 25px; + font-size: 18px; + color: cornflowerblue; + background-color: #FFFFFF; + background-image: none; +} + +/************************************************************************************************/ + +body > .dialog { + top: 0; + width: 100%; + min-height: 417px; + z-index: 2; + background: rgba(0, 0, 0, 0.8); + padding: 0; + text-align: right; +} + +.dialog > fieldset { + box-sizing: border-box; + -webkit-box-sizing: border-box; + width: 100%; + margin: 0; + border: none; + border-top: 1px solid #6d84a2; + padding: 10px 6px; + background: url(file:///android_asset/toolbar.png) #7388a5 repeat-x; +} + +.dialog > fieldset > h1 { + margin: 0 10px 0 10px; + padding: 0; + font-size: 20px; + font-weight: bold; + color: #FFFFFF; + text-shadow: rgba(0, 0, 0, 0.4) 0px -1px 0; + text-align: center; +} + +.dialog > fieldset > label { + position: absolute; + margin: 16px 0 0 6px; + font-size: 14px; + color: #999999; +} + +input { + box-sizing: border-box; + -webkit-box-sizing: border-box; + width: 100%; + margin: 8px 0 0 0; + padding: 6px 6px 6px 44px; + font-size: 16px; + font-weight: normal; +} + +/************************************************************************************************/ + +body > .panel { + box-sizing: border-box; + -webkit-box-sizing: border-box; + padding: 10px; + background: #c8c8c8 url(file:///android_asset/pinstripes.png); +} + +.panel > fieldset { + position: relative; + margin: 0 0 20px 0; + padding: 0; + background: #FFFFFF; + -webkit-border-radius: 10px; + border: 1px solid #999999; + text-align: right; + font-size: 16px; +} + +.row { + position: relative; + min-height: 42px; + border-bottom: 1px solid #999999; + -webkit-border-radius: 0; + text-align: right; +} + +fieldset > .row:last-child { + border-bottom: none !important; +} + +.row > input { + box-sizing: border-box; + -webkit-box-sizing: border-box; + margin: 0; + border: none; + padding: 12px 10px 0 110px; + height: 42px; + background: none; +} + +.row > label { + position: absolute; + margin: 0 0 0 14px; + line-height: 42px; + font-weight: bold; +} + +.row > .toggle { + position: absolute; + top: 6px; + right: 6px; + width: 100px; + height: 28px; +} + +.toggle { + border: 1px solid #888888; + -webkit-border-radius: 6px; + background: #FFFFFF url(file:///android_asset/toggle.png) repeat-x; + font-size: 19px; + font-weight: bold; + line-height: 30px; +} + +.toggle[toggled="true"] { + border: 1px solid #143fae; + background: #194fdb url(file:///android_asset/toggleOn.png) repeat-x; +} + +.toggleOn { + display: none; + position: absolute; + width: 60px; + text-align: center; + left: 0; + top: 0; + color: #FFFFFF; + text-shadow: rgba(0, 0, 0, 0.4) 0px -1px 0; +} + +.toggleOff { + position: absolute; + width: 60px; + text-align: center; + right: 0; + top: 0; + color: #666666; +} + +.toggle[toggled="true"] > .toggleOn { + display: block; +} + +.toggle[toggled="true"] > .toggleOff { + display: none; +} + +.thumb { + position: absolute; + top: -1px; + left: -1px; + width: 40px; + height: 28px; + border: 1px solid #888888; + -webkit-border-radius: 6px; + background: #ffffff url(file:///android_asset/thumb.png) repeat-x; +} + +.toggle[toggled="true"] > .thumb { + left: auto; + right: -1px; +} + +.panel > h2 { + margin: 0 0 8px 14px; + font-size: inherit; + font-weight: bold; + color: #4d4d70; + text-shadow: rgba(255, 255, 255, 0.75) 2px 2px 0; +} + +/************************************************************************************************/ + +#preloader { + display: none; + background-image: url(file:///android_asset/loading.gif), url(file:///android_asset/selection.png), + url(file:///android_asset/blueButton.png), url(file:///android_asset/listArrowSel.png), url(file:///android_asset/listGroup.png); +} diff --git a/assets/iui.js b/assets/iui.js new file mode 100644 index 00000000..27de4280 --- /dev/null +++ b/assets/iui.js @@ -0,0 +1,383 @@ +/* + Copyright (c) 2007, iUI Project Members + See LICENSE.txt for licensing terms + */ + + +(function() { + +var slideSpeed = 20; +var slideInterval = 0; + +var currentPage = null; +var currentDialog = null; +var currentWidth = 0; +var currentHash = location.hash; +var hashPrefix = "#_"; +var pageHistory = []; +var newPageCount = 0; +var checkTimer; + +// ************************************************************************************************* + +window.iui = +{ + showPage: function(page, backwards) + { + if (page) + { + if (currentDialog) + { + currentDialog.removeAttribute("selected"); + currentDialog = null; + } + + if (hasClass(page, "dialog")) + showDialog(page); + else + { + var fromPage = currentPage; + currentPage = page; + + if (fromPage) + setTimeout(slidePages, 0, fromPage, page, backwards); + else + updatePage(page, fromPage); + } + } + }, + + showPageById: function(pageId) + { + var page = $(pageId); + if (page) + { + var index = pageHistory.indexOf(pageId); + var backwards = index != -1; + if (backwards) + pageHistory.splice(index, pageHistory.length); + + iui.showPage(page, backwards); + } + }, + + showPageByHref: function(href, args, method, replace, cb) + { + var req = new XMLHttpRequest(); + req.onerror = function() + { + if (cb) + cb(false); + }; + + req.onreadystatechange = function() + { + if (req.readyState == 4) + { + if (replace) + replaceElementWithSource(replace, req.responseText); + else + { + var frag = document.createElement("div"); + frag.innerHTML = req.responseText; + iui.insertPages(frag.childNodes); + } + if (cb) + setTimeout(cb, 1000, true); + } + }; + + if (args) + { + req.open(method || "GET", href, true); + req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + req.setRequestHeader("Content-Length", args.length); + req.send(args.join("&")); + } + else + { + req.open(method || "GET", href, true); + req.send(null); + } + }, + + insertPages: function(nodes) + { + var targetPage; + for (var i = 0; i < nodes.length; ++i) + { + var child = nodes[i]; + if (child.nodeType == 1) + { + if (!child.id) + child.id = "__" + (++newPageCount) + "__"; + + var clone = $(child.id); + if (clone) + clone.parentNode.replaceChild(child, clone); + else + document.body.appendChild(child); + + if (child.getAttribute("selected") == "true" || !targetPage) + targetPage = child; + + --i; + } + } + + if (targetPage) + iui.showPage(targetPage); + }, + + getSelectedPage: function() + { + for (var child = document.body.firstChild; child; child = child.nextSibling) + { + if (child.nodeType == 1 && child.getAttribute("selected") == "true") + return child; + } + } +}; + +// ************************************************************************************************* + +addEventListener("load", function(event) +{ + var page = iui.getSelectedPage(); + if (page) + iui.showPage(page); + + setTimeout(preloadImages, 0); + setTimeout(checkOrientAndLocation, 0); + checkTimer = setInterval(checkOrientAndLocation, 300); +}, false); + +addEventListener("click", function(event) +{ + var link = findParent(event.target, "a"); + if (link) + { + function unselect() { link.removeAttribute("selected"); } + + if (link.href && link.hash && link.hash != "#") + { + link.setAttribute("selected", "true"); + iui.showPage($(link.hash.substr(1))); + setTimeout(unselect, 500); + } + else if (link == $("backButton")) + history.back(); + else if (link.getAttribute("type") == "submit") + submitForm(findParent(link, "form")); + else if (link.getAttribute("type") == "cancel") + cancelDialog(findParent(link, "form")); + else if (link.target == "_replace") + { + link.setAttribute("selected", "progress"); + iui.showPageByHref(link.href, null, null, link, unselect); + } + else if (!link.target) + { + link.setAttribute("selected", "progress"); + iui.showPageByHref(link.href, null, null, null, unselect); + } + else + return; + + event.preventDefault(); + } +}, true); + +addEventListener("click", function(event) +{ + var div = findParent(event.target, "div"); + if (div && hasClass(div, "toggle")) + { + div.setAttribute("toggled", div.getAttribute("toggled") != "true"); + event.preventDefault(); + } +}, true); + +function checkOrientAndLocation() +{ + if (window.innerWidth != currentWidth) + { + currentWidth = window.innerWidth; + var orient = currentWidth == 320 ? "profile" : "landscape"; + document.body.setAttribute("orient", orient); + setTimeout(scrollTo, 100, 0, 1); + } + + if (location.hash != currentHash) + { + var pageId = location.hash.substr(hashPrefix.length) + iui.showPageById(pageId); + } +} + +function showDialog(page) +{ + currentDialog = page; + page.setAttribute("selected", "true"); + + if (hasClass(page, "dialog") && !page.target) + showForm(page); +} + +function showForm(form) +{ + form.onsubmit = function(event) + { + event.preventDefault(); + submitForm(form); + }; + + form.onclick = function(event) + { + if (event.target == form && hasClass(form, "dialog")) + cancelDialog(form); + }; +} + +function cancelDialog(form) +{ + form.removeAttribute("selected"); +} + +function updatePage(page, fromPage) +{ + if (!page.id) + page.id = "__" + (++newPageCount) + "__"; + + location.href = currentHash = hashPrefix + page.id; + pageHistory.push(page.id); + + var pageTitle = $("pageTitle"); + if (page.title) + pageTitle.innerHTML = page.title; + + if (page.localName.toLowerCase() == "form" && !page.target) + showForm(page); + + var backButton = $("backButton"); + if (backButton) + { + var prevPage = $(pageHistory[pageHistory.length-2]); + if (prevPage && !page.getAttribute("hideBackButton")) + { + backButton.style.display = "inline"; + backButton.innerHTML = prevPage.title ? prevPage.title : "Back"; + } + else + backButton.style.display = "none"; + } +} + +function slidePages(fromPage, toPage, backwards) +{ + var axis = (backwards ? fromPage : toPage).getAttribute("axis"); + if (axis == "y") + (backwards ? fromPage : toPage).style.top = "100%"; + else + toPage.style.left = "100%"; + + toPage.setAttribute("selected", "true"); + scrollTo(0, 1); + clearInterval(checkTimer); + + var percent = 100; + slide(); + var timer = setInterval(slide, slideInterval); + + function slide() + { + percent -= slideSpeed; + if (percent <= 0) + { + percent = 0; + if (!hasClass(toPage, "dialog")) + fromPage.removeAttribute("selected"); + clearInterval(timer); + checkTimer = setInterval(checkOrientAndLocation, 300); + setTimeout(updatePage, 0, toPage, fromPage); + } + + if (axis == "y") + { + backwards + ? fromPage.style.top = (100-percent) + "%" + : toPage.style.top = percent + "%"; + } + else + { + fromPage.style.left = (backwards ? (100-percent) : (percent-100)) + "%"; + toPage.style.left = (backwards ? -percent : percent) + "%"; + } + } +} + +function preloadImages() +{ + var preloader = document.createElement("div"); + preloader.id = "preloader"; + document.body.appendChild(preloader); +} + +function submitForm(form) +{ + iui.showPageByHref(form.action || "POST", encodeForm(form), form.method); +} + +function encodeForm(form) +{ + function encode(inputs) + { + for (var i = 0; i < inputs.length; ++i) + { + if (inputs[i].name) + args.push(inputs[i].name + "=" + escape(inputs[i].value)); + } + } + + var args = []; + encode(form.getElementsByTagName("input")); + encode(form.getElementsByTagName("select")); + return args; +} + +function findParent(node, localName) +{ + while (node && (node.nodeType != 1 || node.localName.toLowerCase() != localName)) + node = node.parentNode; + return node; +} + +function hasClass(self, name) +{ + var re = new RegExp("(^|\\s)"+name+"($|\\s)"); + return re.exec(self.getAttribute("class")) != null; +} + +function replaceElementWithSource(replace, source) +{ + var page = replace.parentNode; + var parent = replace; + while (page.parentNode != document.body) + { + page = page.parentNode; + parent = parent.parentNode; + } + + var frag = document.createElement(parent.localName); + frag.innerHTML = source; + + page.removeChild(parent); + + while (frag.firstChild) + page.appendChild(frag.firstChild); +} + +function $(id) { return document.getElementById(id); } +function ddd() { console.log.apply(console, arguments); } + +})(); diff --git a/assets/listArrow.png b/assets/listArrow.png new file mode 100644 index 0000000000000000000000000000000000000000..6421a16762c0f843bf342a1d01090ce8b77256fa GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^l0YoN!3HEN%BSrG36!`-lmzFem6RtIr7}3CCgZF_RMP;g_&g!eAw8+>M~{e^us?&19oxF zesu1f-zQziO$!7&@4IwANODeU)>*x*Rn^qtPS=tAh0|PL2=Z@Q!F+ZRSJaYqUMAhQ zG`Dhu3(aFX@_xb(O9venU+*Q2KNu!0^l!Yucs8g@r!jItQ`$kM_RelF{r G5}E+j-eN=m literal 0 HcmV?d00001 diff --git a/assets/listArrowSel.png b/assets/listArrowSel.png new file mode 100644 index 0000000000000000000000000000000000000000..86832ebc7b961840d95938a98a0905cb09bc84a9 GIT binary patch literal 308 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 Is33zi04%B!Q2+n{ literal 0 HcmV?d00001 diff --git a/assets/pinstripes.png b/assets/pinstripes.png new file mode 100644 index 0000000000000000000000000000000000000000..c99777512fb135af7dcdf4130e5770072cb39241 GIT binary patch literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)O!2~4dW-8AFQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jio`u#978H@CD~Lx<6>s|lboE)9K^uL#$fKtT%LaBX8=$M NgQu&X%Q~loCIB>$9?k#& literal 0 HcmV?d00001 diff --git a/assets/selection.png b/assets/selection.png new file mode 100644 index 0000000000000000000000000000000000000000..537e3f0b13ea422a5ac5487317872414d51574c1 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiX1&%978x{Sr2X$Jj5WtvT?p{@1r}0Gc6VGKL6Qv;l%Dc zTgw%X}gxBOXmxAbz1ds%&OUSwBY#<9&n!x%hW{an^L HB{Ts5+CMp^ literal 0 HcmV?d00001 diff --git a/assets/thumb.png b/assets/thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..cefa8fc5e9db724b96d36a8df814ecdf85d05582 GIT binary patch literal 2835 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 literal 0 HcmV?d00001 diff --git a/assets/toggle.png b/assets/toggle.png new file mode 100644 index 0000000000000000000000000000000000000000..3b62ebf26eaf8b21e341d413a6bd7cebcf5e7075 GIT binary patch literal 2815 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 literal 0 HcmV?d00001 diff --git a/assets/whiteButton.png b/assets/whiteButton.png new file mode 100644 index 0000000000000000000000000000000000000000..5514b270053a41039e9e96ef8591796521ee0312 GIT binary patch literal 978 zcmV;@11}R*8aG1*L?d1O->_T@+D~u1Y}!yL0VI=|WL) zUB!jV?nDqFVEqcjNU7Q;7-O1A(q?8dlX-96yZ5-5q-Ly5=jDGlkNe*5{m(h~zIU$B ztvpZh0>hld-kwYNkqy3Ko}K-V%D(G)Z`(9CN35XDjL&xuH$Mh_XF(}UB(Tw%lJL(m|<1LC)=R9eoc+{eJ zNQwFm3ZOo%tAYib`a=Ya6#-N=4JiO(J0G^!!{zGLYx*)_QJi=^gsb6jQm_J=B!6wD zD%0-bC{8`;0(Q9FGD%w0qhLC5rQirtj;nGAUq!X!Dqd2rt6&lNPuJ>g7pqvn zrLC}dJQx&>lhnC-)EE`H)reg0T)izKV$|3W#Z{x-uG+(BCOFiFCeuK~FK_qmdcCS1 z>8qPuMY7^&mwW$}US2j%`m-B`MG8c7zyGk_Te#n^&tIcWp2Z*u%VSYOaGhsH3-(@~ zmGI-aXiXaBcJ0@|xe~1jq8+&sKXGKh9t>WX-&ip>B{%Tf)t#qUx1u_4ei+87UrHDfl6dXpw%k7!k~_oku06C3S8F^@(Qf&-L}LBUh<3`S518 zHslKoXby|rLrF-aMbk8j+ef37#cK7AgI*>xK3*KI+wDGQqnw)Edn!H~2Jv7#l+-p> zSL68q&WJ!JQ!W>a*5>p3XLojzq*mM7in|*4KU7;ZTp6~iyZ`_I07*qoM6N<$f;?{4 AHUIzs literal 0 HcmV?d00001 From 799ce988d525f86781f762957d6ffa615583add9 Mon Sep 17 00:00:00 2001 From: Fred Grott Date: Wed, 14 Jan 2009 12:25:31 -0600 Subject: [PATCH 05/12] DroidGap.java changed to support demo2 inclusion --- src/com/nitobi/phonegap/DroidGap.java | 48 +++++---------------------- 1 file changed, 8 insertions(+), 40 deletions(-) diff --git a/src/com/nitobi/phonegap/DroidGap.java b/src/com/nitobi/phonegap/DroidGap.java index bbf87673..056d7312 100644 --- a/src/com/nitobi/phonegap/DroidGap.java +++ b/src/com/nitobi/phonegap/DroidGap.java @@ -21,14 +21,13 @@ package com.nitobi.phonegap; * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.Field; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.util.Log; +import android.view.Window; +import android.view.WindowManager; import android.webkit.JsResult; import android.webkit.WebChromeClient; import android.webkit.WebView; @@ -44,6 +43,9 @@ public class DroidGap extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + getWindow().requestFeature(Window.FEATURE_NO_TITLE); + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); setContentView(R.layout.main); appView = (WebView) findViewById(R.id.appView); @@ -57,47 +59,13 @@ public class DroidGap extends Activity { /* Bind the appView object to the gap class methods */ bindBrowser(appView); - /* Load a URI from the strings.xml file */ - String uri = null; - Class c = R.string.class; - Field f; - int i = 0; - - try { - f = c.getField("url"); - i = f.getInt(f); - uri = this.getResources().getString(i); - } catch (Exception e) - { - uri = "http://www.phonegap.com"; - } + - appView.loadUrl(uri); + appView.loadUrl("file:///android_asset/index.html"); } - protected void loadFile(WebView appView){ - try { - InputStream is = getAssets().open("index.html"); - - int size = is.available(); - - // Read the entire asset into a local byte buffer. - byte[] buffer = new byte[size]; - is.read(buffer); - is.close(); - - // Convert the buffer into a Java string. - String text = new String(buffer); - - // Load the local file into the webview - appView.loadData(text, "text/html", "UTF-8"); - - } catch (IOException e) { - // Should never happen! - throw new RuntimeException(e); - } - } + private void bindBrowser(WebView appView) { From 71600b0916d94a13f44f0e518d304b5a7374c342 Mon Sep 17 00:00:00 2001 From: Fred Grott Date: Wed, 14 Jan 2009 13:11:47 -0600 Subject: [PATCH 06/12] added iBug from JoeHewitt.com support so can further debug the js --- assets/index.html | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/assets/index.html b/assets/index.html index 96f9efe2..f3dc1819 100644 --- a/assets/index.html +++ b/assets/index.html @@ -9,6 +9,12 @@ + + + - +

Main

diff --git a/res/raw/bird.mp3 b/res/raw/bird.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..9a63a12ded7fdff0be902395511b6f32b23c7cf9 GIT binary patch literal 61248 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�!h=kJ3Gii*;kh;->l?_D|wgdUm{2_5MmO;M1p zp?8oHYCr;^7p1p=l+ZLFAiaY$1LPm{chz<8dfq=Tvd%i^)hBai@3ZH-XU}-?>wp)q zTfEO#W#|9rNAQawa5Mh{9UdWzo?L?~iE` zWXGJ(m7YS6eVY0Q&g zBfzpw8cf-Zv7o_jk716x2L&#rja_vTAK~EqE<^wza94TbdD|qo_RQH`gM)wsa4y9Y z?LmN-*;cB1IDl|KGMb+5baPS}_su|cjR&ou14qxYT110d8~Y5OopE;sz>L32%}s)N zZFkK$ui%eRNlDmKCH6WQyt&{%CdbBKU4QW#pDzHCS9hCFv_LT%63AkvlAJUsNH8rY z?WWtNgkq-hE%qx3>G`&CLyb_f@z6M+9k&liE)LZENz<-WK21p&su5NBjz@#{Ha~%+ zar{Ht0J;wum&PTu5>Vd3m|?F{nAx)fsOKQhJymTZP4#c!m0;cG3V~VVU7^W=&XT>U zAZnvpZb%BGZ$o{}98#>#4Nvl}Fo9G6l0q1~3F6)t@Lr{r;3_kN4r^9Rz&)&l+9gsx-C+wT(_%g4C_fhnRPcuaesk2f}7u1^Nc?m z7{6EAO2|8G0D|GK`?OY6Hx2k#O=)hVII8A<=z1c3*Uj<$B(iowT;V-At-@j09OLZO z4*E&=Zm>gA-**Q~ZQEg2dZa_!+mZJsCAS{itK z3R0TEUX8XD+1{PjF0^3lV{s&3LyLQ`b3e^pPACeoL7^_;AfTcu>-DpK!aO;9o;0rI zip4+chw!&=Lf#%^^wu<46MK|S$+{giYp~|XQJmNz zW$#|;`8g0#>DU+ukJxvDb4(5BY0(PLL*_-kJpEkfcsmY%_iMld+{!b64!)h93m<`Z z)U~x0yI}qsSQUb`ILKk|e&751eNKZ$s^A-q$hsYmt9;ye$xSs`Bg5d)?k|R%axO9ICfZ*-XE_po=6|kJ zyxWxpVEz9e{X{I{I6pmCmTtgiEfP!)?@#cZf|jPQ!F*>7>tlG{S!bujbkDl^Xdiu_ z4zF@d2R%Ld%n$)*Ar?uIQd^E*WJSEQ-E&scZ!f>28Kra*US7fu9*L8!Uj118!TB=l zf_+Yi{cO}S<`}bpnddO9YUW$&K)`pKqS zGs?|zwtfp)AG>$Trpy^@_rCqgiJiqQQktI5IoZ#^ zHJi;t^trTk!2}j6p`Hm}W{yyH(__y=L<8)-MW>|4HNadsyO;9V9I}My@eLpIZ)qrq zCyDGeQrur430NRmbC^yOOXBmBrD>DR z33lx^?)uDJ`rmdA^Im(56yzR%c5StG{xWcioax?Zj7;^2WpD!Ohu{m1U2Ll#Z$5Y)1g7{=8b$B=XkEdlX@HD4ar2OjNu}ryoB2I#}|3Blm0cBY+SDy5|(D{LE zhcAQj7&}`cAh*E9i{gsih(p(UBa4*KAc%a_fMwINeZ`eOyoSzwPz?XTt|X#Ofv$kx z*MIR%Eeu7rXr5j|vpK<&Fu9gw&@)Sj+N*V)K2NWV_3Iaok{tDzvmv-S8X6WH)O7bK zZ`;S^BrXL5#u2`xdG&dZ4-Y$u(Qe1&uwb%upgm1HirWr*E=XOeeO*5DfY+6~vh=h5 zOD@)n@jF81mnn_q|E-@iypKzeOkDgivQ8kTxGF14n5yrZ~ErS=Smr< zFHdMJXU*}|O<&h|-$??-vZ+eTRRoJZVO4%w>W}eJ#nuFPliK{O8vdGE-N3GR!?#YB zA-oOta=mC?293_HSYNVYs&lAs`nYHbXJfIdVuEj&n+V%`Yz7qZSO#?l27bvC9=iT9!`^5FiWrcEA5xL<|o~6+(T%KSerxB44HWCx1ISK5)py>bg9^ zZ1K#Z-Ya%HTZUMDfxsB);DK;-Yy$O`g=-Tq{ zyVQk_{otFBE1%+4v$AVXT4csIwJIc-Oct%rx;nUDFr4C087eSfr$UK$X?Z^g zBoVIlL7im<2{pyG8zvC*u=Y<9tCU%z>#=Yj_DK6@BSPJ`a~}vx5o&37lV6V|~Za@QJNSbMe8GiA>n>(x)a2JQ{)a zuI#_pXod)Dsz(QZoT}Z-YVomIkV2-ptjBfU2d4T{9+Z8b@gAHfJuU7d&xvI#I&d77 zGT-`fI0$sFlBn5stuL{nx`nVp|G12EB@pN7SJNH`b?HvF^i}6ZlHz_ilGqfv<)rCG zTo)>EeEqc46xoM&2lqJN$-@+AH*h;XzT6U;_40+J9p?rA9);Y3_~o((I2ZFLt}G6Y zZpo4yAVYlOMyIwRWL@c)*JOO=LGd@0M@OnpSigTX6N4iR-=tHbgq*)mI-5y3$J-%% zjGwybt^ho(DaM{IS!6$*-&q;LM$|jQ!=tdA`Wln!}9|z z=~G{|0~pzQl#o_ru#3n}xSH`THQ3maf$3HG$Jq z-pUCv3iIz+&3sx=H>!Lvj&kn5Wm-9ePw5n8NSpDLZNh(R8XN6l`9Dw> z^hz>f`7h=lTr58Z8vH|?NY-C;&`Iu$RM+B!c^rNr@9_ z(xaaehsu`khm{#BI|VX3N@s5I97%YL^UC-^MAKisCb-9u>mcbG&^+jMOYoVi#4dl& z?&7W=O>X^X?ayC(?E|?pEY@!2I<_U9AeRa*_%o@APb7)|vOhaTV?Grz+|O0RPo*59ga@3u{NVz3iEO0|#>b#fjx}y8_65pv&6V4* zAm3I7tLJCS1s;*RT<*D+g(kAJ5Px=U9?oxDh&|#tDhiGxBL%Vp6o1yAv7j*Cm%g;|@R$F8z`>y@)?MYdr^@gI z)JNKB#EICB#|^+?SHb#B;=^)wsoeHCHBjaasFp3@8cd%`0G3c6=+eV#>tGB1_=z1? zHLYx)owQMaV`ipR-xUq0Ox;(hT_x*HiAgF`U-Y&#a?v#O$Vgs3tQeWAAk~>uPA5I< zDg$%RTkz2bEWNLafNW>X>$pb&>R#Ynd#!ujY`xQSkZ4||(`bJUKZy1`Z+nfrg;6(V z*^6&~`ojK(WM;dvm;Uk(2?FraV!CSzeBl&1#;S+x#ot+(@-R z@!jsqNDz>^XfRX{+j8!;jz zxsjrNDT{#_;T%cigbJ5+d1sP^Voa!(^Rj0f3y^U`Kol?mZtPf9Fxjq^TA({p_05Qm zfH`V7b+xh8qdVZkuDGXUfnmwNl%-$O#F|`hp*d#XNc>7g#Axn`FgI& z_HnTji`6oDQYRUyu#rY5M$V%r9EvOlWS+naROuu&^G(k;=?XP^R+9lZUX<7ss5+d z{`Z1k5q`s&gW{HfyT=iz+PEd7r%)Xk4=;48KQ4AmN0?-P*>qRQ`S3u@AI$zhx?2S;jT2jUORbM%X8lq}lKH6`BujFTbE zeb(k1`vtoLsOdm+zjDi1{bA%yWkvaATc!(s3=zZGqkeACZ~v!rTN@a(Src7d32Rxp z^Qc)+d?L#}>EJA8NVHu`&;>7a+Z%i6Rr%mEl%3Z2A+|f8F8@OOlm7z$>j{p(0`8=` zlunz^O5?)uZZ`~gt6LC5zoK}st!_0 zWCb-R!9_M*%?z=%*K_SGXc^o`JPj|tVHkeN|JDioN3Z?&l}Z8cYwc$);-aI#bduia z_A)~3F~|99bO4PPAv`?;<4fV13Hz^6ldGh(j7hj1vK;glI`@e7SQUEreY}xCPQV++ zf>gxR4f-m08Dh}UptnKL;+OsJo~gj4pZ>OgR+YF*jS0K{c$Aq+)p+V!D&DwVX-R%@ z71XXl4b>o}!mi)YIt5JVjqe;b#k<520&2yammFXYB-pZR{`Y^J|7CpaE!nlW%;crK z+Pu*t$l~$D*rwK|^SACoJS7z;KsW;o&2K$gu1EF6d_OqT_yn4wBDSpd}7h6LED$~dNwyxV+OgekPRf3g(Rvy zUMBLmqUSV5;)C6XP*qpF+}|K<-XAz_6#=fCGbcNIIh_1&X_5jfS-y-XQ_#+hIHFBD>ESxf6b`SVf>-WKY~>s)?6`j3*7N`O3p zmqCif#SKY`<#8@hRn|2*dnpGwr-4WU*7WB15pN-#s+96WB+5T`Q&Xg2g?mENo^*wz z@W!|Iv~OD;O!@<8@g)-_L;DMPdTLP`_x(trNr>TQ`^16a&-|-n za-lPMH|sz32TXGvXkHhHjv6K`yGr;sb2M_!_#t6DAf$(qFLAy>J+c=j=`*x{hnJqe z{`jf=vz9Ljp>%gv;+{F+EshSf4U|9KzlFc4F)^~^wY@3K2@TxZ_AoN&+&9}AhG*1> za7vIc>qg+b&on19GZ8^xFrQ^kUGH5qtj7LMUeHN#+{J<7dED1GAtYrUBUKC}4mGRW z^iWw$Nqptd5PdtFjWldgSVYcg6#~BSpA+g{jJUS-?ce^>hNglkw%GuCa=LKz-ZK(~ zMG1Pmmb4?y@68j-WG0+qVRf>KL6OrZlIeLl%L(er4xCJbMa@O?KiOoe18vn*1+~5M zkz*%mtlc9I=fRpn`3`AHPJvUD#>@JLitu3@2LMnvTfXx=~;VVU+Xw*+$mvdCM^03DN*hYKdMelCY(yJ7?M>4Om2X_(upefW0e<5f=UNk_o znG)qAfVC+TC95)Pz^C0fUU@p_BP+ZXw ywewR}FO`eaRAWsw{QCNi$Rvcplgk+6|$tV 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 Date: Thu, 15 Jan 2009 07:47:16 -0600 Subject: [PATCH 08/12] more changes to debug GPS --- assets/gap.js | 45 ++++++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/assets/gap.js b/assets/gap.js index 882d6cd9..501da9bb 100644 --- a/assets/gap.js +++ b/assets/gap.js @@ -24,7 +24,7 @@ try { - $ // Test if it is alread used + $ // Test if it is already used } catch(e) { $ = function(id){ return document.getElementById(id) @@ -34,8 +34,11 @@ try { // Acceleration Handling var accelX = 0; +alert('accelX initially =' + accelX); var accelY = 0; +alert('accelY initially =' + accelY); var accelZ = 0; +alert('accelZ initially =' + accelZ); function gotAcceleration(x,y,z){ x = eval(x); @@ -70,8 +73,7 @@ var Device = { isIPhone: null, isIPod: null, isAndroid: null, - isSymbian: null, - isBlackberry: null, + whatPlatform: "", osversion: "", sdkfwversion: "", @@ -83,6 +85,9 @@ var Device = { FNUUID: "", FNGapVersion: "", + + + init: function(model, version) { @@ -97,29 +102,29 @@ var Device = { // to their AppTitle // yes the hack sucks..but its working at this point so.. - - + alert('window.DroidGap=' + window.DroidGap); + alert('window.IPhoneGap=' + window.IPhoneGap); + alert('window.IPodGap=' + window.IPodGap); if (window.DroidGap) { Device.whatPlatform = "Android"; - + alert('Device.whatPlatform=' + Device.whatPlatform); Device.model = window.DroidGap.getModel(); - + alert('Device.model=' + Device.model); Device.version = window.DroidGap.getProductName(); - + alert('Device.version=' + Device.version); Device.osversion = window.DroidGap.getOSVersion(); - + alert('Device.osversion=' + Device.osversion); Device.sdkfwversion = window.DroidGap.getSDKVersion(); - + alert('Device.sdkfwversion=' + Device.sdkfwversion); Device.available = true; - + alert('Device.available=' + Device.available); Device.uuid = window.DroidGap.getUuid(); - + alert('Device.uuid=' + Device.uuid); Device.gapVersion = window.DroidGap.getVersion(); - - } - if (window.IPhoneGap) + alert('Device.gapVersion=' + Device.gapVersion); + } else if (window.IPhoneGap) { Device.whatPlatform = "IPhone"; @@ -137,8 +142,7 @@ var Device = { Device.gapVersion = window.IPhoneGap.getVersion(); - } - if (window.IPodGap) + }else if (window.IPodGap) { Device.whatPlatform = "IPod"; @@ -156,8 +160,7 @@ var Device = { Device.gapVersion = window.IPoddGap.getVersion(); - } - if (!window.DroidGap || !window.IPhoneGap || !window.IPodGap ) + } else { Device.available = "__gap"; Device.model = "__gap_device_model"; @@ -193,9 +196,9 @@ var Device = { alert("Error executing command '" + command + "'.") } } - if (Device.available || Device.whatPlatform == "Android") { + if (Device.available || Device.whatPlatform == "Android" || command == "getloc") { try { - document.location = "javascript:" + "window.DroidGap." + command + "()"; + document.location = "javascript:" + "window.DroidGap.getLocation()"; alert('document.location=' + document.location); } catch(e) { console.log("Command '" + command + "' has not been executed, because of exception: " + e); From 6e59af7e0cd78d26e2435563bb5d592ea8645d7b Mon Sep 17 00:00:00 2001 From: Fred Grott Date: Fri, 16 Jan 2009 07:02:43 -0600 Subject: [PATCH 09/12] half GPS problems fixed..Device.Location.init works nd can get first GPS read --- assets/gap.js | 26 +++++++++++++++++--------- assets/index.html | 18 +++++++++--------- src/com/nitobi/phonegap/PhoneGap.java | 8 ++++---- 3 files changed, 30 insertions(+), 22 deletions(-) diff --git a/assets/gap.js b/assets/gap.js index 501da9bb..2115d76e 100644 --- a/assets/gap.js +++ b/assets/gap.js @@ -158,7 +158,7 @@ var Device = { Device.uuid = window.IPodGap.getUuid(); - Device.gapVersion = window.IPoddGap.getVersion(); + Device.gapVersion = window.IPodGap.getVersion(); } else { @@ -178,28 +178,34 @@ var Device = { exec: function(command) { // Different platforms have different ways the js browser bridge is called // to get a native object so we handle each difference + // - if (Device.available || Device.whatPlatform == "IPhone") { + + if ( Device.whatPlatform == "IPhone") { try { + document.location = "gap:" + command; } catch(e) { console.log("Command '" + command + "' has not been executed, because of exception: " + e); alert("Error executing command '" + command + "'.") } - } - if (Device.available || Device.whatPlatform == "IPod") { + } else + if ( Device.whatPlatform == "IPod") { try { document.location = "gap:" + command; } catch(e) { console.log("Command '" + command + "' has not been executed, because of exception: " + e); alert("Error executing command '" + command + "'.") } - } - if (Device.available || Device.whatPlatform == "Android" || command == "getloc") { + } else + if (Device.whatPlatform == "Android" || command == "getloc") { try { - document.location = "javascript:" + "window.DroidGap.getLocation()"; - alert('document.location=' + document.location); + alert('start here'); + + document.location="javascript:window.DroidGap.getLocation()"; + + alert('window.DroidGap.getLocation()=' + window.DroidGap.getLocation()); } catch(e) { console.log("Command '" + command + "' has not been executed, because of exception: " + e); alert("Error executing command '" + command + "'.") @@ -217,7 +223,8 @@ var Device = { init: function() { Device.exec("getloc"); - alert('initialized Location function and getloc was called'); + alert(' getloc was called'); + }, set: function(lat, lon) { @@ -275,6 +282,7 @@ var Device = { } function gotLocation(lat, lon) { + alert('gotLocation lat=' + lat + " gotLocation lon=" + lon); return Device.Location.set(lat, lon) } diff --git a/assets/index.html b/assets/index.html index 45fd8916..32901678 100644 --- a/assets/index.html +++ b/assets/index.html @@ -9,18 +9,17 @@ - - +