<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.webos-internals.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bsiegel</id>
	<title>WebOS Internals - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.webos-internals.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bsiegel"/>
	<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/wiki/Special:Contributions/Bsiegel"/>
	<updated>2026-05-31T15:19:55Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Fix_PDK_Mounts&amp;diff=10906</id>
		<title>Fix PDK Mounts</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Fix_PDK_Mounts&amp;diff=10906"/>
		<updated>2010-08-21T01:24:45Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PDK apps currently leave mount points open after they exit. This can lead to having many more open and mounted filesystems than expected:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
tmpfs                    65536      3064     62472   5% /var/palm/jail/com.ea.app.scrabble/tmp&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/com.ea.app.scrabble/lib&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/com.ea.app.scrabble/bin&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/com.ea.app.scrabble/usr/bin&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/com.ea.app.scrabble/usr/lib&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/com.ea.app.scrabble/usr/palm/frameworks&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/com.ea.app.scrabble/usr/share&lt;br /&gt;
tmpfs                    16384        48     16336   0% /var/palm/jail/com.ea.app.scrabble/var/run/dbus&lt;br /&gt;
/dev/mapper/store-var&lt;br /&gt;
                        253920     70840    183080  28% /var/palm/jail/com.ea.app.scrabble/var/lib/dbus&lt;br /&gt;
tmpfs                     2048       204      1844  10% /var/palm/jail/com.ea.app.scrabble/dev/snd&lt;br /&gt;
tmpfs                     2048       204      1844  10% /var/palm/jail/com.ea.app.scrabble/dev/shm&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/com.ea.app.scrabble/etc/ssl&lt;br /&gt;
tmpfs                     2048       204      1844  10% /var/palm/jail/com.ea.app.scrabble/dev/logdir&lt;br /&gt;
/dev/mapper/store-var&lt;br /&gt;
                        253920     70840    183080  28% /var/palm/jail/com.ea.app.scrabble/var/luna/preferences&lt;br /&gt;
/dev/mapper/store-media&lt;br /&gt;
                       7011456   2872896   4138560  41% /var/palm/jail/com.ea.app.scrabble/media/internal&lt;br /&gt;
tmpfs                    16384        48     16336   0% /var/palm/jail/com.ea.app.scrabble/var/run&lt;br /&gt;
cryptofs               7011456   2872896   4138560  41% /var/palm/jail/com.ea.app.scrabble/media/cryptofs/apps/usr/palm/applications/com.ea.app.scrabble&lt;br /&gt;
tmpfs                    65536      3064     62472   5% /var/palm/jail/org.webosinternals.wirc/tmp&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/org.webosinternals.wirc/lib&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/org.webosinternals.wirc/bin&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/org.webosinternals.wirc/usr/bin&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/org.webosinternals.wirc/usr/lib&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/org.webosinternals.wirc/usr/palm/frameworks&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/org.webosinternals.wirc/usr/share&lt;br /&gt;
tmpfs                    16384        48     16336   0% /var/palm/jail/org.webosinternals.wirc/var/run/dbus&lt;br /&gt;
/dev/mapper/store-var&lt;br /&gt;
                        253920     70840    183080  28% /var/palm/jail/org.webosinternals.wirc/var/lib/dbus&lt;br /&gt;
tmpfs                     2048       204      1844  10% /var/palm/jail/org.webosinternals.wirc/dev/snd&lt;br /&gt;
tmpfs                     2048       204      1844  10% /var/palm/jail/org.webosinternals.wirc/dev/shm&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/org.webosinternals.wirc/etc/ssl&lt;br /&gt;
tmpfs                     2048       204      1844  10% /var/palm/jail/org.webosinternals.wirc/dev/logdir&lt;br /&gt;
/dev/mapper/store-var&lt;br /&gt;
                        253920     70840    183080  28% /var/palm/jail/org.webosinternals.wirc/var/luna/preferences&lt;br /&gt;
/dev/mapper/store-media&lt;br /&gt;
                       7011456   2872896   4138560  41% /var/palm/jail/org.webosinternals.wirc/media/internal&lt;br /&gt;
cryptofs               7011456   2872896   4138560  41% /var/palm/jail/org.webosinternals.wirc/media/cryptofs/apps/usr/palm/applications/org.webosinternals.wirc&lt;br /&gt;
tmpfs                    16384        48     16336   0% /var/palm/jail/org.webosinternals.wirc/var/run&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A solution is to run a shell script that will search for these mount points and remove them:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
for i in $(mount | grep 'jail' | sed 's/.*\(\/var\/palm\/jail\/[^[:blank:]]*\).*/\1/'); do umount ${i} 2&amp;gt;/dev/null; done&lt;br /&gt;
for i in $(mount | grep 'jail' | sed 's/.*\(\/var\/palm\/jail\/[^[:blank:]]*\).*/\1/'); do umount ${i} 2&amp;gt;/dev/null; done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The operation is intentionally performed twice because the /var/run/dbus mounts must be unmounted after all the other ones.&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Fix_PDK_Mounts&amp;diff=10905</id>
		<title>Fix PDK Mounts</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Fix_PDK_Mounts&amp;diff=10905"/>
		<updated>2010-08-21T01:22:03Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: New page: PDK apps currently leave mount points open after they exit. This can lead to having many more open and mounted filesystems than expected: &amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt; tmpfs                    6553...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PDK apps currently leave mount points open after they exit. This can lead to having many more open and mounted filesystems than expected:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
tmpfs                    65536      3064     62472   5% /var/palm/jail/com.ea.app.scrabble/tmp&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/com.ea.app.scrabble/lib&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/com.ea.app.scrabble/bin&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/com.ea.app.scrabble/usr/bin&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/com.ea.app.scrabble/usr/lib&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/com.ea.app.scrabble/usr/palm/frameworks&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/com.ea.app.scrabble/usr/share&lt;br /&gt;
tmpfs                    16384        48     16336   0% /var/palm/jail/com.ea.app.scrabble/var/run/dbus&lt;br /&gt;
/dev/mapper/store-var&lt;br /&gt;
                        253920     70840    183080  28% /var/palm/jail/com.ea.app.scrabble/var/lib/dbus&lt;br /&gt;
tmpfs                     2048       204      1844  10% /var/palm/jail/com.ea.app.scrabble/dev/snd&lt;br /&gt;
tmpfs                     2048       204      1844  10% /var/palm/jail/com.ea.app.scrabble/dev/shm&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/com.ea.app.scrabble/etc/ssl&lt;br /&gt;
tmpfs                     2048       204      1844  10% /var/palm/jail/com.ea.app.scrabble/dev/logdir&lt;br /&gt;
/dev/mapper/store-var&lt;br /&gt;
                        253920     70840    183080  28% /var/palm/jail/com.ea.app.scrabble/var/luna/preferences&lt;br /&gt;
/dev/mapper/store-media&lt;br /&gt;
                       7011456   2872896   4138560  41% /var/palm/jail/com.ea.app.scrabble/media/internal&lt;br /&gt;
tmpfs                    16384        48     16336   0% /var/palm/jail/com.ea.app.scrabble/var/run&lt;br /&gt;
cryptofs               7011456   2872896   4138560  41% /var/palm/jail/com.ea.app.scrabble/media/cryptofs/apps/usr/palm/applications/com.ea.app.scrabble&lt;br /&gt;
tmpfs                    65536      3064     62472   5% /var/palm/jail/org.webosinternals.wirc/tmp&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/org.webosinternals.wirc/lib&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/org.webosinternals.wirc/bin&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/org.webosinternals.wirc/usr/bin&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/org.webosinternals.wirc/usr/lib&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/org.webosinternals.wirc/usr/palm/frameworks&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/org.webosinternals.wirc/usr/share&lt;br /&gt;
tmpfs                    16384        48     16336   0% /var/palm/jail/org.webosinternals.wirc/var/run/dbus&lt;br /&gt;
/dev/mapper/store-var&lt;br /&gt;
                        253920     70840    183080  28% /var/palm/jail/org.webosinternals.wirc/var/lib/dbus&lt;br /&gt;
tmpfs                     2048       204      1844  10% /var/palm/jail/org.webosinternals.wirc/dev/snd&lt;br /&gt;
tmpfs                     2048       204      1844  10% /var/palm/jail/org.webosinternals.wirc/dev/shm&lt;br /&gt;
/dev/mapper/store-root&lt;br /&gt;
                        452296    408940     43356  90% /var/palm/jail/org.webosinternals.wirc/etc/ssl&lt;br /&gt;
tmpfs                     2048       204      1844  10% /var/palm/jail/org.webosinternals.wirc/dev/logdir&lt;br /&gt;
/dev/mapper/store-var&lt;br /&gt;
                        253920     70840    183080  28% /var/palm/jail/org.webosinternals.wirc/var/luna/preferences&lt;br /&gt;
/dev/mapper/store-media&lt;br /&gt;
                       7011456   2872896   4138560  41% /var/palm/jail/org.webosinternals.wirc/media/internal&lt;br /&gt;
cryptofs               7011456   2872896   4138560  41% /var/palm/jail/org.webosinternals.wirc/media/cryptofs/apps/usr/palm/applications/org.webosinternals.wirc&lt;br /&gt;
tmpfs                    16384        48     16336   0% /var/palm/jail/org.webosinternals.wirc/var/run&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A solution is to run a shell script that will search for these mount points and remove them:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
for i in $(mount | grep 'jail' | sed 's/.*\(\/var\/palm\/jail\/[^[:blank:]]*\).*/\1/'); do umount ${i} 2&amp;gt;/dev/null; done&lt;br /&gt;
for i in $(mount | grep 'jail' | sed 's/.*\(\/var\/palm\/jail\/[^[:blank:]]*\).*/\1/'); do umount ${i} 2&amp;gt;/dev/null; done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Patch_Browser_Gesture_Click_Open_in_New_Card&amp;diff=10691</id>
		<title>Patch Browser Gesture Click Open in New Card</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Patch_Browser_Gesture_Click_Open_in_New_Card&amp;diff=10691"/>
		<updated>2010-08-06T18:55:22Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{template:patch}}&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This patch allows you to Gesture-tap in the browser (place your thumb in the gesture area and tap on a link) to open the link in a new card. It's very intuitive and sort of like middle-clicking a link in the browser on your computer.&lt;br /&gt;
&lt;br /&gt;
===Patch Source (gestureclicknewcard.patch)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- .orig/usr/palm/applications/com.palm.app.browser/app/controllers/page-assistant.js&lt;br /&gt;
+++ /usr/palm/applications/com.palm.app.browser/app/controllers/page-assistant.js&lt;br /&gt;
@@ -621,7 +621,15 @@&lt;br /&gt;
 		tapPt.left = event.centerX - tapPt.left;&lt;br /&gt;
 		tapPt.top  = event.centerY - tapPt.top;&lt;br /&gt;
 &lt;br /&gt;
