Skip to content

Commit

Permalink
Fixing the build process, found Android 2.0 bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
Joe Bowser committed Nov 30, 2009
1 parent fc11a0d commit 1e317cb
Show file tree
Hide file tree
Showing 4 changed files with 143 additions and 77 deletions.
80 changes: 80 additions & 0 deletions android/build.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
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:https:///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 <name> <package_name> <wwwdir> <path> \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
2 changes: 1 addition & 1 deletion android/framework/build.xml
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@
</target>

<target name="jar" depends="move_files, compile">
<jar jarfile="phonegap.jar" basedir="bin/classes"/>
<jar jarfile="phonegap.jar" basedir="bin/classes" excludes="**/R*.class" />
</target>

<target name="phonegap_debug" depends="move_files, debug">
Expand Down
76 changes: 62 additions & 14 deletions android/framework/src/com/phonegap/DroidGap.java
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,12 @@ public void onCreate(Bundle savedInstanceState) {

WebViewReflect.checkCompatibility();

/* This changes the setWebChromeClient to log alerts to LogCat! Important for Javascript Debugging */
appView.setWebChromeClient(new PhoneGapClient(this));
/* This changes the setWebChromeClient to log alerts to LogCat! Important for Javascript Debugging */
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.ECLAIR)
appView.setWebChromeClient(new EclairClient(this));
else
appView.setWebChromeClient(new GapClient(this));

appView.setInitialScale(100);

WebSettings settings = appView.getSettings();
Expand Down Expand Up @@ -141,22 +145,66 @@ public void loadUrl(String url)
appView.loadUrl(url);
}

/**
* Provides a hook for calling "alert" from javascript. Useful for
* debugging your javascript.
*/
final class PhoneGapClient extends GapClient {

PhoneGapClient(Context ctx){
super(ctx);
}

}
/**
* Provides a hook for calling "alert" from javascript. Useful for
* debugging your javascript.
*/
public class GapClient extends WebChromeClient {

Context mCtx;
public GapClient(Context ctx)
{
mCtx = ctx;
}

@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
Log.d(LOG_TAG, message);
// This shows the dialog box. This can be commented out for dev
AlertDialog.Builder alertBldr = new AlertDialog.Builder(mCtx);
alertBldr.setMessage(message);
alertBldr.setTitle("Alert");
alertBldr.show();
result.confirm();
return true;
}



}

public final class EclairClient extends GapClient
{
private long MAX_QUOTA = 2000000;

public EclairClient(Context ctx) {
super(ctx);
// TODO Auto-generated constructor stub
}

public void onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota, long estimatedSize,
long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater)
{

if( estimatedSize < MAX_QUOTA)
{
long newQuota = estimatedSize;
quotaUpdater.updateQuota(newQuota);
}
else
{
// Set the quota to whatever it is and force an error
// TODO: get docs on how to handle this properly
quotaUpdater.updateQuota(currentQuota);
}
}
}


// This is required to start the camera activity! It has to come from the previous activity
public void startCamera(int quality)
{
Intent i = new Intent(this, CameraPreview.class);
Intent i = new Intent(this, CameraPreview.class);
i.setAction("android.intent.action.PICK");
i.putExtra("quality", quality);
startActivityForResult(i, 0);
Expand Down
62 changes: 0 additions & 62 deletions android/framework/src/com/phonegap/GapClient.java

This file was deleted.

0 comments on commit 1e317cb

Please sign in to comment.