<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>android/tichooser/assets/Resources/tableview.html</filename>
    </added>
    <added>
      <filename>android/titanium/src/org/appcelerator/titanium/api/ITitaniumTableView.java</filename>
    </added>
    <added>
      <filename>android/titanium/src/org/appcelerator/titanium/module/ui/TitaniumTableView.java</filename>
    </added>
    <added>
      <filename>android/titanium/src/org/appcelerator/titanium/module/ui/TitaniumTableViewItem.java</filename>
    </added>
    <added>
      <filename>android/titanium/src/org/appcelerator/titanium/res/drawable/btn_more.png</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -11,15 +11,14 @@
         &lt;window&gt;
             &lt;id&gt;initial&lt;/id&gt;
             &lt;title&gt;Titanium Connectivity&lt;/title&gt;
-            &lt;url&gt;camera.html&lt;/url&gt;
+            &lt;url&gt;tableview.html&lt;/url&gt;
             &lt;type&gt;single&lt;/type&gt;
             &lt;fullscreen&gt;false&lt;/fullscreen&gt;
             &lt;backgroundColor&gt;argb(0,255,255,255)&lt;/backgroundColor&gt;
             &lt;barColor&gt;#000&lt;/barColor&gt;
         &lt;/window&gt;
     &lt;/windows&gt;
-    &lt;property name=&quot;ti.android.flushjscache&quot; type=&quot;bool&quot;&gt;true&lt;/property&gt;
-    &lt;property name=&quot;ti.android.minifyjs&quot; type=&quot;bool&quot;&gt;false&lt;/property&gt;
+    &lt;property name=&quot;ti.android.debug&quot; type=&quot;bool&quot;&gt;true&lt;/property&gt;
     &lt;property name=&quot;ti.android.watchlog&quot; type=&quot;bool&quot;&gt;false&lt;/property&gt;
     &lt;!-- ti.deploytype will be set by the development toolkit --&gt;
     &lt;property name=&quot;ti.deploytype&quot;&gt;development&lt;/property&gt;</diff>
      <filename>android/tichooser/assets/tiapp.xml</filename>
    </modified>
    <modified>
      <diff>@@ -158,7 +158,19 @@ var OptionDialog = function(proxy) {
 			throw new Error(&quot;OptionDialog only handles click events. Use event name 'click'&quot;);
 		}
 
-		this.proxy.addListener('click', registerCallback(this, listener));
+		return this.proxy.addListener(eventName, registerCallback(this, listener));
+	};
+	/**
+	 * @tiapi(method=true,name=UI.OptionDialog.removeEventListener,since=0.5) Remove listener added for the 'click' event.
+	 * @tiarg[string,eventName] name of the event to listen for.
+	 * @tiarg[int,listenerId] id returned by addEventListener
+	 */
+	this.removeEventListener = function(eventName, listenerId) {
+		if (eventName !== &quot;click&quot;) {
+			throw new Error(&quot;OptionDialog only handles click events. Use event name 'click'&quot;);
+		}
+
+		this.proxy.removeEventListener(eventName, listenerId);
 	};
 	/**
 	 * @tiapi(method=true,name=UI.OptionDialog.show,since=0.4) Show this dialog.
@@ -208,14 +220,30 @@ var AlertDialog = function(proxy) {
 	 * @tiapi(method=true,name=UI.AlertDialog.addEventListener,since=0.4) Add a listener for the 'click' event.
 	 * @tiarg[string,eventName] name of the event to listen for
 	 * @tiarg[function,listener] function to call when button is clicked.
+	 * @tiresult[int] id used to remove the added listener
 	 */
 	this.addEventListener = function(eventName, listener) {
 		if (eventName !== &quot;click&quot;) {
 			throw new Error(&quot;AlertDialog only handles click events. Use event name 'click'&quot;);
 		}
 
-		this.proxy.addListener('click', registerCallback(this, listener));
-	}
+		return this.proxy.addEventListener(eventName, registerCallback(this, listener));
+	};
+	/**
+	 * @tiapi(method=true,name=UI.AlertDialog.removeEventListener,since=0.5) Remove listener added for the 'click' event.
+	 * @tiarg[string,eventName] name of the event to listen for.
+	 * @tiarg[int,listenerId] id returned by addEventListener
+	 */
+	this.removeEventListener = function(eventName, listenerId) {
+		if (eventName !== &quot;click&quot;) {
+			throw new Error(&quot;AlertDialog only handles click events. Use event name 'click'&quot;);
+		}
+
+		this.proxy.removeEventListener(eventName, listenerId);
+	};
+	/**
+	 * @tiapi(method=true,name=UI.AlertDialog.show,since=0.4) Show the alert dialog
+	 */
 	this.show = function() {
 		this.proxy.show();
 	}
