minor edits

This commit is contained in:
Brian LeRoux 2010-02-24 15:00:03 -08:00
parent f491a69769
commit 17d4d521e7
2 changed files with 78 additions and 99 deletions

View File

@ -7,56 +7,61 @@ class Build
def initialize(*a) def initialize(*a)
@android_sdk_path, @name, @pkg, @www, @path = a @android_sdk_path, @name, @pkg, @www, @path = a
@s = File::SEPARATOR @s = File::SEPARATOR
@dir = Dir.pwd + @s @dir = Dir.pwd + @s
end end
# runs the build script # runs the build script
def run def run
build_jar build_jar
create_android create_android
include_www
generate_manifest generate_manifest
copy_libs copy_libs
add_name_to_strings add_name_to_strings
write_java write_java
puts "Complete!" puts "Complete!"
end end
# removes local.properties and recreates based on android_sdk_path # removes local.properties and recreates based on android_sdk_path
# then generates framework/phonegap.jar # then generates framework/phonegap.jar
def build_jar def build_jar
puts "Building the JAR..." puts "Building the JAR..."
FileUtils.rm "#{ @dir }framework#{@s}local.properties" if File.exists? "#{ @dir }framework#{@s}local.properties" FileUtils.rm "#{ @dir }framework#{@s}local.properties" if File.exists? "#{ @dir }framework#{@s}local.properties"
FileUtils.rm "#{ @dir }framework#{@s}phonegap.js" if File.exists? "#{ @dir }framework#{@s}phonegap.js" FileUtils.rm "#{ @dir }framework#{@s}phonegap.js" if File.exists? "#{ @dir }framework#{@s}phonegap.js"
FileUtils.rm "#{ @dir }framework#{@s}phonegap.jar" if File.exists? "#{ @dir }framework#{@s}phonegap.jar" FileUtils.rm "#{ @dir }framework#{@s}phonegap.jar" if File.exists? "#{ @dir }framework#{@s}phonegap.jar"
open("#{ @dir }framework#{@s}local.properties", 'w') do |f| open("#{ @dir }framework#{@s}local.properties", 'w') do |f|
f.puts "sdk.dir=#{ @android_sdk_path }" f.puts "sdk.dir=#{ @android_sdk_path }"
end end
Dir.chdir(@dir + "framework") Dir.chdir(@dir + "framework")
`ant jar` `ant jar`
Dir.chdir(@dir) Dir.chdir(@dir)
end end
# runs android create project # runs android create project
# TODO need to allow more flexible SDK targetting # TODO need to allow more flexible SDK targetting
# TODO validate Android SDK # TODO validate Android SDK
def create_android def create_android
puts "Creating Android project..." puts "Creating Android project..."
`android create project -t 5 -k #{ @pkg } -a #{ @name } -n #{ @name } -p #{ @path }` `android create project -t 5 -k #{ @pkg } -a #{ @name } -n #{ @name } -p #{ @path }`
FileUtils.mkdir_p "#{ @path }#{@s}assets#{@s}www" end
def include_www
puts "Adding www folder to project..."
FileUtils.mkdir_p "#{ @path }#{@s}assets#{@s}www"
FileUtils.cp_r "#{ @www }#{ @s }.", "#{ @path }#{ @s }assets#{ @s }www#{ @s }" FileUtils.cp_r "#{ @www }#{ @s }.", "#{ @path }#{ @s }assets#{ @s }www#{ @s }"
end end
# creates an AndroidManifest.xml for the project # creates an AndroidManifest.xml for the project
def generate_manifest def generate_manifest
puts "Generating manifest..." puts "Generating manifest..."
manifest = "" manifest = ""
open(@dir + 'framework/AndroidManifest.xml', 'r') do |old| open(@dir + 'framework/AndroidManifest.xml', 'r') do |old|
manifest = old.read manifest = old.read
manifest.gsub! 'android:versionCode="5"', 'android:versionCode="1"' manifest.gsub! 'android:versionCode="5"', 'android:versionCode="1"'
manifest.gsub! 'package="com.phonegap"', "package=\"#{ @pkg }\"" manifest.gsub! 'package="com.phonegap"', "package=\"#{ @pkg }\""
manifest.gsub! 'android:name=".StandAlone"', "android:name=\".#{ @name }\"" manifest.gsub! 'android:name=".StandAlone"', "android:name=\".#{ @name }\""
manifest.gsub! 'android:minSdkVersion="5"', 'android:minSdkVersion="3"' manifest.gsub! 'android:minSdkVersion="5"', 'android:minSdkVersion="3"'
end end
open("#{ @path }#{@s}AndroidManifest.xml", 'w') { |x| x.puts manifest } open("#{ @path }#{@s}AndroidManifest.xml", 'w') { |x| x.puts manifest }
end end
@ -64,31 +69,31 @@ class Build
# copies stuff from framework into the project # copies stuff from framework into the project
# TODO need to allow for www import inc icon # TODO need to allow for www import inc icon
def copy_libs def copy_libs
puts "Copying over libraries and assets and creating phonegap.js..." puts "Copying over libraries and assets and creating phonegap.js..."
FileUtils.cp "#{ @dir }framework#{@s}phonegap.jar", "#{ @path }#{@s}libs" FileUtils.cp "#{ @dir }framework#{@s}phonegap.jar", "#{ @path }#{@s}libs"
FileUtils.cp "#{ @dir }framework#{@s}res#{@s}values#{@s}strings.xml", "#{ @path }#{@s}res#{@s}values#{@s}strings.xml" FileUtils.cp "#{ @dir }framework#{@s}res#{@s}values#{@s}strings.xml", "#{ @path }#{@s}res#{@s}values#{@s}strings.xml"
FileUtils.cp "#{ @dir }framework#{@s}res#{@s}layout#{@s}main.xml", "#{ @path }#{@s}res#{@s}layout#{@s}main.xml" FileUtils.cp "#{ @dir }framework#{@s}res#{@s}layout#{@s}main.xml", "#{ @path }#{@s}res#{@s}layout#{@s}main.xml"
FileUtils.cp "#{ @dir }framework#{@s}res#{@s}layout#{@s}preview.xml", "#{ @path }#{@s}res#{@s}layout#{@s}preview.xml" FileUtils.cp "#{ @dir }framework#{@s}res#{@s}layout#{@s}preview.xml", "#{ @path }#{@s}res#{@s}layout#{@s}preview.xml"
%w(drawable-hdpi drawable-ldpi drawable-mdpi).each do |e| %w(drawable-hdpi drawable-ldpi drawable-mdpi).each do |e|
FileUtils.cp "#{ @dir }framework#{@s}res#{@s}drawable#{@s}icon.png", "#{ @path }#{@s}res#{@s}#{ e }#{@s}icon.png" FileUtils.cp "#{ @dir }framework#{@s}res#{@s}drawable#{@s}icon.png", "#{ @path }#{@s}res#{@s}#{ e }#{@s}icon.png"
end end
# concat JS and put into www folder. # concat JS and put into www folder.
Dir.chdir("#{ @dir }framework#{ @s }assets#{ @s }js") Dir.chdir("#{ @dir }framework#{ @s }assets#{ @s }js")
basedir = "." basedir = "."
js = Dir.new(basedir).entries js = Dir.new(basedir).entries
phonegapjs = IO.read('phonegap.js.base'); phonegapjs = IO.read('phonegap.js.base');
js.each do |script| js.each do |script|
next if script[0].chr == "." or script == "phonegap.js.base" next if script[0].chr == "." or script == "phonegap.js.base"
phonegapjs += IO.read(script) phonegapjs += IO.read(script)
phonegapjs += "\n\n" phonegapjs += "\n\n"
end end
Dir.chdir("#{ @dir}") Dir.chdir("#{ @dir}")
File.open("#{ @path }#{ @s }assets#{ @s }www#{ @s }phonegap.js", 'w') {|f| f.write(phonegapjs) } File.open("#{ @path }#{ @s }assets#{ @s }www#{ @s }phonegap.js", 'w') {|f| f.write(phonegapjs) }
end end
# puts app name in strings # puts app name in strings
def add_name_to_strings def add_name_to_strings
puts "Adding some application name to strings.xml..." puts "Adding app name to strings.xml..."
x = "<?xml version=\"1.0\" encoding=\"utf-8\"?> x = "<?xml version=\"1.0\" encoding=\"utf-8\"?>
<resources> <resources>
<string name=\"app_name\">#{ @name }</string> <string name=\"app_name\">#{ @name }</string>
@ -103,7 +108,7 @@ class Build
# this is so fucking unholy yet oddly beautiful # this is so fucking unholy yet oddly beautiful
# not sure if I should thank Ruby or apologize for this abusive use of string interpolation # not sure if I should thank Ruby or apologize for this abusive use of string interpolation
def write_java def write_java
puts "Writing application Java code..." puts "Writing application Java code..."
j = " j = "
package #{ @pkg }; package #{ @pkg };
@ -150,7 +155,7 @@ else
name ............... The name of your application. name ............... The name of your application.
package_name ....... The name of your package (For example: com.nitobi.demo) package_name ....... The name of your package (For example: com.nitobi.demo)
www ................ The path to your www folder. (Wherein your HTML, CSS and JS app is.) www ................ The path to your www folder. (Wherein your HTML, CSS and JS app is.)
path ............... The path to generate the application. path ............... The path to generate the Android application.
EOF EOF
end end

