From e3dc010b97ac254309059b18087e1e0d505d3934 Mon Sep 17 00:00:00 2001 From: Brian LeRoux Date: Tue, 26 Jan 2010 13:54:02 -0800 Subject: [PATCH] reorg of project assets --- .gitignore | 3 +- README.md | 2 +- build.rb | 80 ----- droidgap | 101 ++++++ framework/AndroidManifest.xml | 2 +- framework/README | 6 - {js => framework/assets/js}/accelerometer.js | 0 {js => framework/assets/js}/camera.js | 0 {js => framework/assets/js}/compass.js | 0 {js => framework/assets/js}/contact.js | 0 {js => framework/assets/js}/device.js | 0 {js => framework/assets/js}/file.js | 0 {js => framework/assets/js}/geolocation.js | 0 {js => framework/assets/js}/keyevent.js | 0 {js => framework/assets/js}/media.js | 0 {js => framework/assets/js}/network.js | 0 {js => framework/assets/js}/notification.js | 0 {js => framework/assets/js}/phonegap.js.base | 0 {js => framework/assets/js}/position.js | 0 {js => framework/assets/js}/storage.js | 0 framework/assets/www/index.html | 3 +- framework/assets/www/phonegap.js | 328 ++++++++++++++---- plugins/.classpath | 8 - plugins/.project | 33 -- plugins/AndroidManifest.xml | 15 - plugins/build.properties | 17 - plugins/build.xml | 57 --- plugins/libs/phonegap.jar | Bin 40287 -> 0 bytes plugins/local.properties | 10 - plugins/res/layout/main.xml | 13 - plugins/res/values/strings.xml | 4 - .../src/com/phonegap/plugins/TtsManager.java | 34 -- plugins/src/com/phonegap/plugins/ponygap.java | 21 -- 33 files changed, 360 insertions(+), 377 deletions(-) delete mode 100644 build.rb create mode 100755 droidgap delete mode 100644 framework/README rename {js => framework/assets/js}/accelerometer.js (100%) rename {js => framework/assets/js}/camera.js (100%) rename {js => framework/assets/js}/compass.js (100%) rename {js => framework/assets/js}/contact.js (100%) rename {js => framework/assets/js}/device.js (100%) rename {js => framework/assets/js}/file.js (100%) rename {js => framework/assets/js}/geolocation.js (100%) rename {js => framework/assets/js}/keyevent.js (100%) rename {js => framework/assets/js}/media.js (100%) rename {js => framework/assets/js}/network.js (100%) rename {js => framework/assets/js}/notification.js (100%) rename {js => framework/assets/js}/phonegap.js.base (100%) rename {js => framework/assets/js}/position.js (100%) rename {js => framework/assets/js}/storage.js (100%) delete mode 100644 plugins/.classpath delete mode 100644 plugins/.project delete mode 100644 plugins/AndroidManifest.xml delete mode 100644 plugins/build.properties delete mode 100644 plugins/build.xml delete mode 100644 plugins/libs/phonegap.jar delete mode 100644 plugins/local.properties delete mode 100644 plugins/res/layout/main.xml delete mode 100644 plugins/res/values/strings.xml delete mode 100644 plugins/src/com/phonegap/plugins/TtsManager.java delete mode 100644 plugins/src/com/phonegap/plugins/ponygap.java diff --git a/.gitignore b/.gitignore index 26ec74ca..d40db17f 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ default.properties bin gen assets/www/phonegap.js -local.properties \ No newline at end of file +local.properties +framework/phonegap.jar \ No newline at end of file diff --git a/README.md b/README.md index 40f779ef..c49817e2 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Pre-requisites * Java JDK 1.5 * Android SDK Package [http://developer.android.com](http://developer.android.com) * Apache ANT (For build script) - * Ruby, Rubygems, nokogiri (for build.rb) + * Ruby Recommended: ---------------------------------------------------------------- diff --git a/build.rb b/build.rb deleted file mode 100644 index 0b77b1f2..00000000 --- a/build.rb +++ /dev/null @@ -1,80 +0,0 @@ -require 'rubygems' -require 'nokogiri' -require 'fileutils' - -class Build - attr_reader :path - attr_reader :name - attr_reader :package_name - attr_reader :www_dir - - def start(name, pkg_name, www, path) - create_android(name, pkg_name, path) - @www_dir = www - generate_manifest - copy_libs - write_java - end - - def create_android(name, pkg_name, path) - @name = name - @pkg_name = pkg_name - @path = path - `android create project -t 5 -k #{pkg_name} -a #{name} -n #{name} -p #{path}` - end - - def generate_manifest - f = File.open('framework/AndroidManifest.xml', 'r') - doc = Nokogiri::XML(f.read) - manifest = doc.search('//manifest') - manifest[0]['package'] = @pkg_name - actions = doc.search('//activity') - actions[0]['android:name'] = ".#{@name}" - actions[1]['android:name'] = "com.phonegap.CameraPreview" - f = File.open("#{@path}/AndroidManifest.xml", 'w') - f.write(doc.to_xml) - end - - def copy_libs - FileUtils.cp('framework/phonegap.jar', "#{@path}/libs") - FileUtils.cp('framework/res/values/strings.xml', "#{@path}/res/values/strings.xml") - FileUtils.mkdir_p("#{@path}/res/drawable/") - FileUtils.mkdir_p("#{@path}/assets") - FileUtils.cp_r("#{@www_dir}/", "#{@path}/assets/www") - FileUtils.cp("#{@www_dir}/icon.png", "#{@path}/res/drawable/icon.png") - end - - def write_java - package_path = "#{@path}/src/" + @pkg_name.gsub('.', '/') - doc = File.open("#{package_path}/#{@name}.java", 'r') - data = doc.read.split(/\n/) - result = "" - data.each do |line| - if line.include? "android.os.Bundle" - line += "\n\nimport com.phonegap.*;" - end - if line.include? "extends Activity" - line = "public class #{@name} extends DroidGap" - end - if line.include? "setContentView" - line = " super.loadUrl(\"file:///android_asset/www/index.html\");" - end - result += line + "\n" - end - doc.close - package_path = "#{@path}/src/" + @pkg_name.gsub('.', '/') - target = File.open(package_path + "/#{@name}.java", 'w') - target.write(result); - end - -end - - -b = Build.new - -if(ARGV.length >= 3) - b.start(ARGV[0], ARGV[1], ARGV[2], ARGV[3]) -else - str = "Android PhoneGap Build Tool \n Usage: build \n name: The name of your application \n package_name: The name of your package: i.e. com.nitobi.demo \n wwwdir: The name of your Web App \n path: Location of where you want to work on your application" - puts str -end diff --git a/droidgap b/droidgap new file mode 100755 index 00000000..2b7780b0 --- /dev/null +++ b/droidgap @@ -0,0 +1,101 @@ +#!/usr/bin/env ruby + +class Build + def start(*args) + @android_sdk_path, @name, @pkg, @www, @path = args + + build_jar + create_android + generate_manifest + copy_libs + write_java + end + + # creates framework/phonegap.jar using android_sdk_path + # + # TODO + # - write out local.properties with android sdk every time + def build_jar + `touch #{ @android_sdk_path }` unless File.exists? @android_sdk_path + `ant jar` + end + + # runs android create project + def create_android + `android create project -t 5 -k #{ @pkg } -a #{ @name } -n #{ @name } -p #{ @path }` + end + + # creates an AndroidManifest.xml for the project + def generate_manifest + manifest = "" + open('framework/AndroidManifest.xml', 'r') do |old| + manifest = old.read + manifest.gsub! 'package="com.phonegap"', "package=\"#{ @pkg }\"" + manifest.gsub! 'android:name=".StandAlone"', ".#{ @name }" + end + open("#{ @path }/AndroidManifest.xml", 'w') {|x| x.puts manifest } + end + + # copies stuff from framework into the project + # + # TODO need to allow for www import + # - copy www into #{ @path }/assets/www + # - copy www/icon.png into #{ @path }/res/drawable/icon.png + # + def copy_libs + `cp framework/phonegap.jar #{ @path }/libs` + `cp framework/res/values/strings.xml #{ @path }/res/values/strings.xml` + `cp framework/res #{ @path }/res` + `cp framework/assets/www #{ @path }/assets/wwww` + end + + # this is so fucking unholy yet oddly beautiful + # not sure if I should thank Ruby or apologize for this abusive use of string interpolation + def write_java + j = " + package #{ @pkg }; + + import android.app.Activity; + import android.os.Bundle; + import com.phonegap.*; + + public class #{ @name } extends DroidGap + { + @Override + public void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + super.loadUrl(\"file:///android_asset/www/index.html\"); + } + } + " + open("#{ @path }/src/#{ @pkg.gsub '.', '/' }",'w') { |f| f.puts j } + end + # +end + + +if(ARGV.length == 5) + Build.new.start(ARGV) +else + puts <<-EOF + + DroidGap: An Android PhoneGap Project Generator + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Creates a fresh Android/PhoneGap app for hybrid mobile web hacking. + + Usage: + + ./droidgap + + Params: + + android_sdk_path ... The path to your Android SDK install. + name ............... The name of your application. + package_name ....... The name of your package (For example: com.nitobi.demo) + www ................ The name of your Web App. + path ............... Location of where you want to work on your application. + + EOF +end diff --git a/framework/AndroidManifest.xml b/framework/AndroidManifest.xml index b8ac3bee..a3b0fba1 100644 --- a/framework/AndroidManifest.xml +++ b/framework/AndroidManifest.xml @@ -32,7 +32,7 @@ - diff --git a/framework/README b/framework/README deleted file mode 100644 index 80e15dc4..00000000 --- a/framework/README +++ /dev/null @@ -1,6 +0,0 @@ -Note: phonegap.js goes in the assets/www directory. To get this file, please -build it from the top level by running make: - -make - -The file will be concatenated and minified, and will be stored in lib/android diff --git a/js/accelerometer.js b/framework/assets/js/accelerometer.js similarity index 100% rename from js/accelerometer.js rename to framework/assets/js/accelerometer.js diff --git a/js/camera.js b/framework/assets/js/camera.js similarity index 100% rename from js/camera.js rename to framework/assets/js/camera.js diff --git a/js/compass.js b/framework/assets/js/compass.js similarity index 100% rename from js/compass.js rename to framework/assets/js/compass.js diff --git a/js/contact.js b/framework/assets/js/contact.js similarity index 100% rename from js/contact.js rename to framework/assets/js/contact.js diff --git a/js/device.js b/framework/assets/js/device.js similarity index 100% rename from js/device.js rename to framework/assets/js/device.js diff --git a/js/file.js b/framework/assets/js/file.js similarity index 100% rename from js/file.js rename to framework/assets/js/file.js diff --git a/js/geolocation.js b/framework/assets/js/geolocation.js similarity index 100% rename from js/geolocation.js rename to framework/assets/js/geolocation.js diff --git a/js/keyevent.js b/framework/assets/js/keyevent.js similarity index 100% rename from js/keyevent.js rename to framework/assets/js/keyevent.js diff --git a/js/media.js b/framework/assets/js/media.js similarity index 100% rename from js/media.js rename to framework/assets/js/media.js diff --git a/js/network.js b/framework/assets/js/network.js similarity index 100% rename from js/network.js rename to framework/assets/js/network.js diff --git a/js/notification.js b/framework/assets/js/notification.js similarity index 100% rename from js/notification.js rename to framework/assets/js/notification.js diff --git a/js/phonegap.js.base b/framework/assets/js/phonegap.js.base similarity index 100% rename from js/phonegap.js.base rename to framework/assets/js/phonegap.js.base diff --git a/js/position.js b/framework/assets/js/position.js similarity index 100% rename from js/position.js rename to framework/assets/js/position.js diff --git a/js/storage.js b/framework/assets/js/storage.js similarity index 100% rename from js/storage.js rename to framework/assets/js/storage.js diff --git a/framework/assets/www/index.html b/framework/assets/www/index.html index eab23c22..f3b5bb2b 100644 --- a/framework/assets/www/index.html +++ b/framework/assets/www/index.html @@ -1,5 +1,4 @@ - + diff --git a/framework/assets/www/phonegap.js b/framework/assets/www/phonegap.js index a06c686e..bb385f51 100644 --- a/framework/assets/www/phonegap.js +++ b/framework/assets/www/phonegap.js @@ -17,7 +17,7 @@ PhoneGap = { /** * Boolean flag indicating if the PhoneGap API is available and initialized. - */ + */ // TODO: Remove this, it is unused here ... -jm PhoneGap.available = DeviceInfo.uuid != undefined; /** @@ -27,28 +27,51 @@ PhoneGap.available = DeviceInfo.uuid != undefined; */ PhoneGap.addConstructor = function(func) { var state = document.readyState; - if (state != 'loaded' && state != 'complete') - PhoneGap._constructors.push(func); + if ( state == 'loaded' || state == 'complete' ) + { + func(); + } else - func(); + { + PhoneGap._constructors.push(func); + } }; -(function() { - var timer = setInterval(function() { - var state = document.readyState; - if (state != 'loaded' && state != 'complete') - return; - clearInterval(timer); - while (PhoneGap._constructors.length > 0) { - var constructor = PhoneGap._constructors.shift(); - try { - constructor(); - } catch(e) { - if (typeof(debug['log']) == 'function') - debug.log("Failed to run constructor: " + debug.processMessage(e)); - else - alert("Failed to run constructor: " + e.message); + +(function() + { + var timer = setInterval(function() + { + + var state = document.readyState; + + if ( state == 'loaded' || state == 'complete' ) + { + clearInterval(timer); // stop looking + // run our constructors list + while (PhoneGap._constructors.length > 0) + { + var constructor = PhoneGap._constructors.shift(); + try + { + constructor(); + } + catch(e) + { + if (typeof(debug['log']) == 'function') + { + debug.log("Failed to run constructor: " + debug.processMessage(e)); + } + else + { + alert("Failed to run constructor: " + e.message); + } + } } - } + // all constructors run, now fire the deviceready event + var e = document.createEvent('Events'); + e.initEvent('deviceready'); + document.dispatchEvent(e); + } }, 1); })(); @@ -65,14 +88,51 @@ PhoneGap.exec = function() { if (PhoneGap.queue.timer == null) PhoneGap.queue.timer = setInterval(PhoneGap.run_command, 10); }; + /** - * Internal function used to dispatch the request to PhoneGap. This needs to be implemented per-platform to - * ensure that methods are called on the phone in a way appropriate for that device. + * Internal function used to dispatch the request to PhoneGap. It processes the + * command queue and executes the next command on the list. If one of the + * arguments is a JavaScript object, it will be passed on the QueryString of the + * url, which will be turned into a dictionary on the other end. * @private */ PhoneGap.run_command = function() { -}; + if (!PhoneGap.available || !PhoneGap.queue.ready) + return; + PhoneGap.queue.ready = false; + + var args = PhoneGap.queue.commands.shift(); + if (PhoneGap.queue.commands.length == 0) { + clearInterval(PhoneGap.queue.timer); + PhoneGap.queue.timer = null; + } + + var uri = []; + var dict = null; + for (var i = 1; i < args.length; i++) { + var arg = args[i]; + if (arg == undefined || arg == null) + arg = ''; + if (typeof(arg) == 'object') + dict = arg; + else + uri.push(encodeURIComponent(arg)); + } + var url = "gap://" + args[0] + "/" + uri.join("/"); + if (dict != null) { + var query_args = []; + for (var name in dict) { + if (typeof(name) != 'string') + continue; + query_args.push(encodeURIComponent(name) + "=" + encodeURIComponent(dict[name])); + } + if (query_args.length > 0) + url += "?" + query_args.join("&"); + } + document.location = url; + +}; function Acceleration(x, y, z) { this.x = x; @@ -294,58 +354,76 @@ Compass.prototype.setError = function(message) { PhoneGap.addConstructor(function() { if (typeof navigator.compass == "undefined") navigator.compass = new Compass(); }); -/** - * This class provides access to the device contacts. - * @constructor - */ - -function Contact(jsonObject) { - this.firstName = ""; - this.lastName = ""; - this.name = ""; - this.phones = {}; - this.emails = {}; - this.address = ""; +var Contact = function(){ + this.name = null; + this.emails = []; + this.phones = []; } -Contact.prototype.displayName = function() +var ContactName = function() { - // TODO: can be tuned according to prefs - return this.name; + this.formatted = ""; + this.familyName = ""; + this.givenName = ""; + this.additionalNames = []; + this.prefixes = []; + this.suffixes = []; } -function ContactManager() { - // Dummy object to hold array of contacts - this.contacts = []; - this.timestamp = new Date().getTime(); + +var ContactEmail = function() +{ + this.types = []; + this.address = ""; } -ContactManager.prototype.getAllContacts = function(successCallback, errorCallback, options) { - // Interface +var ContactPhoneNumber = function() +{ + this.types = []; + this.number = ""; +} + + +var Contacts = function() +{ + this.records = []; +} + +Contacts.prototype.find = function(obj, win, fail) +{ + if(obj.name != null) + { + ContactHook.search(name, "", ""); + } + this.win = win; + this.fail = fail; +} + +Contacts.prototype.droidFoundContact = function(name, npa, email) +{ + var contact = new Contact(); + contact.name = new ContactName(); + contact.name.formatted = name; + contact.name.givenName = name; + var mail = new ContactEmail(); + mail.types.push("home"); + mail.address = email; + contact.emails.push(mail); + phone = new ContactPhoneNumber(); + phone.types.push("home"); + phone.number = npa; + contact.phones.push(phone); + this.records.push(contact); +} + +Contacts.prototype.droidDone = function() +{ + this.win(this.records); } PhoneGap.addConstructor(function() { - if (typeof navigator.ContactManager == "undefined") navigator.ContactManager = new ContactManager(); + if(typeof navigator.contacts == "undefined") navigator.contacts = new Contacts(); }); -ContactManager.prototype.getAllContacts = function(successCallback, errorCallback, options) { - this.win = successCallback; - this.fail = errorCallback; - ContactHook.getContactsAndSendBack(); -} - -ContactManager.prototype.droidAddContact = function(name, phone, email) -{ - var contact = new Contact(); - contact.name = name; - contact.phones.primary = phone; - contact.emails.primary = email; - this.contacts.push(contact); -} - -ContactManager.prototype.droidDone = function() -{ - win(this.contacts); -} /** * this represents the mobile device, and provides properties for inspecting the model, version, UUID of the * phone, etc. @@ -366,13 +444,7 @@ function Device() { this.gapVersion = window.DroidGap.getVersion(); this.platform = window.DroidGap.getPlatform(); this.name = window.DroidGap.getProductName(); - } else { - this.platform = DeviceInfo.platform; - this.version = DeviceInfo.version; - this.name = DeviceInfo.name; - this.gap = DeviceInfo.gap; - this.uuid = DeviceInfo.uuid; - } + } } catch(e) { this.available = false; } @@ -380,9 +452,6 @@ function Device() { PhoneGap.addConstructor(function() { navigator.device = window.device = new Device(); - var event = document.createEvent("Events"); - event.initEvent('deviceReady', false, false); - document.dispatchEvent(event); }); /** * This class provides generic read and write access to the mobile device file system. @@ -680,6 +749,28 @@ Geolocation.prototype.clearWatch = function(watchId) { Geo.stop(watchId); } +function KeyEvent() +{ +} + +KeyEvent.prototype.menuTrigger = function() +{ + var e = document.createEvent('Events'); + e.initEvent('menuKeyDown'); + document.dispatchEvent(e); +} + +KeyEvent.prototype.searchTrigger= function() +{ + var e = document.createEvent('Events'); + e.initEvent('searchKeyDown'); + document.dispatchEvent(e); +} + +if (document.keyEvent == null || typeof document.keyEvent == 'undefined') +{ + window.keyEvent = document.keyEvent = new KeyEvent(); +} /** * This class provides access to the device media, interfaces to both sound and video * @constructor @@ -951,3 +1042,92 @@ PositionError.UNKNOWN_ERROR = 0; PositionError.PERMISSION_DENIED = 1; PositionError.POSITION_UNAVAILABLE = 2; PositionError.TIMEOUT = 3; +/* + * This is purely for the Android 1.5/1.6 HTML 5 Storage + * I was hoping that Android 2.0 would deprecate this, but given the fact that + * most manufacturers ship with Android 1.5 and do not do OTA Updates, this is required + */ + +var DroidDB = function() +{ + this.txQueue = []; +} + +DroidDB.prototype.addResult = function(rawdata, tx_id) +{ + eval("var data = " + rawdata); + var tx = this.txQueue[tx_id]; + tx.resultSet.push(data); +} + +DroidDB.prototype.completeQuery = function(tx_id) +{ + var tx = this.txQueue[tx_id]; + var r = new result(); + r.rows.resultSet = tx.resultSet; + r.rows.length = tx.resultSet.length; + tx.win(r); +} + +DroidDB.prototype.fail = function(reason, tx_id) +{ + var tx = this.txQueue[tx_id]; + tx.fail(reason); +} + +var DatabaseShell = function() +{ + +} + +DatabaseShell.prototype.transaction = function(process) +{ + tx = new Tx(); + process(tx); +} + +var Tx = function() +{ + droiddb.txQueue.push(this); + this.id = droiddb.txQueue.length - 1; + this.resultSet = []; +} + +Tx.prototype.executeSql = function(query, params, win, fail) +{ + droidStorage.executeSql(query, params, this.id); + tx.win = win; + tx.fail = fail; +} + +var result = function() +{ + this.rows = new Rows(); +} + +var Rows = function() +{ + this.resultSet = []; + this.length = 0; +} + +Rows.prototype.item = function(row_id) +{ + return this.resultSet[id]; +} + +var dbSetup = function(name, version, display_name, size) +{ + droidStorage.openDatabase(name, version, display_name, size) + db_object = new DatabaseShell(); + return db_object; +} + +PhoneGap.addConstructor(function() { + if (typeof navigator.openDatabase == "undefined") + { + navigator.openDatabase = window.openDatabase = dbSetup; + window.droiddb = new DroidDB(); + } +}); + diff --git a/plugins/.classpath b/plugins/.classpath deleted file mode 100644 index e4bcec4c..00000000 --- a/plugins/.classpath +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/plugins/.project b/plugins/.project deleted file mode 100644 index 5d814ceb..00000000 --- a/plugins/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - ponygap - - - - - - com.android.ide.eclipse.adt.ResourceManagerBuilder - - - - - com.android.ide.eclipse.adt.PreCompilerBuilder - - - - - org.eclipse.jdt.core.javabuilder - - - - - com.android.ide.eclipse.adt.ApkBuilder - - - - - - com.android.ide.eclipse.adt.AndroidNature - org.eclipse.jdt.core.javanature - - diff --git a/plugins/AndroidManifest.xml b/plugins/AndroidManifest.xml deleted file mode 100644 index 26942144..00000000 --- a/plugins/AndroidManifest.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - diff --git a/plugins/build.properties b/plugins/build.properties deleted file mode 100644 index edc7f230..00000000 --- a/plugins/build.properties +++ /dev/null @@ -1,17 +0,0 @@ -# This file is used to override default values used by the Ant build system. -# -# This file must be checked in Version Control Systems, as it is -# integral to the build system of your project. - -# This file is only used by the Ant script. - -# You can use this to override default values such as -# 'source.dir' for the location of your java source folder and -# 'out.dir' for the location of your output folder. - -# You can also use it define how the release builds are signed by declaring -# the following properties: -# 'key.store' for the location of your keystore and -# 'key.alias' for the name of the key to use. -# The password will be asked during the build when you use the 'release' target. - diff --git a/plugins/build.xml b/plugins/build.xml deleted file mode 100644 index 56da6a1f..00000000 --- a/plugins/build.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plugins/libs/phonegap.jar b/plugins/libs/phonegap.jar deleted file mode 100644 index 239a443f61582fbecdbfec0bf0983e1d15832d3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40287 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 diff --git a/plugins/local.properties b/plugins/local.properties deleted file mode 100644 index 546578e0..00000000 --- a/plugins/local.properties +++ /dev/null @@ -1,10 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must *NOT* be checked in Version Control Systems, -# as it contains information specific to your local configuration. - -# location of the SDK. This is only used by Ant -# For customization when using a Version Control System, please read the -# header note. -sdk.dir=/home/bowserj/android-sdk-linux_x86-1.6_r1 diff --git a/plugins/res/layout/main.xml b/plugins/res/layout/main.xml deleted file mode 100644 index 633b0d3c..00000000 --- a/plugins/res/layout/main.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - diff --git a/plugins/res/values/strings.xml b/plugins/res/values/strings.xml deleted file mode 100644 index 55f1fc2a..00000000 --- a/plugins/res/values/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - ponygap - diff --git a/plugins/src/com/phonegap/plugins/TtsManager.java b/plugins/src/com/phonegap/plugins/TtsManager.java deleted file mode 100644 index c34adeea..00000000 --- a/plugins/src/com/phonegap/plugins/TtsManager.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.phonegap.plugins; - -import android.content.Context; -import android.speech.tts.TextToSpeech; -import android.webkit.WebView; - -public class TtsManager { - - TextToSpeech voice; - Context mCtx; - WebView appView; - - TtsManager(WebView view, Context ctx) - { - mCtx = ctx; - appView = view; - voice = new TextToSpeech(mCtx, ttsInitListener); - } - - public void say(String text) - { - voice.speak(text, 1, null); - } - - //I have no idea why you would use this? Do you have predefined speech? - - private TextToSpeech.OnInitListener ttsInitListener = new TextToSpeech.OnInitListener() { - public void onInit(int status) { - - } - }; - - -} diff --git a/plugins/src/com/phonegap/plugins/ponygap.java b/plugins/src/com/phonegap/plugins/ponygap.java deleted file mode 100644 index 659ddd2a..00000000 --- a/plugins/src/com/phonegap/plugins/ponygap.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.phonegap.plugins; - -import android.os.Bundle; - -import com.phonegap.*; - -public class ponygap extends DroidGap -{ - /* Declare plugins here */ - TtsManager tts; - - /** Called when the activity is first created. */ - @Override - public void onCreate(Bundle savedInstanceState) - { - super.onCreate(savedInstanceState); - tts = new TtsManager(super.appView, this); - - super.appView.addJavascriptInterface(tts, "ttsHook"); - } -}