@@ -325,6 +353,43 @@ var TitaniumNotifier = function(proxy) {
 	}
 };
 
+var TableView = function(proxy) {
+	this.proxy = proxy; // reference to Java object
+	this._callback;
+
+	/**
+	 * @tiapi(method=true,name=UI.TableView.setData,since=0.5) set options data describing view
+	 * @tiarg[string,data] options data
+	 */
+	this.setData = function(data) {
+		this.proxy.setData(data);
+	};
+	/**
+	 * @tiapi(method=true,name=UI.TableView.setRowHeight,since=0.5) set the height of each row
+	 * @tiarg[string,rowHeight] height of row
+	 */
+	this.setRowHeight = function(height) {
+		this.proxy.setRowHeight(height);
+	};
+	/**
+	 * @tiapi(method=true,name=UI.TableView.open,since=0.5) open the table view
+	 * @tiarg[string, options] open options
+	 */
+	this.open = function(options) {
+		var opt = null;
+		if (!isUndefined(options)) {
+			opt = Titanium.JSON.stringify(options);
+		}
+		this.proxy.open(opt, registerCallback(this, this._callback));
+	};
+	/**
+	 * @tiapi(method=true,name=UI.TableView.close,since=0.5) close an open table view
+	 */
+	this.close = function() {
+		this.proxy.close();
+	}
+};
+
 var UserWindow = function(proxy) {
 	this.proxy = proxy; // reference to java object
 	this._window; // the DOM window
@@ -591,6 +656,30 @@ Titanium.UI = {
 		}
 		return ind;
 	},