View File

@ -72,7 +72,7 @@ PhoneGap.addConstructor = function(func) {
e.initEvent('deviceready'); e.initEvent('deviceready');
document.dispatchEvent(e); document.dispatchEvent(e);
} }
}, 1); }, 5);
})(); })();
@ -138,10 +138,11 @@ function Acceleration(x, y, z)
this.x = x; this.x = x;
this.y = y; this.y = y;
this.z = z; this.z = z;
this.timestamp = new Date().getTime();
} }
// Need to define these for android // Need to define these for android
_accel = {} _accel = {};
_accel.x = 0; _accel.x = 0;
_accel.y = 0; _accel.y = 0;
_accel.z = 0; _accel.z = 0;
@ -355,7 +356,7 @@ PhoneGap.addConstructor(function() {
if (typeof navigator.compass == "undefined") navigator.compass = new Compass(); if (typeof navigator.compass == "undefined") navigator.compass = new Compass();
}); });
var Contact = function(){ var Contact = function(){
this.name = null; this.name = new ContactName();
this.emails = []; this.emails = [];
this.phones = []; this.phones = [];
} }
@ -393,7 +394,18 @@ Contacts.prototype.find = function(obj, win, fail)
{ {
if(obj.name != null) if(obj.name != null)
{ {
ContactHook.search(name, "", ""); // Build up the search term that we'll use in SQL, based on the structure/contents of the contact object passed into find.
var searchTerm = '';
if (obj.name.givenName && obj.name.givenName.length > 0) {
searchTerm = obj.name.givenName.split(' ').join('%');
}
if (obj.name.familyName && obj.name.familyName.length > 0) {
searchTerm += obj.name.familyName.split(' ').join('%');
}
if (!obj.name.familyName && !obj.name.givenName && obj.name.formatted) {
searchTerm = obj.name.formatted;
}
ContactHook.search(searchTerm, "", "");
} }
this.win = win; this.win = win;
this.fail = fail; this.fail = fail;
@ -578,46 +590,12 @@ function Geolocation() {
}; };
}; };
/** Geolocation.prototype.getCurrentPosition = function(successCallback, errorCallback, options)
* Asynchronously aquires the current position. {
* @param {Function} successCallback The function to call when the position var position = Geo.getCurrentLocation();
* data is available this.global_success = successCallback;
* @param {Function} errorCallback The function to call when there is an error this.fail = errorCallback;
* getting the position data. }
* @param {PositionOptions} options The options for getting the position data
* such as timeout.
*/
Geolocation.prototype.getCurrentPosition = function(successCallback, errorCallback, options) {
var referenceTime = 0;
if (this.lastPosition)
referenceTime = this.lastPosition.timeout;
else
this.start(options);
var timeout = 20000;
var interval = 500;
if (typeof(options) == 'object' && options.interval)
interval = options.interval;
if (typeof(successCallback) != 'function')
successCallback = function() {};
if (typeof(errorCallback) != 'function')
errorCallback = function() {};
var dis = this;
var delay = 0;
var timer = setInterval(function() {
delay += interval;
if (typeof(dis.lastPosition) == 'object' && dis.lastPosition.timestamp > referenceTime) {
successCallback(dis.lastPosition);
clearInterval(timer);
} else if (delay >= timeout) {
errorCallback();
clearInterval(timer);
}
}, interval);
};
/** /**
* Asynchronously aquires the position repeatedly at a given interval. * Asynchronously aquires the position repeatedly at a given interval.
@ -675,23 +653,6 @@ Geolocation.prototype.setError = function(message) {
f(message); f(message);
} }
}; };
PhoneGap.addConstructor(function() {
if (typeof navigator.geolocation == "undefined") navigator.geolocation = new Geolocation();
});
/*
* Since we can't guarantee that we will have the most recent, we just try our best!
*
* Also, the API doesn't specify which version is the best version of the API
*/
Geolocation.prototype.getCurrentPosition = function(successCallback, errorCallback, options)
{
var position = Geo.getCurrentLocation();
this.global_success = successCallback;
this.fail = errorCallback;
}
// Run the global callback // Run the global callback
Geolocation.prototype.gotCurrentPosition = function(lat, lng, alt, altacc, head, vel, stamp) Geolocation.prototype.gotCurrentPosition = function(lat, lng, alt, altacc, head, vel, stamp)
@ -704,6 +665,7 @@ Geolocation.prototype.gotCurrentPosition = function(lat, lng, alt, altacc, head,
{ {
coords = new Coordinates(lat, lng, alt, altacc, head, vel); coords = new Coordinates(lat, lng, alt, altacc, head, vel);
loc = new Position(coords, stamp); loc = new Position(coords, stamp);
this.lastPosition = loc;
this.global_success(loc); this.global_success(loc);
} }
} }
@ -749,7 +711,19 @@ Geolocation.prototype.clearWatch = function(watchId)
{ {
Geo.stop(watchId); Geo.stop(watchId);
} }
function KeyEvent() // Taken from Jesse's geo fix (similar problem) in PhoneGap iPhone. Go figure, same browser!
function __proxyObj(origObj, proxyObj, funkList) {
for (var v in funkList) {
origObj[funkList[v]] = proxyObj[funkList[v]];
}
}
PhoneGap.addConstructor(function() {
navigator._geo = new Geolocation();
__proxyObj(navigator.geolocation, navigator._geo,
["setLocation", "getCurrentPosition", "watchPosition",
"clearWatch", "setError", "start", "stop", "gotCurrentPosition"]
);
});function KeyEvent()
{ {
} }