-		if (event.altKey) {&lt;br /&gt;
+        if (event.metaKey) {&lt;br /&gt;
+            var urlInfo = {};&lt;br /&gt;
+            var urlInspectResponse = function(response) {&lt;br /&gt;
+				urlInfo = response || {};&lt;br /&gt;
+				this._newBrowserPage(urlInfo.url);&lt;br /&gt;
+			}.bind(this);&lt;br /&gt;
+			this._webView.mojo.inspectUrlAtPoint(tapPt.left, tapPt.top, urlInspectResponse);&lt;br /&gt;
+        }&lt;br /&gt;
+		else if (event.altKey) {&lt;br /&gt;
 &lt;br /&gt;
 			var popupItems = [&lt;br /&gt;
 				{label: $L('Open In New Card'), command:'openNew'},&lt;br /&gt;
--- .orig/usr/palm/frameworks/mojo/builtins/palmInitFramework338.js&lt;br /&gt;
+++ /usr/palm/frameworks/mojo/builtins/palmInitFramework338.js&lt;br /&gt;
@@ -28127,7 +28127,7 @@&lt;br /&gt;
 this._addElementHighlight(event.centerX,event.centerY);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
-if(event.altKey){&lt;br /&gt;
+if(event.altKey || event.metaKey){&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Patch_Browser_Gesture_Click_Open_in_New_Card&amp;diff=10690</id>
		<title>Patch Browser Gesture Click Open in New Card</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Patch_Browser_Gesture_Click_Open_in_New_Card&amp;diff=10690"/>
		<updated>2010-08-06T18:55:17Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{template:patch}}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This patch allows you to Gesture-tap in the browser (place your thumb in the gesture area and tap on a link) to open the link in a new card. It's very intuitive and sort of like middle-clicking a link in the browser on your computer.&lt;br /&gt;
&lt;br /&gt;
===Patch Source (gestureclicknewcard.patch)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- .orig/usr/palm/applications/com.palm.app.browser/app/controllers/page-assistant.js&lt;br /&gt;
+++ /usr/palm/applications/com.palm.app.browser/app/controllers/page-assistant.js&lt;br /&gt;
@@ -621,7 +621,15 @@&lt;br /&gt;
 		tapPt.left = event.centerX - tapPt.left;&lt;br /&gt;
 		tapPt.top  = event.centerY - tapPt.top;&lt;br /&gt;
 &lt;br /&gt;
-		if (event.altKey) {&lt;br /&gt;
+        if (event.metaKey) {&lt;br /&gt;
+            var urlInfo = {};&lt;br /&gt;
+            var urlInspectResponse = function(response) {&lt;br /&gt;
+				urlInfo = response || {};&lt;br /&gt;
+				this._newBrowserPage(urlInfo.url);&lt;br /&gt;
+			}.bind(this);&lt;br /&gt;
+			this._webView.mojo.inspectUrlAtPoint(tapPt.left, tapPt.top, urlInspectResponse);&lt;br /&gt;
+        }&lt;br /&gt;
+		else if (event.altKey) {&lt;br /&gt;
 &lt;br /&gt;
 			var popupItems = [&lt;br /&gt;
 				{label: $L('Open In New Card'), command:'openNew'},&lt;br /&gt;
--- .orig/usr/palm/frameworks/mojo/builtins/palmInitFramework338.js&lt;br /&gt;
+++ /usr/palm/frameworks/mojo/builtins/palmInitFramework338.js&lt;br /&gt;
@@ -28127,7 +28127,7 @@&lt;br /&gt;
 this._addElementHighlight(event.centerX,event.centerY);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
-if(event.altKey){&lt;br /&gt;
+if(event.altKey || event.metaKey){&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Patch_Browser_Gesture_Click_Open_in_New_Card&amp;diff=10689</id>
		<title>Patch Browser Gesture Click Open in New Card</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Patch_Browser_Gesture_Click_Open_in_New_Card&amp;diff=10689"/>
		<updated>2010-08-06T18:52:07Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: New page: {{template:patch}} right  ==Introduction==  This patch allows you to Gesture-tap in the browser (place your thumb in the gesture area and tap o...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{template:patch}}&lt;br /&gt;
[[Image:Gesture_click_open_in_new_card.png|right]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This patch allows you to Gesture-tap in the browser (place your thumb in the gesture area and tap on a link) to open the link in a new card. It's very intuitive and sort of like middle-clicking a link in the browser on your computer.&lt;br /&gt;
&lt;br /&gt;
===Patch Source (gestureclicknewcard.patch)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- .orig/usr/palm/applications/com.palm.app.browser/app/controllers/page-assistant.js&lt;br /&gt;
+++ /usr/palm/applications/com.palm.app.browser/app/controllers/page-assistant.js&lt;br /&gt;
@@ -621,7 +621,15 @@&lt;br /&gt;
 		tapPt.left = event.centerX - tapPt.left;&lt;br /&gt;
 		tapPt.top  = event.centerY - tapPt.top;&lt;br /&gt;
 &lt;br /&gt;
-		if (event.altKey) {&lt;br /&gt;
+        if (event.metaKey) {&lt;br /&gt;
+            var urlInfo = {};&lt;br /&gt;
+            var urlInspectResponse = function(response) {&lt;br /&gt;
+				urlInfo = response || {};&lt;br /&gt;
+				this._newBrowserPage(urlInfo.url);&lt;br /&gt;
+			}.bind(this);&lt;br /&gt;
+			this._webView.mojo.inspectUrlAtPoint(tapPt.left, tapPt.top, urlInspectResponse);&lt;br /&gt;
+        }&lt;br /&gt;
+		else if (event.altKey) {&lt;br /&gt;
 &lt;br /&gt;
 			var popupItems = [&lt;br /&gt;
 				{label: $L('Open In New Card'), command:'openNew'},&lt;br /&gt;
--- .orig/usr/palm/frameworks/mojo/builtins/palmInitFramework338.js&lt;br /&gt;
+++ /usr/palm/frameworks/mojo/builtins/palmInitFramework338.js&lt;br /&gt;
@@ -28127,7 +28127,7 @@&lt;br /&gt;
 this._addElementHighlight(event.centerX,event.centerY);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
-if(event.altKey){&lt;br /&gt;
+if(event.altKey || event.metaKey){&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Patch_Contacts_Send_All_via_Email&amp;diff=10448</id>
		<title>Patch Contacts Send All via Email</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Patch_Contacts_Send_All_via_Email&amp;diff=10448"/>
		<updated>2010-07-09T15:19:20Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{template:patch}}&lt;br /&gt;
[[Image:Send_all_via_email.png|right]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This patch allows you to create a vCard file containing all your contacts, and then attach that file to an e-mail. WebOS does not offer a built-in way to export your contacts, so this seems to be the next best thing.&lt;br /&gt;
&lt;br /&gt;
If you only get one contact when you import the vCard file, you can either import it to Google or Hotmail and then export your contacts from there, or you can use a vCard splitter such as vCardOrganizer which will let you split the big vCard file into individual files for each contact.&lt;br /&gt;
&lt;br /&gt;
===Patch Source (emailall.patch)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.contacts/app/controllers/list-assistant.js.orig&lt;br /&gt;
+++ /usr/palm/applications/com.palm.app.contacts/app/controllers/list-assistant.js&lt;br /&gt;
@@ -290,6 +290,9 @@&lt;br /&gt;
 				}, {&lt;br /&gt;
 					label:$L(&amp;quot;Send All to Car Kit&amp;quot;),&lt;br /&gt;
 					command:&amp;quot;sendcontacts&amp;quot;&lt;br /&gt;
+				}, {&lt;br /&gt;
+					label:$L(&amp;quot;Send All via Email&amp;quot;),&lt;br /&gt;
+					command:&amp;quot;emailcontacts&amp;quot;&lt;br /&gt;
 				}, prefsItem, {&lt;br /&gt;
 					label: $LL('Help'),&lt;br /&gt;
 					command: Mojo.Menu.helpCmd&lt;br /&gt;
@@ -476,6 +479,8 @@&lt;br /&gt;
 			this.controller.stageController.pushScene('prefs');&lt;br /&gt;
 		}else if (event.type == Mojo.Event.command &amp;amp;&amp;amp; event.command == &amp;quot;sendcontacts&amp;quot;) {&lt;br /&gt;
 			this.sendContacts();&lt;br /&gt;
+		}else if (event.type == Mojo.Event.command &amp;amp;&amp;amp; event.command == &amp;quot;emailcontacts&amp;quot;) {&lt;br /&gt;
+			this.emailContacts();&lt;br /&gt;
 		}&lt;br /&gt;
 		if (event.type == Mojo.Event.commandEnable &amp;amp;&amp;amp; event.command == Mojo.Menu.prefsCmd) {&lt;br /&gt;
 			// funkay!  this is apparently how you declare you want to activate the prefs menu item&lt;br /&gt;
@@ -483,6 +488,23 @@&lt;br /&gt;
 		}&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
+	emailContacts:function(){&lt;br /&gt;
+		this.vcardRequest = AppAssistant.contactsService.makeVCardList(this.controller, {&lt;br /&gt;
+				stripPhoneNumbers:false&lt;br /&gt;
+			}, this.gotVCard.bind(this, &amp;quot;email&amp;quot;));&lt;br /&gt;
+		var cancelFn = function(){&lt;br /&gt;
+			this.vcardRequest.cancel();&lt;br /&gt;
+			this.vcardRequest = null;&lt;br /&gt;
+		}.bind(this)&lt;br /&gt;
+		console.log(&amp;quot;Setting up a dialog&amp;quot;);&lt;br /&gt;
+		this.sendContactsPopupAssistant = new SendContactsPopupAssistant(this.controller, cancelFn);&lt;br /&gt;
+		this.controller.showDialog({&lt;br /&gt;
+			template: 'list/send-contact-popup',&lt;br /&gt;
+			assistant: this.sendContactsPopupAssistant,&lt;br /&gt;
+			preventCancel:true&lt;br /&gt;
+		});&lt;br /&gt;
+	},&lt;br /&gt;
+	&lt;br /&gt;
 	sendContacts:function(){&lt;br /&gt;
 		&lt;br /&gt;
 		var params = {&amp;quot;type&amp;quot;:&amp;quot;bluetooth&amp;quot;, &amp;quot;onSuccess&amp;quot;:this.bluetoothResponse.bind(this)}; &lt;br /&gt;
@@ -492,7 +514,7 @@&lt;br /&gt;
 	&lt;br /&gt;
 	bluetoothResponse:function(response){&lt;br /&gt;
 		if (response == &amp;quot;BT-On&amp;quot; || response == &amp;quot;BT-StartingUp&amp;quot;) {&lt;br /&gt;
-			this.vcardRequest = AppAssistant.contactsService.makeVCardList(this.controller, {stripPhoneNumbers:true}, this.gotVCard.bind(this));&lt;br /&gt;
+			this.vcardRequest = AppAssistant.contactsService.makeVCardList(this.controller, {stripPhoneNumbers:true}, this.gotVCard.bind(this, &amp;quot;bluetooth&amp;quot;));&lt;br /&gt;
 			var cancelFn = function(){&lt;br /&gt;
 				this.vcardRequest.cancel();&lt;br /&gt;
 				this.vcardRequest = null;&lt;br /&gt;
@@ -507,18 +529,39 @@&lt;br /&gt;
 		}&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
-	gotVCard:function(resp){&lt;br /&gt;
-		var appArgs = {&lt;br /&gt;
-			appId:&amp;quot;com.palm.app.bluetooth&amp;quot;,&lt;br /&gt;
-			name:&amp;quot;btopp&amp;quot;&lt;br /&gt;
+	gotVCard:function(type, resp){&lt;br /&gt;
+		if (type == &amp;quot;bluetooth&amp;quot;) {&lt;br /&gt;
+			var appArgs = {&lt;br /&gt;
+				appId:&amp;quot;com.palm.app.bluetooth&amp;quot;,&lt;br /&gt;
+				name:&amp;quot;btopp&amp;quot;&lt;br /&gt;
+			}&lt;br /&gt;
+			var sceneArgs = {&lt;br /&gt;
+				file:resp.file&lt;br /&gt;
+			}&lt;br /&gt;
+			&lt;br /&gt;
+			this.sendContactsPopupAssistant.widget.mojo.close();&lt;br /&gt;
+			&lt;br /&gt;
+			this.controller.stageController.pushScene(appArgs, sceneArgs)&lt;br /&gt;
 		}&lt;br /&gt;
-		var sceneArgs = {&lt;br /&gt;
-			file:resp.file&lt;br /&gt;
+		else if (type == &amp;quot;email&amp;quot;) {&lt;br /&gt;
+			var vcfPath = resp.file;&lt;br /&gt;
+			&lt;br /&gt;
+			this.sendContactsPopupAssistant.widget.mojo.close();&lt;br /&gt;
+			&lt;br /&gt;
+			this.controller.serviceRequest('palm://com.palm.applicationManager', {&lt;br /&gt;
+				method: 'open',&lt;br /&gt;
+				parameters: {&lt;br /&gt;
+					id: 'com.palm.app.email',&lt;br /&gt;
+					params: {&lt;br /&gt;
+						summary: 'Palm Contacts',&lt;br /&gt;
+						attachments: [{&lt;br /&gt;
+							fullPath:vcfPath,&lt;br /&gt;
+							mimeType:'text/x-vcard'&lt;br /&gt;
+						}]&lt;br /&gt;
+					}&lt;br /&gt;
+				}&lt;br /&gt;
+			});	&lt;br /&gt;
 		}&lt;br /&gt;
-		&lt;br /&gt;
-		this.sendContactsPopupAssistant.widget.mojo.close();&lt;br /&gt;
-		&lt;br /&gt;
-		this.controller.stageController.pushScene(appArgs, sceneArgs)&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
 	handleListTap: function(event){&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Patch_Contacts_Send_All_via_Email&amp;diff=10440</id>
		<title>Patch Contacts Send All via Email</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Patch_Contacts_Send_All_via_Email&amp;diff=10440"/>
		<updated>2010-07-06T17:14:17Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: retrying&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{template:patch}}&lt;br /&gt;
[[Image:Send_all_via_email.png|right]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This patch allows you to create a vCard file containing all your contacts, and then attach that file to an e-mail. WebOS does not offer a built-in way to export your contacts, so this seems to be the next best thing.&lt;br /&gt;
&lt;br /&gt;
For Outlook users (or other users who get only one contact when they import the vCard file), you can use the free tool [http://www.micro-progs.com/vcardorganizer/ vCardOrganizer] which will let you split the big vCard file into individual files for each contact. A quick search for &amp;quot;vCard splitter&amp;quot; turns up similar programs for Mac and Linux as well.&lt;br /&gt;
&lt;br /&gt;
===Patch Source (emailall.patch)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.contacts/app/controllers/list-assistant.js.orig&lt;br /&gt;
+++ /usr/palm/applications/com.palm.app.contacts/app/controllers/list-assistant.js&lt;br /&gt;
@@ -290,6 +290,9 @@&lt;br /&gt;
 				}, {&lt;br /&gt;
 					label:$L(&amp;quot;Send All to Car Kit&amp;quot;),&lt;br /&gt;
 					command:&amp;quot;sendcontacts&amp;quot;&lt;br /&gt;
+				}, {&lt;br /&gt;
+					label:$L(&amp;quot;Send All via Email&amp;quot;),&lt;br /&gt;
+					command:&amp;quot;emailcontacts&amp;quot;&lt;br /&gt;
 				}, prefsItem, {&lt;br /&gt;
 					label: $LL('Help'),&lt;br /&gt;
 					command: Mojo.Menu.helpCmd&lt;br /&gt;
@@ -476,6 +479,8 @@&lt;br /&gt;
 			this.controller.stageController.pushScene('prefs');&lt;br /&gt;
 		}else if (event.type == Mojo.Event.command &amp;amp;&amp;amp; event.command == &amp;quot;sendcontacts&amp;quot;) {&lt;br /&gt;
 			this.sendContacts();&lt;br /&gt;
+		}else if (event.type == Mojo.Event.command &amp;amp;&amp;amp; event.command == &amp;quot;emailcontacts&amp;quot;) {&lt;br /&gt;
+			this.emailContacts();&lt;br /&gt;
 		}&lt;br /&gt;
 		if (event.type == Mojo.Event.commandEnable &amp;amp;&amp;amp; event.command == Mojo.Menu.prefsCmd) {&lt;br /&gt;
 			// funkay!  this is apparently how you declare you want to activate the prefs menu item&lt;br /&gt;
@@ -483,6 +488,23 @@&lt;br /&gt;
 		}&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
+	emailContacts:function(){&lt;br /&gt;
+		this.vcardRequest = AppAssistant.contactsService.makeVCardList(this.controller, {&lt;br /&gt;
+				stripPhoneNumbers:false&lt;br /&gt;
+			}, this.gotVCard.bind(this, &amp;quot;email&amp;quot;));&lt;br /&gt;
+		var cancelFn = function(){&lt;br /&gt;
+			this.vcardRequest.cancel();&lt;br /&gt;
+			this.vcardRequest = null;&lt;br /&gt;
+		}.bind(this)&lt;br /&gt;
+		console.log(&amp;quot;Setting up a dialog&amp;quot;);&lt;br /&gt;
+		this.sendContactsPopupAssistant = new SendContactsPopupAssistant(this.controller, cancelFn);&lt;br /&gt;
+		this.controller.showDialog({&lt;br /&gt;
+			template: 'list/send-contact-popup',&lt;br /&gt;
+			assistant: this.sendContactsPopupAssistant,&lt;br /&gt;
+			preventCancel:true&lt;br /&gt;
+		});&lt;br /&gt;
+	},&lt;br /&gt;
+	&lt;br /&gt;
 	sendContacts:function(){&lt;br /&gt;
 		&lt;br /&gt;
 		var params = {&amp;quot;type&amp;quot;:&amp;quot;bluetooth&amp;quot;, &amp;quot;onSuccess&amp;quot;:this.bluetoothResponse.bind(this)}; &lt;br /&gt;
@@ -492,7 +514,7 @@&lt;br /&gt;
 	&lt;br /&gt;
 	bluetoothResponse:function(response){&lt;br /&gt;
 		if (response == &amp;quot;BT-On&amp;quot; || response == &amp;quot;BT-StartingUp&amp;quot;) {&lt;br /&gt;
-			this.vcardRequest = AppAssistant.contactsService.makeVCardList(this.controller, {stripPhoneNumbers:true}, this.gotVCard.bind(this));&lt;br /&gt;
+			this.vcardRequest = AppAssistant.contactsService.makeVCardList(this.controller, {stripPhoneNumbers:true}, this.gotVCard.bind(this, &amp;quot;bluetooth&amp;quot;));&lt;br /&gt;
 			var cancelFn = function(){&lt;br /&gt;
 				this.vcardRequest.cancel();&lt;br /&gt;
 				this.vcardRequest = null;&lt;br /&gt;
@@ -507,18 +529,39 @@&lt;br /&gt;
 		}&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
-	gotVCard:function(resp){&lt;br /&gt;
-		var appArgs = {&lt;br /&gt;
-			appId:&amp;quot;com.palm.app.bluetooth&amp;quot;,&lt;br /&gt;
-			name:&amp;quot;btopp&amp;quot;&lt;br /&gt;
+	gotVCard:function(type, resp){&lt;br /&gt;
+		if (type == &amp;quot;bluetooth&amp;quot;) {&lt;br /&gt;
+			var appArgs = {&lt;br /&gt;
+				appId:&amp;quot;com.palm.app.bluetooth&amp;quot;,&lt;br /&gt;
+				name:&amp;quot;btopp&amp;quot;&lt;br /&gt;
+			}&lt;br /&gt;
+			var sceneArgs = {&lt;br /&gt;
+				file:resp.file&lt;br /&gt;
+			}&lt;br /&gt;
+			&lt;br /&gt;
+			this.sendContactsPopupAssistant.widget.mojo.close();&lt;br /&gt;
+			&lt;br /&gt;
+			this.controller.stageController.pushScene(appArgs, sceneArgs)&lt;br /&gt;
 		}&lt;br /&gt;
-		var sceneArgs = {&lt;br /&gt;
-			file:resp.file&lt;br /&gt;
+		else if (type == &amp;quot;email&amp;quot;) {&lt;br /&gt;
+			var vcfPath = resp.file;&lt;br /&gt;
+			&lt;br /&gt;
+			this.sendContactsPopupAssistant.widget.mojo.close();&lt;br /&gt;
+			&lt;br /&gt;
+			this.controller.serviceRequest('palm://com.palm.applicationManager', {&lt;br /&gt;
+				method: 'open',&lt;br /&gt;
+				parameters: {&lt;br /&gt;
+					id: 'com.palm.app.email',&lt;br /&gt;
+					params: {&lt;br /&gt;
+						summary: 'Palm Contacts',&lt;br /&gt;
+						attachments: [{&lt;br /&gt;
+							fullPath:vcfPath,&lt;br /&gt;
+							mimeType:'text/x-vcard'&lt;br /&gt;
+						}]&lt;br /&gt;
+					}&lt;br /&gt;
+				}&lt;br /&gt;
+			});	&lt;br /&gt;
 		}&lt;br /&gt;
-		&lt;br /&gt;
-		this.sendContactsPopupAssistant.widget.mojo.close();&lt;br /&gt;
-		&lt;br /&gt;
-		this.controller.stageController.pushScene(appArgs, sceneArgs)&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
 	handleListTap: function(event){&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Patch_Contacts_Send_All_via_Email&amp;diff=10439</id>
		<title>Patch Contacts Send All via Email</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Patch_Contacts_Send_All_via_Email&amp;diff=10439"/>
		<updated>2010-07-06T16:51:52Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: Update for 1.4.x&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{template:patch}}&lt;br /&gt;
[[Image:Send_all_via_email.png|right]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This patch allows you to create a vCard file containing all your contacts, and then attach that file to an e-mail. WebOS does not offer a built-in way to export your contacts, so this seems to be the next best thing.&lt;br /&gt;
&lt;br /&gt;
For Outlook users (or other users who get only one contact when they import the vCard file), you can use the free tool [http://www.micro-progs.com/vcardorganizer/ vCardOrganizer] which will let you split the big vCard file into individual files for each contact. A quick search for &amp;quot;vCard splitter&amp;quot; turns up similar programs for Mac and Linux as well.&lt;br /&gt;
&lt;br /&gt;
===Patch Source (emailall.patch)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.contacts/app/controllers/list-assistant.js.orig&lt;br /&gt;
+++ /usr/palm/applications/com.palm.app.contacts/app/controllers/list-assistant.js&lt;br /&gt;
@@ -290,6 +290,9 @@&lt;br /&gt;
 				}, {&lt;br /&gt;
 					label:$L(&amp;quot;Send All to Car Kit&amp;quot;),&lt;br /&gt;
 					command:&amp;quot;sendcontacts&amp;quot;&lt;br /&gt;
+				}, {&lt;br /&gt;
+					label:$L(&amp;quot;Send All via Email&amp;quot;),&lt;br /&gt;
+					command:&amp;quot;emailcontacts&amp;quot;&lt;br /&gt;
 				}, prefsItem, {&lt;br /&gt;
 					label: $LL('Help'),&lt;br /&gt;
 					command: Mojo.Menu.helpCmd&lt;br /&gt;
@@ -476,6 +479,8 @@&lt;br /&gt;
 			this.controller.stageController.pushScene('prefs');&lt;br /&gt;
 		}else if (event.type == Mojo.Event.command &amp;amp;&amp;amp; event.command == &amp;quot;sendcontacts&amp;quot;) {&lt;br /&gt;
 			this.sendContacts();&lt;br /&gt;
+		}else if (event.type == Mojo.Event.command &amp;amp;&amp;amp; event.command == &amp;quot;emailcontacts&amp;quot;) {&lt;br /&gt;
+			this.emailContacts();&lt;br /&gt;
 		}&lt;br /&gt;
 		if (event.type == Mojo.Event.commandEnable &amp;amp;&amp;amp; event.command == Mojo.Menu.prefsCmd) {&lt;br /&gt;
 			// funkay!  this is apparently how you declare you want to activate the prefs menu item&lt;br /&gt;
@@ -483,6 +488,23 @@&lt;br /&gt;
 		}&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
+	emailContacts:function(){&lt;br /&gt;
+		this.vcardRequest = AppAssistant.contactsService.makeVCardList(this.controller, {&lt;br /&gt;
+				stripPhoneNumbers:false&lt;br /&gt;
+			}, this.gotVCard.bind(this, &amp;quot;email&amp;quot;));&lt;br /&gt;
+		var cancelFn = function(){&lt;br /&gt;
+			this.vcardRequest.cancel();&lt;br /&gt;
+			this.vcardRequest = null;&lt;br /&gt;
+		}.bind(this)&lt;br /&gt;
+		console.log(&amp;quot;Setting up a dialog&amp;quot;);&lt;br /&gt;
+		this.sendContactsPopupAssistant = new SendContactsPopupAssistant(this.controller, cancelFn);&lt;br /&gt;
+		this.controller.showDialog({&lt;br /&gt;
+			template: 'list/send-contact-popup',&lt;br /&gt;
+			assistant: this.sendContactsPopupAssistant,&lt;br /&gt;
+			preventCancel:true&lt;br /&gt;
+		});&lt;br /&gt;
+	},&lt;br /&gt;
+	&lt;br /&gt;
 	sendContacts:function(){&lt;br /&gt;
 		&lt;br /&gt;
 		var params = {&amp;quot;type&amp;quot;:&amp;quot;bluetooth&amp;quot;, &amp;quot;onSuccess&amp;quot;:this.bluetoothResponse.bind(this)}; &lt;br /&gt;
@@ -492,7 +514,7 @@&lt;br /&gt;
 	&lt;br /&gt;
 	bluetoothResponse:function(response){&lt;br /&gt;
 		if (response == &amp;quot;BT-On&amp;quot; || response == &amp;quot;BT-StartingUp&amp;quot;) {&lt;br /&gt;
-			this.vcardRequest = AppAssistant.contactsService.makeVCardList(this.controller, {stripPhoneNumbers:true}, this.gotVCard.bind(this));&lt;br /&gt;
+			this.vcardRequest = AppAssistant.contactsService.makeVCardList(this.controller, {stripPhoneNumbers:true}, this.gotVCard.bind(this, &amp;quot;bluetooth&amp;quot;));&lt;br /&gt;
 			var cancelFn = function(){&lt;br /&gt;
 				this.vcardRequest.cancel();&lt;br /&gt;
 				this.vcardRequest = null;&lt;br /&gt;
@@ -507,18 +529,39 @@&lt;br /&gt;
 		}&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
-	gotVCard:function(resp){&lt;br /&gt;
-		var appArgs = {&lt;br /&gt;
-			appId:&amp;quot;com.palm.app.bluetooth&amp;quot;,&lt;br /&gt;
-			name:&amp;quot;btopp&amp;quot;&lt;br /&gt;
+	gotVCard:function(type, resp){&lt;br /&gt;
+		if (type == &amp;quot;bluetooth&amp;quot;) {&lt;br /&gt;
+			var appArgs = {&lt;br /&gt;
+				appId:&amp;quot;com.palm.app.bluetooth&amp;quot;,&lt;br /&gt;
+				name:&amp;quot;btopp&amp;quot;&lt;br /&gt;
+			}&lt;br /&gt;
+			var sceneArgs = {&lt;br /&gt;
+				file:resp.file&lt;br /&gt;
+			}&lt;br /&gt;
+			&lt;br /&gt;
+			this.sendContactsPopupAssistant.widget.mojo.close();&lt;br /&gt;
+			&lt;br /&gt;
+			this.controller.stageController.pushScene(appArgs, sceneArgs)&lt;br /&gt;
 		}&lt;br /&gt;
-		var sceneArgs = {&lt;br /&gt;
-			file:resp.file&lt;br /&gt;
+		else if (type == &amp;quot;email&amp;quot;) {&lt;br /&gt;
+			var vcfPath = resp.file;&lt;br /&gt;
+			&lt;br /&gt;
+			this.sendContactsPopupAssistant.widget.mojo.close();&lt;br /&gt;
+			&lt;br /&gt;
+			this.controller.serviceRequest('palm://com.palm.applicationManager', {&lt;br /&gt;
+				method: 'open',&lt;br /&gt;
+				parameters: {&lt;br /&gt;
+					id: 'com.palm.app.email',&lt;br /&gt;
+					params: {&lt;br /&gt;
+						summary: 'Palm Contacts',&lt;br /&gt;
+						attachments: [{&lt;br /&gt;
+							fullPath:vcfPath,&lt;br /&gt;
+							mimeType:'text/x-vcard'&lt;br /&gt;
+						}]&lt;br /&gt;
+					}&lt;br /&gt;
+				}&lt;br /&gt;
+			});			&lt;br /&gt;
 		}&lt;br /&gt;
-		&lt;br /&gt;
-		this.sendContactsPopupAssistant.widget.mojo.close();&lt;br /&gt;
-		&lt;br /&gt;
-		this.controller.stageController.pushScene(appArgs, sceneArgs)&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
 	handleListTap: function(event){&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Patch_Contacts_Send_All_via_Email&amp;diff=10328</id>
		<title>Patch Contacts Send All via Email</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Patch_Contacts_Send_All_via_Email&amp;diff=10328"/>
		<updated>2010-06-18T04:48:34Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: add info re: only one contact&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{template:patch}}&lt;br /&gt;
[[Image:Send_all_via_email.png|right]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This patch allows you to create a vCard file containing all your contacts, and then attach that file to an e-mail. WebOS does not offer a built-in way to export your contacts, so this seems to be the next best thing.&lt;br /&gt;
&lt;br /&gt;
For Outlook users (or other users who get only one contact when they import the vCard file), you can use the free tool [http://www.micro-progs.com/vcardorganizer/ vCardOrganizer] which will let you split the big vCard file into individual files for each contact. A quick search for &amp;quot;vCard splitter&amp;quot; turns up similar programs for Mac and Linux as well.&lt;br /&gt;
&lt;br /&gt;
===Patch Source (emailall.patch)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.contacts/app/controllers/list-assistant.js.orig	Thu Jan 14 13:02:13 2010&lt;br /&gt;
+++ /usr/palm/applications/com.palm.app.contacts/app/controllers/list-assistant.js	Thu Jan 14 13:22:18 2010&lt;br /&gt;
@@ -284,6 +284,9 @@&lt;br /&gt;
 				items: [Mojo.Menu.editItem,{&lt;br /&gt;
 					label:$L(&amp;quot;Send All to Car Kit&amp;quot;),&lt;br /&gt;
 					command:&amp;quot;sendcontacts&amp;quot;&lt;br /&gt;
+				}, {&lt;br /&gt;
+					label:$L(&amp;quot;Save All via Email&amp;quot;),&lt;br /&gt;
+					command:&amp;quot;emailcontacts&amp;quot;&lt;br /&gt;
 				}, prefsItem, {&lt;br /&gt;
 					label: $LL('Help'),&lt;br /&gt;
 					command: Mojo.Menu.helpCmd&lt;br /&gt;
@@ -461,6 +464,8 @@&lt;br /&gt;
 			});&lt;br /&gt;
 		}else if (event.type == Mojo.Event.command &amp;amp;&amp;amp; event.command === Mojo.Menu.prefsCmd) {&lt;br /&gt;
 			this.controller.stageController.pushScene('prefs');&lt;br /&gt;
+		}else if (event.type == Mojo.Event.command &amp;amp;&amp;amp; event.command == &amp;quot;emailcontacts&amp;quot;) {&lt;br /&gt;
+			this.emailContacts();&lt;br /&gt;
 		}else if (event.type == Mojo.Event.command &amp;amp;&amp;amp; event.command == &amp;quot;sendcontacts&amp;quot;) {&lt;br /&gt;
 			this.sendContacts();&lt;br /&gt;
 		}&lt;br /&gt;
@@ -470,6 +475,23 @@&lt;br /&gt;
 		}&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
+	emailContacts:function(){&lt;br /&gt;
+		this.vcardRequest = AppAssistant.contactsService.makeVCardList(this.controller, {&lt;br /&gt;
+				stripPhoneNumbers:false&lt;br /&gt;
+			}, this.gotVCard.bind(this, &amp;quot;email&amp;quot;));&lt;br /&gt;
+		var cancelFn = function(){&lt;br /&gt;
+			this.vcardRequest.cancel();&lt;br /&gt;
+			this.vcardRequest = null;&lt;br /&gt;
+		}.bind(this)&lt;br /&gt;
+		console.log(&amp;quot;Setting up a dialog&amp;quot;);&lt;br /&gt;
+		this.sendContactsPopupAssistant = new SendContactsPopupAssistant(this.controller, cancelFn);&lt;br /&gt;
+		this.controller.showDialog({&lt;br /&gt;
+			template: 'list/send-contact-popup',&lt;br /&gt;
+			assistant: this.sendContactsPopupAssistant,&lt;br /&gt;
+			preventCancel:true&lt;br /&gt;
+		});&lt;br /&gt;
+	},&lt;br /&gt;
+	&lt;br /&gt;
 	sendContacts:function(){&lt;br /&gt;
 		&lt;br /&gt;
 		var params = {&amp;quot;type&amp;quot;:&amp;quot;bluetooth&amp;quot;, &amp;quot;onSuccess&amp;quot;:this.bluetoothResponse.bind(this)}; &lt;br /&gt;
@@ -479,7 +501,7 @@&lt;br /&gt;
 	&lt;br /&gt;
 	bluetoothResponse:function(response){&lt;br /&gt;
 		if (response == &amp;quot;BT-On&amp;quot; || response == &amp;quot;BT-StartingUp&amp;quot;) {&lt;br /&gt;
-			this.vcardRequest = AppAssistant.contactsService.makeVCardList(this.controller, {stripPhoneNumbers:true}, this.gotVCard.bind(this));&lt;br /&gt;
+			this.vcardRequest = AppAssistant.contactsService.makeVCardList(this.controller, {stripPhoneNumbers:true}, this.gotVCard.bind(this, &amp;quot;bluetooth&amp;quot;));&lt;br /&gt;
 			var cancelFn = function(){&lt;br /&gt;
 				this.vcardRequest.cancel();&lt;br /&gt;
 				this.vcardRequest = null;&lt;br /&gt;
@@ -494,18 +516,39 @@&lt;br /&gt;
 		}&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
-	gotVCard:function(resp){&lt;br /&gt;
-		var appArgs = {&lt;br /&gt;
-			appId:&amp;quot;com.palm.app.bluetooth&amp;quot;,&lt;br /&gt;
-			name:&amp;quot;btopp&amp;quot;&lt;br /&gt;
+	gotVCard:function(type,resp){&lt;br /&gt;
+		if (type == &amp;quot;bluetooth&amp;quot;) {&lt;br /&gt;
+			var appArgs = {&lt;br /&gt;
+				appId:&amp;quot;com.palm.app.bluetooth&amp;quot;,&lt;br /&gt;
+				name:&amp;quot;btopp&amp;quot;&lt;br /&gt;
+			}&lt;br /&gt;
+			var sceneArgs = {&lt;br /&gt;
+				file:resp.file&lt;br /&gt;
+			}&lt;br /&gt;
+			&lt;br /&gt;
+			this.sendContactsPopupAssistant.widget.mojo.close();&lt;br /&gt;
+			&lt;br /&gt;
+			this.controller.stageController.pushScene(appArgs, sceneArgs)&lt;br /&gt;
 		}&lt;br /&gt;
-		var sceneArgs = {&lt;br /&gt;
-			file:resp.file&lt;br /&gt;
+		else if (type == &amp;quot;email&amp;quot;) {&lt;br /&gt;
+			var vcfPath = resp.file;&lt;br /&gt;
+			&lt;br /&gt;
+			this.sendContactsPopupAssistant.widget.mojo.close();&lt;br /&gt;
+			&lt;br /&gt;
+			this.controller.serviceRequest('palm://com.palm.applicationManager', {&lt;br /&gt;
+				method: 'open',&lt;br /&gt;
+				parameters: {&lt;br /&gt;
+					id: 'com.palm.app.email',&lt;br /&gt;
+					params: {&lt;br /&gt;
+						summary: 'Palm Contacts',&lt;br /&gt;
+						attachments: [{&lt;br /&gt;
+							fullPath:vcfPath,&lt;br /&gt;
+							mimeType:'text/x-vcard'&lt;br /&gt;
+						}]&lt;br /&gt;
+					}&lt;br /&gt;
+				}&lt;br /&gt;
+			});&lt;br /&gt;
 		}&lt;br /&gt;
-		&lt;br /&gt;
-		this.sendContactsPopupAssistant.widget.mojo.close();&lt;br /&gt;
-		&lt;br /&gt;
-		this.controller.stageController.pushScene(appArgs, sceneArgs)&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
 	handleListTap: function(event){&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Media_API&amp;diff=9301</id>
		<title>Media API</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Media_API&amp;diff=9301"/>
		<updated>2010-03-05T18:45:06Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is where you may find research on undocumented Media API calls. The hope is to enable earpiece playback, microphone recording, and perhaps even raw video access.&lt;br /&gt;
&lt;br /&gt;
Your application must use the &amp;quot;com.palm&amp;quot; namespace to access these APIs. That is, your app's ID must start with &amp;quot;com.palm&amp;quot; if you want to be able to call these services. Sadly this would exclude your app from Palm's App Catalog, though it should be fine for inclusion in Preware.&lt;br /&gt;
&lt;br /&gt;
== Playback through earpiece ==&lt;br /&gt;
Earpiece playback is achieved by specifying a new audio playback scenario to the audio service. There seem to be three main &amp;quot;modes&amp;quot; for audio playback (media, phone, and voice_dialing). These examples control the media mode (which is what application developers will be using) but can be adapted to change other modes too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This code will cause further audio playback to be directed to the earpiece:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.audio/media', {&lt;br /&gt;
    method: 'enableScenario',&lt;br /&gt;
    parameters: { &amp;quot;scenario&amp;quot;:&amp;quot;media_front_speaker&amp;quot; },&lt;br /&gt;
    onSuccess: function() {&lt;br /&gt;
        var request2 = new Mojo.Service.Request('palm://com.palm.audio/media', {&lt;br /&gt;
            method: 'setCurrentScenario',&lt;br /&gt;
            parameters: { &amp;quot;scenario&amp;quot;:&amp;quot;media_front_speaker&amp;quot; },&lt;br /&gt;
            onSuccess: this.playSomeSoundThroughTheEarpiece(),&lt;br /&gt;
            onFailure: this.logFailure()&lt;br /&gt;
        });&lt;br /&gt;
    }.bind(this),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This code will revert audio playback back to the speaker:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.audio/media', {&lt;br /&gt;
    method: 'disableScenario',&lt;br /&gt;
    parameters: { &amp;quot;scenario&amp;quot;:&amp;quot;media_front_speaker&amp;quot; },&lt;br /&gt;
    onSuccess: this.logSuccess(),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you enable the earpiece at some point during your app's run, you MUST remember to reset the playback to use the speaker before your app exits. Always put things back the way you found them!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The list of available scenarios can be found by calling the 'listScenarios' method:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
request = new Mojo.Service.Request(&amp;quot;palm://com.palm.audio/media/listScenarios&amp;quot;, {&lt;br /&gt;
    parameters: { &amp;quot;enabled&amp;quot;: true },&lt;br /&gt;
    onSuccess: this.printScenarios(scenarios),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The current list of scenarios for all modes seems to be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
media_front_speaker&lt;br /&gt;
media_back_speaker&lt;br /&gt;
media_headset&lt;br /&gt;
media_headset_mic&lt;br /&gt;
media_a2dp&lt;br /&gt;
media_wireless&lt;br /&gt;
&lt;br /&gt;
phone_front_speaker&lt;br /&gt;
phone_back_speaker&lt;br /&gt;
phone_headset&lt;br /&gt;
phone_headset_mic&lt;br /&gt;
phone_bluetooth_sco&lt;br /&gt;
phone_tty_full&lt;br /&gt;
phone_tty_hco&lt;br /&gt;
phone_tty_vco&lt;br /&gt;
&lt;br /&gt;
voice_dialing_front_speaker&lt;br /&gt;
voice_dialing_headset&lt;br /&gt;
voice_dialing_headset_mic&lt;br /&gt;
voice_dialing_bluetooth_sco&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additional methods off the Audio service include get/setLatency, get/setVolume, lockVolumeKeys, and setMuted.&lt;br /&gt;
&lt;br /&gt;
== Audio recording ==&lt;br /&gt;
There is a test service that the interactive tests use to perform certain actions including recording audio. It is just a wrapper for calling other linux utilities. This is obviously not ideal, since somewhere things like the phone app must be able to access the microphone directly, but it's a start...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This code will record audio to a WAV file located at /var/tmp/recordTestFile.wav. The service simply shells out to 'arecord', using the PCM audio device named 'record': &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.crotest', {&lt;br /&gt;
    method: 'RecordSound',&lt;br /&gt;
    parameters: {&amp;quot;duration&amp;quot;: 15},&lt;br /&gt;
    onSuccess: this.logSuccess(),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I am not certain that the duration parameter will be honored, since no application seems to use it, but the service seems to provide it. The service may also provide a &amp;quot;file&amp;quot; parameter to specify the output file, but I am less certain about this. Perhaps a more configurable version would be a good call to add to the utility service?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you are done with the recording, you should delete it. The service presumably simply shells out to 'rm':&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.crotest', {&lt;br /&gt;
    method: 'RemoveRecording',&lt;br /&gt;
    parameters: {},&lt;br /&gt;
    onSuccess: this.logSuccess(),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also use this test service to play an arbitrary WAV file. The service simply shells out to 'aplay':&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.crotest', {&lt;br /&gt;
    method: 'PlaySound',&lt;br /&gt;
    parameters: {&amp;quot;file&amp;quot;:&amp;quot;/var/tmp/recordTestFile.wav&amp;quot;},&lt;br /&gt;
    onSuccess: this.logSuccess(),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Media_API&amp;diff=9277</id>
		<title>Media API</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Media_API&amp;diff=9277"/>
		<updated>2010-03-02T16:54:25Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is where you may find research on undocumented Media API calls. The hope is to enable earpiece playback, microphone recording, and perhaps even raw video access.&lt;br /&gt;
&lt;br /&gt;
== Playback through earpiece ==&lt;br /&gt;
Earpiece playback is achieved by specifying a new audio playback scenario to the audio service. There seem to be three main &amp;quot;modes&amp;quot; for audio playback (media, phone, and voice_dialing). These examples control the media mode (which is what application developers will be using) but can be adapted to change other modes too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This code will cause further audio playback to be directed to the earpiece:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.audio/media', {&lt;br /&gt;
    method: 'enableScenario',&lt;br /&gt;
    parameters: { &amp;quot;scenario&amp;quot;:&amp;quot;media_front_speaker&amp;quot; },&lt;br /&gt;
    onSuccess: function() {&lt;br /&gt;
        var request2 = new Mojo.Service.Request('palm://com.palm.audio/media', {&lt;br /&gt;
            method: 'setCurrentScenario',&lt;br /&gt;
            parameters: { &amp;quot;scenario&amp;quot;:&amp;quot;media_front_speaker&amp;quot; },&lt;br /&gt;
            onSuccess: this.playSomeSoundThroughTheEarpiece(),&lt;br /&gt;
            onFailure: this.logFailure()&lt;br /&gt;
        });&lt;br /&gt;
    }.bind(this),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This code will revert audio playback back to the speaker:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.audio/media', {&lt;br /&gt;
    method: 'disableScenario',&lt;br /&gt;
    parameters: { &amp;quot;scenario&amp;quot;:&amp;quot;media_front_speaker&amp;quot; },&lt;br /&gt;
    onSuccess: this.logSuccess(),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you enable the earpiece at some point during your app's run, you MUST remember to reset the playback to use the speaker before your app exits. Always put things back the way you found them!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The list of available scenarios can be found by calling the 'listScenarios' method:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
request = new Mojo.Service.Request(&amp;quot;palm://com.palm.audio/media/listScenarios&amp;quot;, {&lt;br /&gt;
    parameters: { &amp;quot;enabled&amp;quot;: true },&lt;br /&gt;
    onSuccess: this.printScenarios(scenarios),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The current list of scenarios for all modes seems to be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
media_front_speaker&lt;br /&gt;
media_back_speaker&lt;br /&gt;
media_headset&lt;br /&gt;
media_headset_mic&lt;br /&gt;
media_a2dp&lt;br /&gt;
media_wireless&lt;br /&gt;
&lt;br /&gt;
phone_front_speaker&lt;br /&gt;
phone_back_speaker&lt;br /&gt;
phone_headset&lt;br /&gt;
phone_headset_mic&lt;br /&gt;
phone_bluetooth_sco&lt;br /&gt;
phone_tty_full&lt;br /&gt;
phone_tty_hco&lt;br /&gt;
phone_tty_vco&lt;br /&gt;
&lt;br /&gt;
voice_dialing_front_speaker&lt;br /&gt;
voice_dialing_headset&lt;br /&gt;
voice_dialing_headset_mic&lt;br /&gt;
voice_dialing_bluetooth_sco&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additional methods off the Audio service include get/setLatency, get/setVolume, lockVolumeKeys, and setMuted.&lt;br /&gt;
&lt;br /&gt;
== Audio recording ==&lt;br /&gt;
There is a test service that the interactive tests use to perform certain actions including recording audio. It is just a wrapper for calling other linux utilities. I would not be surprised if your app's ID must start with &amp;quot;com.palm&amp;quot; to call this service. This is obviously not ideal, since somewhere things like the phone app must be able to access the microphone directly, but it's a start...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This code will record audio to a WAV file located at /var/tmp/recordTestFile.wav. The service simply shells out to 'arecord', using the PCM audio device named 'record': &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.crotest', {&lt;br /&gt;
    method: 'RecordSound',&lt;br /&gt;
    parameters: {&amp;quot;duration&amp;quot;: 15},&lt;br /&gt;
    onSuccess: this.logSuccess(),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I am not certain that the duration parameter will be honored, since no application seems to use it, but the service seems to provide it. The service may also provide a &amp;quot;file&amp;quot; parameter to specify the output file, but I am less certain about this. Perhaps a more configurable version would be a good call to add to the utility service?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you are done with the recording, you should delete it. The service presumably simply shells out to 'rm':&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.crotest', {&lt;br /&gt;
    method: 'RemoveRecording',&lt;br /&gt;
    parameters: {},&lt;br /&gt;
    onSuccess: this.logSuccess(),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also use this test service to play an arbitrary WAV file. The service simply shells out to 'aplay':&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.crotest', {&lt;br /&gt;
    method: 'PlaySound',&lt;br /&gt;
    parameters: {&amp;quot;file&amp;quot;:&amp;quot;/var/tmp/recordTestFile.wav&amp;quot;},&lt;br /&gt;
    onSuccess: this.logSuccess(),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Media_API&amp;diff=9276</id>
		<title>Media API</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Media_API&amp;diff=9276"/>
		<updated>2010-03-02T16:48:32Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is where you may find research on undocumented Media API calls. The hope is to enable earpiece playback, microphone recording, and perhaps even raw video access.&lt;br /&gt;
&lt;br /&gt;
== Playback through earpiece ==&lt;br /&gt;
Earpiece playback is achieved by specifying a new audio playback scenario to the media service.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This code will cause further audio playback to be directed to the earpiece:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.audio/media', {&lt;br /&gt;
    method: 'enableScenario',&lt;br /&gt;
    parameters: { &amp;quot;scenario&amp;quot;:&amp;quot;media_front_speaker&amp;quot; },&lt;br /&gt;
    onSuccess: function() {&lt;br /&gt;
        var request2 = new Mojo.Service.Request('palm://com.palm.audio/media', {&lt;br /&gt;
            method: 'setCurrentScenario',&lt;br /&gt;
            parameters: { &amp;quot;scenario&amp;quot;:&amp;quot;media_front_speaker&amp;quot; },&lt;br /&gt;
            onSuccess: this.playSomeSoundThroughTheEarpiece(),&lt;br /&gt;
            onFailure: this.logFailure()&lt;br /&gt;
        });&lt;br /&gt;
    }.bind(this),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This code will revert audio playback back to the speaker:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.audio/media', {&lt;br /&gt;
    method: 'disableScenario',&lt;br /&gt;
    parameters: { &amp;quot;scenario&amp;quot;:&amp;quot;media_front_speaker&amp;quot; },&lt;br /&gt;
    onSuccess: this.logSuccess(),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you enable the earpiece at some point during your app's run, you MUST remember to reset the playback to use the speaker before your app exits. Always put things back the way you found them!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The list of available scenarios can be found by calling the 'listScenarios' method:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
request = new Mojo.Service.Request(&amp;quot;palm://com.palm.audio/phone/listScenarios&amp;quot;, {&lt;br /&gt;
    parameters: { &amp;quot;enabled&amp;quot;: true },&lt;br /&gt;
    onSuccess: this.printScenarios(scenarios),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The current list of scenarios seems to be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
media_front_speaker&lt;br /&gt;
media_back_speaker&lt;br /&gt;
media_headset&lt;br /&gt;
media_headset_mic&lt;br /&gt;
media_a2dp&lt;br /&gt;
media_wireless&lt;br /&gt;
phone_front_speaker&lt;br /&gt;
phone_back_speaker&lt;br /&gt;
phone_headset&lt;br /&gt;
phone_headset_mic&lt;br /&gt;
phone_bluetooth_sco&lt;br /&gt;
phone_tty_full&lt;br /&gt;
phone_tty_hco&lt;br /&gt;
phone_tty_vco&lt;br /&gt;
voice_dialing_front_speaker&lt;br /&gt;
voice_dialing_headset&lt;br /&gt;
voice_dialing_headset_mic&lt;br /&gt;
voice_dialing_bluetooth_sco&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additional methods off the Audio service include get/setLatency, get/setVolume, lockVolumeKeys, and setMuted.&lt;br /&gt;
&lt;br /&gt;
== Audio recording ==&lt;br /&gt;
There is a test service that the interactive tests use to perform certain actions including recording audio. It is just a wrapper for calling other linux utilities. I would not be surprised if your app's ID must start with &amp;quot;com.palm&amp;quot; to call this service. This is obviously not ideal, since somewhere things like the phone app must be able to access the microphone directly, but it's a start...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This code will record audio to a WAV file located at /var/tmp/recordTestFile.wav. The service simply shells out to 'arecord', using the PCM audio device named 'record': &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.crotest', {&lt;br /&gt;
    method: 'RecordSound',&lt;br /&gt;
    parameters: {&amp;quot;duration&amp;quot;: 15},&lt;br /&gt;
    onSuccess: this.logSuccess(),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I am not certain that the duration parameter will be honored, since no application seems to use it, but the service seems to provide it. The service may also provide a &amp;quot;file&amp;quot; parameter to specify the output file, but I am less certain about this. Perhaps a more configurable version would be a good call to add to the utility service?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you are done with the recording, you should delete it. The service presumably simply shells out to 'rm':&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.crotest', {&lt;br /&gt;
    method: 'RemoveRecording',&lt;br /&gt;
    parameters: {},&lt;br /&gt;
    onSuccess: this.logSuccess(),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also use this test service to play an arbitrary WAV file. The service simply shells out to 'aplay':&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.crotest', {&lt;br /&gt;
    method: 'PlaySound',&lt;br /&gt;
    parameters: {&amp;quot;file&amp;quot;:&amp;quot;/var/tmp/recordTestFile.wav&amp;quot;},&lt;br /&gt;
    onSuccess: this.logSuccess(),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Portal:Research&amp;diff=9272</id>
		<title>Portal:Research</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Portal:Research&amp;diff=9272"/>
		<updated>2010-03-02T16:27:47Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__notoc__&lt;br /&gt;
{{portal-header|&lt;br /&gt;
The Research Portal is for bleeding edge things being done with the device. &lt;br /&gt;
&lt;br /&gt;
Title all pages: '''Research [description]''' or '''Reference [description]'''&lt;br /&gt;
}}&lt;br /&gt;
{{portal-two-columns&lt;br /&gt;
|column1=&lt;br /&gt;
===Research:===&lt;br /&gt;
&lt;br /&gt;
* [[Applications Bundled on the Pre]]&lt;br /&gt;
* [[Application_Framework|Application Framework]]&lt;br /&gt;
* [[Application Signing|Application Signing]]&lt;br /&gt;
* [[Blocking Updates]]&lt;br /&gt;
* [[New Bluetooth|BlueZ (Replacing Palm Bluetooth)]]&lt;br /&gt;
* [[Boot_Chain|Boot Chain]]&lt;br /&gt;
* [[Bootie]]&lt;br /&gt;
* [[ClassicFilesystem]]&lt;br /&gt;
* [[Decrypt SSL (trusted man-in-the-middle technique)|Decrypt SSL (trusted man-in-the-middle technique)]]&lt;br /&gt;
* [[Easter Eggs|Easter Eggs]]&lt;br /&gt;
* [[FirstUse Application Functionality]]&lt;br /&gt;
* [[Fonts available on board the Pre]]&lt;br /&gt;
* [[Gstreamer]]&lt;br /&gt;
* [[Hidd]]&lt;br /&gt;
* [[Introspecting_Dbus|Introspecting Dbus]]&lt;br /&gt;
* [[Key Codes|Key Codes]] &lt;br /&gt;
* [[Media API|Media API]]&lt;br /&gt;
* [[Network Management|Network Management]]&lt;br /&gt;
* [[OpenGL|OpenGL research]]&lt;br /&gt;
* [[OpenGL_Triangle_of_Doom|OpenGL coding and demo Triangle of Doom]]&lt;br /&gt;
* [[Pre Specific Hash Codes|Pre Specific Hash Codes]]&lt;br /&gt;
* [[Research_Pre_Keyboard | Pre keyboard scancodes and keycodes]]&lt;br /&gt;
* [[Proximity Sensor]] &lt;br /&gt;
* [[Pictures from Self-Test|Pictures from Self-Test]] &lt;br /&gt;
* [[PmIpcDispatch|PmIpcDispatch to talk to palm IPC servers]]&lt;br /&gt;
* [[Restore Debug Log|Restore Debug Log]] &lt;br /&gt;
* [[Reverse_Engineering_WebOS_Doctor|Reverse Engineering WebOS Doctor]]&lt;br /&gt;
* [[Rooted Pre Issues|Rooted Pre Issues]] &lt;br /&gt;
* [[Research_Securing_Pre|Securing your Pre]]&lt;br /&gt;
* [[Running Processes|Running Processes]] &lt;br /&gt;
* [[Symlink Applications|Symlink Applications]] &lt;br /&gt;
* [[System Sounds|System Sounds]] &lt;br /&gt;
* [[TestApps|TestApps]] &lt;br /&gt;
* [[Facebook timezone issue|The annoying Facebook timezone issue]]&lt;br /&gt;
* [[Update Service Trace|Update Service Trace]] &lt;br /&gt;
* [[Tidbits|Tidbits]] &lt;br /&gt;
* [[VideoRecording]]&lt;br /&gt;
* [[WebOS Exploration - Various Information|WebOS Exploration - Various Information]] &lt;br /&gt;
* [[Research_Pre_GSM_Modem | Pre GSM modem device informations]]&lt;br /&gt;
* [[Research_Pre_GSM_Modem_Protocol | Pre GSM modem protocol informations]]&lt;br /&gt;
* [[Research_Pre_Audio | Audio routing and setup on the Pre]]&lt;br /&gt;
* [[Research_mpt | MSM modem passthru mode ]]&lt;br /&gt;
* [[Research_Pre_Boot_Process | Boot process]]&lt;br /&gt;
* [[LibSDL Research| SDL LibSDL research which lead to Quake and Doom running]]&lt;br /&gt;
* [[LibPDL Research| PDL LibPDL research ties into palm's device hooks]]&lt;br /&gt;
* [[Unofficial networks compatiblity list]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|column2=&lt;br /&gt;
===Reference===&lt;br /&gt;
* [[Packaging Standards|Packaging Standards]]&lt;br /&gt;
* [[webkit_transform|Webkit Transform]]- a powerful set of commands for manipulating elements.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Media_API&amp;diff=9271</id>
		<title>Media API</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Media_API&amp;diff=9271"/>
		<updated>2010-03-02T16:24:54Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is where you may find research on undocumented Media API calls. The hope is to enable earpiece playback, microphone recording, and perhaps even raw video access.&lt;br /&gt;
&lt;br /&gt;
== Playback through earpiece ==&lt;br /&gt;
Earpiece playback is achieved by specifying a new audio playback scenario to the media service. It is unknown at this time what other values for &amp;quot;scenario&amp;quot; exist...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This code will cause further audio playback to be directed to the earpiece:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.audio/media', {&lt;br /&gt;
    method: 'enableScenario',&lt;br /&gt;
    parameters: { &amp;quot;scenario&amp;quot;:&amp;quot;media_front_speaker&amp;quot; },&lt;br /&gt;
    onSuccess: function() {&lt;br /&gt;
        var request2 = new Mojo.Service.Request('palm://com.palm.audio/media', {&lt;br /&gt;
            method: 'setCurrentScenario',&lt;br /&gt;
            parameters: { &amp;quot;scenario&amp;quot;:&amp;quot;media_front_speaker&amp;quot; },&lt;br /&gt;
            onSuccess: this.playSomeSoundThroughTheEarpiece(),&lt;br /&gt;
            onFailure: this.logFailure()&lt;br /&gt;
        });&lt;br /&gt;
    }.bind(this),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This code will revert audio playback back to the speaker:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.audio/media', {&lt;br /&gt;
    method: 'disableScenario',&lt;br /&gt;
    parameters: { &amp;quot;scenario&amp;quot;:&amp;quot;media_front_speaker&amp;quot; },&lt;br /&gt;
    onSuccess: this.logSuccess(),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you enable the earpiece at some point during your app's run, you MUST remember to reset the playback to use the speaker before your app exits. Always put things back the way you found them!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Audio recording ==&lt;br /&gt;
There is a test service that the interactive tests use to perform certain actions including recording audio. It is just a wrapper for calling other linux utilities. I would not be surprised if your app's ID must start with &amp;quot;com.palm&amp;quot; to call this service. This is obviously not ideal, since somewhere things like the phone app must be able to access the microphone directly, but it's a start...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This code will record audio to a WAV file located at /var/tmp/recordTestFile.wav. The service simply shells out to 'arecord', using the PCM audio device named 'record': &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.crotest', {&lt;br /&gt;
    method: 'RecordSound',&lt;br /&gt;
    parameters: {&amp;quot;duration&amp;quot;: 15},&lt;br /&gt;
    onSuccess: this.logSuccess(),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I am not certain that the duration parameter will be honored, since no application seems to use it, but the service seems to provide it. The service may also provide a &amp;quot;file&amp;quot; parameter to specify the output file, but I am less certain about this. Perhaps a more configurable version would be a good call to add to the utility service?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you are done with the recording, you should delete it. The service presumably simply shells out to 'rm':&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.crotest', {&lt;br /&gt;
    method: 'RemoveRecording',&lt;br /&gt;
    parameters: {},&lt;br /&gt;
    onSuccess: this.logSuccess(),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also use this test service to play an arbitrary WAV file. The service simply shells out to 'aplay':&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.crotest', {&lt;br /&gt;
    method: 'PlaySound',&lt;br /&gt;
    parameters: {&amp;quot;file&amp;quot;:&amp;quot;/var/tmp/recordTestFile.wav&amp;quot;},&lt;br /&gt;
    onSuccess: this.logSuccess(),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Media_API&amp;diff=9270</id>
		<title>Media API</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Media_API&amp;diff=9270"/>
		<updated>2010-03-02T16:18:20Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is where you may find research on undocumented Media API calls. The hope is to enable earpiece playback, microphone recording, and perhaps even raw video access.&lt;br /&gt;
&lt;br /&gt;
== Playback through earpiece ==&lt;br /&gt;
This code will cause further audio playback to be directed to the earpiece:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.audio/media', {&lt;br /&gt;
    method: 'enableScenario',&lt;br /&gt;
    parameters: { &amp;quot;scenario&amp;quot;:&amp;quot;media_front_speaker&amp;quot; },&lt;br /&gt;
    onSuccess: function() {&lt;br /&gt;
        var request2 = new Mojo.Service.Request('palm://com.palm.audio/media', {&lt;br /&gt;
            method: 'setCurrentScenario',&lt;br /&gt;
            parameters: { &amp;quot;scenario&amp;quot;:&amp;quot;media_front_speaker&amp;quot; },&lt;br /&gt;
            onSuccess: this.playSomeSoundThroughTheEarpiece(),&lt;br /&gt;
            onFailure: this.logFailure()&lt;br /&gt;
        });&lt;br /&gt;
    }.bind(this),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This code will revert audio playback back to the speaker:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.audio/media', {&lt;br /&gt;
    method: 'disableScenario',&lt;br /&gt;
    parameters: { &amp;quot;scenario&amp;quot;:&amp;quot;media_front_speaker&amp;quot; },&lt;br /&gt;
    onSuccess: this.logSuccess(),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you enable the earpiece at some point during your app's run, you MUST remember to reset the playback to use the speaker before your app exits. Always put things back the way you found them!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Audio recording ==&lt;br /&gt;
There is a test service that the interactive tests use to perform certain actions including recording audio. It is just a wrapper for calling other linux utilities. I would not be surprised if your app's ID must start with &amp;quot;com.palm&amp;quot; to call this service. This is obviously not ideal, since somewhere things like the phone app must be able to access the microphone directly, but it's a start...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This code will record audio to a WAV file located at /var/tmp/recordTestFile.wav. The service simply shells out to 'arecord', using the PCM audio device named 'record': &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.crotest', {&lt;br /&gt;
    method: 'RecordSound',&lt;br /&gt;
    parameters: {&amp;quot;duration&amp;quot;: 15},&lt;br /&gt;
    onSuccess: this.logSuccess(),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I am not certain that the duration parameter will be honored, since no application seems to use it, but the service seems to provide it. The service may also provide a &amp;quot;file&amp;quot; parameter to specify the output file, but I am less certain about this. Perhaps a more configurable version would be a good call to add to the utility service?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you are done with the recording, you should delete it. The service presumably simply shells out to 'rm':&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.crotest', {&lt;br /&gt;
    method: 'RemoveRecording',&lt;br /&gt;
    parameters: {},&lt;br /&gt;
    onSuccess: this.logSuccess(),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also use this test service to play an arbitrary WAV file. The service simply shells out to 'aplay':&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.crotest', {&lt;br /&gt;
    method: 'PlaySound',&lt;br /&gt;
    parameters: {&amp;quot;file&amp;quot;:&amp;quot;/var/tmp/recordTestFile.wav&amp;quot;},&lt;br /&gt;
    onSuccess: this.logSuccess(),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Media_API&amp;diff=9269</id>
		<title>Media API</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Media_API&amp;diff=9269"/>
		<updated>2010-03-02T16:18:00Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is where you may find research on undocumented Media API calls. The hope is to enable earphone playback, microphone recording, and perhaps even raw video access.&lt;br /&gt;
&lt;br /&gt;
== Playback through earpiece ==&lt;br /&gt;
This code will cause further audio playback to be directed to the earpiece:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.audio/media', {&lt;br /&gt;
    method: 'enableScenario',&lt;br /&gt;
    parameters: { &amp;quot;scenario&amp;quot;:&amp;quot;media_front_speaker&amp;quot; },&lt;br /&gt;
    onSuccess: function() {&lt;br /&gt;
        var request2 = new Mojo.Service.Request('palm://com.palm.audio/media', {&lt;br /&gt;
            method: 'setCurrentScenario',&lt;br /&gt;
            parameters: { &amp;quot;scenario&amp;quot;:&amp;quot;media_front_speaker&amp;quot; },&lt;br /&gt;
            onSuccess: this.playSomeSoundThroughTheEarpiece(),&lt;br /&gt;
            onFailure: this.logFailure()&lt;br /&gt;
        });&lt;br /&gt;
    }.bind(this),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This code will revert audio playback back to the speaker:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.audio/media', {&lt;br /&gt;
    method: 'disableScenario',&lt;br /&gt;
    parameters: { &amp;quot;scenario&amp;quot;:&amp;quot;media_front_speaker&amp;quot; },&lt;br /&gt;
    onSuccess: this.logSuccess(),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you enable the earpiece at some point during your app's run, you MUST remember to reset the playback to use the speaker before your app exits. Always put things back the way you found them!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Audio recording ==&lt;br /&gt;
There is a test service that the interactive tests use to perform certain actions including recording audio. It is just a wrapper for calling other linux utilities. I would not be surprised if your app's ID must start with &amp;quot;com.palm&amp;quot; to call this service. This is obviously not ideal, since somewhere things like the phone app must be able to access the microphone directly, but it's a start...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This code will record audio to a WAV file located at /var/tmp/recordTestFile.wav. The service simply shells out to 'arecord', using the PCM audio device named 'record': &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.crotest', {&lt;br /&gt;
    method: 'RecordSound',&lt;br /&gt;
    parameters: {&amp;quot;duration&amp;quot;: 15},&lt;br /&gt;
    onSuccess: this.logSuccess(),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I am not certain that the duration parameter will be honored, since no application seems to use it, but the service seems to provide it. The service may also provide a &amp;quot;file&amp;quot; parameter to specify the output file, but I am less certain about this. Perhaps a more configurable version would be a good call to add to the utility service?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you are done with the recording, you should delete it. The service presumably simply shells out to 'rm':&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.crotest', {&lt;br /&gt;
    method: 'RemoveRecording',&lt;br /&gt;
    parameters: {},&lt;br /&gt;
    onSuccess: this.logSuccess(),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also use this test service to play an arbitrary WAV file. The service simply shells out to 'aplay':&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.crotest', {&lt;br /&gt;
    method: 'PlaySound',&lt;br /&gt;
    parameters: {&amp;quot;file&amp;quot;:&amp;quot;/var/tmp/recordTestFile.wav&amp;quot;},&lt;br /&gt;
    onSuccess: this.logSuccess(),&lt;br /&gt;
    onFailure: this.logFailure()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Media_API&amp;diff=9268</id>
		<title>Media API</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Media_API&amp;diff=9268"/>
		<updated>2010-03-02T15:51:48Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: Initial commit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is where you may find research on undocumented Media API calls. The hope is to enable earphone playback, microphone recording, and perhaps even raw video access.&lt;br /&gt;
&lt;br /&gt;
== Playback through earpiece ==&lt;br /&gt;
This code will cause further audio playback to be directed to the earpiece:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.audio/media', {&lt;br /&gt;
    method: 'enableScenario',&lt;br /&gt;
    parameters: { &amp;quot;scenario&amp;quot;:&amp;quot;media_front_speaker&amp;quot; },&lt;br /&gt;
    onSuccess: function() {&lt;br /&gt;
        var request2 = new Mojo.Service.Request('palm://com.palm.audio/media', {&lt;br /&gt;
            method: 'setCurrentScenario',&lt;br /&gt;
            parameters: { &amp;quot;scenario&amp;quot;:&amp;quot;media_front_speaker&amp;quot; },&lt;br /&gt;
            onSuccess: this.playSomeSoundThroughTheEarpiece(),&lt;br /&gt;
            onFailure: this.doSomethingIfTheMojoCallFails()&lt;br /&gt;
        });&lt;br /&gt;
    }.bind(this),&lt;br /&gt;
    onFailure: this.doSomethingIfTheMojoCallFails()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This code will revert audio playback back to the speaker:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var request = new Mojo.Service.Request('palm://com.palm.audio/media', {&lt;br /&gt;
    method: 'disableScenario',&lt;br /&gt;
    parameters: { &amp;quot;scenario&amp;quot;:&amp;quot;media_front_speaker&amp;quot; },&lt;br /&gt;
    onSuccess: this.playSomeSoundThroughTheBackSpeaker(),&lt;br /&gt;
    onFailure: this.doSomethingIfTheMojoCallFails()&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you enable the earpiece at some point during your app's run, you MUST remember to reset the playback to use the speaker before your app exits. Always put things back the way you found them!&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Patch_Contacts_Send_All_via_Email&amp;diff=8721</id>
		<title>Patch Contacts Send All via Email</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Patch_Contacts_Send_All_via_Email&amp;diff=8721"/>
		<updated>2010-01-27T21:45:23Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{template:patch}}&lt;br /&gt;
[[Image:Send_all_via_email.png|right]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This patch allows you to create a vCard file containing all your contacts, and then attach that file to an e-mail. WebOS does not offer a built-in way to export your contacts, so this seems to be the next best thing.&lt;br /&gt;
&lt;br /&gt;
===Patch Source (emailall.patch)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.contacts/app/controllers/list-assistant.js.orig	Thu Jan 14 13:02:13 2010&lt;br /&gt;
+++ /usr/palm/applications/com.palm.app.contacts/app/controllers/list-assistant.js	Thu Jan 14 13:22:18 2010&lt;br /&gt;
@@ -284,6 +284,9 @@&lt;br /&gt;
 				items: [Mojo.Menu.editItem,{&lt;br /&gt;
 					label:$L(&amp;quot;Send All to Car Kit&amp;quot;),&lt;br /&gt;
 					command:&amp;quot;sendcontacts&amp;quot;&lt;br /&gt;
+				}, {&lt;br /&gt;
+					label:$L(&amp;quot;Save All via Email&amp;quot;),&lt;br /&gt;
+					command:&amp;quot;emailcontacts&amp;quot;&lt;br /&gt;
 				}, prefsItem, {&lt;br /&gt;
 					label: $LL('Help'),&lt;br /&gt;
 					command: Mojo.Menu.helpCmd&lt;br /&gt;
@@ -461,6 +464,8 @@&lt;br /&gt;
 			});&lt;br /&gt;
 		}else if (event.type == Mojo.Event.command &amp;amp;&amp;amp; event.command === Mojo.Menu.prefsCmd) {&lt;br /&gt;
 			this.controller.stageController.pushScene('prefs');&lt;br /&gt;
+		}else if (event.type == Mojo.Event.command &amp;amp;&amp;amp; event.command == &amp;quot;emailcontacts&amp;quot;) {&lt;br /&gt;
+			this.emailContacts();&lt;br /&gt;
 		}else if (event.type == Mojo.Event.command &amp;amp;&amp;amp; event.command == &amp;quot;sendcontacts&amp;quot;) {&lt;br /&gt;
 			this.sendContacts();&lt;br /&gt;
 		}&lt;br /&gt;
@@ -470,6 +475,23 @@&lt;br /&gt;
 		}&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
+	emailContacts:function(){&lt;br /&gt;
+		this.vcardRequest = AppAssistant.contactsService.makeVCardList(this.controller, {&lt;br /&gt;
+				stripPhoneNumbers:false&lt;br /&gt;
+			}, this.gotVCard.bind(this, &amp;quot;email&amp;quot;));&lt;br /&gt;
+		var cancelFn = function(){&lt;br /&gt;
+			this.vcardRequest.cancel();&lt;br /&gt;
+			this.vcardRequest = null;&lt;br /&gt;
+		}.bind(this)&lt;br /&gt;
+		console.log(&amp;quot;Setting up a dialog&amp;quot;);&lt;br /&gt;
+		this.sendContactsPopupAssistant = new SendContactsPopupAssistant(this.controller, cancelFn);&lt;br /&gt;
+		this.controller.showDialog({&lt;br /&gt;
+			template: 'list/send-contact-popup',&lt;br /&gt;
+			assistant: this.sendContactsPopupAssistant,&lt;br /&gt;
+			preventCancel:true&lt;br /&gt;
+		});&lt;br /&gt;
+	},&lt;br /&gt;
+	&lt;br /&gt;
 	sendContacts:function(){&lt;br /&gt;
 		&lt;br /&gt;
 		var params = {&amp;quot;type&amp;quot;:&amp;quot;bluetooth&amp;quot;, &amp;quot;onSuccess&amp;quot;:this.bluetoothResponse.bind(this)}; &lt;br /&gt;
@@ -479,7 +501,7 @@&lt;br /&gt;
 	&lt;br /&gt;
 	bluetoothResponse:function(response){&lt;br /&gt;
 		if (response == &amp;quot;BT-On&amp;quot; || response == &amp;quot;BT-StartingUp&amp;quot;) {&lt;br /&gt;
-			this.vcardRequest = AppAssistant.contactsService.makeVCardList(this.controller, {stripPhoneNumbers:true}, this.gotVCard.bind(this));&lt;br /&gt;
+			this.vcardRequest = AppAssistant.contactsService.makeVCardList(this.controller, {stripPhoneNumbers:true}, this.gotVCard.bind(this, &amp;quot;bluetooth&amp;quot;));&lt;br /&gt;
 			var cancelFn = function(){&lt;br /&gt;
 				this.vcardRequest.cancel();&lt;br /&gt;
 				this.vcardRequest = null;&lt;br /&gt;
@@ -494,18 +516,39 @@&lt;br /&gt;
 		}&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
-	gotVCard:function(resp){&lt;br /&gt;
-		var appArgs = {&lt;br /&gt;
-			appId:&amp;quot;com.palm.app.bluetooth&amp;quot;,&lt;br /&gt;
-			name:&amp;quot;btopp&amp;quot;&lt;br /&gt;
+	gotVCard:function(type,resp){&lt;br /&gt;
+		if (type == &amp;quot;bluetooth&amp;quot;) {&lt;br /&gt;
+			var appArgs = {&lt;br /&gt;
+				appId:&amp;quot;com.palm.app.bluetooth&amp;quot;,&lt;br /&gt;
+				name:&amp;quot;btopp&amp;quot;&lt;br /&gt;
+			}&lt;br /&gt;
+			var sceneArgs = {&lt;br /&gt;
+				file:resp.file&lt;br /&gt;
+			}&lt;br /&gt;
+			&lt;br /&gt;
+			this.sendContactsPopupAssistant.widget.mojo.close();&lt;br /&gt;
+			&lt;br /&gt;
+			this.controller.stageController.pushScene(appArgs, sceneArgs)&lt;br /&gt;
 		}&lt;br /&gt;
-		var sceneArgs = {&lt;br /&gt;
-			file:resp.file&lt;br /&gt;
+		else if (type == &amp;quot;email&amp;quot;) {&lt;br /&gt;
+			var vcfPath = resp.file;&lt;br /&gt;
+			&lt;br /&gt;
+			this.sendContactsPopupAssistant.widget.mojo.close();&lt;br /&gt;
+			&lt;br /&gt;
+			this.controller.serviceRequest('palm://com.palm.applicationManager', {&lt;br /&gt;
+				method: 'open',&lt;br /&gt;
+				parameters: {&lt;br /&gt;
+					id: 'com.palm.app.email',&lt;br /&gt;
+					params: {&lt;br /&gt;
+						summary: 'Palm Contacts',&lt;br /&gt;
+						attachments: [{&lt;br /&gt;
+							fullPath:vcfPath,&lt;br /&gt;
+							mimeType:'text/x-vcard'&lt;br /&gt;
+						}]&lt;br /&gt;
+					}&lt;br /&gt;
+				}&lt;br /&gt;
+			});&lt;br /&gt;
 		}&lt;br /&gt;
-		&lt;br /&gt;
-		this.sendContactsPopupAssistant.widget.mojo.close();&lt;br /&gt;
-		&lt;br /&gt;
-		this.controller.stageController.pushScene(appArgs, sceneArgs)&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
 	handleListTap: function(event){&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Accelerometer&amp;diff=8589</id>
		<title>Accelerometer</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Accelerometer&amp;diff=8589"/>
		<updated>2010-01-20T22:58:30Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The accelerometer appears to be a &amp;quot;KXSD9 SERIES Tri-Axis, 2g, 4g, 6g, 8g, User Selectable, Ultra Low Power Digital&amp;quot;&lt;br /&gt;
[http://www.kionix.com/accelerometers/accelerometer-KXSD9.html http://www.kionix.com/accelerometers/accelerometer-KXSD9.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@castle:/sys/class/input/input5# cat name&lt;br /&gt;
kxsd9_accelerometer&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
more info:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@castle:/sys/class/input/input5# cat uevent&lt;br /&gt;
PHYSDEVPATH=/class/i2c-adapter/i2c-3/3-0018&lt;br /&gt;
PHYSDEVBUS=i2c&lt;br /&gt;
PHYSDEVDRIVER=kxsd9_accelerometer&lt;br /&gt;
PRODUCT=18/1/1/100&lt;br /&gt;
NAME=&amp;quot;kxsd9_accelerometer&amp;quot;&lt;br /&gt;
EV==9&lt;br /&gt;
ABS==7&lt;br /&gt;
MODALIAS=input:b0018v0001p0001e0100-e0,3,kra0,1,2,mlsfw&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and at the very least you could adjust the low pass filter used, or the threshold for waking up:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
root@castle:/sys/class/input/input5# ls -al&lt;br /&gt;
drwxr-xr-x    6 root     root            0 Jun 11 17:47 .&lt;br /&gt;
drwxr-xr-x    8 root     root            0 Jun 11 17:47 ..&lt;br /&gt;
-rw-r--r--    1 root     root         4096 Jun 11 23:58 accelerometer_filter_frequency&lt;br /&gt;
-rw-r--r--    1 root     root         4096 Jun 11 23:58 accelerometer_motion_wake_up_threshold&lt;br /&gt;
drwxr-xr-x    2 root     root            0 Jun 11 23:58 capabilities&lt;br /&gt;
lrwxrwxrwx    1 root     root            0 Jun 11 23:58 device -&amp;gt; ../../../class/i2c-adapter/i2c-3/3-0018&lt;br /&gt;
drwxr-xr-x    3 root     root            0 Jun 11 23:49 event5&lt;br /&gt;
drwxr-xr-x    2 root     root            0 Jun 11 23:58 id&lt;br /&gt;
lrwxrwxrwx    1 root     root            0 Jun 11 23:58 input:event5 -&amp;gt; ../../../class/input/input5/event5&lt;br /&gt;
-r--r--r--    1 root     root         4096 Jun 11 23:58 modalias&lt;br /&gt;
-rw-r--r--    1 root     root            0 Jun 11 23:50 mode&lt;br /&gt;
-r--r--r--    1 root     root         4096 Jun 11 23:53 name&lt;br /&gt;
-r--r--r--    1 root     root         4096 Jun 11 23:58 phys&lt;br /&gt;
-rw-r--r--    1 root     root         4096 Jun 11 23:58 poll_interval&lt;br /&gt;
drwxr-xr-x    2 root     root            0 Jun 11 23:58 power&lt;br /&gt;
lrwxrwxrwx    1 root     root            0 Jun 11 23:58 subsystem -&amp;gt; ../../../class/input&lt;br /&gt;
-rw-r--r--    1 root     root         4096 Jun 11 23:58 uevent&lt;br /&gt;
-r--r--r--    1 root     root         4096 Jun 11 23:58 uniq&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More accelerometer info &lt;br /&gt;
&lt;br /&gt;
There's a library called libhidaccelerometer.so -- so it's treated as an HID class of devices. There is no dbus activity when you move the device, so this probably a much lower level service. Makes sense: you don't want zillions of dbus messages firing off whenever someone moves.&lt;br /&gt;
&lt;br /&gt;
Looking in running processes, I notice /usr/bin/hidd, which references a configuration file '''/etc/hidd/HidPlugins.xml'''&lt;br /&gt;
&lt;br /&gt;
In this file, two sockets are mentioned:&lt;br /&gt;
/var/tmp/hidd/AccelerometerCmdSocket&lt;br /&gt;
/var/tmp/hidd/AccelerometerEventSocket&lt;br /&gt;
&lt;br /&gt;
These are UNIX DGRAM sockets, which are open on the device.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sample code ==&lt;br /&gt;
Taken from boydell's Magic 8 Ball app:&lt;br /&gt;
&lt;br /&gt;
In his '''first-assistant.js''' (''... = code skips'')&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
...    &lt;br /&gt;
        this.controller.listen(this.controller.sceneElement, Mojo.Event.tap, this.handleTap.bind(this));&lt;br /&gt;
        this.controller.listen(document, 'shakestart', this.handleShakeStart.bind(this));&lt;br /&gt;
        this.controller.listen(document, 'shaking', this.handleShaking.bind(this));&lt;br /&gt;
        this.controller.listen(document, 'shakeend', this.handleShakeEnd.bind(this));&lt;br /&gt;
...&lt;br /&gt;
FirstAssistant.prototype.handleShakeStart = function(event) {&lt;br /&gt;
        this.setBall();&lt;br /&gt;
        this.hideMessage();&lt;br /&gt;
        Event.stop(event);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
FirstAssistant.prototype.handleShaking = function(event) {&lt;br /&gt;
        this.setBall();&lt;br /&gt;
        this.hideMessage();&lt;br /&gt;
        Event.stop(event);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
FirstAssistant.prototype.handleShakeEnd = function(event) {&lt;br /&gt;
        this.showRandomMessage();&lt;br /&gt;
        Event.stop(event);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To increase the resolution to 30Hz, use this snippet (requires WebOS 1.3.5 or above):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
this.controller.stageController.setWindowProperties(&amp;quot;fastAccelerometer&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Application:AccelService&amp;diff=8588</id>
		<title>Application:AccelService</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Application:AccelService&amp;diff=8588"/>
		<updated>2010-01-20T22:54:54Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{application&lt;br /&gt;
|name=AccelService&lt;br /&gt;
|type=webOS&lt;br /&gt;
|version=Version: Pre-Alpha 0.0.3 &amp;lt;br /&amp;gt;(7 Aug 2009)&lt;br /&gt;
|tag=Utilities&lt;br /&gt;
|screenshot=&lt;br /&gt;
|description=&lt;br /&gt;
&lt;br /&gt;
== Deprecated ==&lt;br /&gt;
The use of this service should be phased out. WebOS 1.3.5 and above include an official API for adjusting the accelerometer resolution. The StageController.setWindowProperties() method now supports the fastAccelerometer  property to increase the frequency of accelerometer events from 4Hz to 30Hz.&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
This service provides access to the accelerometer driver's poll_interval parameter.  As of webOS 1.1.0, this interval is not accessible from application development and is set to 250ms.  This makes most accelerometer driven applications choppy and slow.  With this service, the poll_interval can be changed dynamically by the application.  &lt;br /&gt;
&lt;br /&gt;
The four methods exposed to the user are:&lt;br /&gt;
&lt;br /&gt;
;getPollFreq()          :returns the frequency in HZ of the accelerometer events&lt;br /&gt;
;getPollPeriod()        :returns the period in ms of the accelerometer events&lt;br /&gt;
;setPollFreq(freq)      :sets the frequency in HZ of the accelerometer events&lt;br /&gt;
;setPollPeriod(period)  :sets the period in ms of the accelerometer events&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' This service does not modify the hardware, it simply increases the rate at which the driver sends accelerometer events to the application handlers listening for the 'acceleration' event.&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
This is early-alpha software.&lt;br /&gt;
&lt;br /&gt;
== Repository ==&lt;br /&gt;
&lt;br /&gt;
AccelService is housed in the Applications section of the Webos-internals repository at Gitorious.  http://gitorious.org/webos-internals.   &lt;br /&gt;
&lt;br /&gt;
Source code for the example Mojo app can be browsed at http://gitorious.org/webos-internals/applications/trees/master/org.webosinternals.accelexample&lt;br /&gt;
&lt;br /&gt;
Source code for the service can be browsed at http://gitorious.org/webos-internals/applications/trees/master/AccelerometerService&lt;br /&gt;
&lt;br /&gt;
== License ==&lt;br /&gt;
&lt;br /&gt;
Please be aware that org.webosinternals.accelservice and org.webosinternals.accelexample are licensed under the GPLv2.&lt;br /&gt;
&lt;br /&gt;
They cannot be used by a closed source application.  If you want to use them in a non-GPLv2 but otherwise open source application, please contact the authors.&lt;br /&gt;
&lt;br /&gt;
== Operating notes ==&lt;br /&gt;
&lt;br /&gt;
=== Recent enhancements ===&lt;br /&gt;
&lt;br /&gt;
=== Known bugs ===&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
You can install it from Preware.&lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Patch_Contacts_Send_All_via_Email&amp;diff=8369</id>
		<title>Patch Contacts Send All via Email</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Patch_Contacts_Send_All_via_Email&amp;diff=8369"/>
		<updated>2010-01-14T21:32:22Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{template:patch}}&lt;br /&gt;
[[Image:Send_all_via_email.png|right]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This patch allows you to create a vCard file containing all your contacts, and then attach that file to an e-mail. WebOS does not offer a built-in way to export your contacts, so this seems to be the next best thing.&lt;br /&gt;
&lt;br /&gt;
Update 1/14/2010:&lt;br /&gt;
The version in Preware is currently broken on WebOS 1.3.5. The version below has been fixed and works properly with 1.3.5. The updated patch has been submitted to the Preware feed but it will take some time to appear.&lt;br /&gt;
&lt;br /&gt;
===Patch Source (emailall.patch)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.contacts/app/controllers/list-assistant.js.orig	Thu Jan 14 13:02:13 2010&lt;br /&gt;
+++ /usr/palm/applications/com.palm.app.contacts/app/controllers/list-assistant.js	Thu Jan 14 13:22:18 2010&lt;br /&gt;
@@ -284,6 +284,9 @@&lt;br /&gt;
 				items: [Mojo.Menu.editItem,{&lt;br /&gt;
 					label:$L(&amp;quot;Send All to Car Kit&amp;quot;),&lt;br /&gt;
 					command:&amp;quot;sendcontacts&amp;quot;&lt;br /&gt;
+				}, {&lt;br /&gt;
+					label:$L(&amp;quot;Save All via Email&amp;quot;),&lt;br /&gt;
+					command:&amp;quot;emailcontacts&amp;quot;&lt;br /&gt;
 				}, prefsItem, {&lt;br /&gt;
 					label: $LL('Help'),&lt;br /&gt;
 					command: Mojo.Menu.helpCmd&lt;br /&gt;
@@ -461,6 +464,8 @@&lt;br /&gt;
 			});&lt;br /&gt;
 		}else if (event.type == Mojo.Event.command &amp;amp;&amp;amp; event.command === Mojo.Menu.prefsCmd) {&lt;br /&gt;
 			this.controller.stageController.pushScene('prefs');&lt;br /&gt;
+		}else if (event.type == Mojo.Event.command &amp;amp;&amp;amp; event.command == &amp;quot;emailcontacts&amp;quot;) {&lt;br /&gt;
+			this.emailContacts();&lt;br /&gt;
 		}else if (event.type == Mojo.Event.command &amp;amp;&amp;amp; event.command == &amp;quot;sendcontacts&amp;quot;) {&lt;br /&gt;
 			this.sendContacts();&lt;br /&gt;
 		}&lt;br /&gt;
@@ -470,6 +475,23 @@&lt;br /&gt;
 		}&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
+	emailContacts:function(){&lt;br /&gt;
+		this.vcardRequest = AppAssistant.contactsService.makeVCardList(this.controller, {&lt;br /&gt;
+				stripPhoneNumbers:false&lt;br /&gt;
+			}, this.gotVCard.bind(this, &amp;quot;email&amp;quot;));&lt;br /&gt;
+		var cancelFn = function(){&lt;br /&gt;
+			this.vcardRequest.cancel();&lt;br /&gt;
+			this.vcardRequest = null;&lt;br /&gt;
+		}.bind(this)&lt;br /&gt;
+		console.log(&amp;quot;Setting up a dialog&amp;quot;);&lt;br /&gt;
+		this.sendContactsPopupAssistant = new SendContactsPopupAssistant(this.controller, cancelFn);&lt;br /&gt;
+		this.controller.showDialog({&lt;br /&gt;
+			template: 'list/send-contact-popup',&lt;br /&gt;
+			assistant: this.sendContactsPopupAssistant,&lt;br /&gt;
+			preventCancel:true&lt;br /&gt;
+		});&lt;br /&gt;
+	},&lt;br /&gt;
+	&lt;br /&gt;
 	sendContacts:function(){&lt;br /&gt;
 		&lt;br /&gt;
 		var params = {&amp;quot;type&amp;quot;:&amp;quot;bluetooth&amp;quot;, &amp;quot;onSuccess&amp;quot;:this.bluetoothResponse.bind(this)}; &lt;br /&gt;
@@ -479,7 +501,7 @@&lt;br /&gt;
 	&lt;br /&gt;
 	bluetoothResponse:function(response){&lt;br /&gt;
 		if (response == &amp;quot;BT-On&amp;quot; || response == &amp;quot;BT-StartingUp&amp;quot;) {&lt;br /&gt;
-			this.vcardRequest = AppAssistant.contactsService.makeVCardList(this.controller, {stripPhoneNumbers:true}, this.gotVCard.bind(this));&lt;br /&gt;
+			this.vcardRequest = AppAssistant.contactsService.makeVCardList(this.controller, {stripPhoneNumbers:true}, this.gotVCard.bind(this, &amp;quot;bluetooth&amp;quot;));&lt;br /&gt;
 			var cancelFn = function(){&lt;br /&gt;
 				this.vcardRequest.cancel();&lt;br /&gt;
 				this.vcardRequest = null;&lt;br /&gt;
@@ -494,18 +516,39 @@&lt;br /&gt;
 		}&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
-	gotVCard:function(resp){&lt;br /&gt;
-		var appArgs = {&lt;br /&gt;
-			appId:&amp;quot;com.palm.app.bluetooth&amp;quot;,&lt;br /&gt;
-			name:&amp;quot;btopp&amp;quot;&lt;br /&gt;
+	gotVCard:function(type,resp){&lt;br /&gt;
+		if (type == &amp;quot;bluetooth&amp;quot;) {&lt;br /&gt;
+			var appArgs = {&lt;br /&gt;
+				appId:&amp;quot;com.palm.app.bluetooth&amp;quot;,&lt;br /&gt;
+				name:&amp;quot;btopp&amp;quot;&lt;br /&gt;
+			}&lt;br /&gt;
+			var sceneArgs = {&lt;br /&gt;
+				file:resp.file&lt;br /&gt;
+			}&lt;br /&gt;
+			&lt;br /&gt;
+			this.sendContactsPopupAssistant.widget.mojo.close();&lt;br /&gt;
+			&lt;br /&gt;
+			this.controller.stageController.pushScene(appArgs, sceneArgs)&lt;br /&gt;
 		}&lt;br /&gt;
-		var sceneArgs = {&lt;br /&gt;
-			file:resp.file&lt;br /&gt;
+		else if (type == &amp;quot;email&amp;quot;) {&lt;br /&gt;
+			var vcfPath = resp.file;&lt;br /&gt;
+			&lt;br /&gt;
+			this.sendContactsPopupAssistant.widget.mojo.close();&lt;br /&gt;
+			&lt;br /&gt;
+			this.controller.serviceRequest('palm://com.palm.applicationManager', {&lt;br /&gt;
+				method: 'open',&lt;br /&gt;
+				parameters: {&lt;br /&gt;
+					id: 'com.palm.app.email',&lt;br /&gt;
+					params: {&lt;br /&gt;
+						summary: 'Palm Contacts',&lt;br /&gt;
+						attachments: [{&lt;br /&gt;
+							fullPath:vcfPath,&lt;br /&gt;
+							mimeType:'text/x-vcard'&lt;br /&gt;
+						}]&lt;br /&gt;
+					}&lt;br /&gt;
+				}&lt;br /&gt;
+			});&lt;br /&gt;
 		}&lt;br /&gt;
-		&lt;br /&gt;
-		this.sendContactsPopupAssistant.widget.mojo.close();&lt;br /&gt;
-		&lt;br /&gt;
-		this.controller.stageController.pushScene(appArgs, sceneArgs)&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
 	handleListTap: function(event){&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Patch_Contacts_Send_All_via_Email&amp;diff=8348</id>
		<title>Patch Contacts Send All via Email</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Patch_Contacts_Send_All_via_Email&amp;diff=8348"/>
		<updated>2010-01-14T18:33:38Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: /* Patch Source (emailall.patch) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{template:patch}}&lt;br /&gt;
[[Image:Send_all_via_email.png|right]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This patch allows you to create a vCard file containing all your contacts, and then attach that file to an e-mail. WebOS does not offer a built-in way to export your contacts, so this seems to be the next best thing.&lt;br /&gt;
&lt;br /&gt;
===Patch Source (emailall.patch)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.contacts/app/controllers/list-assistant.js.orig	Thu Jan 14 13:02:13 2010&lt;br /&gt;
+++ /usr/palm/applications/com.palm.app.contacts/app/controllers/list-assistant.js	Thu Jan 14 13:22:18 2010&lt;br /&gt;
@@ -284,6 +284,9 @@&lt;br /&gt;
 				items: [Mojo.Menu.editItem,{&lt;br /&gt;
 					label:$L(&amp;quot;Send All to Car Kit&amp;quot;),&lt;br /&gt;
 					command:&amp;quot;sendcontacts&amp;quot;&lt;br /&gt;
+				}, {&lt;br /&gt;
+					label:$L(&amp;quot;Save All via Email&amp;quot;),&lt;br /&gt;
+					command:&amp;quot;emailcontacts&amp;quot;&lt;br /&gt;
 				}, prefsItem, {&lt;br /&gt;
 					label: $LL('Help'),&lt;br /&gt;
 					command: Mojo.Menu.helpCmd&lt;br /&gt;
@@ -461,6 +464,8 @@&lt;br /&gt;
 			});&lt;br /&gt;
 		}else if (event.type == Mojo.Event.command &amp;amp;&amp;amp; event.command === Mojo.Menu.prefsCmd) {&lt;br /&gt;
 			this.controller.stageController.pushScene('prefs');&lt;br /&gt;
+		}else if (event.type == Mojo.Event.command &amp;amp;&amp;amp; event.command == &amp;quot;emailcontacts&amp;quot;) {&lt;br /&gt;
+			this.emailContacts();&lt;br /&gt;
 		}else if (event.type == Mojo.Event.command &amp;amp;&amp;amp; event.command == &amp;quot;sendcontacts&amp;quot;) {&lt;br /&gt;
 			this.sendContacts();&lt;br /&gt;
 		}&lt;br /&gt;
@@ -470,6 +475,23 @@&lt;br /&gt;
 		}&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
+	emailContacts:function(){&lt;br /&gt;
+		this.vcardRequest = AppAssistant.contactsService.makeVCardList(this.controller, {&lt;br /&gt;
+				stripPhoneNumbers:false&lt;br /&gt;
+			}, this.gotVCard.bind(this, &amp;quot;email&amp;quot;));&lt;br /&gt;
+		var cancelFn = function(){&lt;br /&gt;
+			this.vcardRequest.cancel();&lt;br /&gt;
+			this.vcardRequest = null;&lt;br /&gt;
+		}.bind(this)&lt;br /&gt;
+		console.log(&amp;quot;Setting up a dialog&amp;quot;);&lt;br /&gt;
+		this.sendContactsPopupAssistant = new SendContactsPopupAssistant(this.controller, cancelFn);&lt;br /&gt;
+		this.controller.showDialog({&lt;br /&gt;
+			template: 'list/send-contact-popup',&lt;br /&gt;
+			assistant: this.sendContactsPopupAssistant,&lt;br /&gt;
+			preventCancel:true&lt;br /&gt;
+		});&lt;br /&gt;
+	},&lt;br /&gt;
+	&lt;br /&gt;
 	sendContacts:function(){&lt;br /&gt;
 		&lt;br /&gt;
 		var params = {&amp;quot;type&amp;quot;:&amp;quot;bluetooth&amp;quot;, &amp;quot;onSuccess&amp;quot;:this.bluetoothResponse.bind(this)}; &lt;br /&gt;
@@ -479,7 +501,7 @@&lt;br /&gt;
 	&lt;br /&gt;
 	bluetoothResponse:function(response){&lt;br /&gt;
 		if (response == &amp;quot;BT-On&amp;quot; || response == &amp;quot;BT-StartingUp&amp;quot;) {&lt;br /&gt;
-			this.vcardRequest = AppAssistant.contactsService.makeVCardList(this.controller, {stripPhoneNumbers:true}, this.gotVCard.bind(this));&lt;br /&gt;
+			this.vcardRequest = AppAssistant.contactsService.makeVCardList(this.controller, {stripPhoneNumbers:true}, this.gotVCard.bind(this, &amp;quot;bluetooth&amp;quot;));&lt;br /&gt;
 			var cancelFn = function(){&lt;br /&gt;
 				this.vcardRequest.cancel();&lt;br /&gt;
 				this.vcardRequest = null;&lt;br /&gt;
@@ -494,18 +516,39 @@&lt;br /&gt;
 		}&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
-	gotVCard:function(resp){&lt;br /&gt;
-		var appArgs = {&lt;br /&gt;
-			appId:&amp;quot;com.palm.app.bluetooth&amp;quot;,&lt;br /&gt;
-			name:&amp;quot;btopp&amp;quot;&lt;br /&gt;
+	gotVCard:function(type,resp){&lt;br /&gt;
+		if (type == &amp;quot;bluetooth&amp;quot;) {&lt;br /&gt;
+			var appArgs = {&lt;br /&gt;
+				appId:&amp;quot;com.palm.app.bluetooth&amp;quot;,&lt;br /&gt;
+				name:&amp;quot;btopp&amp;quot;&lt;br /&gt;
+			}&lt;br /&gt;
+			var sceneArgs = {&lt;br /&gt;
+				file:resp.file&lt;br /&gt;
+			}&lt;br /&gt;
+			&lt;br /&gt;
+			this.sendContactsPopupAssistant.widget.mojo.close();&lt;br /&gt;
+			&lt;br /&gt;
+			this.controller.stageController.pushScene(appArgs, sceneArgs)&lt;br /&gt;
 		}&lt;br /&gt;
-		var sceneArgs = {&lt;br /&gt;
-			file:resp.file&lt;br /&gt;
+		else if (type == &amp;quot;email&amp;quot;) {&lt;br /&gt;
+			var vcfPath = resp.file;&lt;br /&gt;
+			&lt;br /&gt;
+			this.sendContactsPopupAssistant.widget.mojo.close();&lt;br /&gt;
+			&lt;br /&gt;
+			this.controller.serviceRequest('palm://com.palm.applicationManager', {&lt;br /&gt;
+				method: 'open',&lt;br /&gt;
+				parameters: {&lt;br /&gt;
+					id: 'com.palm.app.email',&lt;br /&gt;
+					params: {&lt;br /&gt;
+						summary: 'Palm Contacts',&lt;br /&gt;
+						attachments: [{&lt;br /&gt;
+							fullPath:vcfPath,&lt;br /&gt;
+							mimeType:'text/x-vcard'&lt;br /&gt;
+						}]&lt;br /&gt;
+					}&lt;br /&gt;
+				}&lt;br /&gt;
+			});&lt;br /&gt;
 		}&lt;br /&gt;
-		&lt;br /&gt;
-		this.sendContactsPopupAssistant.widget.mojo.close();&lt;br /&gt;
-		&lt;br /&gt;
-		this.controller.stageController.pushScene(appArgs, sceneArgs)&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
 	handleListTap: function(event){&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=File:Send_all_via_email.png&amp;diff=8206</id>
		<title>File:Send all via email.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=File:Send_all_via_email.png&amp;diff=8206"/>
		<updated>2010-01-08T06:33:33Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Patch_Contacts_Send_All_via_Email&amp;diff=8204</id>
		<title>Patch Contacts Send All via Email</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Patch_Contacts_Send_All_via_Email&amp;diff=8204"/>
		<updated>2010-01-08T06:33:18Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{template:patch}}&lt;br /&gt;
[[Image:Send_all_via_email.png|right]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This patch allows you to create a vCard file containing all your contacts, and then attach that file to an e-mail. WebOS does not offer a built-in way to export your contacts, so this seems to be the next best thing.&lt;br /&gt;
&lt;br /&gt;
===Patch Source (emailall.patch)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.contacts/app/controllers/list-assistant.js.orig	2009-08-19 19:19:40.000000000 -0400&lt;br /&gt;
+++ /usr/palm/applications/com.palm.app.contacts/app/controllers/list-assistant.js	2010-01-08 01:11:12.380734400 -0500&lt;br /&gt;
@@ -284,6 +284,9 @@&lt;br /&gt;
 				items: [Mojo.Menu.editItem,{&lt;br /&gt;
 					label:$L(&amp;quot;Send All to Car Kit&amp;quot;),&lt;br /&gt;
 					command:&amp;quot;sendcontacts&amp;quot;&lt;br /&gt;
+				}, {&lt;br /&gt;
+					label:$L(&amp;quot;Save All via Email&amp;quot;),&lt;br /&gt;
+					command:&amp;quot;emailcontacts&amp;quot;&lt;br /&gt;
 				}, prefsItem, {&lt;br /&gt;
 					label: $LL('Help'),&lt;br /&gt;
 					command: Mojo.Menu.helpCmd&lt;br /&gt;
@@ -463,12 +466,31 @@&lt;br /&gt;
 			this.controller.stageController.pushScene('prefs');&lt;br /&gt;
 		}else if (event.type == Mojo.Event.command &amp;amp;&amp;amp; event.command == &amp;quot;sendcontacts&amp;quot;) {&lt;br /&gt;
 			this.sendContacts();&lt;br /&gt;
+		}else if (event.type == Mojo.Event.command &amp;amp;&amp;amp; event.command == &amp;quot;emailcontacts&amp;quot;) {&lt;br /&gt;
+			this.emailContacts();&lt;br /&gt;
 		}&lt;br /&gt;
 		if (event.type == Mojo.Event.commandEnable &amp;amp;&amp;amp; event.command == Mojo.Menu.prefsCmd) {&lt;br /&gt;
 			// funkay!  this is apparently how you declare you want to activate the prefs menu item&lt;br /&gt;
 			event.stopPropagation();&lt;br /&gt;
 		}&lt;br /&gt;
 	},&lt;br /&gt;
+    &lt;br /&gt;
+    emailContacts:function(){&lt;br /&gt;
+        this.vcardRequest = AppAssistant.contactsService.makeVCardList(this.controller, {&lt;br /&gt;
+                stripPhoneNumbers:false&lt;br /&gt;
+            }, this.gotVCard.bind(this, &amp;quot;email&amp;quot;));&lt;br /&gt;
+        var cancelFn = function(){&lt;br /&gt;
+            this.vcardRequest.cancel();&lt;br /&gt;
+            this.vcardRequest = null;&lt;br /&gt;
+        }.bind(this)&lt;br /&gt;
+        console.log(&amp;quot;Setting up a dialog&amp;quot;);&lt;br /&gt;
+        this.sendContactsPopupAssistant = new SendContactsPopupAssistant(this.controller, cancelFn);&lt;br /&gt;
+        this.controller.showDialog({&lt;br /&gt;
+            template: 'list/send-contact-popup',&lt;br /&gt;
+            assistant: this.sendContactsPopupAssistant,&lt;br /&gt;
+            preventCancel:true&lt;br /&gt;
+        });&lt;br /&gt;
+	},&lt;br /&gt;
 	&lt;br /&gt;
 	sendContacts:function(){&lt;br /&gt;
 		&lt;br /&gt;
@@ -479,7 +501,7 @@&lt;br /&gt;
 	&lt;br /&gt;
 	bluetoothResponse:function(response){&lt;br /&gt;
 		if (response == &amp;quot;BT-On&amp;quot; || response == &amp;quot;BT-StartingUp&amp;quot;) {&lt;br /&gt;
-			this.vcardRequest = AppAssistant.contactsService.makeVCardList(this.controller, {stripPhoneNumbers:true}, this.gotVCard.bind(this));&lt;br /&gt;
+			this.vcardRequest = AppAssistant.contactsService.makeVCardList(this.controller, {stripPhoneNumbers:true}, this.gotVCard.bind(this, &amp;quot;bluetooth&amp;quot;));&lt;br /&gt;
 			var cancelFn = function(){&lt;br /&gt;
 				this.vcardRequest.cancel();&lt;br /&gt;
 				this.vcardRequest = null;&lt;br /&gt;
@@ -494,18 +516,39 @@&lt;br /&gt;
 		}&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
-	gotVCard:function(resp){&lt;br /&gt;
-		var appArgs = {&lt;br /&gt;
-			appId:&amp;quot;com.palm.app.bluetooth&amp;quot;,&lt;br /&gt;
-			name:&amp;quot;btopp&amp;quot;&lt;br /&gt;
-		}&lt;br /&gt;
-		var sceneArgs = {&lt;br /&gt;
-			file:resp.file&lt;br /&gt;
-		}&lt;br /&gt;
-		&lt;br /&gt;
-		this.sendContactsPopupAssistant.widget.mojo.close();&lt;br /&gt;
-		&lt;br /&gt;
-		this.controller.stageController.pushScene(appArgs, sceneArgs)&lt;br /&gt;
+	gotVCard:function(type, resp){&lt;br /&gt;
+        if (type == &amp;quot;bluetooth&amp;quot;) {&lt;br /&gt;
+            var appArgs = {&lt;br /&gt;
+                appId:&amp;quot;com.palm.app.bluetooth&amp;quot;,&lt;br /&gt;
+                name:&amp;quot;btopp&amp;quot;&lt;br /&gt;
+            }&lt;br /&gt;
+            var sceneArgs = {&lt;br /&gt;
+                file:resp.file&lt;br /&gt;
+            }&lt;br /&gt;
+            &lt;br /&gt;
+            this.sendContactsPopupAssistant.widget.mojo.close();&lt;br /&gt;
+            &lt;br /&gt;
+            this.controller.stageController.pushScene(appArgs, sceneArgs)&lt;br /&gt;
+        }&lt;br /&gt;
+        else if (type == &amp;quot;email&amp;quot;) {&lt;br /&gt;
+            var vcfPath = resp.file;&lt;br /&gt;
+            &lt;br /&gt;
+            this.sendContactsPopupAssistant.widget.mojo.close();&lt;br /&gt;
+            &lt;br /&gt;
+            this.controller.serviceRequest('palm://com.palm.applicationManager', {&lt;br /&gt;
+			    method: 'open',&lt;br /&gt;
+			    parameters: {&lt;br /&gt;
+			        id: 'com.palm.app.email',&lt;br /&gt;
+			        params: {&lt;br /&gt;
+			            summary: 'Palm Contacts',&lt;br /&gt;
+			            attachments: [{&lt;br /&gt;
+			                fullPath:vcfPath,&lt;br /&gt;
+			                mimeType:'text/x-vcard'&lt;br /&gt;
+			            }]&lt;br /&gt;
+			        }&lt;br /&gt;
+			    }&lt;br /&gt;
+			});			&lt;br /&gt;
+        }&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
 	handleListTap: function(event){&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Portal:Patches_to_webOS&amp;diff=8195</id>
		<title>Portal:Patches to webOS</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Portal:Patches_to_webOS&amp;diff=8195"/>
		<updated>2010-01-08T06:21:54Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__notoc__&lt;br /&gt;
{{portal-header&lt;br /&gt;
|If you need info on how to properly update webOS, see [[Portal:Updating webOS Versions|Updating webOS Versions]].&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;nowiki&amp;gt;***THIS PAGE IS OUT OF DATE, PLEASE HELP IN REORGANIZING IT***&amp;lt;/nowiki&amp;gt;'''This page lists patches to webOS existing apps which modify the behavior as shipped.  '''Note''' that these patches may be version specific and may be broken by future webOS updates.  Proceed with caution. If you get one that works please move it under the correct column, alphabetically, and title the page:&lt;br /&gt;
'''&amp;quot;Patch [application] [description]&amp;quot;''' (for application specific patches) &amp;lt;br&amp;gt;&lt;br /&gt;
'''&amp;quot;Patch webOS [description]&amp;quot;''' (for patches not part of a specific application)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each page should contain at least the basic headings&lt;br /&gt;
*1. '''Introduction''': A brief description to introduce people to the patch.&lt;br /&gt;
**1.1 '''Usage''':An explanation if it is needed on how to use the modification see Add/Delete Pages in the Launcher as an example.&lt;br /&gt;
*2. '''Editing Process''': Step by step instructions to manually edit. &lt;br /&gt;
*3. '''Patching Process''': Details for making the edits with a patch file and pointing people to the [[Applying Patches]] page if the patch is also provided in the webos-internals gitorious repository.&lt;br /&gt;
&lt;br /&gt;
For patches that aren't listed here you'll also want to check out the gitorious repository at http://gitorious.org/webos-internals/modifications/trees/master&lt;br /&gt;
&lt;br /&gt;
Please refer to '''[[MIT_Open_Source_License_-_webOS-Patches| MIT Open Source License - webOS-Patches]]''' for important information regarding patches and licensing.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-three-columns&lt;br /&gt;
|column1= &lt;br /&gt;
===webOS Update Information===&lt;br /&gt;
* [[Update 1.3.5|Update 1.3.5]]&lt;br /&gt;
* [[Update 1.3.1|Update 1.3.1]]&lt;br /&gt;
* [[Update 1.2.1|Update 1.2.1]]&lt;br /&gt;
* [[Update 1.2.0|Update 1.2]]&lt;br /&gt;
* [[Update 1.1.0|Update 1.1]]&lt;br /&gt;
* [[Update 1.0.4|Update 1.0.4]] &lt;br /&gt;
* [[Update 1.0.3|Update 1.0.3]]&lt;br /&gt;
&lt;br /&gt;
===Patches that Need Work===&lt;br /&gt;
* [[Bugs]]&lt;br /&gt;
&lt;br /&gt;
|column2=&lt;br /&gt;
===Patch Ideas to be Created or in Progress===&lt;br /&gt;
&lt;br /&gt;
* [[More_Calculator_Functions|Accessing additional built-in calculator functions]]&lt;br /&gt;
* [[Add_Ability_To_Choose_Snooze_Length|Add Ability to Choose Snooze Length]]&lt;br /&gt;
* [[Add_Icon_To_Quick_Launcher|Add an icon to the quick launcher]]&lt;br /&gt;
* [[Changing Clipboard Data From The Shell|Changing Clipboard Data from the Shell]]&lt;br /&gt;
* [[Development_%26_Tweak_Ideas | Development &amp;amp; Tweaking Ideas]]&lt;br /&gt;
* [[Longer Vibrate|Longer Vibrate]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|column3=&lt;br /&gt;
===Notes===&lt;br /&gt;
These modifications lack a patch process, please add one to the details to the page and have it added to the webOS-internals gitorious repository. Info for the repository is on [[Applying Patches]].&lt;br /&gt;
&lt;br /&gt;
*Empty&lt;br /&gt;
}}&lt;br /&gt;
{{portal-three-columns&lt;br /&gt;
|column1= &lt;br /&gt;
==Current Patches==&lt;br /&gt;
===webOS 1.3.1 OK===&lt;br /&gt;
* [[Patch Calendar Notification Repeat|Calendar: Notification Repeat]]&lt;br /&gt;
* [[Patch Calendar Snooze Duration Selection|Calendar: Snooze Duration Selection]]&lt;br /&gt;
* [[Patch Clock Add space between Snooze and Dismiss buttons|Clock: Add space between Snooze and Dismiss buttons]]&lt;br /&gt;
* ++[[Patch Contacts Send All via Email|Contacts: Send All via Email]]&lt;br /&gt;
* ++[[Patch Enable LED Notifications|Enable LED Notifications]]&lt;br /&gt;
* ++[[Patch_Email_Change_Default_Font_for_Replies-Forwards_from_Navy_to_Black|Email: Change default font on replies/forwards from dark blue to black]]&lt;br /&gt;
* [[Patch Email DeleteAll|Email: Delete All Read All]]&lt;br /&gt;
* [[Patch Email DeleteFromNotificationBar|Email: Delete from notification bar]]&lt;br /&gt;
* [[Patch Email Notification Repeat|Email: Notification Repeat]]&lt;br /&gt;
* [[Patch Change Carrier String|Change Carrier String]]&lt;br /&gt;
* [[Patch Launcher Wrap Pages|Launcher: Wrap Pages]]&lt;br /&gt;
* [[Patch Launcher Reset Scroll on Page Change|Launcher: Reset Scroll on Page Change]]&lt;br /&gt;
* [[Patch Launcher Reset to First Page|Launcher: Reset to First Page]]&lt;br /&gt;
* [[Patch Launcher Reset to Middle Page|Launcher: Reset to Middle Page]]&lt;br /&gt;
* [[Patch Messaging Notification Repeat|Messaging: Notification Repeat]]&lt;br /&gt;
* [[Patch Phone Notification Repeat|Phone: Notification Repeat]]&lt;br /&gt;
* [[Patch webOS Browser: Show All Bookmarks (Not just first 12)]]&lt;br /&gt;
* [[Patch webOS Roam Control|Roam Control]]&lt;br /&gt;
* [[Patch webOS BypassPINLock]]&lt;br /&gt;
===webOS 1.2.1 OK===&lt;br /&gt;
* ++[[Patch Browser Global Search Addons|Browser: Global Search Addons]]&lt;br /&gt;
* [[Patch Browser Delete Individual History Items|Browser: Delete Individual History Items]]&lt;br /&gt;
* [[Patch Calendar Notification Repeat|Calendar: Notification Repeat]]&lt;br /&gt;
* [[Patch Calendar Snooze Duration Selection|Calendar: Snooze Duration Selection]]&lt;br /&gt;
* [[Patch Clock Add space between Snooze and Dismiss buttons|Clock: Add space between Snooze and Dismiss buttons]]&lt;br /&gt;
* [[Patch Clock Enabling the Hidden Theme|Clock: Enabling the Hidden Theme]]&lt;br /&gt;
* ++[[Patch Clock Change Alarm Button Order|Clock: Change Alarm Button Order]]&lt;br /&gt;
* ++[[Patch Clock Change Alarm Snooze Length|Clock: Change Alarm Snooze Length]]&lt;br /&gt;
* [[Patch Camera Easy Shutter Sound Off|Camera: Easy Shutter Sound Off]] - Called: Sound Toggle - Green (and Grey)&lt;br /&gt;
** also [[Patch Camera Shutter Sound On-Off Button|Camera: Shutter Sound On-Off Button]]&lt;br /&gt;
** also [[Camera Mod Alternate Sound Disable]]&lt;br /&gt;
* [[Patch Camera Using Volume Buttons to Take a Picture|Camera: Using Volume Buttons to Take a Picture]]&lt;br /&gt;
* [[Patch Email Confirm Deletion|Email: Confirm Deletion]]&lt;br /&gt;
* [[Patch Email Change Default Font for Replies-Forwards from Navy to Black|Email: Change Default Font for Replies/Forwards from Navy to Black]]&lt;br /&gt;
* [[Patch Email DeleteAll|Email: Delete All Read All]]&lt;br /&gt;
* [[Patch Email DeleteFromNotificationBar|Email: Delete from notification bar]]&lt;br /&gt;
* [[Patch Email Enable Landscape Viewing|Email: Enable Landscape Viewing]] &lt;br /&gt;
* [[Patch Email Notification Repeat|Email: Notification Repeat]]&lt;br /&gt;
* [[Patch Launcher Add or Delete Pages|Launcher: Add/Delete Pages]]&lt;br /&gt;
* [[Patch Launcher Hide-Delete The NASCAR App|Launcher: Hide/Delete The NASCAR App]]&lt;br /&gt;
* ++[[Patch Launcher Hide Media Sync Option|Launcher: Hide Media Sync Option]]&lt;br /&gt;
* [[Patch Launcher Unhide the DeveloperMode App|Launcher: Unhide the DeveloperMode App]]&lt;br /&gt;
* [[Patch Launcher To Allow More Icons Per Row|Launcher: Allows More Icons Per Row]]&lt;br /&gt;
* [[Patch Launcher Wrap Pages|Launcher: Wrap Pages]]&lt;br /&gt;
* [[Myavatar In Messaging App|Messaging: Avatar In Messaging App]] &lt;br /&gt;
* [[Patch Messaging Character Counter|Messaging: Character Counter]]&lt;br /&gt;
* [[Patch Messaging Display Full Status Messages|Messaging: Display Full Status Messages]]&lt;br /&gt;
* [[Patch Messaging Change &amp;quot;Enter Key&amp;quot; To Create Newline|Messaging: Change &amp;quot;Enter Key&amp;quot; To Create Newline]]&lt;br /&gt;
* [[Patch Messaging Force Offline Send Without Dialog|Messaging: Force Offline Send Without Dialog]]&lt;br /&gt;
* [[Patch Messaging Forward Messages|Messaging: Forward Messages]]&lt;br /&gt;
* [[Patch Messaging Jump Forward, Backward One Word at a Time|Messaging: Jump Forward, Backward One Word at a Time]]&lt;br /&gt;
* [[Patch Messaging Landscape Orientation|Messaging: Landscape Orientation]]&lt;br /&gt;
* [[Patch Messaging New Cards For Each Conversation|Messaging: New Cards For Each Conversation]]&lt;br /&gt;
* [[Patch Messaging Adding Timestamps to All Received Messages|Messaging: Adding Timestamps to All Received Messages]] - Three Options: Builtin, Clean, and Fancy&lt;br /&gt;
* [[Patch Messaging Notification Repeat|Messaging: Notification Repeat]]&lt;br /&gt;
* [[Patch Messaging Sounds|Messaging: Message Sound]] - Called SMS Tone Per Contact&lt;br /&gt;
* ++[[Patch MediaPlayer Ignore 'A', 'An', and 'The' In Artist and Album names|Music Player: Ignore 'A', 'An', and 'The' in Artist and Album Names]]&lt;br /&gt;
* [[Patch PDF Viewer Change Orientation|PDF Viewer: Change Orientation]]&lt;br /&gt;
* [[Patch Phone Show Call Duration in the Call Log|Phone: Show Call Duration in the Call Log]]&lt;br /&gt;
* [[Patch Phone Disable Various Call Sounds|Phone: Disable Various Call Sounds]]&lt;br /&gt;
* [[Patch Phone Notification Repeat|Phone: Notification Repeat]]&lt;br /&gt;
* [[Patch Tasks Always Show Details of New Tasks|Tasks: Always Show Details of New Tasks]]&lt;br /&gt;
* ++[[Patch Youtube Landscape Orientation|Youtube: Landscape Orientation]]&lt;br /&gt;
&lt;br /&gt;
===webOS Patches===&lt;br /&gt;
* [[Patch Enable LED Notifications|Enable LED Notifications]]&lt;br /&gt;
* [[On Screen Keyboard]]&lt;br /&gt;
* [[Patch webOS Brightness|Brightness]]&lt;br /&gt;
* [[Change_the_default_notification.wav_Sound|Change the Default notification.wav Sound]] - use SMS Tone Per Contact&lt;br /&gt;
** Also [[Changes_Alert/Notification_Sounds|Changes Alert/Notification Sounds]]&lt;br /&gt;
* [[Patch webOS Changing the &amp;quot;Turn off after X&amp;quot; time|Changing the &amp;quot;Turn off after X&amp;quot; Time]]&lt;br /&gt;
* [[Patch webOS Disable Charging Event Sounds|Disable Charging Event Sounds]]&lt;br /&gt;
* [[Patch webOS Workaround for Touchstone Charging Event Problem|Workaround for Touchstone Charging Event Problem]]&lt;br /&gt;
* [[Patch webOS Add Words to AutoCorrect Dictionary|Modify AutoCorrect Dictionary]]&lt;br /&gt;
* [[Patch webOS Radio Power Switch|Radio Power Switch]]&lt;br /&gt;
* [[Patch webOS Roam Control|Roam Control]]&lt;br /&gt;
* [[Patch webOS Show Actual Battery Percentage | Show Actual Battery Percentage]]&lt;br /&gt;
* [[Patch webOS Turning Off Dialpad Noise|Turning Off Dialpad Noise]]&lt;br /&gt;
&lt;br /&gt;
|column2=&lt;br /&gt;
&lt;br /&gt;
==Previous Patches==&lt;br /&gt;
===webOS 1.2 OK===&lt;br /&gt;
++ Indicates needs to be added to the git repository. Please help add them and remove the notation when added.&lt;br /&gt;
* ++[[Patch Phone Edit Dialer Theme|Phone: Edit Dialer Theme]]&lt;br /&gt;
* [[Patch MediaPlayer Bookmarking|Music Player: Bookmarking]] only works in 1.2.1 podcast, speech, spoken word, netcast, or audiobook genres&lt;br /&gt;
&lt;br /&gt;
===Fixed in 1.2 - No longer needed===&lt;br /&gt;
* [[Patch Amazon Download Music over EVDO|Amazon: Download Music over EVDO]]&lt;br /&gt;
* [[Patch Browser Downloading Files|Browser: Downloading Files]] &lt;br /&gt;
&lt;br /&gt;
===webOS 1.1 OK===&lt;br /&gt;
* [[Patch Calendar Show All-Day Events in Month View|Calendar: Show All-Day Events in Month View]] &lt;br /&gt;
* ++[[Patch Camera 10 Second Countdown Timer|Camera: 10 Second Countdown Timer]]&lt;br /&gt;
* ++[[Patch Email Change &amp;quot;Running Late&amp;quot; Message|Email: Change &amp;quot;Running Late&amp;quot; Message]]&lt;br /&gt;
* ++[[Patch MCraig Enabling Personals Category|mCraig: Enabling Personals Category]]&lt;br /&gt;
* ++[[Patch Phone Editing the Lock Screen|Phone: Editing the Lock Screen]]&lt;br /&gt;
* ++[[Patch WebOS Bypassing Lock Screen|Unlock: Bypass the Passcode Entry Screen]]&lt;br /&gt;
&lt;br /&gt;
===Fixed in 1.1 - No longer needed===&lt;br /&gt;
* [[Patch Email Fix Broken Formatting|Email: Fix Broken Formatting for E-mails]]&lt;br /&gt;
&lt;br /&gt;
===Not 1.1 compatible===&lt;br /&gt;
* [[Patch Camera Remote View|Camera: Remote View]]&lt;br /&gt;
* [[Patch Email Fix Attachments|Email: Fix Attachments]]&lt;br /&gt;
* [[Patch Sudoku Disable Zooming|Sudoku: Disable Zooming]]&lt;br /&gt;
&lt;br /&gt;
===webOS 1.1 OK===&lt;br /&gt;
++ Indicates needs to be added to the git repository. Please help add them and remove the notation when added.&lt;br /&gt;
* ++[[Patch webOS Boot Themes|Boot Themes]]&lt;br /&gt;
* ++[[Patch webOS Bypassing Activation|Bypassing Activation]]&lt;br /&gt;
* ++[[Patch webOS CPU Frequency or Voltage Scaling|CPU Frequency or Voltage Scaling]]&lt;br /&gt;
* ++[[Patch webOS GPS Tracking|GPS Tracking]]&lt;br /&gt;
* ++[[Patch webOS Graphics|Graphics]]&lt;br /&gt;
* ++[[Patch webOS Hourly Chime|Hourly Chime]] &lt;br /&gt;
* ++[[Patch webOS Keep Phone Awake While in Remote Session|Keep Phone Awake While in Remote Session]]&lt;br /&gt;
* [[Patch webOS Logging Information from Within Scripts|Logging Information from Within Scripts]]&lt;br /&gt;
* [[Patch webOS Modifying a Stock App While Keeping the Original|Modifying a Stock App While Keeping the Original]] &lt;br /&gt;
* ++[[Patch webOS Random Wallpaper Switching|Random Wallpaper Switching]]&lt;br /&gt;
* [[Patch webOS Reverse Tunnel|Reverse Tunnel]] &lt;br /&gt;
* [[Screenlock On When Connected|Stay On While Connected]]&lt;br /&gt;
* [[Make USB Partition Writable via SFTP|Make USB Partition writable via SFTP]]&lt;br /&gt;
&lt;br /&gt;
===Fixed in 1.1 - No longer needed===&lt;br /&gt;
* Empty&lt;br /&gt;
&lt;br /&gt;
===Not 1.1 compatible===&lt;br /&gt;
* [[Patch webOS Email App Patch to Prompt for IPK Installation|Email App Patch to Prompt for IPK Installation]] &lt;br /&gt;
&lt;br /&gt;
|column3=&lt;br /&gt;
==== The following have not been checked for compatibility with webOS 1.1. ====&lt;br /&gt;
* [[Browser_Plugins|Browser Plugins]]&lt;br /&gt;
* [[Photos Slideshow|Photos Slideshow]] &lt;br /&gt;
&lt;br /&gt;
==== The following are deprecated.  They have been replaced with methods which are easier or are moot in 1.1 ====&lt;br /&gt;
&lt;br /&gt;
* [[Installing Homebrew Apps With A Rooted Pre|Installing Homebrew Apps With A Linux Accessed Pre]]  &lt;br /&gt;
* [[Packaging Homebrew Apps for Stock Pre without Rooting|Packaging Homebrew Apps for Stock Pre without Accessing Linux]] &lt;br /&gt;
* [[Modifying Stock Applications|Modifying Stock Applications]] &lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Portal:Patches_to_webOS&amp;diff=8194</id>
		<title>Portal:Patches to webOS</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Portal:Patches_to_webOS&amp;diff=8194"/>
		<updated>2010-01-08T06:21:21Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__notoc__&lt;br /&gt;
{{portal-header&lt;br /&gt;
|If you need info on how to properly update webOS, see [[Portal:Updating webOS Versions|Updating webOS Versions]].&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;nowiki&amp;gt;***THIS PAGE IS OUT OF DATE, PLEASE HELP IN REORGANIZING IT***&amp;lt;/nowiki&amp;gt;'''This page lists patches to webOS existing apps which modify the behavior as shipped.  '''Note''' that these patches may be version specific and may be broken by future webOS updates.  Proceed with caution. If you get one that works please move it under the correct column, alphabetically, and title the page:&lt;br /&gt;
'''&amp;quot;Patch [application] [description]&amp;quot;''' (for application specific patches) &amp;lt;br&amp;gt;&lt;br /&gt;
'''&amp;quot;Patch webOS [description]&amp;quot;''' (for patches not part of a specific application)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each page should contain at least the basic headings&lt;br /&gt;
*1. '''Introduction''': A brief description to introduce people to the patch.&lt;br /&gt;
**1.1 '''Usage''':An explanation if it is needed on how to use the modification see Add/Delete Pages in the Launcher as an example.&lt;br /&gt;
*2. '''Editing Process''': Step by step instructions to manually edit. &lt;br /&gt;
*3. '''Patching Process''': Details for making the edits with a patch file and pointing people to the [[Applying Patches]] page if the patch is also provided in the webos-internals gitorious repository.&lt;br /&gt;
&lt;br /&gt;
For patches that aren't listed here you'll also want to check out the gitorious repository at http://gitorious.org/webos-internals/modifications/trees/master&lt;br /&gt;
&lt;br /&gt;
Please refer to '''[[MIT_Open_Source_License_-_webOS-Patches| MIT Open Source License - webOS-Patches]]''' for important information regarding patches and licensing.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-three-columns&lt;br /&gt;
|column1= &lt;br /&gt;
===webOS Update Information===&lt;br /&gt;
* [[Update 1.3.5|Update 1.3.5]]&lt;br /&gt;
* [[Update 1.3.1|Update 1.3.1]]&lt;br /&gt;
* [[Update 1.2.1|Update 1.2.1]]&lt;br /&gt;
* [[Update 1.2.0|Update 1.2]]&lt;br /&gt;
* [[Update 1.1.0|Update 1.1]]&lt;br /&gt;
* [[Update 1.0.4|Update 1.0.4]] &lt;br /&gt;
* [[Update 1.0.3|Update 1.0.3]]&lt;br /&gt;
&lt;br /&gt;
===Patches that Need Work===&lt;br /&gt;
* [[Bugs]]&lt;br /&gt;
&lt;br /&gt;
|column2=&lt;br /&gt;
===Patch Ideas to be Created or in Progress===&lt;br /&gt;
&lt;br /&gt;
* [[More_Calculator_Functions|Accessing additional built-in calculator functions]]&lt;br /&gt;
* [[Add_Ability_To_Choose_Snooze_Length|Add Ability to Choose Snooze Length]]&lt;br /&gt;
* [[Add_Icon_To_Quick_Launcher|Add an icon to the quick launcher]]&lt;br /&gt;
* [[Changing Clipboard Data From The Shell|Changing Clipboard Data from the Shell]]&lt;br /&gt;
* [[Development_%26_Tweak_Ideas | Development &amp;amp; Tweaking Ideas]]&lt;br /&gt;
* [[Longer Vibrate|Longer Vibrate]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|column3=&lt;br /&gt;
===Notes===&lt;br /&gt;
These modifications lack a patch process, please add one to the details to the page and have it added to the webOS-internals gitorious repository. Info for the repository is on [[Applying Patches]].&lt;br /&gt;
&lt;br /&gt;
*Empty&lt;br /&gt;
}}&lt;br /&gt;
{{portal-three-columns&lt;br /&gt;
|column1= &lt;br /&gt;
==Current Patches==&lt;br /&gt;
===webOS 1.3.1 OK===&lt;br /&gt;
* [[Patch Calendar Notification Repeat|Calendar: Notification Repeat]]&lt;br /&gt;
* [[Patch Calendar Snooze Duration Selection|Calendar: Snooze Duration Selection]]&lt;br /&gt;
* [[Patch Clock Add space between Snooze and Dismiss buttons|Clock: Add space between Snooze and Dismiss buttons]]&lt;br /&gt;
* ++[[Patch Contacts Export All via Email|Contacts: Export All via Email]]&lt;br /&gt;
* ++[[Patch Enable LED Notifications|Enable LED Notifications]]&lt;br /&gt;
* ++[[Patch_Email_Change_Default_Font_for_Replies-Forwards_from_Navy_to_Black|Email: Change default font on replies/forwards from dark blue to black]]&lt;br /&gt;
* [[Patch Email DeleteAll|Email: Delete All Read All]]&lt;br /&gt;
* [[Patch Email DeleteFromNotificationBar|Email: Delete from notification bar]]&lt;br /&gt;
* [[Patch Email Notification Repeat|Email: Notification Repeat]]&lt;br /&gt;
* [[Patch Change Carrier String|Change Carrier String]]&lt;br /&gt;
* [[Patch Launcher Wrap Pages|Launcher: Wrap Pages]]&lt;br /&gt;
* [[Patch Launcher Reset Scroll on Page Change|Launcher: Reset Scroll on Page Change]]&lt;br /&gt;
* [[Patch Launcher Reset to First Page|Launcher: Reset to First Page]]&lt;br /&gt;
* [[Patch Launcher Reset to Middle Page|Launcher: Reset to Middle Page]]&lt;br /&gt;
* [[Patch Messaging Notification Repeat|Messaging: Notification Repeat]]&lt;br /&gt;
* [[Patch Phone Notification Repeat|Phone: Notification Repeat]]&lt;br /&gt;
* [[Patch webOS Browser: Show All Bookmarks (Not just first 12)]]&lt;br /&gt;
* [[Patch webOS Roam Control|Roam Control]]&lt;br /&gt;
* [[Patch webOS BypassPINLock]]&lt;br /&gt;
===webOS 1.2.1 OK===&lt;br /&gt;
* ++[[Patch Browser Global Search Addons|Browser: Global Search Addons]]&lt;br /&gt;
* [[Patch Browser Delete Individual History Items|Browser: Delete Individual History Items]]&lt;br /&gt;
* [[Patch Calendar Notification Repeat|Calendar: Notification Repeat]]&lt;br /&gt;
* [[Patch Calendar Snooze Duration Selection|Calendar: Snooze Duration Selection]]&lt;br /&gt;
* [[Patch Clock Add space between Snooze and Dismiss buttons|Clock: Add space between Snooze and Dismiss buttons]]&lt;br /&gt;
* [[Patch Clock Enabling the Hidden Theme|Clock: Enabling the Hidden Theme]]&lt;br /&gt;
* ++[[Patch Clock Change Alarm Button Order|Clock: Change Alarm Button Order]]&lt;br /&gt;
* ++[[Patch Clock Change Alarm Snooze Length|Clock: Change Alarm Snooze Length]]&lt;br /&gt;
* [[Patch Camera Easy Shutter Sound Off|Camera: Easy Shutter Sound Off]] - Called: Sound Toggle - Green (and Grey)&lt;br /&gt;
** also [[Patch Camera Shutter Sound On-Off Button|Camera: Shutter Sound On-Off Button]]&lt;br /&gt;
** also [[Camera Mod Alternate Sound Disable]]&lt;br /&gt;
* [[Patch Camera Using Volume Buttons to Take a Picture|Camera: Using Volume Buttons to Take a Picture]]&lt;br /&gt;
* [[Patch Email Confirm Deletion|Email: Confirm Deletion]]&lt;br /&gt;
* [[Patch Email Change Default Font for Replies-Forwards from Navy to Black|Email: Change Default Font for Replies/Forwards from Navy to Black]]&lt;br /&gt;
* [[Patch Email DeleteAll|Email: Delete All Read All]]&lt;br /&gt;
* [[Patch Email DeleteFromNotificationBar|Email: Delete from notification bar]]&lt;br /&gt;
* [[Patch Email Enable Landscape Viewing|Email: Enable Landscape Viewing]] &lt;br /&gt;
* [[Patch Email Notification Repeat|Email: Notification Repeat]]&lt;br /&gt;
* [[Patch Launcher Add or Delete Pages|Launcher: Add/Delete Pages]]&lt;br /&gt;
* [[Patch Launcher Hide-Delete The NASCAR App|Launcher: Hide/Delete The NASCAR App]]&lt;br /&gt;
* ++[[Patch Launcher Hide Media Sync Option|Launcher: Hide Media Sync Option]]&lt;br /&gt;
* [[Patch Launcher Unhide the DeveloperMode App|Launcher: Unhide the DeveloperMode App]]&lt;br /&gt;
* [[Patch Launcher To Allow More Icons Per Row|Launcher: Allows More Icons Per Row]]&lt;br /&gt;
* [[Patch Launcher Wrap Pages|Launcher: Wrap Pages]]&lt;br /&gt;
* [[Myavatar In Messaging App|Messaging: Avatar In Messaging App]] &lt;br /&gt;
* [[Patch Messaging Character Counter|Messaging: Character Counter]]&lt;br /&gt;
* [[Patch Messaging Display Full Status Messages|Messaging: Display Full Status Messages]]&lt;br /&gt;
* [[Patch Messaging Change &amp;quot;Enter Key&amp;quot; To Create Newline|Messaging: Change &amp;quot;Enter Key&amp;quot; To Create Newline]]&lt;br /&gt;
* [[Patch Messaging Force Offline Send Without Dialog|Messaging: Force Offline Send Without Dialog]]&lt;br /&gt;
* [[Patch Messaging Forward Messages|Messaging: Forward Messages]]&lt;br /&gt;
* [[Patch Messaging Jump Forward, Backward One Word at a Time|Messaging: Jump Forward, Backward One Word at a Time]]&lt;br /&gt;
* [[Patch Messaging Landscape Orientation|Messaging: Landscape Orientation]]&lt;br /&gt;
* [[Patch Messaging New Cards For Each Conversation|Messaging: New Cards For Each Conversation]]&lt;br /&gt;
* [[Patch Messaging Adding Timestamps to All Received Messages|Messaging: Adding Timestamps to All Received Messages]] - Three Options: Builtin, Clean, and Fancy&lt;br /&gt;
* [[Patch Messaging Notification Repeat|Messaging: Notification Repeat]]&lt;br /&gt;
* [[Patch Messaging Sounds|Messaging: Message Sound]] - Called SMS Tone Per Contact&lt;br /&gt;
* ++[[Patch MediaPlayer Ignore 'A', 'An', and 'The' In Artist and Album names|Music Player: Ignore 'A', 'An', and 'The' in Artist and Album Names]]&lt;br /&gt;
* [[Patch PDF Viewer Change Orientation|PDF Viewer: Change Orientation]]&lt;br /&gt;
* [[Patch Phone Show Call Duration in the Call Log|Phone: Show Call Duration in the Call Log]]&lt;br /&gt;
* [[Patch Phone Disable Various Call Sounds|Phone: Disable Various Call Sounds]]&lt;br /&gt;
* [[Patch Phone Notification Repeat|Phone: Notification Repeat]]&lt;br /&gt;
* [[Patch Tasks Always Show Details of New Tasks|Tasks: Always Show Details of New Tasks]]&lt;br /&gt;
* ++[[Patch Youtube Landscape Orientation|Youtube: Landscape Orientation]]&lt;br /&gt;
&lt;br /&gt;
===webOS Patches===&lt;br /&gt;
* [[Patch Enable LED Notifications|Enable LED Notifications]]&lt;br /&gt;
* [[On Screen Keyboard]]&lt;br /&gt;
* [[Patch webOS Brightness|Brightness]]&lt;br /&gt;
* [[Change_the_default_notification.wav_Sound|Change the Default notification.wav Sound]] - use SMS Tone Per Contact&lt;br /&gt;
** Also [[Changes_Alert/Notification_Sounds|Changes Alert/Notification Sounds]]&lt;br /&gt;
* [[Patch webOS Changing the &amp;quot;Turn off after X&amp;quot; time|Changing the &amp;quot;Turn off after X&amp;quot; Time]]&lt;br /&gt;
* [[Patch webOS Disable Charging Event Sounds|Disable Charging Event Sounds]]&lt;br /&gt;
* [[Patch webOS Workaround for Touchstone Charging Event Problem|Workaround for Touchstone Charging Event Problem]]&lt;br /&gt;
* [[Patch webOS Add Words to AutoCorrect Dictionary|Modify AutoCorrect Dictionary]]&lt;br /&gt;
* [[Patch webOS Radio Power Switch|Radio Power Switch]]&lt;br /&gt;
* [[Patch webOS Roam Control|Roam Control]]&lt;br /&gt;
* [[Patch webOS Show Actual Battery Percentage | Show Actual Battery Percentage]]&lt;br /&gt;
* [[Patch webOS Turning Off Dialpad Noise|Turning Off Dialpad Noise]]&lt;br /&gt;
&lt;br /&gt;
|column2=&lt;br /&gt;
&lt;br /&gt;
==Previous Patches==&lt;br /&gt;
===webOS 1.2 OK===&lt;br /&gt;
++ Indicates needs to be added to the git repository. Please help add them and remove the notation when added.&lt;br /&gt;
* ++[[Patch Phone Edit Dialer Theme|Phone: Edit Dialer Theme]]&lt;br /&gt;
* [[Patch MediaPlayer Bookmarking|Music Player: Bookmarking]] only works in 1.2.1 podcast, speech, spoken word, netcast, or audiobook genres&lt;br /&gt;
&lt;br /&gt;
===Fixed in 1.2 - No longer needed===&lt;br /&gt;
* [[Patch Amazon Download Music over EVDO|Amazon: Download Music over EVDO]]&lt;br /&gt;
* [[Patch Browser Downloading Files|Browser: Downloading Files]] &lt;br /&gt;
&lt;br /&gt;
===webOS 1.1 OK===&lt;br /&gt;
* [[Patch Calendar Show All-Day Events in Month View|Calendar: Show All-Day Events in Month View]] &lt;br /&gt;
* ++[[Patch Camera 10 Second Countdown Timer|Camera: 10 Second Countdown Timer]]&lt;br /&gt;
* ++[[Patch Email Change &amp;quot;Running Late&amp;quot; Message|Email: Change &amp;quot;Running Late&amp;quot; Message]]&lt;br /&gt;
* ++[[Patch MCraig Enabling Personals Category|mCraig: Enabling Personals Category]]&lt;br /&gt;
* ++[[Patch Phone Editing the Lock Screen|Phone: Editing the Lock Screen]]&lt;br /&gt;
* ++[[Patch WebOS Bypassing Lock Screen|Unlock: Bypass the Passcode Entry Screen]]&lt;br /&gt;
&lt;br /&gt;
===Fixed in 1.1 - No longer needed===&lt;br /&gt;
* [[Patch Email Fix Broken Formatting|Email: Fix Broken Formatting for E-mails]]&lt;br /&gt;
&lt;br /&gt;
===Not 1.1 compatible===&lt;br /&gt;
* [[Patch Camera Remote View|Camera: Remote View]]&lt;br /&gt;
* [[Patch Email Fix Attachments|Email: Fix Attachments]]&lt;br /&gt;
* [[Patch Sudoku Disable Zooming|Sudoku: Disable Zooming]]&lt;br /&gt;
&lt;br /&gt;
===webOS 1.1 OK===&lt;br /&gt;
++ Indicates needs to be added to the git repository. Please help add them and remove the notation when added.&lt;br /&gt;
* ++[[Patch webOS Boot Themes|Boot Themes]]&lt;br /&gt;
* ++[[Patch webOS Bypassing Activation|Bypassing Activation]]&lt;br /&gt;
* ++[[Patch webOS CPU Frequency or Voltage Scaling|CPU Frequency or Voltage Scaling]]&lt;br /&gt;
* ++[[Patch webOS GPS Tracking|GPS Tracking]]&lt;br /&gt;
* ++[[Patch webOS Graphics|Graphics]]&lt;br /&gt;
* ++[[Patch webOS Hourly Chime|Hourly Chime]] &lt;br /&gt;
* ++[[Patch webOS Keep Phone Awake While in Remote Session|Keep Phone Awake While in Remote Session]]&lt;br /&gt;
* [[Patch webOS Logging Information from Within Scripts|Logging Information from Within Scripts]]&lt;br /&gt;
* [[Patch webOS Modifying a Stock App While Keeping the Original|Modifying a Stock App While Keeping the Original]] &lt;br /&gt;
* ++[[Patch webOS Random Wallpaper Switching|Random Wallpaper Switching]]&lt;br /&gt;
* [[Patch webOS Reverse Tunnel|Reverse Tunnel]] &lt;br /&gt;
* [[Screenlock On When Connected|Stay On While Connected]]&lt;br /&gt;
* [[Make USB Partition Writable via SFTP|Make USB Partition writable via SFTP]]&lt;br /&gt;
&lt;br /&gt;
===Fixed in 1.1 - No longer needed===&lt;br /&gt;
* Empty&lt;br /&gt;
&lt;br /&gt;
===Not 1.1 compatible===&lt;br /&gt;
* [[Patch webOS Email App Patch to Prompt for IPK Installation|Email App Patch to Prompt for IPK Installation]] &lt;br /&gt;
&lt;br /&gt;
|column3=&lt;br /&gt;
==== The following have not been checked for compatibility with webOS 1.1. ====&lt;br /&gt;
* [[Browser_Plugins|Browser Plugins]]&lt;br /&gt;
* [[Photos Slideshow|Photos Slideshow]] &lt;br /&gt;
&lt;br /&gt;
==== The following are deprecated.  They have been replaced with methods which are easier or are moot in 1.1 ====&lt;br /&gt;
&lt;br /&gt;
* [[Installing Homebrew Apps With A Rooted Pre|Installing Homebrew Apps With A Linux Accessed Pre]]  &lt;br /&gt;
* [[Packaging Homebrew Apps for Stock Pre without Rooting|Packaging Homebrew Apps for Stock Pre without Accessing Linux]] &lt;br /&gt;
* [[Modifying Stock Applications|Modifying Stock Applications]] &lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Patch_Contacts_Send_All_via_Email&amp;diff=8193</id>
		<title>Patch Contacts Send All via Email</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Patch_Contacts_Send_All_via_Email&amp;diff=8193"/>
		<updated>2010-01-08T06:19:08Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: New page: Forthcoming...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Forthcoming...&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Portal:Patches_to_webOS&amp;diff=7594</id>
		<title>Portal:Patches to webOS</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Portal:Patches_to_webOS&amp;diff=7594"/>
		<updated>2009-12-01T22:03:32Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: Clock change snooze length is different from calendar shooze duration selection&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__notoc__&lt;br /&gt;
{{portal-header&lt;br /&gt;
|If you need info on how to properly update webOS, see [[Portal:Updating webOS Versions|Updating webOS Versions]].&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;nowiki&amp;gt;***THIS PAGE IS OUT OF DATE, PLEASE HELP IN REORGANIZING IT***&amp;lt;/nowiki&amp;gt;'''This page lists patches to webOS existing apps which modify the behavior as shipped.  '''Note''' that these patches may be version specific and may be broken by future webOS updates.  Proceed with caution. If you get one that works please move it under the correct column, alphabetically, and title the page:&lt;br /&gt;
'''&amp;quot;Patch [application] [description]&amp;quot;''' (for application specific patches) &amp;lt;br&amp;gt;&lt;br /&gt;
'''&amp;quot;Patch webOS [description]&amp;quot;''' (for patches not part of a specific application)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each page should contain at least the basic headings&lt;br /&gt;
*1. '''Introduction''': A brief description to introduce people to the patch.&lt;br /&gt;
**1.1 '''Usage''':An explanation if it is needed on how to use the modification see Add/Delete Pages in the Launcher as an example.&lt;br /&gt;
*2. '''Editing Process''': Step by step instructions to manually edit. &lt;br /&gt;
*3. '''Patching Process''': Details for making the edits with a patch file and pointing people to the [[Applying Patches]] page if the patch is also provided in the webos-internals gitorious repository.&lt;br /&gt;
&lt;br /&gt;
For patches that aren't listed here you'll also want to check out the gitorious repository at http://gitorious.org/webos-internals/modifications/trees/master&lt;br /&gt;
&lt;br /&gt;
Please refer to '''[[MIT_Open_Source_License_-_webOS-Patches| MIT Open Source License - webOS-Patches]]''' for important information regarding patches and licensing.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-three-columns&lt;br /&gt;
|column1= &lt;br /&gt;
===webOS Update Information===&lt;br /&gt;
* [[Update 1.3.1|Update 1.3.1]]&lt;br /&gt;
* [[Update 1.2.1|Update 1.2.1]]&lt;br /&gt;
* [[Update 1.2.0|Update 1.2]]&lt;br /&gt;
* [[Update 1.1.0|Update 1.1]]&lt;br /&gt;
* [[Update 1.0.4|Update 1.0.4]] &lt;br /&gt;
* [[Update 1.0.3|Update 1.0.3]]&lt;br /&gt;
&lt;br /&gt;
===Patches that Need Work===&lt;br /&gt;
* [[Bugs]]&lt;br /&gt;
&lt;br /&gt;
|column2=&lt;br /&gt;
===Patch Ideas to be Created or in Progress===&lt;br /&gt;
&lt;br /&gt;
* [[More_Calculator_Functions|Accessing additional built-in calculator functions]]&lt;br /&gt;
* [[Add_Ability_To_Choose_Snooze_Length|Add Ability to Choose Snooze Length]]&lt;br /&gt;
* [[Add_Icon_To_Quick_Launcher|Add an icon to the quick launcher]]&lt;br /&gt;
* [[Changing Clipboard Data From The Shell|Changing Clipboard Data from the Shell]]&lt;br /&gt;
* [[Development_%26_Tweak_Ideas | Development &amp;amp; Tweaking Ideas]]&lt;br /&gt;
* [[Longer Vibrate|Longer Vibrate]]&lt;br /&gt;
* [[Remove/Reduce Drag Radius]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|column3=&lt;br /&gt;
===Notes===&lt;br /&gt;
These modifications lack a patch process, please add one to the details to the page and have it added to the webOS-internals gitorious repository. Info for the repository is on [[Applying Patches]].&lt;br /&gt;
&lt;br /&gt;
*Empty&lt;br /&gt;
}}&lt;br /&gt;
{{portal-three-columns&lt;br /&gt;
|column1= &lt;br /&gt;
==Current Patches==&lt;br /&gt;
===webOS 1.3.1 OK===&lt;br /&gt;
* [[Patch Calendar Notification Repeat|Calendar: Notification Repeat]]&lt;br /&gt;
* [[Patch Calendar Snooze Duration Selection|Calendar: Snooze Duration Selection]]&lt;br /&gt;
* [[Patch Clock Add space between Snooze and Dismiss buttons|Clock: Add space between Snooze and Dismiss buttons]]&lt;br /&gt;
* ++[[Patch Enable LED Notifications|Enable LED Notifications]]&lt;br /&gt;
* ++[[Patch_Email_Change_Default_Font_for_Replies-Forwards_from_Navy_to_Black|Email: Change default font on replies/forwards from dark blue to black]]&lt;br /&gt;
* [[Patch Email DeleteAll|Email: Delete All Read All]]&lt;br /&gt;
* [[Patch Email DeleteFromNotificationBar|Email: Delete from notification bar]]&lt;br /&gt;
* [[Patch Email Notification Repeat|Email: Notification Repeat]]&lt;br /&gt;
* [[Patch Change Carrier String|Change Carrier String]]&lt;br /&gt;
* [[Patch Launcher Wrap Pages|Launcher: Wrap Pages]]&lt;br /&gt;
* [[Patch Launcher Reset Scroll on Page Change|Launcher: Reset Scroll on Page Change]]&lt;br /&gt;
* ++[[Patch Launcher Reset to First Page|Launcher: Reset to First Page]]&lt;br /&gt;
* ++[[Patch Launcher Reset to Middle Page|Launcher: Reset to Middle Page]]&lt;br /&gt;
* [[Patch Messaging Notification Repeat|Messaging: Notification Repeat]]&lt;br /&gt;
* [[Patch Phone Notification Repeat|Phone: Notification Repeat]]&lt;br /&gt;
* [[Patch webOS Browser: Show All Bookmarks (Not just first 12)]]&lt;br /&gt;
* [[Patch webOS Roam Control|Roam Control]]&lt;br /&gt;
* [[Patch webOS BypassPINLock]]&lt;br /&gt;
===webOS 1.2.1 OK===&lt;br /&gt;
* ++[[Patch Browser Global Search Addons|Browser: Global Search Addons]]&lt;br /&gt;
* [[Patch Browser Delete Individual History Items|Browser: Delete Individual History Items]]&lt;br /&gt;
* [[Patch Calendar Notification Repeat|Calendar: Notification Repeat]]&lt;br /&gt;
* [[Patch Calendar Snooze Duration Selection|Calendar: Snooze Duration Selection]]&lt;br /&gt;
* [[Patch Clock Add space between Snooze and Dismiss buttons|Clock: Add space between Snooze and Dismiss buttons]]&lt;br /&gt;
* [[Patch Clock Enabling the Hidden Theme|Clock: Enabling the Hidden Theme]]&lt;br /&gt;
* ++[[Patch Clock Change Alarm Button Order|Clock: Change Alarm Button Order]]&lt;br /&gt;
* ++[[Patch Clock Change Alarm Snooze Length|Clock: Change Alarm Snooze Length]]&lt;br /&gt;
* [[Patch Camera Easy Shutter Sound Off|Camera: Easy Shutter Sound Off]] - Called: Sound Toggle - Green (and Grey)&lt;br /&gt;
** also [[Patch Camera Shutter Sound On-Off Button|Camera: Shutter Sound On-Off Button]]&lt;br /&gt;
** also [[Camera Mod Alternate Sound Disable]]&lt;br /&gt;
* [[Patch Camera Using Volume Buttons to Take a Picture|Camera: Using Volume Buttons to Take a Picture]]&lt;br /&gt;
* [[Patch Email Confirm Deletion|Email: Confirm Deletion]]&lt;br /&gt;
* [[Patch Email Change Default Font for Replies-Forwards from Navy to Black|Email: Change Default Font for Replies/Forwards from Navy to Black]]&lt;br /&gt;
* [[Patch Email DeleteAll|Email: Delete All Read All]]&lt;br /&gt;
* [[Patch Email DeleteFromNotificationBar|Email: Delete from notification bar]]&lt;br /&gt;
* [[Patch Email Enable Landscape Viewing|Email: Enable Landscape Viewing]] &lt;br /&gt;
* [[Patch Email Notification Repeat|Email: Notification Repeat]]&lt;br /&gt;
* [[Patch Launcher Add or Delete Pages|Launcher: Add/Delete Pages]]&lt;br /&gt;
* [[Patch Launcher Hide-Delete The NASCAR App|Launcher: Hide/Delete The NASCAR App]]&lt;br /&gt;
* ++[[Patch Launcher Hide Media Sync Option|Launcher: Hide Media Sync Option]]&lt;br /&gt;
* [[Patch Launcher Unhide the DeveloperMode App|Launcher: Unhide the DeveloperMode App]]&lt;br /&gt;
* [[Patch Launcher To Allow More Icons Per Row|Launcher: Allows More Icons Per Row]]&lt;br /&gt;
* [[Patch Launcher Wrap Pages|Launcher: Wrap Pages]]&lt;br /&gt;
* [[Myavatar In Messaging App|Messaging: Avatar In Messaging App]] &lt;br /&gt;
* [[Patch Messaging Character Counter|Messaging: Character Counter]]&lt;br /&gt;
* [[Patch Messaging Display Full Status Messages|Messaging: Display Full Status Messages]]&lt;br /&gt;
* [[Patch Messaging Change &amp;quot;Enter Key&amp;quot; To Create Newline|Messaging: Change &amp;quot;Enter Key&amp;quot; To Create Newline]]&lt;br /&gt;
* [[Patch Messaging Force Offline Send Without Dialog|Messaging: Force Offline Send Without Dialog]]&lt;br /&gt;
* [[Patch Messaging Forward Messages|Messaging: Forward Messages]]&lt;br /&gt;
* [[Patch Messaging Jump Forward, Backward One Word at a Time|Messaging: Jump Forward, Backward One Word at a Time]]&lt;br /&gt;
* [[Patch Messaging Landscape Orientation|Messaging: Landscape Orientation]]&lt;br /&gt;
* [[Patch Messaging New Cards For Each Conversation|Messaging: New Cards For Each Conversation]]&lt;br /&gt;
* [[Patch Messaging Adding Timestamps to All Received Messages|Messaging: Adding Timestamps to All Received Messages]] - Three Options: Builtin, Clean, and Fancy&lt;br /&gt;
* [[Patch Messaging Notification Repeat|Messaging: Notification Repeat]]&lt;br /&gt;
* [[Patch Messaging Sounds|Messaging: Message Sound]] - Called SMS Tone Per Contact&lt;br /&gt;
* ++[[Patch MediaPlayer Ignore 'A', 'An', and 'The' In Artist and Album names|Music Player: Ignore 'A', 'An', and 'The' in Artist and Album Names]]&lt;br /&gt;
* [[Patch PDF Viewer Change Orientation|PDF Viewer: Change Orientation]]&lt;br /&gt;
* [[Patch Phone Show Call Duration in the Call Log|Phone: Show Call Duration in the Call Log]]&lt;br /&gt;
* [[Patch Phone Disable Various Call Sounds|Phone: Disable Various Call Sounds]]&lt;br /&gt;
* [[Patch Phone Notification Repeat|Phone: Notification Repeat]]&lt;br /&gt;
* [[Patch Tasks Always Show Details of New Tasks|Tasks: Always Show Details of New Tasks]]&lt;br /&gt;
* ++[[Patch Youtube Landscape Orientation|Youtube: Landscape Orientation]]&lt;br /&gt;
&lt;br /&gt;
===webOS Patches===&lt;br /&gt;
* [[Patch Enable LED Notifications|Enable LED Notifications]]&lt;br /&gt;
* [[On Screen Keyboard]]&lt;br /&gt;
* [[Patch webOS Brightness|Brightness]]&lt;br /&gt;
* [[Change_the_default_notification.wav_Sound|Change the Default notification.wav Sound]] - use SMS Tone Per Contact&lt;br /&gt;
** Also [[Changes_Alert/Notification_Sounds|Changes Alert/Notification Sounds]]&lt;br /&gt;
* [[Patch webOS Changing the &amp;quot;Turn off after X&amp;quot; time|Changing the &amp;quot;Turn off after X&amp;quot; Time]]&lt;br /&gt;
* [[Patch webOS Disable Charging Event Sounds|Disable Charging Event Sounds]]&lt;br /&gt;
* [[Patch webOS Workaround for Touchstone Charging Event Problem|Workaround for Touchstone Charging Event Problem]]&lt;br /&gt;
* [[Patch webOS Add Words to AutoCorrect Dictionary|Modify AutoCorrect Dictionary]]&lt;br /&gt;
* [[Patch webOS Radio Power Switch|Radio Power Switch]]&lt;br /&gt;
* [[Patch webOS Roam Control|Roam Control]]&lt;br /&gt;
* [[Patch webOS Show Actual Battery Percentage | Show Actual Battery Percentage]]&lt;br /&gt;
* [[Patch webOS Turning Off Dialpad Noise|Turning Off Dialpad Noise]]&lt;br /&gt;
&lt;br /&gt;
|column2=&lt;br /&gt;
&lt;br /&gt;
==Previous Patches==&lt;br /&gt;
===webOS 1.2 OK===&lt;br /&gt;
++ Indicates needs to be added to the git repository. Please help add them and remove the notation when added.&lt;br /&gt;
* ++[[Patch Phone Edit Dialer Theme|Phone: Edit Dialer Theme]]&lt;br /&gt;
* [[Patch MediaPlayer Bookmarking|Music Player: Bookmarking]] only works in 1.2.1 podcast, speech, spoken word, netcast, or audiobook genres&lt;br /&gt;
&lt;br /&gt;
===Fixed in 1.2 - No longer needed===&lt;br /&gt;
* [[Patch Amazon Download Music over EVDO|Amazon: Download Music over EVDO]]&lt;br /&gt;
* [[Patch Browser Downloading Files|Browser: Downloading Files]] &lt;br /&gt;
&lt;br /&gt;
===webOS 1.1 OK===&lt;br /&gt;
* [[Patch Calendar Show All-Day Events in Month View|Calendar: Show All-Day Events in Month View]] &lt;br /&gt;
* ++[[Patch Camera 10 Second Countdown Timer|Camera: 10 Second Countdown Timer]]&lt;br /&gt;
* ++[[Patch Email Change &amp;quot;Running Late&amp;quot; Message|Email: Change &amp;quot;Running Late&amp;quot; Message]]&lt;br /&gt;
* ++[[Patch MCraig Enabling Personals Category|mCraig: Enabling Personals Category]]&lt;br /&gt;
* ++[[Patch Phone Editing the Lock Screen|Phone: Editing the Lock Screen]]&lt;br /&gt;
* ++[[Patch WebOS Bypassing Lock Screen|Unlock: Bypass the Passcode Entry Screen]]&lt;br /&gt;
&lt;br /&gt;
===Fixed in 1.1 - No longer needed===&lt;br /&gt;
* [[Patch Email Fix Broken Formatting|Email: Fix Broken Formatting for E-mails]]&lt;br /&gt;
&lt;br /&gt;
===Not 1.1 compatible===&lt;br /&gt;
* [[Patch Camera Remote View|Camera: Remote View]]&lt;br /&gt;
* [[Patch Email Fix Attachments|Email: Fix Attachments]]&lt;br /&gt;
* [[Patch Sudoku Disable Zooming|Sudoku: Disable Zooming]]&lt;br /&gt;
&lt;br /&gt;
===webOS 1.1 OK===&lt;br /&gt;
++ Indicates needs to be added to the git repository. Please help add them and remove the notation when added.&lt;br /&gt;
* ++[[Patch webOS Boot Themes|Boot Themes]]&lt;br /&gt;
* ++[[Patch webOS Bypassing Activation|Bypassing Activation]]&lt;br /&gt;
* ++[[Patch webOS CPU Frequency or Voltage Scaling|CPU Frequency or Voltage Scaling]]&lt;br /&gt;
* ++[[Patch webOS GPS Tracking|GPS Tracking]]&lt;br /&gt;
* ++[[Patch webOS Graphics|Graphics]]&lt;br /&gt;
* ++[[Patch webOS Hourly Chime|Hourly Chime]] &lt;br /&gt;
* ++[[Patch webOS Keep Phone Awake While in Remote Session|Keep Phone Awake While in Remote Session]]&lt;br /&gt;
* [[Patch webOS Logging Information from Within Scripts|Logging Information from Within Scripts]]&lt;br /&gt;
* [[Patch webOS Modifying a Stock App While Keeping the Original|Modifying a Stock App While Keeping the Original]] &lt;br /&gt;
* ++[[Patch webOS Random Wallpaper Switching|Random Wallpaper Switching]]&lt;br /&gt;
* [[Patch webOS Reverse Tunnel|Reverse Tunnel]] &lt;br /&gt;
* [[Screenlock On When Connected|Stay On While Connected]]&lt;br /&gt;
* [[Make USB Partition Writable via SFTP|Make USB Partition writable via SFTP]]&lt;br /&gt;
&lt;br /&gt;
===Fixed in 1.1 - No longer needed===&lt;br /&gt;
* Empty&lt;br /&gt;
&lt;br /&gt;
===Not 1.1 compatible===&lt;br /&gt;
* [[Patch webOS Email App Patch to Prompt for IPK Installation|Email App Patch to Prompt for IPK Installation]] &lt;br /&gt;
&lt;br /&gt;
|column3=&lt;br /&gt;
==== The following have not been checked for compatibility with webOS 1.1. ====&lt;br /&gt;
* [[Browser_Plugins|Browser Plugins]]&lt;br /&gt;
* [[Photos Slideshow|Photos Slideshow]] &lt;br /&gt;
&lt;br /&gt;
==== The following are deprecated.  They have been replaced with methods which are easier or are moot in 1.1 ====&lt;br /&gt;
&lt;br /&gt;
* [[Installing Homebrew Apps With A Rooted Pre|Installing Homebrew Apps With A Linux Accessed Pre]]  &lt;br /&gt;
* [[Packaging Homebrew Apps for Stock Pre without Rooting|Packaging Homebrew Apps for Stock Pre without Accessing Linux]] &lt;br /&gt;
* [[Modifying Stock Applications|Modifying Stock Applications]] &lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Portal:Patches_to_webOS&amp;diff=6210</id>
		<title>Portal:Patches to webOS</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Portal:Patches_to_webOS&amp;diff=6210"/>
		<updated>2009-10-05T16:29:50Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__notoc__&lt;br /&gt;
{{portal-header&lt;br /&gt;
|This page lists patches to webOS existing apps which modify the behavior as shipped.  '''Note''' that these patches may be version specific and may be broken by future webOS updates.  Proceed with caution. If you get one that works please move it under the correct column, alphabetically, and title the page:&lt;br /&gt;
'''&amp;quot;Patch [application] [description]&amp;quot;''' (for application specific patches) &amp;lt;br&amp;gt;&lt;br /&gt;
'''&amp;quot;Patch webOS [description]&amp;quot;''' (for patches not part of a specific application)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each page should contain at least the basic headings&lt;br /&gt;
*1. '''Introduction''': A brief description to introduce people to the patch.&lt;br /&gt;
**1.1 '''Usage''':An explanation if it is needed on how to use the modification see Add/Delete Pages in the Launcher as an example.&lt;br /&gt;
*2. '''Editing Process''': Step by step instructions to manually edit. &lt;br /&gt;
*3. '''Patching Process''': Details for making the edits with a patch file and pointing people to the [[Applying Patches]] page if the patch is also provided in the webos-internals gitorious repository.&lt;br /&gt;
&lt;br /&gt;
For patches that aren't listed here you'll also want to check out the gitorious repository at http://gitorious.org/webos-internals/modifications/trees/master&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-three-columns&lt;br /&gt;
|column1= &lt;br /&gt;
===webOS Update Information===&lt;br /&gt;
* [[Update 1.2.1|Update 1.2.1]]&lt;br /&gt;
* [[Update 1.2.0|Update 1.2]]&lt;br /&gt;
* [[Update 1.1.0|Update 1.1]]&lt;br /&gt;
* [[Update 1.0.4|Update 1.0.4]] &lt;br /&gt;
* [[Update 1.0.3|Update 1.0.3]]&lt;br /&gt;
&lt;br /&gt;
===Patches that Need Work===&lt;br /&gt;
* [[Bugs]]&lt;br /&gt;
&lt;br /&gt;
|column2=&lt;br /&gt;
===Patch Ideas to be Created or in Progress===&lt;br /&gt;
&lt;br /&gt;
* [[More_Calculator_Functions|Accessing additional built-in calculator functions]]&lt;br /&gt;
* [[Add_Ability_To_Choose_Snooze_Length|Add Ability to Choose Snooze Length]]&lt;br /&gt;
* [[Add_Icon_To_Quick_Launcher|Add an icon to the quick launcher]]&lt;br /&gt;
* [[Changing Clipboard Data From The Shell|Changing Clipboard Data from the Shell]]&lt;br /&gt;
* [[Development_%26_Tweak_Ideas | Development &amp;amp; Tweaking Ideas]]&lt;br /&gt;
* [[Longer Vibrate|Longer Vibrate]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|column3=&lt;br /&gt;
===Notes===&lt;br /&gt;
These modifications lack a patch process, please add one to the details to the page and have it added to the webOS-internals gitorious repository. Info for the repository is on [[Applying Patches]].&lt;br /&gt;
&lt;br /&gt;
*Empty&lt;br /&gt;
}}&lt;br /&gt;
{{portal-three-columns&lt;br /&gt;
|column1= &lt;br /&gt;
==Application Patches==&lt;br /&gt;
===webOS 1.2.1 OK===&lt;br /&gt;
* [[Patch Clock Enabling the Hidden Theme|Clock: Enabling the Hidden Theme]]&lt;br /&gt;
* ++[[Patch Clock Change Alarm Button Order|Clock: Change Alarm Button Order]]&lt;br /&gt;
* ++[[Patch Clock Change Alarm Snooze Length|Clock: Change Alarm Snooze Length]]&lt;br /&gt;
* ++[[Patch Email DeleteAll|Email: Delete All]]&lt;br /&gt;
* [[Patch Launcher Add or Delete Pages|Launcher: Add/Delete Pages]]&lt;br /&gt;
* [[Patch Launcher Hide-Delete The NASCAR App|Launcher: Hide/Delete The NASCAR App]]&lt;br /&gt;
&lt;br /&gt;
===webOS 1.2 OK===&lt;br /&gt;
++ Indicates needs to be added to the git repository. Please help add them and remove the notation when added.&lt;br /&gt;
&lt;br /&gt;
* ++[[Patch Browser Global Search Addons|Browser: Global Search Addons]]&lt;br /&gt;
* ++[[Patch Camera Easy Shutter Sound Off|Camera: Easy Shutter Sound Off]]&lt;br /&gt;
* [[Patch Camera Shutter Sound On-Off Button|Camera: Shutter Sound On-Off Button]]&lt;br /&gt;
* [[Patch Clock Enabling the Hidden Theme|Clock: Enabling the Hidden Theme]]&lt;br /&gt;
* [[Patch Email Confirm Deletion|Email: Confirm Deletion]]&lt;br /&gt;
* [[Patch Email Change Default Font for Replies-Forwards from Navy to Black|Email: Change Default Font for Replies/Forwards from Navy to Black]]&lt;br /&gt;
* [[Patch Email DeleteAll|Email: Delete All]]&lt;br /&gt;
* [[Patch Launcher Add or Delete Pages|Launcher: Add/Delete Pages]]&lt;br /&gt;
* [[Patch Launcher Hide-Delete The NASCAR App|Launcher: Hide/Delete The NASCAR App]]&lt;br /&gt;
* ++[[Patch Launcher Hide Media Sync Option|Launcher: Hide Media Sync Option]]&lt;br /&gt;
* [[Patch Launcher Reset Scroll on Page Change|Launcher: Reset Scroll on Page Change]]&lt;br /&gt;
* [[Patch Launcher Unhide the DeveloperMode App|Launcher: Unhide the DeveloperMode App]]&lt;br /&gt;
* [[Patch Launcher To Allow More Icons Per Row|Launcher: Allows More Icons Per Row]]&lt;br /&gt;
* [[Patch Messaging Character Counter|Messaging: Character Counter]]&lt;br /&gt;
* ++[[Patch Messaging Display Full Status Messages|Messaging: Display Full Status Messages]] &lt;br /&gt;
* [[Patch Messaging Change &amp;quot;Enter Key&amp;quot; To Create Newline|Messaging: Change &amp;quot;Enter Key&amp;quot; To Create Newline]]&lt;br /&gt;
* [[Patch Messaging New Cards For Each Conversation|Messaging: New Cards For Each Conversation]]&lt;br /&gt;
* [[Patch Messaging Adding Timestamps to All Received Messages|Messaging: Adding Timestamps to All Received Messages]]&lt;br /&gt;
* ++[[Patch MediaPlayer Ignore 'A', 'An', and 'The' In Artist and Album names|Music Player: Ignore 'A', 'An', and 'The' in Artist and Album Names]]&lt;br /&gt;
* ++[[Patch Phone Edit Dialer Theme|Phone: Edit Dialer Theme]]&lt;br /&gt;
* ++[[Patch Phone Show Call Duration in the Call Log|Phone: Show Call Duration in the Call Log]]&lt;br /&gt;
* [[Patch Tasks Always Show Details of New Tasks|Tasks: Always Show Details of New Tasks]]&lt;br /&gt;
&lt;br /&gt;
===Fixed in 1.2 - No longer needed===&lt;br /&gt;
* [[Patch Amazon Download Music over EVDO|Amazon: Download Music over EVDO]]&lt;br /&gt;
* [[Patch Browser Downloading Files|Browser: Downloading Files]] &lt;br /&gt;
* [[Patch MediaPlayer Bookmarking|Music Player: Bookmarking - Works in 1.2 for podcast, speech, spoken word, netcast, or audiobook genre tags only]]&lt;br /&gt;
&lt;br /&gt;
===webOS 1.1 OK===&lt;br /&gt;
&lt;br /&gt;
* [[Patch Browser Delete Individual History Items|Browser: Delete Individual History Items]]&lt;br /&gt;
* [[Patch Calendar Show All-Day Events in Month View|Calendar: Show All-Day Events in Month View]] &lt;br /&gt;
* ++[[Patch Camera 10 Second Countdown Timer|Camera: 10 Second Countdown Timer]]&lt;br /&gt;
* [[Patch Camera Using Volume Buttons to Take a Picture|Camera: Using Volume Buttons to Take a Picture]]&lt;br /&gt;
* ++[[Patch Email Change &amp;quot;Running Late&amp;quot; Message|Email: Change &amp;quot;Running Late&amp;quot; Message]]&lt;br /&gt;
* [[Patch Email DeleteAll|Email: Delete All]]&lt;br /&gt;
* ++[[Patch Messaging Force Offline Send Without Dialog|Messaging: Force Offline Send Without Dialog]]&lt;br /&gt;
* [[Patch Messaging Forward Messages|Messaging: Forward Messages]]&lt;br /&gt;
* [[Patch Messaging Jump Forward, Backward One Word at a Time|Messaging: Jump Forward, Backward One Word at a Time]]&lt;br /&gt;
* [[Patch Messaging Landscape Orientation|Messaging: Landscape Orientation]]&lt;br /&gt;
* [[Patch Messaging Sounds|Messaging: Message Sound]]&lt;br /&gt;
* ++[[Patch MCraig Enabling Personals Category|mCraig: Enabling Personals Category]]&lt;br /&gt;
* ++[[Patch PDF Viewer Change Orientation|PDF Viewer: Change Orientation]]&lt;br /&gt;
* [[Patch Phone Disable Various Call Sounds|Phone: Disable Various Call Sounds]]&lt;br /&gt;
* ++[[Patch Phone Editing the Lock Screen|Phone: Editing the Lock Screen]]&lt;br /&gt;
* [[Patch Tasks Always Show Details of New Tasks|Tasks: Always Show Details of New Tasks]]&lt;br /&gt;
* ++[[Patch WebOS Bypassing Lock Screen|Unlock: Bypass the Passcode Entry Screen]]&lt;br /&gt;
&lt;br /&gt;
===Fixed in 1.1 - No longer needed===&lt;br /&gt;
* [[Patch Email Fix Broken Formatting|Email: Fix Broken Formatting for E-mails]]&lt;br /&gt;
&lt;br /&gt;
===Not 1.1 compatible===&lt;br /&gt;
* [[Patch Camera Remote View|Camera: Remote View]]&lt;br /&gt;
* [[Patch Email Enable Landscape Viewing|Email: Enable Landscape Viewing]] &lt;br /&gt;
* [[Patch Email Fix Attachments|Email: Fix Attachments]]&lt;br /&gt;
* [[Patch Sudoku Disable Zooming|Sudoku: Disable Zooming]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
|column2=&lt;br /&gt;
==General Patches==&lt;br /&gt;
===webOS 1.2 OK===&lt;br /&gt;
* [[Patch Enable LED Notifications|Enable LED Notifications]]&lt;br /&gt;
* [[On Screen Keyboard]]&lt;br /&gt;
* [[Patch webOS Disable Charging Event Sounds|Disable Charging Event Sounds]]&lt;br /&gt;
* [[Patch webOS Turning Off Dialpad Noise|Turning Off Dialpad Noise]]&lt;br /&gt;
* [[Patch webOS Add Words to AutoCorrect Dictionary|Modify AutoCorrect Dictionary]]&lt;br /&gt;
* [[Patch webOS Roam Control|Roam Control]]&lt;br /&gt;
&lt;br /&gt;
===webOS 1.1 OK===&lt;br /&gt;
&lt;br /&gt;
++ Indicates needs to be added to the git repository. Please help add them and remove the notation when added.&lt;br /&gt;
&lt;br /&gt;
* ++[[Patch webOS Boot Themes|Boot Themes]]&lt;br /&gt;
* ++[[Patch webOS Brightness|Brightness]]&lt;br /&gt;
* ++[[Patch webOS Bypassing Activation|Bypassing Activation]]&lt;br /&gt;
* ++[[Patch webOS Change Carrier String|Change Carrier String]]&lt;br /&gt;
* ++[[Change_the_default_notification.wav_Sound|Change the Default notification.wav Sound]]&lt;br /&gt;
* [[Patch webOS Changing the &amp;quot;Turn off after X&amp;quot; time|Changing the &amp;quot;Turn off after X&amp;quot; Time]]&lt;br /&gt;
* ++[[Patch webOS CPU Frequency or Voltage Scaling|CPU Frequency or Voltage Scaling]]&lt;br /&gt;
* ++[[Patch webOS GPS Tracking|GPS Tracking]]&lt;br /&gt;
* ++[[Patch webOS Graphics|Graphics]]&lt;br /&gt;
* ++[[Patch webOS Hourly Chime|Hourly Chime]] &lt;br /&gt;
* ++[[Patch webOS Keep Phone Awake While in Remote Session|Keep Phone Awake While in Remote Session]]&lt;br /&gt;
* [[Patch webOS Logging Information from Within Scripts|Logging Information from Within Scripts]]&lt;br /&gt;
* [[Patch webOS Modifying a Stock App While Keeping the Original|Modifying a Stock App While Keeping the Original]] &lt;br /&gt;
* [[Patch webOS Radio Power Switch|Radio Power Switch]]&lt;br /&gt;
* ++[[Patch webOS Random Wallpaper Switching|Random Wallpaper Switching]]&lt;br /&gt;
* [[Patch webOS Reverse Tunnel|Reverse Tunnel]] &lt;br /&gt;
* [[Patch webOS Show Actual Battery Percentage | Show Actual Battery Percentage]]&lt;br /&gt;
* [[Screenlock On When Connected|Stay On While Connected]]&lt;br /&gt;
* [[Make USB Partition Writable via SFTP|Make USB Partition writable via SFTP]]&lt;br /&gt;
&lt;br /&gt;
===Fixed in 1.1 - No longer needed===&lt;br /&gt;
* Empty&lt;br /&gt;
&lt;br /&gt;
===Not 1.1 compatible===&lt;br /&gt;
* [[Patch webOS Email App Patch to Prompt for IPK Installation|Email App Patch to Prompt for IPK Installation]] &lt;br /&gt;
&lt;br /&gt;
|column3=&lt;br /&gt;
==== The following have not been checked for compatibility with webOS 1.1. ====&lt;br /&gt;
&lt;br /&gt;
* [[Browser_Plugins|Browser Plugins]]&lt;br /&gt;
* [[Camera Mod Alternate Sound Disable]]&lt;br /&gt;
* [[Changes_Alert/Notification_Sounds|Changes Alert/Notification Sounds]]&lt;br /&gt;
* [[Myavatar In Messaging App|Myavatar In Messaging App]] &lt;br /&gt;
* [[Photos Slideshow|Photos Slideshow]] &lt;br /&gt;
&lt;br /&gt;
==== The following are deprecated.  They have been replaced with methods which are easier or are moot in 1.1 ====&lt;br /&gt;
&lt;br /&gt;
* [[Installing Homebrew Apps With A Rooted Pre|Installing Homebrew Apps With A Linux Accessed Pre]]  &lt;br /&gt;
* [[Packaging Homebrew Apps for Stock Pre without Rooting|Packaging Homebrew Apps for Stock Pre without Accessing Linux]] &lt;br /&gt;
* [[Modifying Stock Applications|Modifying Stock Applications]] &lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Patch_Clock_Change_Alarm_Snooze_Length&amp;diff=6209</id>
		<title>Patch Clock Change Alarm Snooze Length</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Patch_Clock_Change_Alarm_Snooze_Length&amp;diff=6209"/>
		<updated>2009-10-05T16:27:18Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: New page: {{template:patch}}  ==Change Alarm Snooze Length== The default snooze length for the alarm clock is 10 minutes. This patch shortens it to the minimum supported length of 5 minutes. Of cour...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{template:patch}}&lt;br /&gt;
&lt;br /&gt;
==Change Alarm Snooze Length==&lt;br /&gt;
The default snooze length for the alarm clock is 10 minutes. This patch shortens it to the minimum supported length of 5 minutes. Of course, you could use any length of time greater than 5 minutes if you prefer. This simple modification involves editing line 456 (WebOS 1.2.1) of /usr/palm/applications/com.palm.app.clock/app/models/alarm.js. Change the value of Alarm.kAlarmSnoozeDuration to whatever you like, provided it is 5 minutes or longer (seems to be a built-in limit of the service, according to Palm's comment).&lt;br /&gt;
&lt;br /&gt;
===Patch Source (snooze-length.patch)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.clock/app/models/alarm.js.bak	2009-07-18 01:22:36.000000000 -0400&lt;br /&gt;
+++ /usr/palm/applications/com.palm.app.clock/app/models/alarm.js	2009-10-05 12:10:09.091830000 -0400&lt;br /&gt;
@@ -453,7 +453,7 @@&lt;br /&gt;
 Alarm.kAlarmSchedulerUri = &amp;quot;luna://com.palm.power/timeout/&amp;quot;;&lt;br /&gt;
 Alarm.kAlarmLaunchUri = &amp;quot;luna://com.palm.applicationManager/launch&amp;quot;;&lt;br /&gt;
 Alarm.kAlarmLaunchParams = '{&amp;quot;id&amp;quot;:&amp;quot;com.palm.app.clock&amp;quot;,&amp;quot;params&amp;quot;:{&amp;quot;action&amp;quot;:&amp;quot;ring&amp;quot;}}';&lt;br /&gt;
-Alarm.kAlarmSnoozeDuration = &amp;quot;00:10:00&amp;quot;;&lt;br /&gt;
+Alarm.kAlarmSnoozeDuration = &amp;quot;00:05:00&amp;quot;;&lt;br /&gt;
 // Alarm.kAlarmSnoozeInterruptedDuration = &amp;quot;00:00:45&amp;quot;; service does not allow alarms less than 5 min.&lt;br /&gt;
 Alarm.kAlarmSnoozeInterruptedDuration = &amp;quot;00:05:00&amp;quot;;&lt;br /&gt;
 Alarm.kCookieAlarmSoundFile = &amp;quot;alarmsoundfile&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Patch_Clock_Change_Alarm_Button_Order&amp;diff=6208</id>
		<title>Patch Clock Change Alarm Button Order</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Patch_Clock_Change_Alarm_Button_Order&amp;diff=6208"/>
		<updated>2009-10-05T16:26:35Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{template:patch}}&lt;br /&gt;
==Change Alarm Button Order==&lt;br /&gt;
The default order for the alarm buttons is to have the 'Dismiss' button on top, and the 'Snooze' button underneath. For some, this makes it too easy to accidentally dismiss an alarm instead of snoozing it, causing them to accidentally sleep in. The file containing the look of the alarm alert is /usr/palm/applications/com.palm.app.clock/app/views/ring/ring-scene.html. Swap lines 15 and 16 (WebOS 1.2.1) to reverse the order of the buttons.&lt;br /&gt;
&lt;br /&gt;
===Patch Source (button-order.patch)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.clock/app/views/ring/ring-scene.html.bak	2009-07-18 01:22:36.000000000 -0400&lt;br /&gt;
+++ /usr/palm/applications/com.palm.app.clock/app/views/ring/ring-scene.html	2009-10-05 12:21:54.493217000 -0400&lt;br /&gt;
@@ -12,6 +12,6 @@&lt;br /&gt;
 			&amp;lt;/div&amp;gt;&lt;br /&gt;
 		&amp;lt;/div&amp;gt;&lt;br /&gt;
 	&amp;lt;/div&amp;gt;&lt;br /&gt;
-	&amp;lt;div id=&amp;quot;close_button&amp;quot; x-mojo-tap-highlight=&amp;quot;immediate&amp;quot; class=&amp;quot;palm-notification-button affirmative&amp;quot;&amp;gt;&amp;lt;span x-mojo-loc=&amp;quot;&amp;quot;&amp;gt;Dismiss&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 	&amp;lt;div id=&amp;quot;snooze_button&amp;quot; x-mojo-tap-highlight=&amp;quot;immediate&amp;quot; class=&amp;quot;palm-notification-button alternate&amp;quot;&amp;gt;&amp;lt;span x-mojo-loc=&amp;quot;&amp;quot;&amp;gt;Snooze&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
+	&amp;lt;div id=&amp;quot;close_button&amp;quot; x-mojo-tap-highlight=&amp;quot;immediate&amp;quot; class=&amp;quot;palm-notification-button affirmative&amp;quot;&amp;gt;&amp;lt;span x-mojo-loc=&amp;quot;&amp;quot;&amp;gt;Dismiss&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;                 &lt;br /&gt;
\ No newline at end of file&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Talk:Patch_Clock_Changing_Alarm_Button_Order_and_Snooze_Duration&amp;diff=6207</id>
		<title>Talk:Patch Clock Changing Alarm Button Order and Snooze Duration</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Talk:Patch_Clock_Changing_Alarm_Button_Order_and_Snooze_Duration&amp;diff=6207"/>
		<updated>2009-10-05T16:26:18Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: Talk:Patch Clock Changing Alarm Button Order and Snooze Duration moved to Talk:Patch Clock Change Alarm Button Order: Split two patches to separate pages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Talk:Patch Clock Change Alarm Button Order]]&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Talk:Patch_Clock_Change_Alarm_Button_Order&amp;diff=6206</id>
		<title>Talk:Patch Clock Change Alarm Button Order</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Talk:Patch_Clock_Change_Alarm_Button_Order&amp;diff=6206"/>
		<updated>2009-10-05T16:26:18Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: Talk:Patch Clock Changing Alarm Button Order and Snooze Duration moved to Talk:Patch Clock Change Alarm Button Order: Split two patches to separate pages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article would benefit greatly from a screenshot. [[User:Hopspitfire|hopspitfire]] 05:43, 1 August 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Patch_Clock_Changing_Alarm_Button_Order_and_Snooze_Duration&amp;diff=6205</id>
		<title>Patch Clock Changing Alarm Button Order and Snooze Duration</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Patch_Clock_Changing_Alarm_Button_Order_and_Snooze_Duration&amp;diff=6205"/>
		<updated>2009-10-05T16:26:18Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: Patch Clock Changing Alarm Button Order and Snooze Duration moved to Patch Clock Change Alarm Button Order: Split two patches to separate pages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Patch Clock Change Alarm Button Order]]&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Patch_Clock_Change_Alarm_Button_Order&amp;diff=6204</id>
		<title>Patch Clock Change Alarm Button Order</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Patch_Clock_Change_Alarm_Button_Order&amp;diff=6204"/>
		<updated>2009-10-05T16:26:18Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: Patch Clock Changing Alarm Button Order and Snooze Duration moved to Patch Clock Change Alarm Button Order: Split two patches to separate pages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{template:patch}}&lt;br /&gt;
First we change the button order.  The file containing the look of the alarm alert is /usr/palm/applications/com.palm.app.clock/app/views/ring/ring-scene.html&lt;br /&gt;
&lt;br /&gt;
Simply swap lines 15 and 16 to put the snooze button on top.&lt;br /&gt;
&lt;br /&gt;
Second we will change the alarm duration.  It is located at lines 456 and 458 of /usr/palm/applications/com.palm.app.clock/app/models/alarm.js&lt;br /&gt;
&lt;br /&gt;
The default times are below :&lt;br /&gt;
&lt;br /&gt;
 Alarm.kAlarmSnoozeDuration = &amp;quot;00:10:00&amp;quot;;&lt;br /&gt;
 Alarm.kAlarmSnoozeInterruptedDuration = &amp;quot;00:05:00&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Just change the time durations.&lt;br /&gt;
&lt;br /&gt;
Reboot&lt;br /&gt;
&lt;br /&gt;
That's all!&lt;br /&gt;
&lt;br /&gt;
Thanks to optik678 for the alarm clock modification.&lt;br /&gt;
&lt;br /&gt;
Updated by ShaneM 31-Jul-09 (1.1 OK)&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Talk:Patch_Launcher_Reset_Scroll_on_Page_Change&amp;diff=6203</id>
		<title>Talk:Patch Launcher Reset Scroll on Page Change</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Talk:Patch_Launcher_Reset_Scroll_on_Page_Change&amp;diff=6203"/>
		<updated>2009-10-05T16:17:35Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: New page: '''Anyone have any luck with this?  It's not doing a thing for me.'''  '''This is not working for me.''' Hmagoo 23:54, 2 September 2009 (UTC)  '''It works fine for me. Scro...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Anyone have any luck with this?  It's not doing a thing for me.'''&lt;br /&gt;
&lt;br /&gt;
'''This is not working for me.''' [[User:Hmagoo|Hmagoo]] 23:54, 2 September 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''It works fine for me. Scroll down on a launcher page so the first row of icons is hidden. Switch to another page, and switch back. The page will be reset back to the top.'''&lt;br /&gt;
&lt;br /&gt;
'''This is not working for me either. I have tried this code in a few different ways, and it doesn't work as described. 24 September 2009'''&lt;br /&gt;
&lt;br /&gt;
'''This patch wasn't working because getPageScroller() expects an index as an argument.  I have fixed it and will upload it to gitorious as well.''' --[[User:Egaudet|Egaudet]] 04:12, 27 September 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Patch_Launcher_Reset_Scroll_on_Page_Change&amp;diff=6202</id>
		<title>Patch Launcher Reset Scroll on Page Change</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Patch_Launcher_Reset_Scroll_on_Page_Change&amp;diff=6202"/>
		<updated>2009-10-05T16:17:26Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{template:patch}}&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
If you have many apps on a page, you may have to scroll to see some of those. The launcher maintains the scroll state (the amount you have scrolled) on each page, which means when you return to a page, you are still at the location that you last scrolled to. This can be annoying. For example, it can make it difficult to train your muscle memory because, when repeating the same steps, the app you want is not always at the same location on the screen. This patch resets the scroll of each page back to the top when it goes out of view.&lt;br /&gt;
&lt;br /&gt;
==Editing Process==&lt;br /&gt;
&lt;br /&gt;
* SSH in.&lt;br /&gt;
* Remount the filesystem as read/write:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo rootfs_open -w&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* Load launcher-assistant.js in vi:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /usr/lib/luna/system/luna-applauncher/app/controllers/launcher-assistant.js&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* Locate the onPageChange method around line 157 (line 158 in webOS 1.2):&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
onPageChange: function(event) {&lt;br /&gt;
	this.activePageIndex = event.value;&lt;br /&gt;
	this.updatePageIndicators();&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* Add the four lines below so that onPageChange now looks like the following:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
onPageChange: function(event) {&lt;br /&gt;
	var scroller = this.getPageScroller(this.activePageIndex);&lt;br /&gt;
	if (scroller &amp;amp;&amp;amp; scroller.mojo) {&lt;br /&gt;
		scroller.mojo.revealTop(0);&lt;br /&gt;
	}&lt;br /&gt;
	this.activePageIndex = event.value;&lt;br /&gt;
	this.updatePageIndicators();&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* Save the file and quit vi.&lt;br /&gt;
* Remount the filesystem as read only - this should reboot your Pre:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo rootfs_open -w&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Patch Process==&lt;br /&gt;
&lt;br /&gt;
The patch should soon be located in the webos-internals gitorious repository. Until then, you can copy and paste the source below. Visit [[Applying Patches]] for info on how to use it. To apply the patch, follow the instructions above, and after remounting the filesystem as read/write, do the following:&lt;br /&gt;
&lt;br /&gt;
* Apply the patch (In this example, I have the patch file located in my home directory under '''patches'''):&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /&lt;br /&gt;
sudo patch -p0 --backup-if-mismatch &amp;lt; ~/patches/reset-scroll.patch&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
This is what you should see if it ran properly:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
patching file /usr/lib/luna/system/luna-applauncher/app/controllers/launcher-assistant.js&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* Remount the filesystem as read only as described above.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patch Source (reset-scroll.patch)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /usr/lib/luna/system/luna-applauncher/app/controllers/launcher-assistant.js.bak	2009-05-22 17:12:34.000000000 -0400&lt;br /&gt;
+++ /usr/lib/luna/system/luna-applauncher/app/controllers/launcher-assistant.js	2009-08-21 17:19:48.426297000 -0400&lt;br /&gt;
@@ -155,6 +155,10 @@&lt;br /&gt;
 	&lt;br /&gt;
 	/* keep track of which page we are on */&lt;br /&gt;
 	onPageChange: function(event) {&lt;br /&gt;
+        var scroller = this.getPageScroller(this.activePageIndex);&lt;br /&gt;
+        if (scroller &amp;amp;&amp;amp; scroller.mojo) {&lt;br /&gt;
+            scroller.mojo.revealTop(0);&lt;br /&gt;
+        }&lt;br /&gt;
 		this.activePageIndex = event.value;&lt;br /&gt;
 		this.updatePageIndicators();&lt;br /&gt;
 	},&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Portal:Patches_to_webOS&amp;diff=6007</id>
		<title>Portal:Patches to webOS</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Portal:Patches_to_webOS&amp;diff=6007"/>
		<updated>2009-09-29T21:27:28Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__notoc__&lt;br /&gt;
{{portal-header&lt;br /&gt;
|This page lists patches to webOS existing apps which modify the behavior as shipped.  '''Note''' that these patches may be version specific and may be broken by future webOS updates.  Proceed with caution. If you get one that works please move it under the correct column, alphabetically, and title the page:&lt;br /&gt;
'''&amp;quot;Patch [application] [description]&amp;quot;''' (for application specific patches) &amp;lt;br&amp;gt;&lt;br /&gt;
'''&amp;quot;Patch webOS [description]&amp;quot;''' (for patches not part of a specific application)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each page should contain at least the basic headings&lt;br /&gt;
*1. '''Introduction''': A brief description to introduce people to the patch.&lt;br /&gt;
**1.1 '''Usage''':An explanation if it is needed on how to use the modification see Add/Delete Pages in the Launcher as an example.&lt;br /&gt;
*2. '''Editing Process''': Step by step instructions to manually edit. &lt;br /&gt;
*3. '''Patching Process''': Details for making the edits with a patch file and pointing people to the [[Applying Patches]] page if the patch is also provided in the webos-internals gitorious repository.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-three-columns&lt;br /&gt;
|column1= &lt;br /&gt;
===webOS Update Information===&lt;br /&gt;
* [[Update 1.2.0|Update 1.2]]&lt;br /&gt;
* [[Update 1.1.0|Update 1.1]]&lt;br /&gt;
* [[Update 1.0.4|Update 1.0.4]] &lt;br /&gt;
* [[Update 1.0.3|Update 1.0.3]]&lt;br /&gt;
&lt;br /&gt;
===Patches that Need Work===&lt;br /&gt;
* [[Bugs]]&lt;br /&gt;
&lt;br /&gt;
|column2=&lt;br /&gt;
===Patch Ideas to be Created or in Progress===&lt;br /&gt;
&lt;br /&gt;
* [[More_Calculator_Functions|Accessing additional built-in calculator functions]]&lt;br /&gt;
* [[Add_Ability_To_Choose_Snooze_Length|Add Ability to Choose Snooze Length]]&lt;br /&gt;
* [[Add_Icon_To_Quick_Launcher|Add an icon to the quick launcher]]&lt;br /&gt;
* [[Changing Clipboard Data From The Shell|Changing Clipboard Data from the Shell]]&lt;br /&gt;
* [[Development_%26_Tweak_Ideas | Development &amp;amp; Tweaking Ideas]]&lt;br /&gt;
* [[Longer Vibrate|Longer Vibrate]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|column3=&lt;br /&gt;
===Notes===&lt;br /&gt;
These modifications lack a patch process, please add one to the details to the page and have it added to the webOS-internals gitorious repository. Info for the repository is on [[Applying Patches]].&lt;br /&gt;
&lt;br /&gt;
*Empty&lt;br /&gt;
}}&lt;br /&gt;
{{portal-three-columns&lt;br /&gt;
|column1= &lt;br /&gt;
==Patches to webOS apps==&lt;br /&gt;
===webOS 1.2 OK===&lt;br /&gt;
++ Indicates needs to be added to the git repository. Please help add them and remove the notation when added.&lt;br /&gt;
&lt;br /&gt;
* ++[[Patch Browser Global Search Addons|Browser: Global Search Addons]]&lt;br /&gt;
* [[Patch Camera Easy Shutter Sound Off|Camera: Easy Shutter Sound Off]]&lt;br /&gt;
* [[Patch Clock Enabling the Hidden Theme|Clock: Enabling the Hidden Theme]]&lt;br /&gt;
* [[Patch Email Confirm Deletion|Email: Confirm Deletion]]&lt;br /&gt;
* [[Patch Email Change Default Font for Replies-Forwards from Navy to Black|Email: Change Default Font for Replies/Forwards from Navy to Black]]&lt;br /&gt;
* [[Patch Launcher Add or Delete Pages|Launcher: Add/Delete Pages]]&lt;br /&gt;
* ++[[Patch Launcher Hide-Delete The NASCAR App|Launcher: Hide/Delete The NASCAR App]]&lt;br /&gt;
* ++[[Patch Launcher Hide Media Sync Option|Launcher: Hide Media Sync Option]]&lt;br /&gt;
* [[Patch Launcher Reset Scroll on Page Change|Launcher: Reset Scroll on Page Change]]&lt;br /&gt;
* [[Patch Launcher Unhide the DeveloperMode App|Launcher: Unhide the DeveloperMode App]]&lt;br /&gt;
* [[Patch Launcher To Allow More Icons Per Row|Launcher: Allows More Icons Per Row]]&lt;br /&gt;
* [[Patch Messaging Character Counter|Messaging: Character Counter]]&lt;br /&gt;
* ++[[Patch Messaging Display Full Status Messages|Messaging: Display Full Status Messages]] &lt;br /&gt;
* [[Patch Messaging New Cards For Each Conversation|Messaging: New Cards For Each Conversation]]&lt;br /&gt;
* ++[[Patch MediaPlayer Ignore 'A', 'An', and 'The' In Artist and Album names|Music Player: Ignore 'A', 'An', and 'The' in Artist and Album Names]]&lt;br /&gt;
* ++[[Patch Phone Edit Dialer Theme|Phone: Edit Dialer Theme]]&lt;br /&gt;
* ++[[Patch Phone Show Call Duration in the Call Log|Phone: Show Call Duration in the Call Log]]&lt;br /&gt;
&lt;br /&gt;
===Fixed in 1.2 - No longer needed===&lt;br /&gt;
* [[Patch Amazon Download Music over EVDO|Amazon: Download Music over EVDO]]&lt;br /&gt;
* [[Patch Browser Downloading Files|Browser: Downloading Files]] &lt;br /&gt;
* [[Patch MediaPlayer Bookmarking|Music Player: Bookmarking - Works in 1.2 for podcast, speech, spoken word, netcast, or audiobook genre tags only]]&lt;br /&gt;
&lt;br /&gt;
===webOS 1.1 OK===&lt;br /&gt;
&lt;br /&gt;
* [[Patch Browser Delete Individual History Items|Browser: Delete Individual History Items]]&lt;br /&gt;
* [[Patch Calendar Show All-Day Events in Month View|Calendar: Show All-Day Events in Month View]] &lt;br /&gt;
* ++[[Patch Camera 10 Second Countdown Timer|Camera: 10 Second Countdown Timer]]&lt;br /&gt;
* [[Patch Camera Shutter Sound On-Off Button|Camera: Shutter Sound On-Off Button]]&lt;br /&gt;
* [[Patch Camera Using Volume Buttons to Take a Picture|Camera: Using Volume Buttons to Take a Picture]]&lt;br /&gt;
* ++[[Patch Clock Changing Alarm Button Order and Snooze Duration|Clock: Changing Alarm Button Order and Snooze Duration]]&lt;br /&gt;
* ++[[Patch Email Change &amp;quot;Running Late&amp;quot; Message|Email: Change &amp;quot;Running Late&amp;quot; Message]]&lt;br /&gt;
* [[Patch Email DeleteAll|Email: Delete All]]&lt;br /&gt;
* [[Patch Messaging Adding Timestamps to All Received Messages|Messaging: Adding Timestamps to All Received Messages]]&lt;br /&gt;
* [[Patch Messaging Change &amp;quot;Enter Key&amp;quot; To Create Newline|Messaging: Change &amp;quot;Enter Key&amp;quot; To Create Newline]]&lt;br /&gt;
* ++[[Patch Messaging Force Offline Send Without Dialog|Messaging: Force Offline Send Without Dialog]]&lt;br /&gt;
* [[Patch Messaging Forward Messages|Messaging: Forward Messages]]&lt;br /&gt;
* [[Patch Messaging Jump Forward, Backward One Word at a Time|Messaging: Jump Forward, Backward One Word at a Time]]&lt;br /&gt;
* [[Patch Messaging Landscape Orientation|Messaging: Landscape Orientation]]&lt;br /&gt;
* [[Patch Messaging Sounds|Messaging: Message Sound]]&lt;br /&gt;
* ++[[Patch MCraig Enabling Personals Category|mCraig: Enabling Personals Category]]&lt;br /&gt;
* ++[[Patch PDF Viewer Change Orientation|PDF Viewer: Change Orientation]]&lt;br /&gt;
* [[Patch Phone Disable Various Call Sounds|Phone: Disable Various Call Sounds]]&lt;br /&gt;
* ++[[Patch Phone Editing the Lock Screen|Phone: Editing the Lock Screen]]&lt;br /&gt;
* [[Patch Tasks Always Show Details of New Tasks|Tasks: Always Show Details of New Tasks]]&lt;br /&gt;
* ++[[Patch WebOS Bypassing Lock Screen|Unlock: Bypass the Passcode Entry Screen]]&lt;br /&gt;
&lt;br /&gt;
===Fixed in 1.1 - No longer needed===&lt;br /&gt;
* [[Patch Email Fix Broken Formatting|Email: Fix Broken Formatting for E-mails]]&lt;br /&gt;
&lt;br /&gt;
===Not 1.1 compatible===&lt;br /&gt;
* [[Patch Camera Remote View|Camera: Remote View]]&lt;br /&gt;
* [[Patch Email Enable Landscape Viewing|Email: Enable Landscape Viewing]] &lt;br /&gt;
* [[Patch Email Fix Attachments|Email: Fix Attachments]]&lt;br /&gt;
* [[Patch Sudoku Disable Zooming|Sudoku: Disable Zooming]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
|column2=&lt;br /&gt;
==Patches not part of a specific app==&lt;br /&gt;
===webOS 1.2 OK===&lt;br /&gt;
* [[Patch Enable LED Notifications|Enable LED Notifications]]&lt;br /&gt;
* [[On Screen Keyboard]]&lt;br /&gt;
* [[Patch webOS Disable Charging Event Sounds|Disable Charging Event Sounds]]&lt;br /&gt;
* [[Patch webOS Turning Off Dialpad Noise|Turning Off Dialpad Noise]]&lt;br /&gt;
* [[Patch webOS Add Words to AutoCorrect Dictionary|Modify AutoCorrect Dictionary]]&lt;br /&gt;
* [[Patch webOS Roam Control|Roam Control]]&lt;br /&gt;
&lt;br /&gt;
===webOS 1.1 OK===&lt;br /&gt;
&lt;br /&gt;
++ Indicates needs to be added to the git repository. Please help add them and remove the notation when added.&lt;br /&gt;
&lt;br /&gt;
* ++[[Patch webOS Boot Themes|Boot Themes]]&lt;br /&gt;
* ++[[Patch webOS Brightness|Brightness]]&lt;br /&gt;
* ++[[Patch webOS Bypassing Activation|Bypassing Activation]]&lt;br /&gt;
* ++[[Patch webOS Change Carrier String|Change Carrier String]]&lt;br /&gt;
* ++[[Change_the_default_notification.wav_Sound|Change the Default notification.wav Sound]]&lt;br /&gt;
* [[Patch webOS Changing the &amp;quot;Turn off after X&amp;quot; time|Changing the &amp;quot;Turn off after X&amp;quot; Time]]&lt;br /&gt;
* ++[[Patch webOS CPU Frequency or Voltage Scaling|CPU Frequency or Voltage Scaling]]&lt;br /&gt;
* ++[[Patch webOS GPS Tracking|GPS Tracking]]&lt;br /&gt;
* ++[[Patch webOS Graphics|Graphics]]&lt;br /&gt;
* ++[[Patch webOS Hourly Chime|Hourly Chime]] &lt;br /&gt;
* ++[[Patch webOS Keep Phone Awake While in Remote Session|Keep Phone Awake While in Remote Session]]&lt;br /&gt;
* [[Patch webOS Logging Information from Within Scripts|Logging Information from Within Scripts]]&lt;br /&gt;
* [[Patch webOS Modifying a Stock App While Keeping the Original|Modifying a Stock App While Keeping the Original]] &lt;br /&gt;
* [[Patch webOS Radio Power Switch|Radio Power Switch]]&lt;br /&gt;
* ++[[Patch webOS Random Wallpaper Switching|Random Wallpaper Switching]]&lt;br /&gt;
* [[Patch webOS Reverse Tunnel|Reverse Tunnel]] &lt;br /&gt;
* [[Patch webOS Show Actual Battery Percentage | Show Actual Battery Percentage]]&lt;br /&gt;
* [[Screenlock On When Connected|Stay On While Connected]]&lt;br /&gt;
* [[Make USB Partition Writable via SFTP|Make USB Partition writable via SFTP]]&lt;br /&gt;
&lt;br /&gt;
===Fixed in 1.1 - No longer needed===&lt;br /&gt;
* Empty&lt;br /&gt;
&lt;br /&gt;
===Not 1.1 compatible===&lt;br /&gt;
* [[Patch webOS Email App Patch to Prompt for IPK Installation|Email App Patch to Prompt for IPK Installation]] &lt;br /&gt;
&lt;br /&gt;
|column3=&lt;br /&gt;
==== The following have not been checked for compatibility with webOS 1.1. ====&lt;br /&gt;
&lt;br /&gt;
* [[Browser_Plugins|Browser Plugins]]&lt;br /&gt;
* [[Camera Mod Alternate Sound Disable]]&lt;br /&gt;
* [[Changes_Alert/Notification_Sounds|Changes Alert/Notification Sounds]]&lt;br /&gt;
* [[Myavatar In Messaging App|Myavatar In Messaging App]] &lt;br /&gt;
* [[Photos Slideshow|Photos Slideshow]] &lt;br /&gt;
&lt;br /&gt;
==== The following are deprecated.  They have been replaced with methods which are easier or are moot in 1.1 ====&lt;br /&gt;
&lt;br /&gt;
* [[Installing Homebrew Apps With A Rooted Pre|Installing Homebrew Apps With A Linux Accessed Pre]]  &lt;br /&gt;
* [[Packaging Homebrew Apps for Stock Pre without Rooting|Packaging Homebrew Apps for Stock Pre without Accessing Linux]] &lt;br /&gt;
* [[Modifying Stock Applications|Modifying Stock Applications]] &lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Patch_webOS_Roam_Control&amp;diff=6006</id>
		<title>Patch webOS Roam Control</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Patch_webOS_Roam_Control&amp;diff=6006"/>
		<updated>2009-09-29T21:25:13Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{template:patch}}&lt;br /&gt;
[[Image:Roam-control.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
= Roam Control=&lt;br /&gt;
&lt;br /&gt;
=== Creating a &amp;quot;Roam Only&amp;quot; mode===&lt;br /&gt;
&lt;br /&gt;
By default, the Pre has no &amp;quot;Roam Only&amp;quot; mode. For fringe Sprint service areas, this can be very annoying, as the phone will tend to prefer a weak Sprint signal versus a strong Verizon/Other CDMA signal. We can enable this mode fairly easily.&lt;br /&gt;
&lt;br /&gt;
=== Procedure===&lt;br /&gt;
&lt;br /&gt;
SSH in to rooted Pre&lt;br /&gt;
Mount filesystem as r/w, navigate to phoneprefs folder and create a backup of current preflist-assistant.js&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
mount -o remount,rw /&lt;br /&gt;
cd /usr/palm/applications/com.palm.app.phoneprefs/app/controllers&lt;br /&gt;
cp preflist-assistant.js preflist-assistant.js.bak&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit preflist-assistant.js&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
vi preflist-assistant.js&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At line 233 (WebOS 1.2), find:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{label : $L(&amp;quot;Automatic&amp;quot;),value: &amp;quot;any&amp;quot;}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* and replace with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{label : $L(&amp;quot;Automatic&amp;quot;),value: &amp;quot;any&amp;quot;},&lt;br /&gt;
{label : $L(&amp;quot;Roam Only&amp;quot;),value: &amp;quot;roamonly&amp;quot;}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At lines 1264-1267 (WebOS 1.2) find:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
		if(payload.extended.mode == 'any') {&lt;br /&gt;
			this.voiceRoamingModel.currentVoiceRoaming = &amp;quot;any&amp;quot;;&lt;br /&gt;
			$('dataroamingrow').show();&lt;br /&gt;
		}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* and add below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
		else if(payload.extended.mode == 'roamonly') {&lt;br /&gt;
			this.voiceRoamingModel.currentVoiceRoaming = &amp;quot;roamonly&amp;quot;;&lt;br /&gt;
			$('dataroamingrow').show();&lt;br /&gt;
		}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mount the filesystem as r/o, reboot the phone and, from the dialer, go to Preferences and test out your new mode!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
mount -o remount,ro /&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credit===&lt;br /&gt;
w5mw&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Scripting possibilities ===&lt;br /&gt;
&lt;br /&gt;
You can use luna-send to change these settings from the command line.  I run this bash (not sh) script from cron to change to roamonly whenever my phone is connected to my access point because my carrier's signal is poor where I live and calls are dropped in automatic mode.&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
######## roam-at-home ############&lt;br /&gt;
&lt;br /&gt;
MYSSID=&amp;quot;put-your-ssid-here&amp;quot;&lt;br /&gt;
&lt;br /&gt;
function ROAMONLY {&lt;br /&gt;
                   luna-send  palm://com.palm.telephony/roamModeSet  '{&amp;quot;mode&amp;quot; : roamonly }'&lt;br /&gt;
                  }&lt;br /&gt;
function ANY      {&lt;br /&gt;
                   luna-send  palm://com.palm.telephony/roamModeSet  '{&amp;quot;mode&amp;quot; : any }'&lt;br /&gt;
                  }&lt;br /&gt;
&lt;br /&gt;
SSID=$( iwconfig eth0 | grep  ESSID | awk -F 'ESSID:&amp;quot;' '{print $2}' | awk -F '&amp;quot;' '{print $1}' )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$SSID&amp;quot; == &amp;quot;$MYSSID&amp;quot;  ];&lt;br /&gt;
then                              &lt;br /&gt;
ROAMONLY&lt;br /&gt;
else                    &lt;br /&gt;
ANY&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
jjonez&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Patch_Launcher_Reset_Scroll_on_Page_Change&amp;diff=5864</id>
		<title>Patch Launcher Reset Scroll on Page Change</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Patch_Launcher_Reset_Scroll_on_Page_Change&amp;diff=5864"/>
		<updated>2009-09-21T15:32:01Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{template:patch}}&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
If you have many apps on a page, you may have to scroll to see some of those. The launcher maintains the scroll state (the amount you have scrolled) on each page, which means when you return to a page, you are still at the location that you last scrolled to. This can be annoying. For example, it can make it difficult to train your muscle memory because, when repeating the same steps, the app you want is not always at the same location on the screen. This patch resets the scroll of each page back to the top when it goes out of view.&lt;br /&gt;
&lt;br /&gt;
'''Anyone have any luck with this?  It's not doing a thing for me.'''&lt;br /&gt;
&lt;br /&gt;
'''This is not working for me.''' [[User:Hmagoo|Hmagoo]] 23:54, 2 September 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''It works fine for me. Scroll down on a launcher page so the first row of icons is hidden. Switch to another page, and switch back. The page will be reset back to the top.'''&lt;br /&gt;
&lt;br /&gt;
==Editing Process==&lt;br /&gt;
&lt;br /&gt;
* SSH in.&lt;br /&gt;
* Remount the filesystem as read/write:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo rootfs_open -w&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* Load launcher-assistant.js in vi:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /usr/lib/luna/system/luna-applauncher/app/controllers/launcher-assistant.js&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* Locate the onPageChange method around line 157:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
onPageChange: function(event) {&lt;br /&gt;
	this.activePageIndex = event.value;&lt;br /&gt;
	this.updatePageIndicators();&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* Add the four lines below so that onPageChange now looks like the following:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
onPageChange: function(event) {&lt;br /&gt;
	var scroller = this.getPageScroller();&lt;br /&gt;
	if (scroller &amp;amp;&amp;amp; scroller.mojo) {&lt;br /&gt;
		scroller.mojo.revealTop(0);&lt;br /&gt;
	}&lt;br /&gt;
	this.activePageIndex = event.value;&lt;br /&gt;
	this.updatePageIndicators();&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* Save the file and quit vi.&lt;br /&gt;
* Remount the filesystem as read only - this should reboot your Pre:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo rootfs_open -w&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Patch Process==&lt;br /&gt;
&lt;br /&gt;
The patch should soon be located in the webos-internals gitorious repository. Until then, you can copy and paste the source below. Visit [[Applying Patches]] for info on how to use it. To apply the patch, follow the instructions above, and after remounting the filesystem as read/write, do the following:&lt;br /&gt;
&lt;br /&gt;
* Apply the patch (In this example, I have the patch file located in my home directory under '''patches'''):&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /&lt;br /&gt;
sudo patch -p0 --backup-if-mismatch &amp;lt; ~/patches/reset-scroll.patch&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
This is what you should see if it ran properly:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
patching file /usr/lib/luna/system/luna-applauncher/app/controllers/launcher-assistant.js&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* Remount the filesystem as read only as described above.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patch Source (reset-scroll.patch)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /usr/lib/luna/system/luna-applauncher/app/controllers/launcher-assistant.js.bak	2009-05-22 17:12:34.000000000 -0400&lt;br /&gt;
+++ /usr/lib/luna/system/luna-applauncher/app/controllers/launcher-assistant.js	2009-08-21 17:19:48.426297000 -0400&lt;br /&gt;
@@ -155,6 +155,10 @@&lt;br /&gt;
 	&lt;br /&gt;
 	/* keep track of which page we are on */&lt;br /&gt;
 	onPageChange: function(event) {&lt;br /&gt;
+        var scroller = this.getPageScroller();&lt;br /&gt;
+        if (scroller &amp;amp;&amp;amp; scroller.mojo) {&lt;br /&gt;
+            scroller.mojo.revealTop(0);&lt;br /&gt;
+        }&lt;br /&gt;
 		this.activePageIndex = event.value;&lt;br /&gt;
 		this.updatePageIndicators();&lt;br /&gt;
 	},&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Portal:Patches_to_webOS&amp;diff=4621</id>
		<title>Portal:Patches to webOS</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Portal:Patches_to_webOS&amp;diff=4621"/>
		<updated>2009-08-21T21:53:40Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__notoc__&lt;br /&gt;
{{portal-header&lt;br /&gt;
|This page lists patches to webOS existing apps which modify the behavior as shipped.  '''Note''' that these patches may be version specific and may be broken by future webOS updates.  Proceed with caution. If you get one that works please move it under the correct column, alphabetically, and title the page:&lt;br /&gt;
'''&amp;quot;Patch [application] [description]&amp;quot;''' (for application specific patches) &amp;lt;br&amp;gt;&lt;br /&gt;
'''&amp;quot;Patch webOS [description]&amp;quot;''' (for patches not part of a specific application)&lt;br /&gt;
}}&lt;br /&gt;
This page is undergoing structuring please contribute moving or adding new entries under the appropriate headings. For now put pages in alphabetical order. Each page should contain at least the basic headings&lt;br /&gt;
*1. '''Introduction''': A brief description to introduce people to the patch.&lt;br /&gt;
**1.1 '''Usage''':An explanation if it is needed on how to use the modification see Add/Delete Pages in the Launcher as an example.&lt;br /&gt;
*2. '''Editing Process''': Step by step instructions to manually edit. &lt;br /&gt;
*3. '''Patching Process''': Details for making the edits with a patch file and pointing people to the [[Applying Patches]] page if the patch is also provided in the webos-internals gitorious repository.&lt;br /&gt;
&lt;br /&gt;
{{portal-three-columns&lt;br /&gt;
|column1= &lt;br /&gt;
===webOS Update Information===&lt;br /&gt;
* [[Update 1.1.0|Update 1.1]]&lt;br /&gt;
* [[Update 1.0.4|Update 1.0.4]] &lt;br /&gt;
* [[Update 1.0.3|Update 1.0.3]]&lt;br /&gt;
&lt;br /&gt;
===Patches that Need Work===&lt;br /&gt;
* [[Bugs]]&lt;br /&gt;
&lt;br /&gt;
|column2=&lt;br /&gt;
===Patch Ideas to be Created or in Progress===&lt;br /&gt;
&lt;br /&gt;
* [[Add_Ability_To_Choose_Snooze_Length|Add Ability to Choose Snooze Length]]&lt;br /&gt;
* [[Changing Clipboard Data From The Shell|Changing Clipboard Data from the Shell]]&lt;br /&gt;
* [[Development_%26_Tweak_Ideas | Development &amp;amp; Tweaking Ideas]]&lt;br /&gt;
* [[Longer Vibrate|Longer Vibrate]]&lt;br /&gt;
* [[More_Calculator_Functions|Accessing additional built-in calculator functions]]&lt;br /&gt;
&lt;br /&gt;
|column3=&lt;br /&gt;
===Notes===&lt;br /&gt;
These modifications lack a patch process, please add one to the details to the page and have it added to the webOS-internals gitorious repository. Info for the repository is on [[Applying Patches]].&lt;br /&gt;
&lt;br /&gt;
*Empty&lt;br /&gt;
}}&lt;br /&gt;
{{portal-three-columns&lt;br /&gt;
|column1= &lt;br /&gt;
==Patches to webOS apps==&lt;br /&gt;
===webOS 1.1 OK===&lt;br /&gt;
&lt;br /&gt;
* [[Patch Amazon Download Music over EVDO|Amazon: Download Music over EVDO]]&lt;br /&gt;
* [[Patch Browser Global Search Addons|Browser: Global Search Addons]]&lt;br /&gt;
* [[Patch Browser Delete Individual History Items|Browser: Delete Individual History Items]]&lt;br /&gt;
* [[Patch Browser Downloading Files|Browser: Downloading Files]] &lt;br /&gt;
* [[Patch Calendar Show All-Day Events in Month View|Calendar: Show All-Day Events in Month View]] &lt;br /&gt;
* [[Patch Camera 10 Second Countdown Timer|Camera: 10 Second Countdown Timer]]&lt;br /&gt;
* [[Patch Camera Shutter Sound On-Off Button|Camera: Shutter Sound On-Off Button]]&lt;br /&gt;
* [[Patch Camera Using Volume Buttons to Take a Picture|Camera: Using Volume Buttons to Take a Picture]]&lt;br /&gt;
* [[Patch Clock Changing Alarm Button Order and Snooze Duration|Clock: Changing Alarm Button Order and Snooze Duration]]&lt;br /&gt;
* [[Patch Clock Enabling the Hidden Theme|Clock: Enabling the Hidden Theme]]&lt;br /&gt;
* [[Patch Email Change &amp;quot;Running Late&amp;quot; Message|Email: Change &amp;quot;Running Late&amp;quot; Message]]&lt;br /&gt;
* [[Patch Email Confirm Deletion|Email: Confirm Deletion]]&lt;br /&gt;
* [[Patch Email Change Default Font for Replies-Forwards from Navy to Black|Email: Change Default Font for Replies/Forwards from Navy to Black]]&lt;br /&gt;
* [[Patch Email DeleteAll|Email: Delete All]]&lt;br /&gt;
* [[Patch Launcher Add or Delete Pages|Launcher: Add/Delete Pages]]&lt;br /&gt;
* [[Patch Launcher To Allow More Icons Per Row|Launcher: Allows More Icons Per Row]]&lt;br /&gt;
* [[Patch Launcher Hide-Delete The NASCAR App|Launcher: Hide/Delete The NASCAR App]]&lt;br /&gt;
* [[Patch Launcher Hide Media Sync Option|Launcher: Hide Media Sync Option]]&lt;br /&gt;
* [[Patch Launcher Reset Scroll on Page Change|Launcher: Reset Scroll on Page Change]]&lt;br /&gt;
* [[Patch Launcher Unhide the DeveloperMode App|Launcher: Unhide the DeveloperMode App]]&lt;br /&gt;
* [[Patch Messaging Adding Timestamps to All Received Messages|Messaging: Adding Timestamps to All Received Messages]]&lt;br /&gt;
* [[Patch Messaging Change &amp;quot;Enter Key&amp;quot; To Create Newline|Messaging: Change &amp;quot;Enter Key&amp;quot; To Create Newline]]&lt;br /&gt;
* [[Patch Messaging Character Counter|Messaging: Character Counter]]&lt;br /&gt;
* [[Patch Messaging Display Full Status Messages|Messaging: Display Full Status Messages]] &lt;br /&gt;
* [[Patch Messaging Force Offline Send Without Dialog|Messaging: Force Offline Send Without Dialog]]&lt;br /&gt;
* [[Patch Messaging Forward Messages|Messaging: Forward Messages]]&lt;br /&gt;
* [[Patch Messaging New Cards For Each Conversation|Messaging: New Cards For Each Conversation]]&lt;br /&gt;
* [[Patch Messaging Sounds|Messaging: Message Sound]]&lt;br /&gt;
* [[Patch MCraig Enabling Personals Category|mCraig: Enabling Personals Category]]&lt;br /&gt;
* [[Patch MediaPlayer Bookmarking|Music Player: Bookmarking]]&lt;br /&gt;
* [[Patch MediaPlayer Ignore 'A', 'An', and 'The' In Artist and Album names|Music Player: Ignore 'A', 'An', and 'The' in Artist and Album Names]]&lt;br /&gt;
* [[Patch PDF Viewer Change Orientation|PDF Viewer: Change Orientation]]&lt;br /&gt;
* [[Patch Phone Disable Various Call Sounds|Phone: Disable Various Call Sounds]]&lt;br /&gt;
* [[Patch Phone Edit Dialer Theme|Phone: Edit Dialer Theme]]&lt;br /&gt;
* [[Patch Phone Editing the Lock Screen|Phone: Editing the Lock Screen]]&lt;br /&gt;
* [[Patch Phone Show Call Duration in the Call Log|Phone: Show Call Duration in the Call Log]]&lt;br /&gt;
* [[Patch Tasks Always Show Details of New Tasks|Tasks: Always Show Details of New Tasks]]&lt;br /&gt;
&lt;br /&gt;
===Fixed in 1.1 - No longer needed===&lt;br /&gt;
* [[Patch Email Fix Broken Formatting|Email: Fix Broken Formatting for E-mails]]&lt;br /&gt;
&lt;br /&gt;
===Not 1.1 compatible===&lt;br /&gt;
* [[Patch Camera Remote View|Camera: Remote View]]&lt;br /&gt;
* [[Patch Email Enable Landscape Viewing|Email: Enable Landscape Viewing]] &lt;br /&gt;
* [[Patch Email Fix Attachments|Email: Fix Attachments]]&lt;br /&gt;
* [[Patch Sudoku Disable Zooming|Sudoku: Disable Zooming]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
|column2=&lt;br /&gt;
==Patches not part of a specific app==&lt;br /&gt;
===webOS 1.1 OK===&lt;br /&gt;
* [[Patch webOS Boot Themes|Boot Themes]]&lt;br /&gt;
* [[Patch webOS Brightness|Brightness]]&lt;br /&gt;
* [[Patch webOS Bypassing Activation|Bypassing Activation]]&lt;br /&gt;
* [[Patch webOS Change Carrier String|Change Carrier String]]&lt;br /&gt;
* [[Change_the_default_notification.wav_Sound|Change the Default notification.wav Sound]]&lt;br /&gt;
* [[Patch webOS Changing the &amp;quot;Turn off after X&amp;quot; time|Changing the &amp;quot;Turn off after X&amp;quot; Time]]&lt;br /&gt;
* [[Patch webOS CPU Frequency or Voltage Scaling|CPU Frequency or Voltage Scaling]]&lt;br /&gt;
* [[Patch webOS Disable Charging Event Sounds|Disable Charging Event Sounds]]&lt;br /&gt;
* [[Patch webOS GPS Tracking|GPS Tracking]]&lt;br /&gt;
* [[Patch webOS Graphics|Graphics]]&lt;br /&gt;
* [[Patch webOS Hourly Chime|Hourly Chime]] &lt;br /&gt;
* [[Patch webOS Turning Off Dialpad Noise|Turning Off Dialpad Noise]]&lt;br /&gt;
* [[Patch webOS Keep Phone Awake While in Remote Session|Keep Phone Awake While in Remote Session]]&lt;br /&gt;
* [[Patch webOS Logging Information from Within Scripts|Logging Information from Within Scripts]]&lt;br /&gt;
* [[Patch webOS Modifying a Stock App While Keeping the Original|Modifying a Stock App While Keeping the Original]] &lt;br /&gt;
* [[Patch webOS Add Words to AutoCorrect Dictionary|Modify AutoCorrect Dictionary]]&lt;br /&gt;
* [[Patch webOS Radio Power Switch|Radio Power Switch]]&lt;br /&gt;
* [[Patch webOS Random Wallpaper Switching|Random Wallpaper Switching]]&lt;br /&gt;
* [[Patch webOS Reverse Tunnel|Reverse Tunnel]] &lt;br /&gt;
* [[Patch webOS Roam Control|Roam Control]]&lt;br /&gt;
* [[Patch webOS Show Actual Battery Percentage | Show Actual Battery Percentage]]&lt;br /&gt;
* [[Screenlock On When Connected|Stay On While Connected]]&lt;br /&gt;
* [[Make USB Partition Writable via SFTP|Make USB Partition writable via SFTP]]&lt;br /&gt;
&lt;br /&gt;
===Fixed in 1.1 - No longer needed===&lt;br /&gt;
* Empty&lt;br /&gt;
&lt;br /&gt;
===Not 1.1 compatible===&lt;br /&gt;
* [[Patch webOS Email App Patch to Prompt for IPK Installation|Email App Patch to Prompt for IPK Installation]] &lt;br /&gt;
&lt;br /&gt;
|column3=&lt;br /&gt;
==== The following have not been checked for compatibility with webOS 1.1. ====&lt;br /&gt;
&lt;br /&gt;
* [[Browser_Plugins|Browser Plugins]]&lt;br /&gt;
* [[Camera Mod Alternate Sound Disable]]&lt;br /&gt;
* [[Changes_Alert/Notification_Sounds|Changes Alert/Notification Sounds]]&lt;br /&gt;
* [[Myavatar In Messaging App|Myavatar In Messaging App]] &lt;br /&gt;
* [[Photos Slideshow|Photos Slideshow]] &lt;br /&gt;
&lt;br /&gt;
==== The following are deprecated.  They have been replaced with methods which are easier or are moot in 1.1 ====&lt;br /&gt;
&lt;br /&gt;
* [[Installing Homebrew Apps With A Rooted Pre|Installing Homebrew Apps With A Linux Accessed Pre]]  &lt;br /&gt;
* [[Packaging Homebrew Apps for Stock Pre without Rooting|Packaging Homebrew Apps for Stock Pre without Accessing Linux]] &lt;br /&gt;
* [[Modifying Stock Applications|Modifying Stock Applications]] &lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Patch_Launcher_Reset_Scroll_on_Page_Change&amp;diff=4620</id>
		<title>Patch Launcher Reset Scroll on Page Change</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Patch_Launcher_Reset_Scroll_on_Page_Change&amp;diff=4620"/>
		<updated>2009-08-21T21:52:05Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: Initial commit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{template:patch}}&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
If you have many apps on a page, you may have to scroll to see some of those. The launcher maintains the scroll state (the amount you have scrolled) on each page, which means when you return to a page, you are still at the location that you last scrolled to. This can be annoying. For example, it can make it difficult to train your muscle memory because, when repeating the same steps, the app you want is not always at the same location on the screen. This patch resets the scroll of each page back to the top when it goes out of view.&lt;br /&gt;
&lt;br /&gt;
==Editing Process==&lt;br /&gt;
&lt;br /&gt;
* SSH in.&lt;br /&gt;
* Remount the filesystem as read/write:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo rootfs_open -w&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* Load launcher-assistant.js in vi:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo vi /usr/lib/luna/system/luna-applauncher/app/controllers/launcher-assistant.js&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* Locate the onPageChange method around line 157:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
onPageChange: function(event) {&lt;br /&gt;
	this.activePageIndex = event.value;&lt;br /&gt;
	this.updatePageIndicators();&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* Add the four lines below so that onPageChange now looks like the following:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
onPageChange: function(event) {&lt;br /&gt;
	var scroller = this.getPageScroller();&lt;br /&gt;
	if (scroller &amp;amp;&amp;amp; scroller.mojo) {&lt;br /&gt;
		scroller.mojo.revealTop(0);&lt;br /&gt;
	}&lt;br /&gt;
	this.activePageIndex = event.value;&lt;br /&gt;
	this.updatePageIndicators();&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* Save the file and quit vi.&lt;br /&gt;
* Remount the filesystem as read only - this should reboot your Pre:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo rootfs_open -w&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Patch Process==&lt;br /&gt;
&lt;br /&gt;
The patch should soon be located in the webos-internals gitorious repository. Until then, you can copy and paste the source below. Visit [[Applying Patches]] for info on how to use it. To apply the patch, follow the instructions above, and after remounting the filesystem as read/write, do the following:&lt;br /&gt;
&lt;br /&gt;
* Apply the patch (In this example, I have the patch file located in my home directory under '''patches'''):&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /&lt;br /&gt;
sudo patch -p0 --backup-if-mismatch &amp;lt; ~/patches/reset-scroll.patch&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
This is what you should see if it ran properly:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
patching file /usr/lib/luna/system/luna-applauncher/app/controllers/launcher-assistant.js&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* Remount the filesystem as read only as described above.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patch Source (reset-scroll.patch)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /usr/lib/luna/system/luna-applauncher/app/controllers/launcher-assistant.js.bak	2009-05-22 17:12:34.000000000 -0400&lt;br /&gt;
+++ /usr/lib/luna/system/luna-applauncher/app/controllers/launcher-assistant.js	2009-08-21 17:19:48.426297000 -0400&lt;br /&gt;
@@ -155,6 +155,10 @@&lt;br /&gt;
 	&lt;br /&gt;
 	/* keep track of which page we are on */&lt;br /&gt;
 	onPageChange: function(event) {&lt;br /&gt;
+        var scroller = this.getPageScroller();&lt;br /&gt;
+        if (scroller &amp;amp;&amp;amp; scroller.mojo) {&lt;br /&gt;
+            scroller.mojo.revealTop(0);&lt;br /&gt;
+        }&lt;br /&gt;
 		this.activePageIndex = event.value;&lt;br /&gt;
 		this.updatePageIndicators();&lt;br /&gt;
 	},&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Accessing_Linux_From_Windows&amp;diff=911</id>
		<title>Accessing Linux From Windows</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Accessing_Linux_From_Windows&amp;diff=911"/>
		<updated>2009-07-20T17:34:13Z</updated>

		<summary type="html">&lt;p&gt;Bsiegel: /* Preparation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Using Novaproxy to Gain Root Access on Windows =&lt;br /&gt;
&lt;br /&gt;
If you are using a mac, follow the instructions here instead of this page.&lt;br /&gt;
&lt;br /&gt;
Procedure:&lt;br /&gt;
&lt;br /&gt;
This procedure works as is with Windows XP or Vista, and can be made to work with Windows 7 by manually installing Novacom as described on the Novacom and Windows 7 page. Using an XP virtual machine (VMware or Windows 7's &amp;quot;XP mode&amp;quot;) has been reported to work if you do not have a supported platform.&lt;br /&gt;
&lt;br /&gt;
Estimated time: 30 minutes depending on experience - including Next Steps after obtaining access. &lt;br /&gt;
&lt;br /&gt;
== Preparation ==&lt;br /&gt;
* Download the [http://palm.cdnetworks.net/staging/rom/webosdoctorp100ewwsprint.jar webOS image].&lt;br /&gt;
* Change the file extension from .jar to .zip and then extract the archive.&lt;br /&gt;
* Run the driver installer from the extracted file by browsing to the folder webosdoctorp100ewwsprint/resources/ and running NovacomInstaller_x86.msi (for 32-bit Windows) or NovacomInstaller_x64.msi (for 64-bit Windows).&lt;br /&gt;
* Download Putty.exe from [http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html].  Note that there is no installation, you're simply downloading an exe you will run.  Note where you downloaded it. &lt;br /&gt;
* Download and install Python 2.6 from [http://www.python.org/download http://www.python.org/download]. Make sure it's not a more recent or an older version - it must be 2.6.x!&lt;br /&gt;
** Install using all the default choices.&lt;br /&gt;
* Get a copy of the novaproxy.py script from [http://github.com/asedeno/novaproxy/raw/master/novaproxy.py http://github.com/asedeno/novaproxy/raw/master/novaproxy.py] (Right click and Save the file where you are going to remember you put it).&lt;br /&gt;
&lt;br /&gt;
== The actual process == &lt;br /&gt;
&lt;br /&gt;
* Type in the Konami code on your Pre (upupdowndownleftrightleftrightbastart) to access the Developer Mode application.  A blue developer icon will pop up on the Pre &amp;lt;div style=&amp;quot;float:right;&amp;quot;&amp;gt;[[image:DevMode.jpg]]&amp;lt;/div&amp;gt;&lt;br /&gt;
* Open the Developer Mode application on your Pre and enable the Developer Mode switch, resetting the device when prompted.&lt;br /&gt;
* Connect the Pre to your PC using a USB cable. Choose the option to &amp;quot;Just Charge&amp;quot;. Windows should see a new device called Palm Novacom and automatically install the drivers for it. If you are asked to locate the drivers yourself, they are in C:\Program Files\Palm, Inc\novacom\x86 (for 32-bit Windows) or C:\Program Files\Palm, Inc\novacom\amd64 (for 64-bit Windows).&lt;br /&gt;
* If you installed Python with all the default choices, you can simply double-click the novaproxy.py file to start Novaproxy. Otherwise, bring up a command prompt window, cd to the location in which you extracted the zip file, then type python novaproxy.py to run the script.&lt;br /&gt;
* The script will execute and provide further instructions. If it tells you it's listening on a localhost port (usually 8023), everything is working.  Be sure not to close this window.&lt;br /&gt;
* If the script does not work, or tells you there is a problem and the provided instructions don't help, join our IRC channel (irc.freenode.net #webos-internals) and feel free to ask for help.&lt;br /&gt;
* Run putty.exe&lt;br /&gt;
* In PuTTY's Host Name box, type localhost and select a connection type of RAW. In the Port box, type the port that Novaproxy says it's listening on (usually 8023).&lt;br /&gt;
* Click on Terminal in the treeview on the left, and under Line discipline options, set both Local echo and Local line editing to Force off.&lt;br /&gt;
* If you want to save these settings so you don't have to set them again later, click on Session in the left treeview, enter a name for your saved connection (such as &amp;quot;MyPre&amp;quot;) in the Saved Sessions box, and click the Save button. The next time you want to connect, start Novaproxy, then launch PuTTY and double-click the saved connection.&lt;br /&gt;
* Click the big Open button. Novaproxy should indicate it is connecting, and PuTTY should show a root prompt that looks like this:&lt;br /&gt;
:: &amp;lt;code&amp;gt;root@castle:/#&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Congrats, you are now in as root. Tread lightly. &lt;br /&gt;
&lt;br /&gt;
==== Now please visit the [[Next_steps|Next steps]] after obtaining Linux Access page to see what you can do. ====&lt;br /&gt;
Orr type exit at the root prompt to disconnect. PuTTY and Novaproxy will both exit automatically.&lt;br /&gt;
&lt;br /&gt;
Credits:&lt;br /&gt;
&lt;br /&gt;
Credit goes to asedeno for the novaproxy script.&lt;/div&gt;</summary>
		<author><name>Bsiegel</name></author>
	</entry>
</feed>