+	/**
+	 * @tiapi(method=true,name=UI.createTableView,since=0.5) Create a table view
+	 * @tiarg[object, options] a dictionary/hash of options
+	 * @tiresult[TableView] the table view.
+	 */
+	createTableView : function(options, callback) {
+		 var tv = new TableView(Titanium.uiProxy.createTableView());
+
+		 tv._callback = callback;
+
+		 if(!isUndefined(options)) {
+			 var data = options['data'];
+			 var rowHeight = options['rowHeight'];
+
+			 if (!isUndefined(data)) {
+				 tv.setData(Titanium.JSON.stringify(data));
+			 }
+			 if (!isUndefined(rowHeight)) {
+				 tv.setRowHeight(rowHeight);
+			 }
+		 }
+
+		 return tv;
+	},
 
 	// createNotification is below. It needs the property currentWindow
 	// iPhone only methods</diff>
      <filename>android/titanium/src/assets/ti/debug/tiui.js</filename>
    </modified>
    <modified>
      <diff>@@ -61,10 +61,12 @@ Titanium.appProxy=window.TitaniumApp;Titanium.App={getID:function()
 {return transformObjectValue(Titanium.appProxy.setLoadOnPageEnd(load),null);}};Properties=function(proxy){this.proxy=proxy;this.getString=function(name,def){def=arguments.length==1||isUndefined(def)?null:def;var r=this.proxy.getString(name,def);return transformObjectValue(r,def);};this.setString=function(name,value){return this.proxy.setString(name,value);};this.getInt=function(name,def){def=arguments.length==1||isUndefined(def)?-1:def;var r=this.proxy.getInt(name,def);return transformObjectValue(r,def);};this.setInt=function(name,value){return this.proxy.setInt(name,value);};this.getBool=function(name,def){def=arguments.length==1||isUndefined(def)?false:def;var r=this.proxy.getBool(name,def);return transformObjectValue(r,def);};this.setBool=function(name,value){return this.proxy.setBool(name,value);},this.getDouble=function(name,def){def=arguments.length==1||isUndefined(def)?0.0:def;var r=this.proxy.getDouble(name,def);return transformObjectValue(r,def);},this.setDouble=function(name,value){return this.proxy.setDouble(name,value);}};Titanium.App.Properties=new Properties(Titanium.appProxy.getAppProperties());Titanium.App.SystemProperties=new Properties(Titanium.appProxy.getSystemProperties());
 Titanium.uiProxy=window.TitaniumUI;var MenuItem=function(){this.obj;this._callback;this.isRoot=function(){return this.obj.isRoot();};this.isSeparator=function(){return this.obj.isSeparator();};this.isItem=function(){return this.obj.isItem();};this.isSubMenu=function(){return this.obj.isSubMenu();};this.isEnabled=function(){return this.obj.isEnabled();};this.addSeparator=function(){var m=new MenuItem;m.obj=this.obj.addSeparator();return m;};this.addItem=function(label,callback,icon){var m=new MenuItem();this._callback=callback;m.obj=this.obj.addItem(label,registerCallback(this,this._callback),icon);return m;};this.addSubMenu=function(label,icon){var m=new MenuItem();m.obj=this.obj.addSubMenu(label,icon);return m;};this.enable=function(){this.obj.enable();};this.disable=function(){this.obj.disable();};this.setLabel=function(label){this.obj.setLabel(label);};this.getLabel=function(){return this.obj.getLabel();};this.setIcon=function(icon){this.obj.setIcon(icon);};this.getIcon=function(){return this.obj.getIcon();};this.setCallback=function(f){_callback=f;this.obj.setCallback(registerCallback(this,f));};};var OptionDialog=function(proxy){this.proxy=proxy;this.setTitle=function(title){this.proxy.setTitle(title);};this.setOptions=function(options){var o=transformObjectValue(options,[]);if(typeOf(o)!=='array'){o=[options];}
 this.proxy.setOptions(o);};this.addEventListener=function(eventName,listener){if(eventName!==&quot;click&quot;){throw new Error(&quot;OptionDialog only handles click events. Use event name 'click'&quot;);}
-this.proxy.addListener('click',registerCallback(this,listener));};this.show=function(){this.proxy.show();};this.setDestructive=function(id){};this.setCancel=function(id){}};var AlertDialog=function(proxy){this.proxy=proxy;this.setTitle=function(title){this.proxy.setTitle(title);};this.setMessage=function(msg){alert(&quot;setting msg: &quot;+msg);this.proxy.setMessage(msg);};this.setButtonNames=function(names){var n=transformObjectValue(names,[]);if(typeOf(n)!=='array'){n=[names];}
+return this.proxy.addListener(eventName,registerCallback(this,listener));};this.removeEventListener=function(eventName,listenerId){if(eventName!==&quot;click&quot;){throw new Error(&quot;OptionDialog only handles click events. Use event name 'click'&quot;);}
+this.proxy.removeEventListener(eventName,listenerId);};this.show=function(){this.proxy.show();};this.setDestructive=function(id){};this.setCancel=function(id){}};var AlertDialog=function(proxy){this.proxy=proxy;this.setTitle=function(title){this.proxy.setTitle(title);};this.setMessage=function(msg){alert(&quot;setting msg: &quot;+msg);this.proxy.setMessage(msg);};this.setButtonNames=function(names){var n=transformObjectValue(names,[]);if(typeOf(n)!=='array'){n=[names];}
 this.proxy.setButtons(n);};this.addEventListener=function(eventName,listener){if(eventName!==&quot;click&quot;){throw new Error(&quot;AlertDialog only handles click events. Use event name 'click'&quot;);}
-this.proxy.addListener('click',registerCallback(this,listener));}
-this.show=function(){this.proxy.show();}};var ActivityIndicator=function(proxy){this.proxy=proxy;this.setMessage=function(msg){this.proxy.setMessage(msg);};this.setMin=function(n){this.proxy.setMin(n);};this.setMax=function(n){this.proxy.setMax(n);};this.setPos=function(n){this.proxy.setPosition(n);};this.show=function(){this.proxy.show();};this.hide=function(){this.proxy.hide();};};var TitaniumNotifier=function(proxy){this.proxy=proxy;this._callback;this.setTitle=function(title){this.proxy.setTitle(title);};this.setMessage=function(message){this.proxy.setMessage(message);};this.setIcon=function(iconUrl){this.proxy.setIcon(iconUrl);};this.setDelay=function(delay){this.proxy.setDelay(delay);};this.setCallback=function(callback){this._callback=callback;this.proxy.setCallback(registerCallback(this,_callback));};this.show=function(animate,autohide){this.proxy.show(transformObjectValue(animate,false),transformObjectValue(autohide,true));};this.hide=function(animate){this.proxy.hide(transformObjectValue(animate,false));}};var UserWindow=function(proxy){this.proxy=proxy;this._window;this.setWindowId=function(name){this.proxy.setWindowId(name);}
+return this.proxy.addEventListener(eventName,registerCallback(this,listener));};this.removeEventListener=function(eventName,listenerId){if(eventName!==&quot;click&quot;){throw new Error(&quot;AlertDialog only handles click events. Use event name 'click'&quot;);}
+this.proxy.removeEventListener(eventName,listenerId);};this.show=function(){this.proxy.show();}};var ActivityIndicator=function(proxy){this.proxy=proxy;this.setMessage=function(msg){this.proxy.setMessage(msg);};this.setMin=function(n){this.proxy.setMin(n);};this.setMax=function(n){this.proxy.setMax(n);};this.setPos=function(n){this.proxy.setPosition(n);};this.show=function(){this.proxy.show();};this.hide=function(){this.proxy.hide();};};var TitaniumNotifier=function(proxy){this.proxy=proxy;this._callback;this.setTitle=function(title){this.proxy.setTitle(title);};this.setMessage=function(message){this.proxy.setMessage(message);};this.setIcon=function(iconUrl){this.proxy.setIcon(iconUrl);};this.setDelay=function(delay){this.proxy.setDelay(delay);};this.setCallback=function(callback){this._callback=callback;this.proxy.setCallback(registerCallback(this,_callback));};this.show=function(animate,autohide){this.proxy.show(transformObjectValue(animate,false),transformObjectValue(autohide,true));};this.hide=function(animate){this.proxy.hide(transformObjectValue(animate,false));}};var TableView=function(proxy){this.proxy=proxy;this._callback;this.setData=function(data){this.proxy.setData(data);};this.setRowHeight=function(height){this.proxy.setRowHeight(height);};this.open=function(options){var opt=null;if(!isUndefined(options)){opt=Titanium.JSON.stringify(options);}
+this.proxy.open(opt,registerCallback(this,this._callback));};this.close=function(){this.proxy.close();}};var UserWindow=function(proxy){this.proxy=proxy;this._window;this.setWindowId=function(name){this.proxy.setWindowId(name);}
 this.setURL=function(url){this.proxy.setUrl(url);};this.setTitle=function(title){this.proxy.setTitle(title);};this.setTitleImage=function(imageUrl){this.proxy.setTitleImage(imageUrl);};this.setFullscreen=function(fullscreen){this.proxy.setFullscreen(fullscreen);};this.setType=function(type){this.proxy.setType(type);}
 this.open=function(options){this._window=this.proxy.open();return this._window;};this.close=function(options){this.proxy.close();this._window=null;};this.addEventListener=function(eventName,listener){return this.proxy.addEventListener(eventName,registerCallback(this,listener));};this.removeEventListener=function(eventName,listenerId){this.proxy.removeEventListener(eventName,listenerId);};this.setNavBarColor=function(color){};this.setLeftNavButton=function(button){};this.setRightNavButton=function(button){};this.showNavBar=function(options){};this.hideNavBar=function(options){}
 this.setBarColor=function(options){}};UserWindow.prototype.__defineGetter__(&quot;window&quot;,function(){return this._window;});Titanium.UI={WINDOW_TABBED:'tabbed',WINDOW_NORMAL:'single',createWindow:function(options){var w=new UserWindow(Titanium.uiProxy.createWindow());if(!isUndefined(options)){var url=options['url'];var fullscreen=options['fullscreen'];var type=options['type'];var title=options['title'];var titleImage=options['titleImage'];if(!isUndefined(url)){w.setURL(url);}
@@ -83,7 +85,9 @@ if(!isUndefined(type)){ind.setType(type);}
 if(!isUndefined(minVal)){ind.setMin(minVal);}
 if(!isUndefined(maxVal)){ind.setMax(maxVal);}
 if(!isUndefined(position)){ind.setPos(position);}}
-return ind;},createButton:function(options){return null;},createToolbar:function(options){return null;},setTabBadge:function(id){},setStatusBarColor:function(color){}};Titanium.UI.createAlert=Titanium.UI.createAlertDialog;Titanium.UI._currentWindow=null;Titanium.UI.__defineGetter__(&quot;currentWindow&quot;,function(){if(Titanium.UI._currentWindow==null){Titanium.UI._currentWindow=new UserWindow(Titanium.uiProxy.getCurrentWindow());}
+return ind;},createTableView:function(options,callback){var tv=new TableView(Titanium.uiProxy.createTableView());tv._callback=callback;if(!isUndefined(options)){var data=options['data'];var rowHeight=options['rowHeight'];if(!isUndefined(data)){tv.setData(Titanium.JSON.stringify(data));}
+if(!isUndefined(rowHeight)){tv.setRowHeight(rowHeight);}}
+return tv;},createButton:function(options){return null;},createToolbar:function(options){return null;},setTabBadge:function(id){},setStatusBarColor:function(color){}};Titanium.UI.createAlert=Titanium.UI.createAlertDialog;Titanium.UI._currentWindow=null;Titanium.UI.__defineGetter__(&quot;currentWindow&quot;,function(){if(Titanium.UI._currentWindow==null){Titanium.UI._currentWindow=new UserWindow(Titanium.uiProxy.getCurrentWindow());}
 return Titanium.UI._currentWindow;});Titanium.UI.ActivityIndicator={STATUS_BAR:0,DIALOG:1,INDETERMINANT:0,DETERMINANT:1};Titanium.UI.Android={};Titanium.UI.Android.SystemIcon={ACTION:'ti:Ti:default_icon',CAMERA:'ti:Sys:ic_menu_camera',COMPOSE:'ti:Sys:ic_menu_compose',BOOKMARKS:'ti:Ti:default_icon',SEARCH:'ti:Sys:ic_menu_search',ADD:'ti:Sys:ic_menu_add',TRASH:'ti:Sys:ic_menu_delete',ORGANIZE:'ti:Sys:ic_menu_archive',REPLY:'ti:Ti:default_icon',STOP:'ti:Sys:ic_menu_stop',REFRESH:'ti:Sys:ic_menu_refresh',PLAY:'ti:Sys:ic_media_play',FAST_FORWARD:'ti:Sys:ic_media_ff',PAUSE:'ti:Sys:ic_media_pause',REWIND:'ti:Sys:ic_media_rew',EDIT:'ti:Sys:ic_menu_edit',CANCEL:'ti:Sys:ic_menu_close_clear_cancel',SAVE:'ti:Sys:ic_menu_save',DONE:'ti:Sys:ic_menu_mark',BACK:'ti:Sys:ic_menu_back',FORWARD:'ti:Sys:ic_menu_forward',HELP:'ti:Sys:ic_menu_help',HOME:'ti:Sys:ic_menu_home',NEXT:'ti:Sys:ic_media_next',PREFERENCES:'ti:Sys:ic_menu_preferences',PREVIOUS:'ti:Sys:ic_media_previous',REVERT:'ti:Sys:ic_menu_revert',SEND:'ti:Sys:ic_menu_send',SHARE:'ti:Sys:ic_menu_share',VIEW:'ti:Sys:ic_menu_view',ZOOM:'ti:Sys:ic_menu_zoom'};ActivityIndicator.prototype.setLocation=function(loc){if(!(loc==Titanium.UI.ActivityIndicator.STATUS_BAR||loc==Titanium.UI.ActivityIndicator.DIALOG)){throw new Error(&quot;Unsupported indicator location.&quot;);}
 this.proxy.setLocation(loc);};ActivityIndicator.prototype.setType=function(type){if(!(type==Titanium.UI.ActivityIndicator.DETERMINANT||type==Titanium.UI.ActivityIndicator.INDETERMINANT)){throw new Error(&quot;Unsupported indicator type.&quot;);}
 this.proxy.setType(type);};Titanium.UI.createNotification=function(options)</diff>
      <filename>android/titanium/src/assets/ti/release/tiall.js</filename>
    </modified>
    <modified>
      <diff>@@ -171,7 +171,7 @@ public class TitaniumActivity extends Activity
         if (intent != null) {
         	appInfo = intent.getAppInfo(me);
         	windowInfo = intent.getWindowInfo(appInfo);
-         	url = tfh.getResourceUrl(intent, intent.getData().toString());
+         	url = tfh.getResourceUrl(intent.getData().toString());
          } else {
         	 if (DBG) {
         		 Log.d(LCAT, &quot;Intent was empty&quot;);
@@ -224,7 +224,7 @@ public class TitaniumActivity extends Activity
         Thread backgroundDrawableThread = new Thread(new Runnable(){
 
 			public void run() {
-				backgroundDrawable = tfh.loadDrawable(intent, fBackgroundImage, false); // Ok to not have background
+				backgroundDrawable = tfh.loadDrawable(fBackgroundImage, false); // Ok to not have background
 			}});
         backgroundDrawableThread.start();
 
@@ -503,6 +503,7 @@ public class TitaniumActivity extends Activity
 	@Override
 	public boolean onKeyDown(int keyCode, KeyEvent event) {
         if ((keyCode == KeyEvent.KEYCODE_BACK &amp;&amp; event.getRepeatCount() == 0)) {
+        	Log.e(LCAT, &quot;BACK in Activity&quot;);
         	if (webView.canGoBack()) {
         		webView.goBack();
         		Log.e(LCAT, &quot;Activity back key and has webView back&quot;);
@@ -601,7 +602,7 @@ public class TitaniumActivity extends Activity
     		if (s != null) {
      			Drawable d = null;
 				TitaniumFileHelper tfh = new TitaniumFileHelper(this.getParent());
-				d = tfh.loadDrawable(new TitaniumIntentWrapper(getIntent()), s, true);
+				d = tfh.loadDrawable(s, true);
 				if (d != null) {
 					mi.setIcon(d);
 				}</diff>
      <filename>android/titanium/src/org/appcelerator/titanium/TitaniumActivity.java</filename>
    </modified>
    <modified>
      <diff>@@ -74,7 +74,7 @@ public class TitaniumActivityGroup extends ActivityGroup
 
 		Thread initialSourceThread = new Thread(new Runnable(){
 			public void run() {
-				String url = tfh.getResourceUrl(null, info.getWindowUrl());
+				String url = tfh.getResourceUrl(info.getWindowUrl());
 				try {
 					app.setSourceFor(url, TitaniumUrlHelper.getSource(app, app.getApplicationContext(), url, null));
 				} catch (IOException e) {
@@ -95,7 +95,7 @@ public class TitaniumActivityGroup extends ActivityGroup
 						Log.w(LCAT, &quot;Secondary source cache thread interrupted&quot;);
 					}
 					for (int i = 1; i &lt; len; i++) {
-						String url = tfh.getResourceUrl(null, windows.get(i).getWindowUrl());
+						String url = tfh.getResourceUrl(windows.get(i).getWindowUrl());
 						try {
 							app.setSourceFor(url, TitaniumUrlHelper.getSource(app, app.getApplicationContext(), url, null));
 						} catch (IOException e) {</diff>
      <filename>android/titanium/src/org/appcelerator/titanium/TitaniumActivityGroup.java</filename>
    </modified>
    <modified>
      <diff>@@ -11,9 +11,9 @@ public interface ITitaniumDialog {
 
 	public void setTitle(String title);
 	public void setMessage(String msg);
-	public void addListener(String eventName, String listener);
+	public int addEventListener(String eventName, String listener);
+	public void removeEventListener(String eventName, int listenerId);
 	public void setButtons(String[] buttonText);
 	public void setOptions(String[] optionText);
 	public void show();
-	//TODO add removeEventListener
 }</diff>
      <filename>android/titanium/src/org/appcelerator/titanium/api/ITitaniumDialog.java</filename>
    </modified>
    <modified>
      <diff>@@ -23,4 +23,6 @@ public interface ITitaniumUI
 
 	public ITitaniumNotifier createNotification();
 
+	public ITitaniumTableView createTableView();
+
 }</diff>
      <filename>android/titanium/src/org/appcelerator/titanium/api/ITitaniumUI.java</filename>
    </modified>
    <modified>
      <diff>@@ -16,15 +16,17 @@ import org.appcelerator.titanium.api.ITitaniumLifecycle;
 import org.appcelerator.titanium.api.ITitaniumMenuItem;
 import org.appcelerator.titanium.api.ITitaniumNotifier;
 import org.appcelerator.titanium.api.ITitaniumProgressDialog;
+import org.appcelerator.titanium.api.ITitaniumTableView;
 import org.appcelerator.titanium.api.ITitaniumUI;
 import org.appcelerator.titanium.api.ITitaniumUserWindow;
+import org.appcelerator.titanium.config.TitaniumConfig;
 import org.appcelerator.titanium.module.ui.TitaniumDialog;
 import org.appcelerator.titanium.module.ui.TitaniumMenuItem;
 import org.appcelerator.titanium.module.ui.TitaniumProgressDialog;
+import org.appcelerator.titanium.module.ui.TitaniumTableView;
 import org.appcelerator.titanium.module.ui.TitaniumToastNotifier;
 import org.appcelerator.titanium.module.ui.TitaniumUserWindow;
 
-import org.appcelerator.titanium.config.TitaniumConfig;
 import android.util.Log;
 import android.webkit.WebView;
 
@@ -115,6 +117,9 @@ public class TitaniumUI extends TitaniumBaseModule implements ITitaniumUI
 		return  new TitaniumToastNotifier(getHandler(), getWebView());
 	}
 
+	public ITitaniumTableView createTableView() {
+		return new TitaniumTableView(getActivity());
+	}
 	@Override
 	public void onDestroy() {
 		super.onDestroy();</diff>
      <filename>android/titanium/src/org/appcelerator/titanium/module/TitaniumUI.java</filename>
    </modified>
    <modified>
      <diff>@@ -58,12 +58,20 @@ public class TitaniumDialog implements ITitaniumDialog
 		builder.setTitle(title);
 	}
 
-	public void addListener(String eventName, String listener) {
+	public int addEventListener(String eventName, String listener) {
 		if(eventName == null || !eventName.toLowerCase().equals(CLICK_EVENT)) {
 			throw new IllegalStateException(&quot;TitaniumDialog only handles listeners named: &quot; + CLICK_EVENT);
 		}
 
-		eventListeners.addListener(eventName, listener);
+		return eventListeners.addListener(eventName, listener);
+	}
+
+	public void removeEventListener(String eventName, int listenerId) {
+		if(eventName == null || !eventName.toLowerCase().equals(CLICK_EVENT)) {
+			throw new IllegalStateException(&quot;TitaniumDialog only handles listeners named: &quot; + CLICK_EVENT);
+		}
+
+		eventListeners.removeListener(eventName, listenerId);
 	}
 
 	public void setButtons(String[] buttonText)</diff>
      <filename>android/titanium/src/org/appcelerator/titanium/module/ui/TitaniumDialog.java</filename>
    </modified>
    <modified>
      <diff>@@ -24,12 +24,13 @@ import java.util.TreeSet;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
+import org.appcelerator.titanium.config.TitaniumConfig;
+
 import android.content.Context;
 import android.content.res.AssetManager;
 import android.content.res.Resources;
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
-import org.appcelerator.titanium.config.TitaniumConfig;
 import android.util.Log;
 
 public class TitaniumFileHelper
@@ -124,7 +125,7 @@ public class TitaniumFileHelper
 		return is;
 	}
 
-	public Drawable loadDrawable(TitaniumIntentWrapper intent, String path, boolean report)
+	public Drawable loadDrawable(String path, boolean report)
 	{
 		Drawable d = null;
 		InputStream is = null;
@@ -132,10 +133,8 @@ public class TitaniumFileHelper
 		if (context != null) {
 			try
 			{
-				if (intent != null) {
-					is = openInputStream(path, report);
-					d = new BitmapDrawable(is);
-				}
+				is = openInputStream(path, report);
+				d = new BitmapDrawable(is);
 			} catch (IOException e) {
 				Log.i(LCAT, path + &quot; not found.&quot;);
 				if (report) {
@@ -209,7 +208,7 @@ public class TitaniumFileHelper
 		return d;
 	}
 */
-	public String getResourceUrl(TitaniumIntentWrapper intent, String path)
+	public String getResourceUrl(String path)
 	{
         return joinPaths(RESOURCE_ROOT_ASSETS, path);
 	}</diff>
      <filename>android/titanium/src/org/appcelerator/titanium/util/TitaniumFileHelper.java</filename>
    </modified>
    <modified>
      <diff>@@ -123,7 +123,7 @@ public class TitaniumJSEventManager
 
 	public void removeListener(String eventName, int eventId)
 	{
-		if (eventId &lt; 0 || eventListeners == null) {
+		if (eventId &gt; -1 &amp;&amp; eventListeners != null) {
 			checkSupportsEvent(eventName); // Throws exception of failure
 
 			HashMap&lt;Integer, TitaniumJSEvent&gt; listeners = eventListeners.get(eventName);</diff>
      <filename>android/titanium/src/org/appcelerator/titanium/util/TitaniumJSEventManager.java</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>f73164dbfabccb023be1bf66d533d9af40c94382</id>
    </parent>
    <parent>
      <id>948ac1b5155e7b3366f94e9a99826c61a19bdb53</id>
    </parent>
  </parents>
  <author>
    <name>donthorp</name>
    <email>don@donthorp.net</email>
  </author>
  <url>http://github.com/appcelerator/titanium_mobile/commit/c2862e763b41d32e9df14310eafe52b67cddde1e</url>
  <id>c2862e763b41d32e9df14310eafe52b67cddde1e</id>
  <committed-date>2009-06-30T17:29:04-07:00</committed-date>
  <authored-date>2009-06-30T17:29:04-07:00</authored-date>
  <message>Merge branch 'tableview' into dstwip</message>
  <tree>6a764516857a30ebddea2df41f7de54e16ea2911</tree>
  <committer>
    <name>donthorp</name>
    <email>don@donthorp.net</email>
  </committer>
</commit>
