<?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=Thatdude</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=Thatdude"/>
	<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/wiki/Special:Contributions/Thatdude"/>
	<updated>2026-05-04T03:16:43Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=How_To_Recover&amp;diff=7758</id>
		<title>How To Recover</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=How_To_Recover&amp;diff=7758"/>
		<updated>2009-12-09T17:54:42Z</updated>

		<summary type="html">&lt;p&gt;Thatdude: /* Pre not booting? webOS Doctor How-To */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pre not booting? webOS Doctor How-To =&lt;br /&gt;
{{tux|Tux_with_Broken_Pre.png|float:right;}}&lt;br /&gt;
Fortunately, Palm has created a tool called webOS Doctor intended for users to easily restore their devices in the event that they cannot boot for one reason or another.&lt;br /&gt;
&lt;br /&gt;
Note: Before Trying the following steps below. Try removing the battery first and reinsert the battery and turn on the device this will determine whether or not you need to perform the following steps.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Palm webOS Doctor:''' [http://www.palm.com/us/support/downloads/pre/recoverytool/deviceselector_en.html http://www.palm.com/us/support/downloads/pre/recoverytool/deviceselector_en.html]&lt;br /&gt;
&lt;br /&gt;
'''All Palm WebOS Doctor Versions:''' [http://www.webos-internals.org/wiki/Webos_Doctor_Versions http://www.webos-internals.org/wiki/Webos_Doctor_Versions]&lt;br /&gt;
&lt;br /&gt;
After the download is complete, launch webOS Doctor:&lt;br /&gt;
&lt;br /&gt;
# Select you language&lt;br /&gt;
# Accept the license agreement&lt;br /&gt;
# Connect your Pre to you PC via USB and select &amp;quot;Next&amp;quot; when it becomes available&lt;br /&gt;
{{tux|Tux_with_Pre_and_Screwdriver.png|float:right;}}&lt;br /&gt;
After completion the device will reboot and present you with the activation set-up.&lt;br /&gt;
&lt;br /&gt;
If your PC does not recognize your Pre and you cannot go past step 3 above, try the following steps:&lt;br /&gt;
&lt;br /&gt;
# With the USB cable connected, power off the Pre&lt;br /&gt;
# Hold down the Up button on the volume rocker&lt;br /&gt;
# While holding the Up button, power on the Pre&lt;br /&gt;
# &amp;quot;Next&amp;quot; should now be enabled - proceed with the recovery&lt;br /&gt;
{{tux|Tux_with_Pre.png|float:right;}}&lt;br /&gt;
The above steps will put the Pre into bootloader recovery mode and should allow the PC to recognize your device and proceed with the restore. In this mode the screen will display a giant USB logo instead of the usual Palm startup logo.&lt;br /&gt;
&lt;br /&gt;
The process usually proceeds as follows:&lt;br /&gt;
&lt;br /&gt;
(If you're on a Mac, you can follow the progress in /var/log/system.log)&lt;br /&gt;
&lt;br /&gt;
# WebOS Doctor begins&lt;br /&gt;
# At 3%, a ramdisk is transferred to the phone, and the phone is rebooted &lt;br /&gt;
# At 6%, the screen changes to the palm logo&lt;br /&gt;
# At 10%, the screen changes to a big arrow pointing down to an integrated circuit&lt;br /&gt;
# Novaterm access is available from 12% onwards&lt;br /&gt;
# The progress bar advances by 2% increments every 20 seconds or so&lt;br /&gt;
# If it gets stuck at 52% for more than 30 seconds, it's not going to progress further and you will need to try again.&lt;br /&gt;
# Around 54% the filesystems are being partitioned&lt;br /&gt;
# Around 66% the modem firmware is being reflashed&lt;br /&gt;
# Around 74% the carrier apps are being installed&lt;br /&gt;
# Around 84% the ROM is being verified&lt;br /&gt;
&lt;br /&gt;
If the process fails at 84% or later, the flash and modem have actually been written, so if you reboot you will get what you were flashing.&lt;br /&gt;
&lt;br /&gt;
== Modifications to the recovery process ==&lt;br /&gt;
&lt;br /&gt;
Between about 18% and 54% complete, you can novaterm into the device while it is being flashed, and modify the filesystem that will be run after the phone reboots (e.g. to touch /var/luna/preferences/ran-first-use).&lt;br /&gt;
&lt;br /&gt;
If you stay in a mounted directory, you can even cause the flashing to abort after the carrier apps are installed and just before the ROM is verified.  This is another point where manual modifications can be made.&lt;br /&gt;
&lt;br /&gt;
After you have made your modifications, unmount any filesystems you have mounted and &amp;quot;tellbootie reboot&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Can't boot into recovery mode? ==&lt;br /&gt;
&lt;br /&gt;
In the very unlikely event that your Pre will not boot into recovery mode (indicating that your boot loader on the flash disk may be damaged or corrupted) you can try booting bootie into recovery mode over USB instead: [[Last_Resort_Emergency_BootLoader_Recovery]] '''Note that there has not been a single reported incidence of this being required, we do not recommend that you attempt this unless you have tried all the steps above exactly as described at least 10 times.'''&lt;br /&gt;
&lt;br /&gt;
Short of hardware damage, it should not be possible to &amp;quot;brick&amp;quot; a Pre.&lt;/div&gt;</summary>
		<author><name>Thatdude</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=How_To_Recover&amp;diff=7757</id>
		<title>How To Recover</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=How_To_Recover&amp;diff=7757"/>
		<updated>2009-12-09T17:54:07Z</updated>

		<summary type="html">&lt;p&gt;Thatdude: /* Pre not booting? webOS Doctor How-To */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pre not booting? webOS Doctor How-To =&lt;br /&gt;
{{tux|Tux_with_Broken_Pre.png|float:right;}}&lt;br /&gt;
Fortunately, Palm has created a tool called webOS Doctor intended for users to easily restore their devices in the event that they cannot boot for one reason or another.&lt;br /&gt;
&lt;br /&gt;
Note: Before Trying the following steps below. Try removing the battery first and reinsert the battery and turn on the device this will determine whether or not you need to perform the following steps.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Palm webOS Doctor:''' [http://www.palm.com/us/support/downloads/pre/recoverytool/deviceselector_en.html http://www.palm.com/us/support/downloads/pre/recoverytool/deviceselector_en.html]&lt;br /&gt;
&lt;br /&gt;
'''WebOS Doctor Versions:''' [http://www.webos-internals.org/wiki/Webos_Doctor_Versions http://www.webos-internals.org/wiki/Webos_Doctor_Versions]&lt;br /&gt;
&lt;br /&gt;
After the download is complete, launch webOS Doctor:&lt;br /&gt;
&lt;br /&gt;
# Select you language&lt;br /&gt;
# Accept the license agreement&lt;br /&gt;
# Connect your Pre to you PC via USB and select &amp;quot;Next&amp;quot; when it becomes available&lt;br /&gt;
{{tux|Tux_with_Pre_and_Screwdriver.png|float:right;}}&lt;br /&gt;
After completion the device will reboot and present you with the activation set-up.&lt;br /&gt;
&lt;br /&gt;
If your PC does not recognize your Pre and you cannot go past step 3 above, try the following steps:&lt;br /&gt;
&lt;br /&gt;
# With the USB cable connected, power off the Pre&lt;br /&gt;
# Hold down the Up button on the volume rocker&lt;br /&gt;
# While holding the Up button, power on the Pre&lt;br /&gt;
# &amp;quot;Next&amp;quot; should now be enabled - proceed with the recovery&lt;br /&gt;
{{tux|Tux_with_Pre.png|float:right;}}&lt;br /&gt;
The above steps will put the Pre into bootloader recovery mode and should allow the PC to recognize your device and proceed with the restore. In this mode the screen will display a giant USB logo instead of the usual Palm startup logo.&lt;br /&gt;
&lt;br /&gt;
The process usually proceeds as follows:&lt;br /&gt;
&lt;br /&gt;
(If you're on a Mac, you can follow the progress in /var/log/system.log)&lt;br /&gt;
&lt;br /&gt;
# WebOS Doctor begins&lt;br /&gt;
# At 3%, a ramdisk is transferred to the phone, and the phone is rebooted &lt;br /&gt;
# At 6%, the screen changes to the palm logo&lt;br /&gt;
# At 10%, the screen changes to a big arrow pointing down to an integrated circuit&lt;br /&gt;
# Novaterm access is available from 12% onwards&lt;br /&gt;
# The progress bar advances by 2% increments every 20 seconds or so&lt;br /&gt;
# If it gets stuck at 52% for more than 30 seconds, it's not going to progress further and you will need to try again.&lt;br /&gt;
# Around 54% the filesystems are being partitioned&lt;br /&gt;
# Around 66% the modem firmware is being reflashed&lt;br /&gt;
# Around 74% the carrier apps are being installed&lt;br /&gt;
# Around 84% the ROM is being verified&lt;br /&gt;
&lt;br /&gt;
If the process fails at 84% or later, the flash and modem have actually been written, so if you reboot you will get what you were flashing.&lt;br /&gt;
&lt;br /&gt;
== Modifications to the recovery process ==&lt;br /&gt;
&lt;br /&gt;
Between about 18% and 54% complete, you can novaterm into the device while it is being flashed, and modify the filesystem that will be run after the phone reboots (e.g. to touch /var/luna/preferences/ran-first-use).&lt;br /&gt;
&lt;br /&gt;
If you stay in a mounted directory, you can even cause the flashing to abort after the carrier apps are installed and just before the ROM is verified.  This is another point where manual modifications can be made.&lt;br /&gt;
&lt;br /&gt;
After you have made your modifications, unmount any filesystems you have mounted and &amp;quot;tellbootie reboot&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Can't boot into recovery mode? ==&lt;br /&gt;
&lt;br /&gt;
In the very unlikely event that your Pre will not boot into recovery mode (indicating that your boot loader on the flash disk may be damaged or corrupted) you can try booting bootie into recovery mode over USB instead: [[Last_Resort_Emergency_BootLoader_Recovery]] '''Note that there has not been a single reported incidence of this being required, we do not recommend that you attempt this unless you have tried all the steps above exactly as described at least 10 times.'''&lt;br /&gt;
&lt;br /&gt;
Short of hardware damage, it should not be possible to &amp;quot;brick&amp;quot; a Pre.&lt;/div&gt;</summary>
		<author><name>Thatdude</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=How_To_Recover&amp;diff=7756</id>
		<title>How To Recover</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=How_To_Recover&amp;diff=7756"/>
		<updated>2009-12-09T17:50:20Z</updated>

		<summary type="html">&lt;p&gt;Thatdude: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pre not booting? webOS Doctor How-To =&lt;br /&gt;
{{tux|Tux_with_Broken_Pre.png|float:right;}}&lt;br /&gt;
Fortunately, Palm has created a tool called webOS Doctor intended for users to easily restore their devices in the event that they cannot boot for one reason or another.&lt;br /&gt;
&lt;br /&gt;
Note: Before Trying the following steps below. Try removing the battery first and reinsert the battery and turn on the device this will determine whether or not you need to perform the following steps.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download webOS Doctor here: [http://www.palm.com/us/support/downloads/pre/recoverytool/index.html http://www.palm.com/us/support/downloads/pre/recoverytool/index.html]&lt;br /&gt;
&lt;br /&gt;
WebOS Doctor Versions: [http://www.webos-internals.org/wiki/Webos_Doctor_Versions http://www.webos-internals.org/wiki/Webos_Doctor_Versions]&lt;br /&gt;
&lt;br /&gt;
After the download is complete, launch webOS Doctor:&lt;br /&gt;
&lt;br /&gt;
# Select you language&lt;br /&gt;
# Accept the license agreement&lt;br /&gt;
# Connect your Pre to you PC via USB and select &amp;quot;Next&amp;quot; when it becomes available&lt;br /&gt;
{{tux|Tux_with_Pre_and_Screwdriver.png|float:right;}}&lt;br /&gt;
After completion the device will reboot and present you with the activation set-up.&lt;br /&gt;
&lt;br /&gt;
If your PC does not recognize your Pre and you cannot go past step 3 above, try the following steps:&lt;br /&gt;
&lt;br /&gt;
# With the USB cable connected, power off the Pre&lt;br /&gt;
# Hold down the Up button on the volume rocker&lt;br /&gt;
# While holding the Up button, power on the Pre&lt;br /&gt;
# &amp;quot;Next&amp;quot; should now be enabled - proceed with the recovery&lt;br /&gt;
{{tux|Tux_with_Pre.png|float:right;}}&lt;br /&gt;
The above steps will put the Pre into bootloader recovery mode and should allow the PC to recognize your device and proceed with the restore. In this mode the screen will display a giant USB logo instead of the usual Palm startup logo.&lt;br /&gt;
&lt;br /&gt;
The process usually proceeds as follows:&lt;br /&gt;
&lt;br /&gt;
(If you're on a Mac, you can follow the progress in /var/log/system.log)&lt;br /&gt;
&lt;br /&gt;
# WebOS Doctor begins&lt;br /&gt;
# At 3%, a ramdisk is transferred to the phone, and the phone is rebooted &lt;br /&gt;
# At 6%, the screen changes to the palm logo&lt;br /&gt;
# At 10%, the screen changes to a big arrow pointing down to an integrated circuit&lt;br /&gt;
# Novaterm access is available from 12% onwards&lt;br /&gt;
# The progress bar advances by 2% increments every 20 seconds or so&lt;br /&gt;
# If it gets stuck at 52% for more than 30 seconds, it's not going to progress further and you will need to try again.&lt;br /&gt;
# Around 54% the filesystems are being partitioned&lt;br /&gt;
# Around 66% the modem firmware is being reflashed&lt;br /&gt;
# Around 74% the carrier apps are being installed&lt;br /&gt;
# Around 84% the ROM is being verified&lt;br /&gt;
&lt;br /&gt;
If the process fails at 84% or later, the flash and modem have actually been written, so if you reboot you will get what you were flashing.&lt;br /&gt;
&lt;br /&gt;
== Modifications to the recovery process ==&lt;br /&gt;
&lt;br /&gt;
Between about 18% and 54% complete, you can novaterm into the device while it is being flashed, and modify the filesystem that will be run after the phone reboots (e.g. to touch /var/luna/preferences/ran-first-use).&lt;br /&gt;
&lt;br /&gt;
If you stay in a mounted directory, you can even cause the flashing to abort after the carrier apps are installed and just before the ROM is verified.  This is another point where manual modifications can be made.&lt;br /&gt;
&lt;br /&gt;
After you have made your modifications, unmount any filesystems you have mounted and &amp;quot;tellbootie reboot&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Can't boot into recovery mode? ==&lt;br /&gt;
&lt;br /&gt;
In the very unlikely event that your Pre will not boot into recovery mode (indicating that your boot loader on the flash disk may be damaged or corrupted) you can try booting bootie into recovery mode over USB instead: [[Last_Resort_Emergency_BootLoader_Recovery]] '''Note that there has not been a single reported incidence of this being required, we do not recommend that you attempt this unless you have tried all the steps above exactly as described at least 10 times.'''&lt;br /&gt;
&lt;br /&gt;
Short of hardware damage, it should not be possible to &amp;quot;brick&amp;quot; a Pre.&lt;/div&gt;</summary>
		<author><name>Thatdude</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Application_talk:Precorder&amp;diff=7411</id>
		<title>Application talk:Precorder</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Application_talk:Precorder&amp;diff=7411"/>
		<updated>2009-11-25T05:13:54Z</updated>

		<summary type="html">&lt;p&gt;Thatdude: /* Feature Requests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Page Layout ==&lt;br /&gt;
&lt;br /&gt;
Please place all comments under the appropriate category.  If you would like a feature that has already been requested then just add your signature by placing two asterisks and four tilde's &amp;lt;nowiki&amp;gt;**~~~~&amp;lt;/nowiki&amp;gt; on the line underneath.  It will show up like this.&lt;br /&gt;
&lt;br /&gt;
*Here is a feature request that I will add my signature to.&lt;br /&gt;
**[[User:Cryptk|Cryptk]] 19:06, 24 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please remember to sign all new entries with four tildes &amp;lt;nowiki&amp;gt;~~~~&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I know this is alpha but I want ppl to put their opinions/observations.&lt;br /&gt;
&lt;br /&gt;
== Bug Reports ==&lt;br /&gt;
&lt;br /&gt;
* The sound quality is very low --[[User:En0x|en0x]] 14:31, 24 November 2009 (UTC)&lt;br /&gt;
* Both the video only and audio only options produce only audio.--[[User:Gkatsev|Gkatsev]] 16:05, 24 November 2009 (UTC)&lt;br /&gt;
* Sound is only heard in the left channel --[[User:Gryn|Gryn]] 22:39, 24 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Feature Requests ==&lt;br /&gt;
&lt;br /&gt;
* I would like to have Record New moved to the bottom... It's hard to tap it when you have slider open --[[User:En0x|en0x]] 14:21, 24 November 2009 (UTC)&lt;br /&gt;
     This was the original design, rod mucked up the css somewhere in the packaging process ;) --[[User:Prenos|Prenos]] 17:17, 24 November 2009 (UTC)&lt;br /&gt;
* Add option to launch video app from precorder --[[User:En0x|en0x]] 17:04, 24 November 2009 (UTC)&lt;br /&gt;
**--[[User:Gryn|Gryn]] 22:37, 24 November 2009 (UTC)&lt;br /&gt;
* Way to show how many minutes I recorded? in precorder --[[User:En0x|en0x]] 17:15, 24 November 2009 (UTC)&lt;br /&gt;
     I have a count up timer planned --[[User:Prenos|Prenos]] 17:18, 24 November 2009 (UTC)&lt;br /&gt;
* Flash toggle on main scene? --[[User:En0x|en0x]] 17:21, 24 November 2009 (UTC)&lt;br /&gt;
* Have it show the estimated video recording time remaining based on free space in the /media/internal --[[User:Cryptk|Cryptk]] 18:45, 24 November 2009 (UTC)&lt;br /&gt;
**--[[User:ProfJonathan|ProfJonathan]] 19:50, 24 November 2009 (UTC)&lt;br /&gt;
* Use space on keyboard to start/stop recording --[[User:En0x|en0x]] 19:34, 24 November 2009 (UTC)&lt;br /&gt;
**--[[User:ProfJonathan|ProfJonathan]] 19:50, 24 November 2009 (UTC)&lt;br /&gt;
*MP3 audio-only recording, for creating podcasts --[[User:ProfJonathan|ProfJonathan]] 19:52, 24 November 2009 (UTC)&lt;br /&gt;
* Allow user to see what is being recorded just like the camera application where you can see the picture being taken. --[[User:thatdude|thatdude]] 00:04 25 November 2009 (EST)&lt;br /&gt;
* If possible have the interface (main scene) look like the camera application where the bottom left icon would open the video application as a new card, the middle button would start/stop recording, and the right button would turn on the flash on/off on the fly. --[[User:thatdude|thatdude]] 00:08 25 November 2009 (EST)&lt;/div&gt;</summary>
		<author><name>Thatdude</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Application_talk:Precorder&amp;diff=7410</id>
		<title>Application talk:Precorder</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Application_talk:Precorder&amp;diff=7410"/>
		<updated>2009-11-25T05:09:32Z</updated>

		<summary type="html">&lt;p&gt;Thatdude: /* Feature Requests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Page Layout ==&lt;br /&gt;
&lt;br /&gt;
Please place all comments under the appropriate category.  If you would like a feature that has already been requested then just add your signature by placing two asterisks and four tilde's &amp;lt;nowiki&amp;gt;**~~~~&amp;lt;/nowiki&amp;gt; on the line underneath.  It will show up like this.&lt;br /&gt;
&lt;br /&gt;
*Here is a feature request that I will add my signature to.&lt;br /&gt;
**[[User:Cryptk|Cryptk]] 19:06, 24 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please remember to sign all new entries with four tildes &amp;lt;nowiki&amp;gt;~~~~&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I know this is alpha but I want ppl to put their opinions/observations.&lt;br /&gt;
&lt;br /&gt;
== Bug Reports ==&lt;br /&gt;
&lt;br /&gt;
* The sound quality is very low --[[User:En0x|en0x]] 14:31, 24 November 2009 (UTC)&lt;br /&gt;
* Both the video only and audio only options produce only audio.--[[User:Gkatsev|Gkatsev]] 16:05, 24 November 2009 (UTC)&lt;br /&gt;
* Sound is only heard in the left channel --[[User:Gryn|Gryn]] 22:39, 24 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Feature Requests ==&lt;br /&gt;
&lt;br /&gt;
* I would like to have Record New moved to the bottom... It's hard to tap it when you have slider open --[[User:En0x|en0x]] 14:21, 24 November 2009 (UTC)&lt;br /&gt;
     This was the original design, rod mucked up the css somewhere in the packaging process ;) --[[User:Prenos|Prenos]] 17:17, 24 November 2009 (UTC)&lt;br /&gt;
* Add option to launch video app from precorder --[[User:En0x|en0x]] 17:04, 24 November 2009 (UTC)&lt;br /&gt;
**--[[User:Gryn|Gryn]] 22:37, 24 November 2009 (UTC)&lt;br /&gt;
* Way to show how many minutes I recorded? in precorder --[[User:En0x|en0x]] 17:15, 24 November 2009 (UTC)&lt;br /&gt;
     I have a count up timer planned --[[User:Prenos|Prenos]] 17:18, 24 November 2009 (UTC)&lt;br /&gt;
* Flash toggle on main scene? --[[User:En0x|en0x]] 17:21, 24 November 2009 (UTC)&lt;br /&gt;
* Have it show the estimated video recording time remaining based on free space in the /media/internal --[[User:Cryptk|Cryptk]] 18:45, 24 November 2009 (UTC)&lt;br /&gt;
**--[[User:ProfJonathan|ProfJonathan]] 19:50, 24 November 2009 (UTC)&lt;br /&gt;
* Use space on keyboard to start/stop recording --[[User:En0x|en0x]] 19:34, 24 November 2009 (UTC)&lt;br /&gt;
**--[[User:ProfJonathan|ProfJonathan]] 19:50, 24 November 2009 (UTC)&lt;br /&gt;
*MP3 audio-only recording, for creating podcasts --[[User:ProfJonathan|ProfJonathan]] 19:52, 24 November 2009 (UTC)&lt;br /&gt;
* Allow user to see what is being recorded just like the camera application where you can see the picture being taken. --[[User:thatdude|thatdude]] 24:04 25 November 2009 (UTC)&lt;br /&gt;
* If possible have the interface (main scene) look like the camera application where the bottom left icon would open the video application as a new card, the middle button would start/stop recording, and the right button would turn on the flash on/off on the fly. --[[User:thatdude|thatdude]] 24:08 25 November 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Thatdude</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Portal:webOS_Applications_Utilities&amp;diff=3565</id>
		<title>Portal:webOS Applications Utilities</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Portal:webOS_Applications_Utilities&amp;diff=3565"/>
		<updated>2009-08-03T04:51:57Z</updated>

		<summary type="html">&lt;p&gt;Thatdude: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{portal-application-type&lt;br /&gt;
|type=webOS&lt;br /&gt;
|tag=Utilities&lt;br /&gt;
|title=Applications that pertain to a specific useful use.&lt;br /&gt;
|list=&lt;br /&gt;
&amp;lt;!-- Copy pages from the All list to this page if it fits --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|site=http://forums.precentral.net/homebrew-apps/190950-badd-flashlight-v-0-2-0-v-0-1-2-nrr&lt;br /&gt;
|category=Utilities&lt;br /&gt;
|article=BADD Flashlight&lt;br /&gt;
|name=BADD Flashlight&lt;br /&gt;
|description=Not all is lame, however, BADD Flashlight has a feature that LED-based phone flashlights do not and can not have: A Red-Light Night Vision mode. Astronomy enthusiasts, among others, use red-light flashlights to protect their dark-adjusted eyes. [http://forums.precentral.net/members/colonel-kernel.html --Colonel Kernel] [http://s671.photobucket.com/albums/vv77/Colonel_Kernel/?action=view&amp;amp;current=baddflashlight_2009-13-07_132959.jpg]&lt;br /&gt;
|user=Colonel Kernel&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|site=http://forums.precentral.net/homebrew-apps/189460-dali-clock-v228&lt;br /&gt;
|category=Utilities&lt;br /&gt;
|article=Dali Clock&lt;br /&gt;
|name=Dali Clock&lt;br /&gt;
|description=[http://www.jwz.org/xdaliclock/ Dali Clock], a Palm Pre port of a morphing clock program that I've been porting to various platforms since 1991! The original version ran on the Xerox Alto in the early 1980s, and on the original 128K Macintosh in 1984. I've written versions for X11, MacOS X, PalmOS Classic, and now Palm WebOS and Javascript. Download the applications and/or the source code on the above URL.  Credits to [http://forums.precentral.net/members/jwz.html jwz] [http://forums.precentral.net/avatars/igodwntwn34.gif?dateline=1231462926]&lt;br /&gt;
|user=jwz&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|site=http://forums.precentral.net/homebrew-apps/190715-habla-english-spanish-translator-v1-0-nrr&lt;br /&gt;
|category=Utilities&lt;br /&gt;
|article=Habla Spanish Translator&lt;br /&gt;
|name=Habla! Spanish Translator&lt;br /&gt;
|description=You can enter a word in either English or Spanish, and it will pull up the definition from wordreference mobile. Outstanding post, thanks [http://forums.precentral.net/members/taalibeen.html taalibeen] [http://forums.precentral.net/attachments/homebrew-apps/20895d1246685805-habla-english-spanish-translator-v1-0-nrr-test_2009-04-07_011851.jpg]&lt;br /&gt;
|user=taalibeen&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|site=http://forums.precentral.net/homebrew-apps/192012-my-first-medical-app-v0-7-0-v0-1-0-nrr&lt;br /&gt;
|category=Utilities&lt;br /&gt;
|article=My First Medical App&lt;br /&gt;
|name=My First Medical App&lt;br /&gt;
|description=Firstly please be gentle on this JS noob. I started on JS only a little while ago and eventually want to port a bunch of utilities which I require for personal work (and will share with anyone who is interested) in my little webapp here: [http://oncopda.com/ Oncopda] Thanks again [http://forums.precentral.net/members/palmdoc2005.html Dr. PalmDoc][http://i26.tinypic.com/m8ih5i.jpg]&lt;br /&gt;
|user=Oncopda&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|name=My Flashlight&lt;br /&gt;
|site=http://forums.precentral.net/homebrew-apps/187407-my-flashlight-requires-rooting.html&lt;br /&gt;
|version=1.0.0&lt;br /&gt;
|user=PreGame&lt;br /&gt;
|article=My Flashlight&lt;br /&gt;
|category=Utilities&lt;br /&gt;
|description=Simple Flashlight Application developed by [http://forums.precentral.net/members/pregame.html PreGame] &lt;br /&gt;
http://forums.precentral.net/attachments/homebrew-apps/20089d1245457571-my-flashlight-requires-rooting-flashlight_2009-19-06_172021.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|site=http://forums.precentral.net/homebrew-apps/190192-scientific-calculator-rev-4-rev-3-nrr&lt;br /&gt;
|category=Utilities&lt;br /&gt;
|article=SciRPN_Calculator&lt;br /&gt;
|name=SciRPN Calculator Rev4&lt;br /&gt;
|description=[http://forums.precentral.net/members/themarco.html themarco] [http://forums.precentral.net/attachments/homebrew-apps/20857d1246568798-scientific-calculator-rev-4-rev-3-nrr-scicalc.png]&lt;br /&gt;
|user=themarco&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|site=http://forums.precentral.net/homebrew-apps/192079-stopwatch-timer-app-v-0-0-7-nrr.&lt;br /&gt;
|category=Utilities&lt;br /&gt;
|article=Stopwatch_Counter  &lt;br /&gt;
|name=Stopwatch / Counter  &lt;br /&gt;
|description=[http://forums.precentral.net/members/sambao21.html &amp;lt;samboa21&amp;gt;] I have created a blog for this app, and future apps. [http://crackersinc.blogspot.com/ Six Crackers In a Minute] [http://forums.precentral.net/avatars/johncc.gif?dateline=1235782676]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|site=http://forums.precentral.net/homebrew-apps/191603-soundboard-v0-0-1-nrr&lt;br /&gt;
|category=Utilities&lt;br /&gt;
|article=Soundboard&lt;br /&gt;
|name=Soundboard&lt;br /&gt;
|description=Here's a simple Soundboard app with some sound effects that you may find useful in daily conversation. [http://freesound.org/ All sounds were found at freesound :: home page] Thanks [http://forums.precentral.net/members/lrdavis4.html Davis] [http://byelinedesign.com/soundboard.jpg]&lt;br /&gt;
|user=Davis&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|name=Subway Map&lt;br /&gt;
|article=Subway Map&lt;br /&gt;
|user=thatdude&lt;br /&gt;
|site=http://forums.precentral.net/homebrew-apps/193792-subway-map-v0-3-0-7-20-a.html&lt;br /&gt;
|description=An application to view the New York City Subway map on your Palm Pre.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|name=Terminal&lt;br /&gt;
|article=Terminal&lt;br /&gt;
|user=destinal&lt;br /&gt;
|site=Application:Terminal&lt;br /&gt;
|description=A mojo terminal using a custom writen plugin back end for the Palm Pre. This project is rapidly becoming a prototype for open source team application development on the palm. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|site=http://forums.precentral.net/homebrew-apps/189399-translator-app-pre-v1-1-v1-0-1-nrr&lt;br /&gt;
|category=Utilities&lt;br /&gt;
|article=Translator&lt;br /&gt;
|name=Translator&lt;br /&gt;
|description=This is my first finished Palm Pre app, it lets you translate words and sentences from and to 30 languages. It uses the Google translate service, so be careful when translating whole sentences&lt;br /&gt;
Additionally to the translating, if you tap the paper plane button you can send the translated text directly to your buddy via the Pre's own messaging app. Thanks to coder [http://forums.precentral.net/members/roar.html roar] &lt;br /&gt;
|description=You can find all info again here: [http://u-mass.de/translator Translator for Palm Pre] [http://forums.precentral.net/attachments/homebrew-apps/20992d1246873511-translator-app-pre-v1-1-v1-0-1-nrr-translator.png]&lt;br /&gt;
|user=roar&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|site=http://forums.precentral.net/homebrew-apps/190086-timer-stick-countdown-timer-v0-1-0-nrr&lt;br /&gt;
|category=Utilities&lt;br /&gt;
|article=Timer on a stick Countdown Timer&lt;br /&gt;
|name=Timer on a stick / Countdown Timer&lt;br /&gt;
|description=It's a very simple countdown timer. You may specify any amount of time from 1 second to 99 hours, 59 minutes, and 59 seconds. [http://forums.precentral.net/members/dsevil.html --dsevil] [http://webonastick.com/webos/timer/images/timer_2009-26-06_171912.jpg]&lt;br /&gt;
|user=dsevil&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Thatdude</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Portal:webOS_Applications_Utilities&amp;diff=3564</id>
		<title>Portal:webOS Applications Utilities</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Portal:webOS_Applications_Utilities&amp;diff=3564"/>
		<updated>2009-08-03T04:47:39Z</updated>

		<summary type="html">&lt;p&gt;Thatdude: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{portal-application-type&lt;br /&gt;
|type=webOS&lt;br /&gt;
|tag=Utilities&lt;br /&gt;
|title=Applications that pertain to a specific useful use.&lt;br /&gt;
|list=&lt;br /&gt;
&amp;lt;!-- Copy pages from the All list to this page if it fits --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|site=http://forums.precentral.net/homebrew-apps/190950-badd-flashlight-v-0-2-0-v-0-1-2-nrr&lt;br /&gt;
|category=Utilities&lt;br /&gt;
|article=BADD Flashlight&lt;br /&gt;
|name=BADD Flashlight&lt;br /&gt;
|description=Not all is lame, however, BADD Flashlight has a feature that LED-based phone flashlights do not and can not have: A Red-Light Night Vision mode. Astronomy enthusiasts, among others, use red-light flashlights to protect their dark-adjusted eyes. [http://forums.precentral.net/members/colonel-kernel.html --Colonel Kernel] [http://s671.photobucket.com/albums/vv77/Colonel_Kernel/?action=view&amp;amp;current=baddflashlight_2009-13-07_132959.jpg]&lt;br /&gt;
|user=Colonel Kernel&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|site=http://forums.precentral.net/homebrew-apps/189460-dali-clock-v228&lt;br /&gt;
|category=Utilities&lt;br /&gt;
|article=Dali Clock&lt;br /&gt;
|name=Dali Clock&lt;br /&gt;
|description=[http://www.jwz.org/xdaliclock/ Dali Clock], a Palm Pre port of a morphing clock program that I've been porting to various platforms since 1991! The original version ran on the Xerox Alto in the early 1980s, and on the original 128K Macintosh in 1984. I've written versions for X11, MacOS X, PalmOS Classic, and now Palm WebOS and Javascript. Download the applications and/or the source code on the above URL.  Credits to [http://forums.precentral.net/members/jwz.html jwz] [http://forums.precentral.net/avatars/igodwntwn34.gif?dateline=1231462926]&lt;br /&gt;
|user=jwz&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|site=http://forums.precentral.net/homebrew-apps/190715-habla-english-spanish-translator-v1-0-nrr&lt;br /&gt;
|category=Utilities&lt;br /&gt;
|article=Habla Spanish Translator&lt;br /&gt;
|name=Habla! Spanish Translator&lt;br /&gt;
|description=You can enter a word in either English or Spanish, and it will pull up the definition from wordreference mobile. Outstanding post, thanks [http://forums.precentral.net/members/taalibeen.html taalibeen] [http://forums.precentral.net/attachments/homebrew-apps/20895d1246685805-habla-english-spanish-translator-v1-0-nrr-test_2009-04-07_011851.jpg]&lt;br /&gt;
|user=taalibeen&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|site=http://forums.precentral.net/homebrew-apps/192012-my-first-medical-app-v0-7-0-v0-1-0-nrr&lt;br /&gt;
|category=Utilities&lt;br /&gt;
|article=My First Medical App&lt;br /&gt;
|name=My First Medical App&lt;br /&gt;
|description=Firstly please be gentle on this JS noob. I started on JS only a little while ago and eventually want to port a bunch of utilities which I require for personal work (and will share with anyone who is interested) in my little webapp here: [http://oncopda.com/ Oncopda] Thanks again [http://forums.precentral.net/members/palmdoc2005.html Dr. PalmDoc][http://i26.tinypic.com/m8ih5i.jpg]&lt;br /&gt;
|user=Oncopda&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|name=My Flashlight&lt;br /&gt;
|site=http://forums.precentral.net/homebrew-apps/187407-my-flashlight-requires-rooting.html&lt;br /&gt;
|version=1.0.0&lt;br /&gt;
|user=PreGame&lt;br /&gt;
|article=My Flashlight&lt;br /&gt;
|category=Utilities&lt;br /&gt;
|description=Simple Flashlight Application developed by [http://forums.precentral.net/members/pregame.html PreGame] &lt;br /&gt;
http://forums.precentral.net/attachments/homebrew-apps/20089d1245457571-my-flashlight-requires-rooting-flashlight_2009-19-06_172021.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|site=http://forums.precentral.net/homebrew-apps/190192-scientific-calculator-rev-4-rev-3-nrr&lt;br /&gt;
|category=Utilities&lt;br /&gt;
|article=SciRPN_Calculator&lt;br /&gt;
|name=SciRPN Calculator Rev4&lt;br /&gt;
|description=[http://forums.precentral.net/members/themarco.html themarco] [http://forums.precentral.net/attachments/homebrew-apps/20857d1246568798-scientific-calculator-rev-4-rev-3-nrr-scicalc.png]&lt;br /&gt;
|user=themarco&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|site=http://forums.precentral.net/homebrew-apps/192079-stopwatch-timer-app-v-0-0-7-nrr.&lt;br /&gt;
|category=Utilities&lt;br /&gt;
|article=Stopwatch_Counter  &lt;br /&gt;
|name=Stopwatch / Counter  &lt;br /&gt;
|description=[http://forums.precentral.net/members/sambao21.html &amp;lt;samboa21&amp;gt;] I have created a blog for this app, and future apps. [http://crackersinc.blogspot.com/ Six Crackers In a Minute] [http://forums.precentral.net/avatars/johncc.gif?dateline=1235782676]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|site=http://forums.precentral.net/homebrew-apps/191603-soundboard-v0-0-1-nrr&lt;br /&gt;
|category=Utilities&lt;br /&gt;
|article=Soundboard&lt;br /&gt;
|name=Soundboard&lt;br /&gt;
|description=Here's a simple Soundboard app with some sound effects that you may find useful in daily conversation. [http://freesound.org/ All sounds were found at freesound :: home page] Thanks [http://forums.precentral.net/members/lrdavis4.html Davis] [http://byelinedesign.com/soundboard.jpg]&lt;br /&gt;
|user=Davis&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|name=Subway Map&lt;br /&gt;
|article=Subway Map&lt;br /&gt;
|user=thatdude&lt;br /&gt;
|site=http://forums.precentral.net/homebrew-apps/193792-subway-map-v0-3-0-7-20-a.html&lt;br /&gt;
|description=An application to view the New York City Subway map on your Palm Pre.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|name=Terminal&lt;br /&gt;
|article=Terminal&lt;br /&gt;
|user=destinal&lt;br /&gt;
|site=Application:Terminal&lt;br /&gt;
|description=A mojo terminal using a custom writen plugin back end for the Palm Pre. This project is rapidly becoming a prototype for open source team application development on the palm. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|site=http://forums.precentral.net/homebrew-apps/189399-translator-app-pre-v1-1-v1-0-1-nrr&lt;br /&gt;
|category=Utilities&lt;br /&gt;
|article=Translator&lt;br /&gt;
|name=Translator&lt;br /&gt;
|description=This is my first finished Palm Pre app, it lets you translate words and sentences from and to 30 languages. It uses the Google translate service, so be careful when translating whole sentences&lt;br /&gt;
Additionally to the translating, if you tap the paper plane button you can send the translated text directly to your buddy via the Pre's own messaging app. Thanks to coder [http://forums.precentral.net/members/roar.html roar] &lt;br /&gt;
|description=You can find all info again here: [http://u-mass.de/translator Translator for Palm Pre] [http://forums.precentral.net/attachments/homebrew-apps/20992d1246873511-translator-app-pre-v1-1-v1-0-1-nrr-translator.png]&lt;br /&gt;
|user=roar&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|site=http://forums.precentral.net/homebrew-apps/190086-timer-stick-countdown-timer-v0-1-0-nrr&lt;br /&gt;
|category=Utilities&lt;br /&gt;
|article=Timer on a stick Countdown Timer&lt;br /&gt;
|name=Timer on a stick / Countdown Timer&lt;br /&gt;
|description=It's a very simple countdown timer. You may specify any amount of time from 1 second to 99 hours, 59 minutes, and 59 seconds. [http://forums.precentral.net/members/dsevil.html --dsevil] [http://webonastick.com/webos/timer/images/timer_2009-26-06_171912.jpg]&lt;br /&gt;
|user=dsevil&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Thatdude</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Patch_Messaging_Forward_Messages&amp;diff=3004</id>
		<title>Patch Messaging Forward Messages</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Patch_Messaging_Forward_Messages&amp;diff=3004"/>
		<updated>2009-07-29T18:59:10Z</updated>

		<summary type="html">&lt;p&gt;Thatdude: /* Notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Description:''' This mod will allow you to forward a message by simply tapping on the text of a message in the chat view.  It does not interfere with the current attachment-tapping behavior.  Tapping an attached image ask if you want to forward.  Selecting &amp;quot;No&amp;quot; will still prompt for a save, etc., while selecting &amp;quot;Yes&amp;quot; will open a the compose dialog, with the message and attachments pre-populated.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' There is a patch available for the mod.  Please see [[Applying Patches]] for instructions.&lt;br /&gt;
&lt;br /&gt;
==Step One: Create the model==&lt;br /&gt;
&lt;br /&gt;
Back up and modify /usr/palm/applications/com.palm.app.messaging/app/models/messaging-luna-service.js.&lt;br /&gt;
&lt;br /&gt;
After line 10, add the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
forwardIdentifier: 'palm://com.palm.applicationManager',&lt;br /&gt;
&lt;br /&gt;
  forwardMessage: function(sceneController,messageText,attachment) {&lt;br /&gt;
	var opts = {&lt;br /&gt;
                method: 'launch',&lt;br /&gt;
                parameters: {&lt;br /&gt;
                        id: 'com.palm.app.messaging',&lt;br /&gt;
                        params: {&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        };&lt;br /&gt;
        if (messageText)&lt;br /&gt;
                opts.parameters.params.messageText = 'FWD: '+messageText;&lt;br /&gt;
        if (attachment)&lt;br /&gt;
                opts.parameters.params.attachment = attachment;&lt;br /&gt;
        return sceneController.serviceRequest(MessagingMojoService.forwardIdentifier,opts);&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Step Two: Make it respond to a tap on the text==&lt;br /&gt;
&lt;br /&gt;
Back up and modify /usr/palm/applications/com.palm.app.messaging/app/controllers/chatview-assistant.js&lt;br /&gt;
&lt;br /&gt;
Find the function '''handleMessageTap''', starting on line 1480:&lt;br /&gt;
&lt;br /&gt;
The first few lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
        handleMessageTap: function(event){  &lt;br /&gt;
                var eventTarget = this.controller.get(event.originalEvent.target);&lt;br /&gt;
&lt;br /&gt;
                var mmsImageTarget = MessagingUtils.getClassUpChain(eventTarget,'MMSImageObject');                                                                                 &lt;br /&gt;
                if(mmsImageTarget) {&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And the last few lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
                                                                                                                                                                                   &lt;br /&gt;
                        MessagingMojoService.getMessageErrorInfo(this.controller, messageData.messageId, messageData.flags, this.handleMessageErrorPopup.bind(this,messageData));  &lt;br /&gt;
                                                                                                                                                                                   &lt;br /&gt;
                }.bind(this), false);                                                                                                                                              &lt;br /&gt;
        },&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Replace the entire function with the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
        handleMessageTap: function(event){&lt;br /&gt;
                var eventTarget = this.controller.get(event.originalEvent.target);&lt;br /&gt;
&lt;br /&gt;
                var mmsImageTarget = MessagingUtils.getClassUpChain(eventTarget,'MMSImageObject');&lt;br /&gt;
                if(mmsImageTarget) {&lt;br /&gt;
                        var imagePath = mmsImageTarget.getAttribute('originalSrc');&lt;br /&gt;
                        this.controller.showAlertDialog({&lt;br /&gt;
                                onChoose: function(value) {if(value == &amp;quot;forward&amp;quot;){MessagingMojoService.forwardMessage(this.controller, event.item.messageText, imagePath);} else {this.controller.stageController.pushScene('imageview', imagePath);}},&lt;br /&gt;
                                title: $L(&amp;quot;Forward Message&amp;quot;),&lt;br /&gt;
                                message: $L(&amp;quot;Do you want to forward this message?&amp;quot;),&lt;br /&gt;
                                choices:[&lt;br /&gt;
                                        {label:$L(&amp;quot;Yes&amp;quot;), value:&amp;quot;forward&amp;quot;, type:&amp;quot;affirmative&amp;quot;},&lt;br /&gt;
                                        {label:$L(&amp;quot;No&amp;quot;), value:&amp;quot;&amp;quot;, type:&amp;quot;negative&amp;quot;}&lt;br /&gt;
                                ]&lt;br /&gt;
                        });&lt;br /&gt;
                        return;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                var mmsVideoTarget = MessagingUtils.getClassUpChain(eventTarget,'mms-video');&lt;br /&gt;
                if(mmsVideoTarget) {&lt;br /&gt;
                        var videoPath = mmsVideoTarget.getAttribute('filePath');&lt;br /&gt;
                        var videoName = mmsVideoTarget.getAttribute('fileInfo');&lt;br /&gt;
&lt;br /&gt;
                        var args = {&lt;br /&gt;
                                appId: &amp;quot;com.palm.app.videoplayer&amp;quot;,&lt;br /&gt;
                                name: &amp;quot;nowplaying&amp;quot;&lt;br /&gt;
                        };&lt;br /&gt;
                        var params = {&lt;br /&gt;
                                target: videoPath,&lt;br /&gt;
                                title: videoName&lt;br /&gt;
                        };&lt;br /&gt;
                        this.controller.showAlertDialog({&lt;br /&gt;
                                onChoose: function(value) {if(value == &amp;quot;forward&amp;quot;){MessagingMojoService.forwardMessage(this.controller, event.item.messageText, videoPath);} else {this.controller.stageController.pushScene(args, params);}},&lt;br /&gt;
                                title: $L(&amp;quot;Forward Message&amp;quot;),&lt;br /&gt;
                                message: $L(&amp;quot;Do you want to forward this message?&amp;quot;),&lt;br /&gt;
                                choices:[&lt;br /&gt;
                                        {label:$L(&amp;quot;Yes&amp;quot;), value:&amp;quot;forward&amp;quot;, type:&amp;quot;affirmative&amp;quot;},&lt;br /&gt;
                                        {label:$L(&amp;quot;No&amp;quot;), value:&amp;quot;&amp;quot;, type:&amp;quot;negative&amp;quot;}&lt;br /&gt;
                                ]&lt;br /&gt;
                        });&lt;br /&gt;
                        return;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                var mmsVcardTarget = MessagingUtils.getClassUpChain(eventTarget,'mms-vcard');&lt;br /&gt;
                if(mmsVcardTarget) {&lt;br /&gt;
                        var filePath = mmsVcardTarget.getAttribute('filePath');&lt;br /&gt;
                        this.controller.showAlertDialog({&lt;br /&gt;
                                onChoose: function(value) {if(value == &amp;quot;forward&amp;quot;){MessagingMojoService.forwardMessage(this.controller, event.item.messageText, filePath);} else {this.controller.stageController.pushScene('mmsTextAttachment', filePath);}},&lt;br /&gt;
                                title: $L(&amp;quot;Forward Message&amp;quot;),&lt;br /&gt;
                                message: $L(&amp;quot;Do you want to forward this message?&amp;quot;),&lt;br /&gt;
                                choices:[&lt;br /&gt;
                                        {label:$L(&amp;quot;Yes&amp;quot;), value:&amp;quot;forward&amp;quot;, type:&amp;quot;affirmative&amp;quot;},&lt;br /&gt;
                                        {label:$L(&amp;quot;No&amp;quot;), value:&amp;quot;&amp;quot;, type:&amp;quot;negative&amp;quot;}&lt;br /&gt;
                                ]&lt;br /&gt;
                        });&lt;br /&gt;
                        return;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                var mmsVcalTarget = MessagingUtils.getClassUpChain(eventTarget,'mms-vcal');&lt;br /&gt;
                if(mmsVcalTarget) {&lt;br /&gt;
                        var filePath = mmsVcalTarget.getAttribute('filePath');&lt;br /&gt;
                        this.controller.showAlertDialog({&lt;br /&gt;
                                onChoose: function(value) {if(value == &amp;quot;forward&amp;quot;){MessagingMojoService.forwardMessage(this.controller, event.item.messageText, filePath);} else {this.controller.stageController.pushScene('mmsTextAttachment', filePath);}},&lt;br /&gt;
                                title: $L(&amp;quot;Forward Message&amp;quot;),&lt;br /&gt;
                                message: $L(&amp;quot;Do you want to forward this message?&amp;quot;),&lt;br /&gt;
                                choices:[&lt;br /&gt;
                                        {label:$L(&amp;quot;Yes&amp;quot;), value:&amp;quot;forward&amp;quot;, type:&amp;quot;affirmative&amp;quot;},&lt;br /&gt;
                                        {label:$L(&amp;quot;No&amp;quot;), value:&amp;quot;&amp;quot;, type:&amp;quot;negative&amp;quot;}&lt;br /&gt;
                                ]&lt;br /&gt;
                        });&lt;br /&gt;
                        return;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                if (!mmsImageTarget &amp;amp;&amp;amp; !mmsVideoTarget &amp;amp;&amp;amp; !mmsVcardTarget &amp;amp;&amp;amp; !mmsVcalTarget) {&lt;br /&gt;
                        this.controller.showAlertDialog({&lt;br /&gt;
                                onChoose: function(value) {if(value == &amp;quot;forward&amp;quot;){MessagingMojoService.forwardMessage(this.controller, event.item.messageText, '');}},&lt;br /&gt;
                                title: $L(&amp;quot;Forward Message&amp;quot;),&lt;br /&gt;
                                message: $L(&amp;quot;Do you want to forward this message?&amp;quot;),&lt;br /&gt;
                                choices:[&lt;br /&gt;
                                        {label:$L(&amp;quot;Yes&amp;quot;), value:&amp;quot;forward&amp;quot;, type:&amp;quot;affirmative&amp;quot;},&lt;br /&gt;
                                        {label:$L(&amp;quot;No&amp;quot;), value:&amp;quot;&amp;quot;, type:&amp;quot;negative&amp;quot;}&lt;br /&gt;
                                ]&lt;br /&gt;
                        });&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                MessagingUtils.simpleListClick(this.controller.get(event.originalEvent.target), &amp;quot;chatRow&amp;quot;, function(targetRow){&lt;br /&gt;
                        var messageData = {&lt;br /&gt;
                                errorCode: targetRow.getAttribute(&amp;quot;errorCode&amp;quot;),&lt;br /&gt;
                                status: targetRow.getAttribute(&amp;quot;status&amp;quot;),&lt;br /&gt;
                                messageId: targetRow.getAttribute(&amp;quot;messageId&amp;quot;),&lt;br /&gt;
                                flags: targetRow.getAttribute(&amp;quot;flags&amp;quot;),&lt;br /&gt;
                                messageType: targetRow.getAttribute(&amp;quot;messageType&amp;quot;)&lt;br /&gt;
                        };&lt;br /&gt;
&lt;br /&gt;
                        MessagingMojoService.getMessageErrorInfo(this.controller, messageData.messageId, messageData.flags, this.handleMessageErrorPopup.bind(this,messageData));&lt;br /&gt;
&lt;br /&gt;
                }.bind(this), false);&lt;br /&gt;
        },&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot for changes to take effect.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
To forward a message, open the Messaging application, tap a chat thread, then tap an individual message.  A dialog will pop up asking if you would like to forward.  If the message has an attachment, it will be forwarded, as well.  A new compose card will open with the message text pre-populated.  Simply choose the recipient(s).&lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
Patching [[Messaging_Mod_Character_Counter]] will not allow for this patch to work, please take a look into this.  -thatdude&lt;br /&gt;
&lt;br /&gt;
= Credits=&lt;br /&gt;
Submitted by JackieRipper and Atlanta&lt;/div&gt;</summary>
		<author><name>Thatdude</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Patch_Messaging_Forward_Messages&amp;diff=2987</id>
		<title>Patch Messaging Forward Messages</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Patch_Messaging_Forward_Messages&amp;diff=2987"/>
		<updated>2009-07-29T18:37:42Z</updated>

		<summary type="html">&lt;p&gt;Thatdude: /* Notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Description:''' This mod will allow you to forward a message by simply tapping on the text of a message in the chat view.  It does not interfere with the current attachment-tapping behavior.  Tapping an attached image ask if you want to forward.  Selecting &amp;quot;No&amp;quot; will still prompt for a save, etc., while selecting &amp;quot;Yes&amp;quot; will open a the compose dialog, with the message and attachments pre-populated.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' There is a patch available for the mod.  Please see [[Applying Patches]] for instructions.&lt;br /&gt;
&lt;br /&gt;
==Step One: Create the model==&lt;br /&gt;
&lt;br /&gt;
Back up and modify /usr/palm/applications/com.palm.app.messaging/app/models/messaging-luna-service.js.&lt;br /&gt;
&lt;br /&gt;
After line 10, add the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
forwardIdentifier: 'palm://com.palm.applicationManager',&lt;br /&gt;
&lt;br /&gt;
  forwardMessage: function(sceneController,messageText,attachment) {&lt;br /&gt;
	var opts = {&lt;br /&gt;
                method: 'launch',&lt;br /&gt;
                parameters: {&lt;br /&gt;
                        id: 'com.palm.app.messaging',&lt;br /&gt;
                        params: {&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        };&lt;br /&gt;
        if (messageText)&lt;br /&gt;
                opts.parameters.params.messageText = 'FWD: '+messageText;&lt;br /&gt;
        if (attachment)&lt;br /&gt;
                opts.parameters.params.attachment = attachment;&lt;br /&gt;
        return sceneController.serviceRequest(MessagingMojoService.forwardIdentifier,opts);&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Step Two: Make it respond to a tap on the text==&lt;br /&gt;
&lt;br /&gt;
Back up and modify /usr/palm/applications/com.palm.app.messaging/app/controllers/chatview-assistant.js&lt;br /&gt;
&lt;br /&gt;
Find the function '''handleMessageTap''', starting on line 1480:&lt;br /&gt;
&lt;br /&gt;
The first few lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
        handleMessageTap: function(event){  &lt;br /&gt;
                var eventTarget = this.controller.get(event.originalEvent.target);&lt;br /&gt;
&lt;br /&gt;
                var mmsImageTarget = MessagingUtils.getClassUpChain(eventTarget,'MMSImageObject');                                                                                 &lt;br /&gt;
                if(mmsImageTarget) {&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And the last few lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
                                                                                                                                                                                   &lt;br /&gt;
                        MessagingMojoService.getMessageErrorInfo(this.controller, messageData.messageId, messageData.flags, this.handleMessageErrorPopup.bind(this,messageData));  &lt;br /&gt;
                                                                                                                                                                                   &lt;br /&gt;
                }.bind(this), false);                                                                                                                                              &lt;br /&gt;
        },&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Replace the entire function with the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
        handleMessageTap: function(event){&lt;br /&gt;
                var eventTarget = this.controller.get(event.originalEvent.target);&lt;br /&gt;
&lt;br /&gt;
                var mmsImageTarget = MessagingUtils.getClassUpChain(eventTarget,'MMSImageObject');&lt;br /&gt;
                if(mmsImageTarget) {&lt;br /&gt;
                        var imagePath = mmsImageTarget.getAttribute('originalSrc');&lt;br /&gt;
                        this.controller.showAlertDialog({&lt;br /&gt;
                                onChoose: function(value) {if(value == &amp;quot;forward&amp;quot;){MessagingMojoService.forwardMessage(this.controller, event.item.messageText, imagePath);} else {this.controller.stageController.pushScene('imageview', imagePath);}},&lt;br /&gt;
                                title: $L(&amp;quot;Forward Message&amp;quot;),&lt;br /&gt;
                                message: $L(&amp;quot;Do you want to forward this message?&amp;quot;),&lt;br /&gt;
                                choices:[&lt;br /&gt;
                                        {label:$L(&amp;quot;Yes&amp;quot;), value:&amp;quot;forward&amp;quot;, type:&amp;quot;affirmative&amp;quot;},&lt;br /&gt;
                                        {label:$L(&amp;quot;No&amp;quot;), value:&amp;quot;&amp;quot;, type:&amp;quot;negative&amp;quot;}&lt;br /&gt;
                                ]&lt;br /&gt;
                        });&lt;br /&gt;
                        return;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                var mmsVideoTarget = MessagingUtils.getClassUpChain(eventTarget,'mms-video');&lt;br /&gt;
                if(mmsVideoTarget) {&lt;br /&gt;
                        var videoPath = mmsVideoTarget.getAttribute('filePath');&lt;br /&gt;
                        var videoName = mmsVideoTarget.getAttribute('fileInfo');&lt;br /&gt;
&lt;br /&gt;
                        var args = {&lt;br /&gt;
                                appId: &amp;quot;com.palm.app.videoplayer&amp;quot;,&lt;br /&gt;
                                name: &amp;quot;nowplaying&amp;quot;&lt;br /&gt;
                        };&lt;br /&gt;
                        var params = {&lt;br /&gt;
                                target: videoPath,&lt;br /&gt;
                                title: videoName&lt;br /&gt;
                        };&lt;br /&gt;
                        this.controller.showAlertDialog({&lt;br /&gt;
                                onChoose: function(value) {if(value == &amp;quot;forward&amp;quot;){MessagingMojoService.forwardMessage(this.controller, event.item.messageText, videoPath);} else {this.controller.stageController.pushScene(args, params);}},&lt;br /&gt;
                                title: $L(&amp;quot;Forward Message&amp;quot;),&lt;br /&gt;
                                message: $L(&amp;quot;Do you want to forward this message?&amp;quot;),&lt;br /&gt;
                                choices:[&lt;br /&gt;
                                        {label:$L(&amp;quot;Yes&amp;quot;), value:&amp;quot;forward&amp;quot;, type:&amp;quot;affirmative&amp;quot;},&lt;br /&gt;
                                        {label:$L(&amp;quot;No&amp;quot;), value:&amp;quot;&amp;quot;, type:&amp;quot;negative&amp;quot;}&lt;br /&gt;
                                ]&lt;br /&gt;
                        });&lt;br /&gt;
                        return;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                var mmsVcardTarget = MessagingUtils.getClassUpChain(eventTarget,'mms-vcard');&lt;br /&gt;
                if(mmsVcardTarget) {&lt;br /&gt;
                        var filePath = mmsVcardTarget.getAttribute('filePath');&lt;br /&gt;
                        this.controller.showAlertDialog({&lt;br /&gt;
                                onChoose: function(value) {if(value == &amp;quot;forward&amp;quot;){MessagingMojoService.forwardMessage(this.controller, event.item.messageText, filePath);} else {this.controller.stageController.pushScene('mmsTextAttachment', filePath);}},&lt;br /&gt;
                                title: $L(&amp;quot;Forward Message&amp;quot;),&lt;br /&gt;
                                message: $L(&amp;quot;Do you want to forward this message?&amp;quot;),&lt;br /&gt;
                                choices:[&lt;br /&gt;
                                        {label:$L(&amp;quot;Yes&amp;quot;), value:&amp;quot;forward&amp;quot;, type:&amp;quot;affirmative&amp;quot;},&lt;br /&gt;
                                        {label:$L(&amp;quot;No&amp;quot;), value:&amp;quot;&amp;quot;, type:&amp;quot;negative&amp;quot;}&lt;br /&gt;
                                ]&lt;br /&gt;
                        });&lt;br /&gt;
                        return;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                var mmsVcalTarget = MessagingUtils.getClassUpChain(eventTarget,'mms-vcal');&lt;br /&gt;
                if(mmsVcalTarget) {&lt;br /&gt;
                        var filePath = mmsVcalTarget.getAttribute('filePath');&lt;br /&gt;
                        this.controller.showAlertDialog({&lt;br /&gt;
                                onChoose: function(value) {if(value == &amp;quot;forward&amp;quot;){MessagingMojoService.forwardMessage(this.controller, event.item.messageText, filePath);} else {this.controller.stageController.pushScene('mmsTextAttachment', filePath);}},&lt;br /&gt;
                                title: $L(&amp;quot;Forward Message&amp;quot;),&lt;br /&gt;
                                message: $L(&amp;quot;Do you want to forward this message?&amp;quot;),&lt;br /&gt;
                                choices:[&lt;br /&gt;
                                        {label:$L(&amp;quot;Yes&amp;quot;), value:&amp;quot;forward&amp;quot;, type:&amp;quot;affirmative&amp;quot;},&lt;br /&gt;
                                        {label:$L(&amp;quot;No&amp;quot;), value:&amp;quot;&amp;quot;, type:&amp;quot;negative&amp;quot;}&lt;br /&gt;
                                ]&lt;br /&gt;
                        });&lt;br /&gt;
                        return;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                if (!mmsImageTarget &amp;amp;&amp;amp; !mmsVideoTarget &amp;amp;&amp;amp; !mmsVcardTarget &amp;amp;&amp;amp; !mmsVcalTarget) {&lt;br /&gt;
                        this.controller.showAlertDialog({&lt;br /&gt;
                                onChoose: function(value) {if(value == &amp;quot;forward&amp;quot;){MessagingMojoService.forwardMessage(this.controller, event.item.messageText, '');}},&lt;br /&gt;
                                title: $L(&amp;quot;Forward Message&amp;quot;),&lt;br /&gt;
                                message: $L(&amp;quot;Do you want to forward this message?&amp;quot;),&lt;br /&gt;
                                choices:[&lt;br /&gt;
                                        {label:$L(&amp;quot;Yes&amp;quot;), value:&amp;quot;forward&amp;quot;, type:&amp;quot;affirmative&amp;quot;},&lt;br /&gt;
                                        {label:$L(&amp;quot;No&amp;quot;), value:&amp;quot;&amp;quot;, type:&amp;quot;negative&amp;quot;}&lt;br /&gt;
                                ]&lt;br /&gt;
                        });&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                MessagingUtils.simpleListClick(this.controller.get(event.originalEvent.target), &amp;quot;chatRow&amp;quot;, function(targetRow){&lt;br /&gt;
                        var messageData = {&lt;br /&gt;
                                errorCode: targetRow.getAttribute(&amp;quot;errorCode&amp;quot;),&lt;br /&gt;
                                status: targetRow.getAttribute(&amp;quot;status&amp;quot;),&lt;br /&gt;
                                messageId: targetRow.getAttribute(&amp;quot;messageId&amp;quot;),&lt;br /&gt;
                                flags: targetRow.getAttribute(&amp;quot;flags&amp;quot;),&lt;br /&gt;
                                messageType: targetRow.getAttribute(&amp;quot;messageType&amp;quot;)&lt;br /&gt;
                        };&lt;br /&gt;
&lt;br /&gt;
                        MessagingMojoService.getMessageErrorInfo(this.controller, messageData.messageId, messageData.flags, this.handleMessageErrorPopup.bind(this,messageData));&lt;br /&gt;
&lt;br /&gt;
                }.bind(this), false);&lt;br /&gt;
        },&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot for changes to take effect.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
To forward a message, open the Messaging application, tap a chat thread, then tap an individual message.  A dialog will pop up asking if you would like to forward.  If the message has an attachment, it will be forwarded, as well.  A new compose card will open with the message text pre-populated.  Simply choose the recipient(s).&lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
Patching [[Messaging_Mods#Character_Counter]] will not allow for this patch to work, please take a look into this.  -thatdude&lt;br /&gt;
&lt;br /&gt;
= Credits=&lt;br /&gt;
Submitted by JackieRipper and Atlanta&lt;/div&gt;</summary>
		<author><name>Thatdude</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Messaging_Mods&amp;diff=2984</id>
		<title>Messaging Mods</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Messaging_Mods&amp;diff=2984"/>
		<updated>2009-07-29T18:35:34Z</updated>

		<summary type="html">&lt;p&gt;Thatdude: /* Notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All files are located in '''/usr/palm/applications/com.palm.app.messaging/'''&lt;br /&gt;
&lt;br /&gt;
= Add Timestamps to All Messages =&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
A number of users have requested adding timestamps to each message that arrives on the device.&lt;br /&gt;
Palm actually goes out of their way to group messages that have arrived during various time intervals,&lt;br /&gt;
but if you'd prefer to see a timestamp on each message, simply follow the instructions below.&lt;br /&gt;
&lt;br /&gt;
== Procedure ==&lt;br /&gt;
&lt;br /&gt;
# [[Portal:Accessing_Linux|Gain root access to your device]]&lt;br /&gt;
# Remount the file system as read/write&lt;br /&gt;
# cd to '''/usr/palm/applications/com.palm.app.messaging/app/controllers/'''&lt;br /&gt;
# Backup '''chatview-assistant.js''' (just to be safe)&lt;br /&gt;
# Open '''chatview-assistant.js''' and comment out the following lines:&lt;br /&gt;
#* 1169 (webOS 1.1: '''1242''') - line that starts with: '''if(!ChatFlags.'''&lt;br /&gt;
#* 1177 (webOS 1.1: '''1250''') - line that starts with: '''if(today-msg.'''&lt;br /&gt;
#* 1179 (webOS 1.1: '''1252''') - first closing bracket on its own line: '''}'''&lt;br /&gt;
#* 1180 (webOS 1.1: '''1253''') - second closing bracket on its own line: '''}'''&lt;br /&gt;
# Save the file and exit the editor&lt;br /&gt;
# Remount the file system as read-only&lt;br /&gt;
# Logout of your root session&lt;br /&gt;
# Reboot the device&lt;br /&gt;
&lt;br /&gt;
You should now see a full timestamp on all received messages.&lt;br /&gt;
&lt;br /&gt;
== Acknowledgements ==&lt;br /&gt;
&lt;br /&gt;
Thanks to [[User:tk102|tk102]] and [[User:scuba_steve|scuba_steve]] on [http://www.precentral.net/  PreCentral] for the mod.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
= Add Timestamps to All Messages - another approach =&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The method described above is the easiest way to display message timestamps.  I went a little farther since I didn't want the &amp;quot;Message Sent:&amp;quot; label and I also wanted to format the string a bit more.  While I was at it, I also modified the view for the message text to display as pre-formatted text since text messages are text after all, not html.&lt;br /&gt;
&lt;br /&gt;
== Procedure ==&lt;br /&gt;
&lt;br /&gt;
* same as steps 1 &amp;amp; 2 above&lt;br /&gt;
* save a backup of /usr/palm/applications/com.palm.app.messaging/&lt;br /&gt;
** stylesheets/messaging.css&lt;br /&gt;
** app/views/chatview/message/message-text.html&lt;br /&gt;
** app/controllers/chatview-assistant.js&lt;br /&gt;
* edit stylesheets/messaging.css&lt;br /&gt;
** search for the string 'messageText' and append the following after its style definition&lt;br /&gt;
&lt;br /&gt;
 .messageText pre {&lt;br /&gt;
    font-family: inherit;&lt;br /&gt;
    font-size: inherit;&lt;br /&gt;
    color: inherit;&lt;br /&gt;
 }&lt;br /&gt;
 .timeStamp {&lt;br /&gt;
    font-size: 12px;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    color: #1111ff;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
**feel free to change the style to your liking.  I tried using 'white-space: pre-wrap' in the .messageText class but it didn't behave as expected, hence the use of the pre tag.&lt;br /&gt;
* edit app/views/chatview/message/message-text.html&lt;br /&gt;
** change the single line to:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div class=&amp;quot;messageText&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;#{-messageText}&amp;lt;/pre&amp;gt; #{-errorContent}&amp;lt;span class=&amp;quot;timeStamp&amp;quot;&amp;gt;#{-timeStampText}&amp;lt;/span&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* edit app/controllers/chatview-assistant.js&lt;br /&gt;
** search for the string 'preFormatChatList:' and just below that look for 'var msg = stuff.list[i];'&lt;br /&gt;
** somewhere after that line (within the for loop) add the following:&lt;br /&gt;
 var ts = new Date();&lt;br /&gt;
 ts.setTime(msg.deviceTimeStamp);&lt;br /&gt;
 msg.timeStampText = Mojo.Format.formatDate(ts,'short');&lt;br /&gt;
** note that I used msg.deviceTimeStamp which I believe is when your phone sent/received the message.  If you'd prefer the time it was actually sent by the sender, use msg.timeStamp instead.  while you're in here, you may consider applying the [[Change_Enter_To_Create_Newline_Instead_of_Send_Message|send on return behavior]] changes.&lt;br /&gt;
* restart LunaSysMgr or reboot&lt;br /&gt;
&lt;br /&gt;
be sure to save the files you modified as they could get overwritten on the next sprint update.  better yet, install [[Applying_Patches|quilt]] to manage the diffs as a patch.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= New Card For Each Conversation =&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The message app can be a pain when you have multiple conversations going on. You often have to swipe back and then pick someone else. &lt;br /&gt;
It gets annoying fast. This modification modifies the messaging application so that a new card is created whenever you click into a conversation.&lt;br /&gt;
&lt;br /&gt;
== Procedure ==&lt;br /&gt;
&lt;br /&gt;
Edit '''/usr/palm/applications/com.palm.app.messaging/app/controllers/listview-assistant.js''' and replace the launchChatView function with the following function:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
launchChatView: function(chatThreadId) {&lt;br /&gt;
    //Need to jump to that stage if it exists&lt;br /&gt;
    var stageController = Mojo.Controller.appController.getStageController(&amp;quot;messaging&amp;quot;+chatThreadId);&lt;br /&gt;
        if (stageController) {&lt;br /&gt;
            stageController.activate();&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    var params = {name: 'messaging' + chatThreadId,&lt;br /&gt;
            lightweight: Mojo.Controller.appInfo.lwStages&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var callback = function(controller) {&lt;br /&gt;
        controller.pushScene('chatview',chatThreadId,{&lt;br /&gt;
                    focusWindow: true&lt;br /&gt;
                });        &lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    Mojo.Controller.getAppController().createStageWithCallback(params, callback); //doesnt create ifit exists sooo&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  clearListBadgeForChatThreadId: function(chatThreadId) {&lt;br /&gt;
    var badgeContainers = [&amp;quot;buddyBageContainer&amp;quot;,&amp;quot;historyBageContainer&amp;quot;];&lt;br /&gt;
    var listItem;&lt;br /&gt;
    for (var i = 0; i &amp;lt; badgeContainers.length; i++) {&lt;br /&gt;
        listItem = this.controller.get(badgeContainers[i] + chatThreadId);&lt;br /&gt;
        if (listItem &amp;amp;&amp;amp; !listItem.hasClassName('hide-unread-count')) {&lt;br /&gt;
            listItem.addClassName('hide-unread-count');&lt;br /&gt;
        }&lt;br /&gt;
    }    &lt;br /&gt;
  },&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now in '''/usr/palm/applications/com.palm.app.messaging/app/controllers/chatview-assistant.js''', comment out lines 246 and 247 (webOS 1.1: comment out lines '''289''' and '''290''').&lt;br /&gt;
This change will ensure that if you use the &amp;quot;back gesture&amp;quot; in a chat, the application doesn't bring you back to the conversation list...or do anything else.&lt;br /&gt;
&lt;br /&gt;
To &amp;quot;comment out&amp;quot; a line, add // at the beginning. Example:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
printf(&amp;quot;This is code&amp;quot;);&lt;br /&gt;
//printf(&amp;quot;This is commented out&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Concerns ==&lt;br /&gt;
There is some delay in creating the new cards. I'm not sure why though.&lt;br /&gt;
As stated above, the cards are only opened when you click into the conversation.  Responding to a notification will result in the reuse of the buddy list window, and you have disabled the back gesture.&lt;br /&gt;
&lt;br /&gt;
== Acknolwedgements ==&lt;br /&gt;
&lt;br /&gt;
Thanks to [[User:mikedg|mikedg]] for the mod.&lt;br /&gt;
&lt;br /&gt;
[[User:chris_phelps|chris_phelps]] is continuing to work on this modification to get it working more completely.&lt;br /&gt;
The first step is to clean up the other launchChatNNN functionality in app-assistant.js which accepts Luna System calls from the notification dashboard items which are created when a new message is received on the phone. These code modifications are being tested currently, and will be posted when we figure out how to clear the new message counters in the main listview-assistant.js.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Character Counter =&lt;br /&gt;
&lt;br /&gt;
[[Image:Messaging_CharacterCounter.jpg|border|right|Character Counter]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
One of the features I liked about my old Treo was the character counter built-in to the messaging application. I thought it would be useful on the Pre, so I modified the messaging application to show the current character count. I made this a separate page from the other modifications because it requires many code changes. Maybe the other messaging modifications could be rolled into this page as well.&lt;br /&gt;
&lt;br /&gt;
== Procedure ==&lt;br /&gt;
&lt;br /&gt;
Run the following commands:&lt;br /&gt;
&lt;br /&gt;
''In this example, I have the patch file located in my home directory under '''patches'''''&lt;br /&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/charcounter.patch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&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/palm/applications/com.palm.app.messaging/app/controllers/chatview-assistant.js&lt;br /&gt;
patching file /usr/palm/applications/com.palm.app.messaging/app/controllers/compose-assistant.js&lt;br /&gt;
patching file /usr/palm/applications/com.palm.app.messaging/app/utilities/CharacterCounter.js&lt;br /&gt;
patching file /usr/palm/applications/com.palm.app.messaging/app/views/chatview/chatview-scene.html&lt;br /&gt;
patching file /usr/palm/applications/com.palm.app.messaging/app/views/compose/compose-scene.html&lt;br /&gt;
patching file /usr/palm/applications/com.palm.app.messaging/stylesheets/messaging.css&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These modifications will require LunaSysMgr to be restarted. A rescan will not work. After you've run the commands above, run one more command:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pkill LunaSysMgr&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== charcounter.patch ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
diff -ur /usr/palm/applications/com.palm.app.messaging/app/controllers/chatview-assistant.js /usr/palm/app-modified/com.palm.app.messaging/app/controllers/chatview-assistant.js&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.messaging/app/controllers/chatview-assistant.js	2009-07-18 00:22:14.000000000 -0500&lt;br /&gt;
+++ /usr/palm/app-modified/com.palm.app.messaging/app/controllers/chatview-assistant.js	2009-07-23 23:13:19.000000000 -0500&lt;br /&gt;
@@ -160,6 +160,11 @@&lt;br /&gt;
 				segmentCountContainer: this.controller.get('segmentCounterContainer'),&lt;br /&gt;
 				segmentCountElement: this.controller.get('segmentCounter'),&lt;br /&gt;
 				setTextFieldValueFn: this.setTextFieldValue.bind(this)&lt;br /&gt;
+			},&lt;br /&gt;
+			charCounter: {&lt;br /&gt;
+				charCountContainer: this.controller.get('charCounterContainer'),&lt;br /&gt;
+				charCountElement: this.controller.get('charCounter'),&lt;br /&gt;
+				setTextFieldValueFn: this.setTextFieldValue.bind(this)&lt;br /&gt;
 			}&lt;br /&gt;
 		};&lt;br /&gt;
 &lt;br /&gt;
diff -ur /usr/palm/applications/com.palm.app.messaging/app/controllers/compose-assistant.js /usr/palm/app-modified/com.palm.app.messaging/app/controllers/compose-assistant.js&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.messaging/app/controllers/compose-assistant.js	2009-07-18 00:22:14.000000000 -0500&lt;br /&gt;
+++ /usr/palm/app-modified/com.palm.app.messaging/app/controllers/compose-assistant.js	2009-07-23 23:14:11.000000000 -0500&lt;br /&gt;
@@ -140,6 +140,11 @@&lt;br /&gt;
 			segmentCountContainer: this.controller.get('segmentCounterContainer'),&lt;br /&gt;
 			segmentCountElement: this.controller.get('segmentCounter'),&lt;br /&gt;
 			setTextFieldValueFn: this.setTextFieldValue.bind(this)&lt;br /&gt;
+		},&lt;br /&gt;
+		charCounter: {&lt;br /&gt;
+			charCountContainer: this.controller.get('charCounterContainer'),&lt;br /&gt;
+			charCountElement: this.controller.get('charCounter'),&lt;br /&gt;
+			setTextFieldValueFn: this.setTextFieldValue.bind(this)&lt;br /&gt;
 		}&lt;br /&gt;
 	};&lt;br /&gt;
 &lt;br /&gt;
diff -ur /usr/palm/applications/com.palm.app.messaging/app/utilities/CharacterCounter.js /usr/palm/app-modified/com.palm.app.messaging/app/utilities/CharacterCounter.js&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.messaging/app/utilities/CharacterCounter.js	2009-07-18 00:22:14.000000000 -0500&lt;br /&gt;
+++ /usr/palm/app-modified/com.palm.app.messaging/app/utilities/CharacterCounter.js	2009-07-23 23:47:32.000000000 -0500&lt;br /&gt;
@@ -39,6 +39,10 @@&lt;br /&gt;
 				containerElement: null,&lt;br /&gt;
 				valueElement: null&lt;br /&gt;
 			};&lt;br /&gt;
+			var charCounterUI = {&lt;br /&gt;
+				containerElement: null,&lt;br /&gt;
+				valueElement: null&lt;br /&gt;
+			};&lt;br /&gt;
 			&lt;br /&gt;
 						&lt;br /&gt;
 			// TODO: eventually we might want to implement some cleverness that counts&lt;br /&gt;
@@ -185,6 +189,20 @@&lt;br /&gt;
 				}&lt;br /&gt;
 			};&lt;br /&gt;
 			&lt;br /&gt;
+			var setCurrentCharCount = function(newCharCount) {&lt;br /&gt;
+				if(charCounterUI.valueElement)&lt;br /&gt;
+					charCounterUI.valueElement.update(newCharCount);&lt;br /&gt;
+				if(charCounterUI.containerElement) {&lt;br /&gt;
+					if (newCharCount == 0) {&lt;br /&gt;
+						if (charCounterUI.containerElement.visible())&lt;br /&gt;
+							charCounterUI.containerElement.hide();&lt;br /&gt;
+					} else {&lt;br /&gt;
+						if (!charCounterUI.containerElement.visible())&lt;br /&gt;
+							charCounterUI.containerElement.show();&lt;br /&gt;
+					}&lt;br /&gt;
+				}&lt;br /&gt;
+			};&lt;br /&gt;
+			&lt;br /&gt;
 			return {&lt;br /&gt;
 				&lt;br /&gt;
 				init: function(controller,platform,textElement,params) {&lt;br /&gt;
@@ -265,7 +283,13 @@&lt;br /&gt;
 								setTextFieldValueFn = params.segmentCounter.setTextFieldValueFn;&lt;br /&gt;
 							}						&lt;br /&gt;
 						}&lt;br /&gt;
-&lt;br /&gt;
+						if(params.charCounter) {&lt;br /&gt;
+							charCounterUI.containerElement = params.charCounter.charCountContainer;&lt;br /&gt;
+							charCounterUI.valueElement = params.charCounter.charCountElement;&lt;br /&gt;
+							if(params.charCounter.setTextFieldValueFn) {&lt;br /&gt;
+								setTextFieldValueFn = params.charCounter.setTextFieldValueFn;&lt;br /&gt;
+							}						&lt;br /&gt;
+						}&lt;br /&gt;
 					}					&lt;br /&gt;
 				},&lt;br /&gt;
 				&lt;br /&gt;
@@ -304,6 +328,7 @@&lt;br /&gt;
 					var rawCharacterData = getRawCharacterData();&lt;br /&gt;
 					var messageData = parseMessage(rawCharacterData.message,rawCharacterData.count,_maxLength,true);&lt;br /&gt;
 					adjustedCharacterCount = messageData.adjustedCharacterCount;&lt;br /&gt;
+					setCurrentCharCount(rawCharacterData.count);&lt;br /&gt;
 					if (_maxLength &amp;gt; 0)&lt;br /&gt;
 						setOverLimit(messageData.isOverLimit);&lt;br /&gt;
 					setCurrentSegmentCount(messageData.segmentCount);				&lt;br /&gt;
diff -ur /usr/palm/applications/com.palm.app.messaging/app/views/chatview/chatview-scene.html /usr/palm/app-modified/com.palm.app.messaging/app/views/chatview/chatview-scene.html&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.messaging/app/views/chatview/chatview-scene.html	2009-07-18 00:22:14.000000000 -0500&lt;br /&gt;
+++ /usr/palm/app-modified/com.palm.app.messaging/app/views/chatview/chatview-scene.html	2009-07-23 23:16:55.000000000 -0500&lt;br /&gt;
@@ -22,6 +22,10 @@&lt;br /&gt;
 			&amp;lt;div id=&amp;quot;messageContainer&amp;quot; class='palm-row'&amp;gt;&lt;br /&gt;
 				&amp;lt;div class=&amp;quot;palm-row-wrapper textfield-group focused&amp;quot;&amp;gt;&lt;br /&gt;
 					&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&lt;br /&gt;
+						&amp;lt;div id=&amp;quot;charCounterContainer&amp;quot;&amp;gt;&lt;br /&gt;
+							&amp;lt;div id=&amp;quot;charCounter&amp;quot;&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;attachmentContainer&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
 							&amp;lt;div id=&amp;quot;cancelAttachment&amp;quot;&amp;gt;&lt;br /&gt;
 							&amp;lt;/div&amp;gt;&lt;br /&gt;
diff -ur /usr/palm/applications/com.palm.app.messaging/app/views/compose/compose-scene.html /usr/palm/app-modified/com.palm.app.messaging/app/views/compose/compose-scene.html&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.messaging/app/views/compose/compose-scene.html	2009-07-18 00:22:14.000000000 -0500&lt;br /&gt;
+++ /usr/palm/app-modified/com.palm.app.messaging/app/views/compose/compose-scene.html	2009-07-23 23:17:14.000000000 -0500&lt;br /&gt;
@@ -6,6 +6,10 @@&lt;br /&gt;
 		&amp;lt;div id=&amp;quot;messageContainer&amp;quot; class='palm-row'&amp;gt;&lt;br /&gt;
 			&amp;lt;div class=&amp;quot;palm-row-wrapper textfield-group focused&amp;quot;&amp;gt;&lt;br /&gt;
 				&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&lt;br /&gt;
+					&amp;lt;div id=&amp;quot;charCounterContainer&amp;quot;&amp;gt;&lt;br /&gt;
+						&amp;lt;div id=&amp;quot;charCounter&amp;quot;&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;attachmentContainer&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
 						&amp;lt;div id=&amp;quot;cancelAttachment&amp;quot;&amp;gt;&lt;br /&gt;
 						&amp;lt;/div&amp;gt;&lt;br /&gt;
diff -ur /usr/palm/applications/com.palm.app.messaging/stylesheets/messaging.css /usr/palm/app-modified/com.palm.app.messaging/stylesheets/messaging.css&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.messaging/stylesheets/messaging.css	2009-07-18 00:22:22.000000000 -0500&lt;br /&gt;
+++ /usr/palm/app-modified/com.palm.app.messaging/stylesheets/messaging.css	2009-07-23 23:19:25.000000000 -0500&lt;br /&gt;
@@ -837,6 +837,23 @@&lt;br /&gt;
 #messageContainer.palm-row .icon.right {&lt;br /&gt;
 	height: 61px;&lt;br /&gt;
 }&lt;br /&gt;
+#messageContainer #charCounterContainer {&lt;br /&gt;
+	line-height: 20px;&lt;br /&gt;
+	display:block;&lt;br /&gt;
+	height: 20px;&lt;br /&gt;
+	border-width: 0px 10px 0px 9px;&lt;br /&gt;
+	-webkit-border-image: url(../images/message-segment-badge.png) 0 10 0 9 stretch stretch;&lt;br /&gt;
+	position: absolute;&lt;br /&gt;
+	z-index: 3;&lt;br /&gt;
+	top: 2px;&lt;br /&gt;
+	left: 2px;&lt;br /&gt;
+}&lt;br /&gt;
+#messageContainer #charCounterContainer #charCounter {&lt;br /&gt;
+	font-size: 12px;&lt;br /&gt;
+	font-weight: bold;&lt;br /&gt;
+	color: #679BC2;&lt;br /&gt;
+	margin: 0px -4px 3px -3px;&lt;br /&gt;
+}&lt;br /&gt;
 #messageContainer #attachmentContainer {&lt;br /&gt;
 	position: relative;&lt;br /&gt;
 	margin-top:10px;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Post os1.1 update, you will need to swap in the following for the utilities/CharacterCounter.js section: (mod confirmed working by tcurtin, 7/24/09)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
diff -ur /usr/palm/applications/com.palm.app.messaging/app/utilities/CharacterCounter.js /usr/palm/app-modified/com.palm.app.messaging/app/utilities/CharacterCounter.js&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.messaging/app/utilities/CharacterCounter.js	2009-07-18 00:22:14.000000000 -0500&lt;br /&gt;
+++ /usr/palm/app-modified/com.palm.app.messaging/app/utilities/CharacterCounter.js	2009-07-24 12:20:12.000000000 -0500&lt;br /&gt;
@@ -39,6 +39,11 @@&lt;br /&gt;
                                containerElement: null,&lt;br /&gt;
                                valueElement: null&lt;br /&gt;
                        };&lt;br /&gt;
+                       var charCounterUI = {&lt;br /&gt;
+                               containerElement: null,&lt;br /&gt;
+                               valueElement: null&lt;br /&gt;
+                       };&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                        // TODO: eventually we might want to implement some cleverness that counts&lt;br /&gt;
@@ -51,6 +56,10 @@&lt;br /&gt;
                                var message = textAreaElement.value;&lt;br /&gt;
                                return {count:message.length, message:message};&lt;br /&gt;
                        };&lt;br /&gt;
+                       var charCounterUI = {&lt;br /&gt;
+                               containerElement: null,&lt;br /&gt;
+                               valueElement: null&lt;br /&gt;
+                       };&lt;br /&gt;
&lt;br /&gt;
                        var setOverLimit = function(isOver) {&lt;br /&gt;
                                if (isOver) {&lt;br /&gt;
@@ -185,6 +194,21 @@&lt;br /&gt;
                                }&lt;br /&gt;
                        };&lt;br /&gt;
&lt;br /&gt;
+                       var setCurrentCharCount = function(newCharCount) {&lt;br /&gt;
+                               if(charCounterUI.valueElement)&lt;br /&gt;
+                                       charCounterUI.valueElement.update(newCharCount);&lt;br /&gt;
+                               if(charCounterUI.containerElement) {&lt;br /&gt;
+                                       if (newCharCount == 0) {&lt;br /&gt;
+                                               if (charCounterUI.containerElement.visible())&lt;br /&gt;
+                                                       charCounterUI.containerElement.hide();&lt;br /&gt;
+                                       } else {&lt;br /&gt;
+                                               if (!charCounterUI.containerElement.visible())&lt;br /&gt;
+                                                       charCounterUI.containerElement.show();&lt;br /&gt;
+                                       }&lt;br /&gt;
+                               }&lt;br /&gt;
+                       };&lt;br /&gt;
+&lt;br /&gt;
+&lt;br /&gt;
                        return {&lt;br /&gt;
&lt;br /&gt;
                                init: function(controller,platform,textElement,params) {&lt;br /&gt;
@@ -265,7 +289,13 @@&lt;br /&gt;
                                                                setTextFieldValueFn = params.segmentCounter.setTextFieldValueFn;&lt;br /&gt;
                                                        }&lt;br /&gt;
                                                }&lt;br /&gt;
-&lt;br /&gt;
+                                               if(params.charCounter) {&lt;br /&gt;
+                                                       charCounterUI.containerElement = params.charCounter.charCountContainer;&lt;br /&gt;
+                                                       charCounterUI.valueElement = params.charCounter.charCountElement;&lt;br /&gt;
+                                                       if(params.charCounter.setTextFieldValueFn) {&lt;br /&gt;
+                                                               setTextFieldValueFn = params.charCounter.setTextFieldValueFn;&lt;br /&gt;
+                                                       }&lt;br /&gt;
+                                               }&lt;br /&gt;
                                        }&lt;br /&gt;
                                },&lt;br /&gt;
&lt;br /&gt;
@@ -304,6 +334,7 @@&lt;br /&gt;
                                        var rawCharacterData = getRawCharacterData();&lt;br /&gt;
                                        var messageData = parseMessage(rawCharacterData.message,rawCharacterData.count,_maxLength,true);&lt;br /&gt;
                                        adjustedCharacterCount = messageData.adjustedCharacterCount;&lt;br /&gt;
+                                       setCurrentCharCount(rawCharacterData.count);&lt;br /&gt;
                                        if (_maxLength &amp;gt; 0)&lt;br /&gt;
                                                setOverLimit(messageData.isOverLimit);&lt;br /&gt;
                                        setCurrentSegmentCount(messageData.segmentCount);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
[[Forward_Messages]] will not work when applying this patch. Please take a look into this. -thatdude&lt;br /&gt;
&lt;br /&gt;
== Acknowledgements ==&lt;br /&gt;
&lt;br /&gt;
* [[User:HattCzech|HattCzech]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Force Offline Send Without Dialog =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mount -o remount,rw /&lt;br /&gt;
sudo vi /usr/palm/applications/com.palm.app.messaging/app/controllers/chatview-assistant.js&lt;br /&gt;
/forceSendIfOffline =&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the line to true (below) , writequit , remount, reload , enjoy &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
forceSendIfOffline = true; &lt;br /&gt;
:wq &lt;br /&gt;
sudo mount -o remount,ro /&lt;br /&gt;
sudo stop LunaSysMgr ; sudo start LunaSysMgr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Thatdude</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Patch_Messaging_Forward_Messages&amp;diff=2980</id>
		<title>Patch Messaging Forward Messages</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Patch_Messaging_Forward_Messages&amp;diff=2980"/>
		<updated>2009-07-29T18:30:43Z</updated>

		<summary type="html">&lt;p&gt;Thatdude: /* Usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Description:''' This mod will allow you to forward a message by simply tapping on the text of a message in the chat view.  It does not interfere with the current attachment-tapping behavior.  Tapping an attached image ask if you want to forward.  Selecting &amp;quot;No&amp;quot; will still prompt for a save, etc., while selecting &amp;quot;Yes&amp;quot; will open a the compose dialog, with the message and attachments pre-populated.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' There is a patch available for the mod.  Please see [[Applying Patches]] for instructions.&lt;br /&gt;
&lt;br /&gt;
==Step One: Create the model==&lt;br /&gt;
&lt;br /&gt;
Back up and modify /usr/palm/applications/com.palm.app.messaging/app/models/messaging-luna-service.js.&lt;br /&gt;
&lt;br /&gt;
After line 10, add the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
forwardIdentifier: 'palm://com.palm.applicationManager',&lt;br /&gt;
&lt;br /&gt;
  forwardMessage: function(sceneController,messageText,attachment) {&lt;br /&gt;
	var opts = {&lt;br /&gt;
                method: 'launch',&lt;br /&gt;
                parameters: {&lt;br /&gt;
                        id: 'com.palm.app.messaging',&lt;br /&gt;
                        params: {&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        };&lt;br /&gt;
        if (messageText)&lt;br /&gt;
                opts.parameters.params.messageText = 'FWD: '+messageText;&lt;br /&gt;
        if (attachment)&lt;br /&gt;
                opts.parameters.params.attachment = attachment;&lt;br /&gt;
        return sceneController.serviceRequest(MessagingMojoService.forwardIdentifier,opts);&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Step Two: Make it respond to a tap on the text==&lt;br /&gt;
&lt;br /&gt;
Back up and modify /usr/palm/applications/com.palm.app.messaging/app/controllers/chatview-assistant.js&lt;br /&gt;
&lt;br /&gt;
Find the function '''handleMessageTap''', starting on line 1480:&lt;br /&gt;
&lt;br /&gt;
The first few lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
        handleMessageTap: function(event){  &lt;br /&gt;
                var eventTarget = this.controller.get(event.originalEvent.target);&lt;br /&gt;
&lt;br /&gt;
                var mmsImageTarget = MessagingUtils.getClassUpChain(eventTarget,'MMSImageObject');                                                                                 &lt;br /&gt;
                if(mmsImageTarget) {&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And the last few lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
                                                                                                                                                                                   &lt;br /&gt;
                        MessagingMojoService.getMessageErrorInfo(this.controller, messageData.messageId, messageData.flags, this.handleMessageErrorPopup.bind(this,messageData));  &lt;br /&gt;
                                                                                                                                                                                   &lt;br /&gt;
                }.bind(this), false);                                                                                                                                              &lt;br /&gt;
        },&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Replace the entire function with the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
        handleMessageTap: function(event){&lt;br /&gt;
                var eventTarget = this.controller.get(event.originalEvent.target);&lt;br /&gt;
&lt;br /&gt;
                var mmsImageTarget = MessagingUtils.getClassUpChain(eventTarget,'MMSImageObject');&lt;br /&gt;
                if(mmsImageTarget) {&lt;br /&gt;
                        var imagePath = mmsImageTarget.getAttribute('originalSrc');&lt;br /&gt;
                        this.controller.showAlertDialog({&lt;br /&gt;
                                onChoose: function(value) {if(value == &amp;quot;forward&amp;quot;){MessagingMojoService.forwardMessage(this.controller, event.item.messageText, imagePath);} else {this.controller.stageController.pushScene('imageview', imagePath);}},&lt;br /&gt;
                                title: $L(&amp;quot;Forward Message&amp;quot;),&lt;br /&gt;
                                message: $L(&amp;quot;Do you want to forward this message?&amp;quot;),&lt;br /&gt;
                                choices:[&lt;br /&gt;
                                        {label:$L(&amp;quot;Yes&amp;quot;), value:&amp;quot;forward&amp;quot;, type:&amp;quot;affirmative&amp;quot;},&lt;br /&gt;
                                        {label:$L(&amp;quot;No&amp;quot;), value:&amp;quot;&amp;quot;, type:&amp;quot;negative&amp;quot;}&lt;br /&gt;
                                ]&lt;br /&gt;
                        });&lt;br /&gt;
                        return;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                var mmsVideoTarget = MessagingUtils.getClassUpChain(eventTarget,'mms-video');&lt;br /&gt;
                if(mmsVideoTarget) {&lt;br /&gt;
                        var videoPath = mmsVideoTarget.getAttribute('filePath');&lt;br /&gt;
                        var videoName = mmsVideoTarget.getAttribute('fileInfo');&lt;br /&gt;
&lt;br /&gt;
                        var args = {&lt;br /&gt;
                                appId: &amp;quot;com.palm.app.videoplayer&amp;quot;,&lt;br /&gt;
                                name: &amp;quot;nowplaying&amp;quot;&lt;br /&gt;
                        };&lt;br /&gt;
                        var params = {&lt;br /&gt;
                                target: videoPath,&lt;br /&gt;
                                title: videoName&lt;br /&gt;
                        };&lt;br /&gt;
                        this.controller.showAlertDialog({&lt;br /&gt;
                                onChoose: function(value) {if(value == &amp;quot;forward&amp;quot;){MessagingMojoService.forwardMessage(this.controller, event.item.messageText, videoPath);} else {this.controller.stageController.pushScene(args, params);}},&lt;br /&gt;
                                title: $L(&amp;quot;Forward Message&amp;quot;),&lt;br /&gt;
                                message: $L(&amp;quot;Do you want to forward this message?&amp;quot;),&lt;br /&gt;
                                choices:[&lt;br /&gt;
                                        {label:$L(&amp;quot;Yes&amp;quot;), value:&amp;quot;forward&amp;quot;, type:&amp;quot;affirmative&amp;quot;},&lt;br /&gt;
                                        {label:$L(&amp;quot;No&amp;quot;), value:&amp;quot;&amp;quot;, type:&amp;quot;negative&amp;quot;}&lt;br /&gt;
                                ]&lt;br /&gt;
                        });&lt;br /&gt;
                        return;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                var mmsVcardTarget = MessagingUtils.getClassUpChain(eventTarget,'mms-vcard');&lt;br /&gt;
                if(mmsVcardTarget) {&lt;br /&gt;
                        var filePath = mmsVcardTarget.getAttribute('filePath');&lt;br /&gt;
                        this.controller.showAlertDialog({&lt;br /&gt;
                                onChoose: function(value) {if(value == &amp;quot;forward&amp;quot;){MessagingMojoService.forwardMessage(this.controller, event.item.messageText, filePath);} else {this.controller.stageController.pushScene('mmsTextAttachment', filePath);}},&lt;br /&gt;
                                title: $L(&amp;quot;Forward Message&amp;quot;),&lt;br /&gt;
                                message: $L(&amp;quot;Do you want to forward this message?&amp;quot;),&lt;br /&gt;
                                choices:[&lt;br /&gt;
                                        {label:$L(&amp;quot;Yes&amp;quot;), value:&amp;quot;forward&amp;quot;, type:&amp;quot;affirmative&amp;quot;},&lt;br /&gt;
                                        {label:$L(&amp;quot;No&amp;quot;), value:&amp;quot;&amp;quot;, type:&amp;quot;negative&amp;quot;}&lt;br /&gt;
                                ]&lt;br /&gt;
                        });&lt;br /&gt;
                        return;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                var mmsVcalTarget = MessagingUtils.getClassUpChain(eventTarget,'mms-vcal');&lt;br /&gt;
                if(mmsVcalTarget) {&lt;br /&gt;
                        var filePath = mmsVcalTarget.getAttribute('filePath');&lt;br /&gt;
                        this.controller.showAlertDialog({&lt;br /&gt;
                                onChoose: function(value) {if(value == &amp;quot;forward&amp;quot;){MessagingMojoService.forwardMessage(this.controller, event.item.messageText, filePath);} else {this.controller.stageController.pushScene('mmsTextAttachment', filePath);}},&lt;br /&gt;
                                title: $L(&amp;quot;Forward Message&amp;quot;),&lt;br /&gt;
                                message: $L(&amp;quot;Do you want to forward this message?&amp;quot;),&lt;br /&gt;
                                choices:[&lt;br /&gt;
                                        {label:$L(&amp;quot;Yes&amp;quot;), value:&amp;quot;forward&amp;quot;, type:&amp;quot;affirmative&amp;quot;},&lt;br /&gt;
                                        {label:$L(&amp;quot;No&amp;quot;), value:&amp;quot;&amp;quot;, type:&amp;quot;negative&amp;quot;}&lt;br /&gt;
                                ]&lt;br /&gt;
                        });&lt;br /&gt;
                        return;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                if (!mmsImageTarget &amp;amp;&amp;amp; !mmsVideoTarget &amp;amp;&amp;amp; !mmsVcardTarget &amp;amp;&amp;amp; !mmsVcalTarget) {&lt;br /&gt;
                        this.controller.showAlertDialog({&lt;br /&gt;
                                onChoose: function(value) {if(value == &amp;quot;forward&amp;quot;){MessagingMojoService.forwardMessage(this.controller, event.item.messageText, '');}},&lt;br /&gt;
                                title: $L(&amp;quot;Forward Message&amp;quot;),&lt;br /&gt;
                                message: $L(&amp;quot;Do you want to forward this message?&amp;quot;),&lt;br /&gt;
                                choices:[&lt;br /&gt;
                                        {label:$L(&amp;quot;Yes&amp;quot;), value:&amp;quot;forward&amp;quot;, type:&amp;quot;affirmative&amp;quot;},&lt;br /&gt;
                                        {label:$L(&amp;quot;No&amp;quot;), value:&amp;quot;&amp;quot;, type:&amp;quot;negative&amp;quot;}&lt;br /&gt;
                                ]&lt;br /&gt;
                        });&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                MessagingUtils.simpleListClick(this.controller.get(event.originalEvent.target), &amp;quot;chatRow&amp;quot;, function(targetRow){&lt;br /&gt;
                        var messageData = {&lt;br /&gt;
                                errorCode: targetRow.getAttribute(&amp;quot;errorCode&amp;quot;),&lt;br /&gt;
                                status: targetRow.getAttribute(&amp;quot;status&amp;quot;),&lt;br /&gt;
                                messageId: targetRow.getAttribute(&amp;quot;messageId&amp;quot;),&lt;br /&gt;
                                flags: targetRow.getAttribute(&amp;quot;flags&amp;quot;),&lt;br /&gt;
                                messageType: targetRow.getAttribute(&amp;quot;messageType&amp;quot;)&lt;br /&gt;
                        };&lt;br /&gt;
&lt;br /&gt;
                        MessagingMojoService.getMessageErrorInfo(this.controller, messageData.messageId, messageData.flags, this.handleMessageErrorPopup.bind(this,messageData));&lt;br /&gt;
&lt;br /&gt;
                }.bind(this), false);&lt;br /&gt;
        },&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot for changes to take effect.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
To forward a message, open the Messaging application, tap a chat thread, then tap an individual message.  A dialog will pop up asking if you would like to forward.  If the message has an attachment, it will be forwarded, as well.  A new compose card will open with the message text pre-populated.  Simply choose the recipient(s).&lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
Patching [http://www.webos-internals.org/wiki/Messaging_Mods#Character_Counter Character_Counter] will not allow for this patch to work, please take a look at this.  -thatdude&lt;br /&gt;
&lt;br /&gt;
= Credits=&lt;br /&gt;
Submitted by JackieRipper and Atlanta&lt;/div&gt;</summary>
		<author><name>Thatdude</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Patch_Messaging_Forward_Messages&amp;diff=2975</id>
		<title>Patch Messaging Forward Messages</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Patch_Messaging_Forward_Messages&amp;diff=2975"/>
		<updated>2009-07-29T18:27:36Z</updated>

		<summary type="html">&lt;p&gt;Thatdude: /* Credits */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Description:''' This mod will allow you to forward a message by simply tapping on the text of a message in the chat view.  It does not interfere with the current attachment-tapping behavior.  Tapping an attached image ask if you want to forward.  Selecting &amp;quot;No&amp;quot; will still prompt for a save, etc., while selecting &amp;quot;Yes&amp;quot; will open a the compose dialog, with the message and attachments pre-populated.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' There is a patch available for the mod.  Please see [[Applying Patches]] for instructions.&lt;br /&gt;
&lt;br /&gt;
==Step One: Create the model==&lt;br /&gt;
&lt;br /&gt;
Back up and modify /usr/palm/applications/com.palm.app.messaging/app/models/messaging-luna-service.js.&lt;br /&gt;
&lt;br /&gt;
After line 10, add the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
forwardIdentifier: 'palm://com.palm.applicationManager',&lt;br /&gt;
&lt;br /&gt;
  forwardMessage: function(sceneController,messageText,attachment) {&lt;br /&gt;
	var opts = {&lt;br /&gt;
                method: 'launch',&lt;br /&gt;
                parameters: {&lt;br /&gt;
                        id: 'com.palm.app.messaging',&lt;br /&gt;
                        params: {&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        };&lt;br /&gt;
        if (messageText)&lt;br /&gt;
                opts.parameters.params.messageText = 'FWD: '+messageText;&lt;br /&gt;
        if (attachment)&lt;br /&gt;
                opts.parameters.params.attachment = attachment;&lt;br /&gt;
        return sceneController.serviceRequest(MessagingMojoService.forwardIdentifier,opts);&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Step Two: Make it respond to a tap on the text==&lt;br /&gt;
&lt;br /&gt;
Back up and modify /usr/palm/applications/com.palm.app.messaging/app/controllers/chatview-assistant.js&lt;br /&gt;
&lt;br /&gt;
Find the function '''handleMessageTap''', starting on line 1480:&lt;br /&gt;
&lt;br /&gt;
The first few lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
        handleMessageTap: function(event){  &lt;br /&gt;
                var eventTarget = this.controller.get(event.originalEvent.target);&lt;br /&gt;
&lt;br /&gt;
                var mmsImageTarget = MessagingUtils.getClassUpChain(eventTarget,'MMSImageObject');                                                                                 &lt;br /&gt;
                if(mmsImageTarget) {&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And the last few lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
                                                                                                                                                                                   &lt;br /&gt;
                        MessagingMojoService.getMessageErrorInfo(this.controller, messageData.messageId, messageData.flags, this.handleMessageErrorPopup.bind(this,messageData));  &lt;br /&gt;
                                                                                                                                                                                   &lt;br /&gt;
                }.bind(this), false);                                                                                                                                              &lt;br /&gt;
        },&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Replace the entire function with the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
        handleMessageTap: function(event){&lt;br /&gt;
                var eventTarget = this.controller.get(event.originalEvent.target);&lt;br /&gt;
&lt;br /&gt;
                var mmsImageTarget = MessagingUtils.getClassUpChain(eventTarget,'MMSImageObject');&lt;br /&gt;
                if(mmsImageTarget) {&lt;br /&gt;
                        var imagePath = mmsImageTarget.getAttribute('originalSrc');&lt;br /&gt;
                        this.controller.showAlertDialog({&lt;br /&gt;
                                onChoose: function(value) {if(value == &amp;quot;forward&amp;quot;){MessagingMojoService.forwardMessage(this.controller, event.item.messageText, imagePath);} else {this.controller.stageController.pushScene('imageview', imagePath);}},&lt;br /&gt;
                                title: $L(&amp;quot;Forward Message&amp;quot;),&lt;br /&gt;
                                message: $L(&amp;quot;Do you want to forward this message?&amp;quot;),&lt;br /&gt;
                                choices:[&lt;br /&gt;
                                        {label:$L(&amp;quot;Yes&amp;quot;), value:&amp;quot;forward&amp;quot;, type:&amp;quot;affirmative&amp;quot;},&lt;br /&gt;
                                        {label:$L(&amp;quot;No&amp;quot;), value:&amp;quot;&amp;quot;, type:&amp;quot;negative&amp;quot;}&lt;br /&gt;
                                ]&lt;br /&gt;
                        });&lt;br /&gt;
                        return;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                var mmsVideoTarget = MessagingUtils.getClassUpChain(eventTarget,'mms-video');&lt;br /&gt;
                if(mmsVideoTarget) {&lt;br /&gt;
                        var videoPath = mmsVideoTarget.getAttribute('filePath');&lt;br /&gt;
                        var videoName = mmsVideoTarget.getAttribute('fileInfo');&lt;br /&gt;
&lt;br /&gt;
                        var args = {&lt;br /&gt;
                                appId: &amp;quot;com.palm.app.videoplayer&amp;quot;,&lt;br /&gt;
                                name: &amp;quot;nowplaying&amp;quot;&lt;br /&gt;
                        };&lt;br /&gt;
                        var params = {&lt;br /&gt;
                                target: videoPath,&lt;br /&gt;
                                title: videoName&lt;br /&gt;
                        };&lt;br /&gt;
                        this.controller.showAlertDialog({&lt;br /&gt;
                                onChoose: function(value) {if(value == &amp;quot;forward&amp;quot;){MessagingMojoService.forwardMessage(this.controller, event.item.messageText, videoPath);} else {this.controller.stageController.pushScene(args, params);}},&lt;br /&gt;
                                title: $L(&amp;quot;Forward Message&amp;quot;),&lt;br /&gt;
                                message: $L(&amp;quot;Do you want to forward this message?&amp;quot;),&lt;br /&gt;
                                choices:[&lt;br /&gt;
                                        {label:$L(&amp;quot;Yes&amp;quot;), value:&amp;quot;forward&amp;quot;, type:&amp;quot;affirmative&amp;quot;},&lt;br /&gt;
                                        {label:$L(&amp;quot;No&amp;quot;), value:&amp;quot;&amp;quot;, type:&amp;quot;negative&amp;quot;}&lt;br /&gt;
                                ]&lt;br /&gt;
                        });&lt;br /&gt;
                        return;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                var mmsVcardTarget = MessagingUtils.getClassUpChain(eventTarget,'mms-vcard');&lt;br /&gt;
                if(mmsVcardTarget) {&lt;br /&gt;
                        var filePath = mmsVcardTarget.getAttribute('filePath');&lt;br /&gt;
                        this.controller.showAlertDialog({&lt;br /&gt;
                                onChoose: function(value) {if(value == &amp;quot;forward&amp;quot;){MessagingMojoService.forwardMessage(this.controller, event.item.messageText, filePath);} else {this.controller.stageController.pushScene('mmsTextAttachment', filePath);}},&lt;br /&gt;
                                title: $L(&amp;quot;Forward Message&amp;quot;),&lt;br /&gt;
                                message: $L(&amp;quot;Do you want to forward this message?&amp;quot;),&lt;br /&gt;
                                choices:[&lt;br /&gt;
                                        {label:$L(&amp;quot;Yes&amp;quot;), value:&amp;quot;forward&amp;quot;, type:&amp;quot;affirmative&amp;quot;},&lt;br /&gt;
                                        {label:$L(&amp;quot;No&amp;quot;), value:&amp;quot;&amp;quot;, type:&amp;quot;negative&amp;quot;}&lt;br /&gt;
                                ]&lt;br /&gt;
                        });&lt;br /&gt;
                        return;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                var mmsVcalTarget = MessagingUtils.getClassUpChain(eventTarget,'mms-vcal');&lt;br /&gt;
                if(mmsVcalTarget) {&lt;br /&gt;
                        var filePath = mmsVcalTarget.getAttribute('filePath');&lt;br /&gt;
                        this.controller.showAlertDialog({&lt;br /&gt;
                                onChoose: function(value) {if(value == &amp;quot;forward&amp;quot;){MessagingMojoService.forwardMessage(this.controller, event.item.messageText, filePath);} else {this.controller.stageController.pushScene('mmsTextAttachment', filePath);}},&lt;br /&gt;
                                title: $L(&amp;quot;Forward Message&amp;quot;),&lt;br /&gt;
                                message: $L(&amp;quot;Do you want to forward this message?&amp;quot;),&lt;br /&gt;
                                choices:[&lt;br /&gt;
                                        {label:$L(&amp;quot;Yes&amp;quot;), value:&amp;quot;forward&amp;quot;, type:&amp;quot;affirmative&amp;quot;},&lt;br /&gt;
                                        {label:$L(&amp;quot;No&amp;quot;), value:&amp;quot;&amp;quot;, type:&amp;quot;negative&amp;quot;}&lt;br /&gt;
                                ]&lt;br /&gt;
                        });&lt;br /&gt;
                        return;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                if (!mmsImageTarget &amp;amp;&amp;amp; !mmsVideoTarget &amp;amp;&amp;amp; !mmsVcardTarget &amp;amp;&amp;amp; !mmsVcalTarget) {&lt;br /&gt;
                        this.controller.showAlertDialog({&lt;br /&gt;
                                onChoose: function(value) {if(value == &amp;quot;forward&amp;quot;){MessagingMojoService.forwardMessage(this.controller, event.item.messageText, '');}},&lt;br /&gt;
                                title: $L(&amp;quot;Forward Message&amp;quot;),&lt;br /&gt;
                                message: $L(&amp;quot;Do you want to forward this message?&amp;quot;),&lt;br /&gt;
                                choices:[&lt;br /&gt;
                                        {label:$L(&amp;quot;Yes&amp;quot;), value:&amp;quot;forward&amp;quot;, type:&amp;quot;affirmative&amp;quot;},&lt;br /&gt;
                                        {label:$L(&amp;quot;No&amp;quot;), value:&amp;quot;&amp;quot;, type:&amp;quot;negative&amp;quot;}&lt;br /&gt;
                                ]&lt;br /&gt;
                        });&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                MessagingUtils.simpleListClick(this.controller.get(event.originalEvent.target), &amp;quot;chatRow&amp;quot;, function(targetRow){&lt;br /&gt;
                        var messageData = {&lt;br /&gt;
                                errorCode: targetRow.getAttribute(&amp;quot;errorCode&amp;quot;),&lt;br /&gt;
                                status: targetRow.getAttribute(&amp;quot;status&amp;quot;),&lt;br /&gt;
                                messageId: targetRow.getAttribute(&amp;quot;messageId&amp;quot;),&lt;br /&gt;
                                flags: targetRow.getAttribute(&amp;quot;flags&amp;quot;),&lt;br /&gt;
                                messageType: targetRow.getAttribute(&amp;quot;messageType&amp;quot;)&lt;br /&gt;
                        };&lt;br /&gt;
&lt;br /&gt;
                        MessagingMojoService.getMessageErrorInfo(this.controller, messageData.messageId, messageData.flags, this.handleMessageErrorPopup.bind(this,messageData));&lt;br /&gt;
&lt;br /&gt;
                }.bind(this), false);&lt;br /&gt;
        },&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot for changes to take effect.&lt;br /&gt;
&lt;br /&gt;
== Usage==&lt;br /&gt;
To forward a message, open the Messaging application, tap a chat thread, then tap an individual message.  A dialog will pop up asking if you would like to forward.  If the message has an attachment, it will be forwarded, as well.  A new compose card will open with the message text pre-populated.  Simply choose the recipient(s).&lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
Patching [http://www.webos-internals.org/wiki/Messaging_Mods#Character_Counter Character_Counter] will not allow for this patch to work, please take a look at this.  -thatdude&lt;br /&gt;
&lt;br /&gt;
= Credits=&lt;br /&gt;
Submitted by JackieRipper and Atlanta&lt;/div&gt;</summary>
		<author><name>Thatdude</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Messaging_Mods&amp;diff=2972</id>
		<title>Messaging Mods</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Messaging_Mods&amp;diff=2972"/>
		<updated>2009-07-29T18:16:11Z</updated>

		<summary type="html">&lt;p&gt;Thatdude: /* Acknowledgements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All files are located in '''/usr/palm/applications/com.palm.app.messaging/'''&lt;br /&gt;
&lt;br /&gt;
= Add Timestamps to All Messages =&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
A number of users have requested adding timestamps to each message that arrives on the device.&lt;br /&gt;
Palm actually goes out of their way to group messages that have arrived during various time intervals,&lt;br /&gt;
but if you'd prefer to see a timestamp on each message, simply follow the instructions below.&lt;br /&gt;
&lt;br /&gt;
== Procedure ==&lt;br /&gt;
&lt;br /&gt;
# [[Portal:Accessing_Linux|Gain root access to your device]]&lt;br /&gt;
# Remount the file system as read/write&lt;br /&gt;
# cd to '''/usr/palm/applications/com.palm.app.messaging/app/controllers/'''&lt;br /&gt;
# Backup '''chatview-assistant.js''' (just to be safe)&lt;br /&gt;
# Open '''chatview-assistant.js''' and comment out the following lines:&lt;br /&gt;
#* 1169 (webOS 1.1: '''1242''') - line that starts with: '''if(!ChatFlags.'''&lt;br /&gt;
#* 1177 (webOS 1.1: '''1250''') - line that starts with: '''if(today-msg.'''&lt;br /&gt;
#* 1179 (webOS 1.1: '''1252''') - first closing bracket on its own line: '''}'''&lt;br /&gt;
#* 1180 (webOS 1.1: '''1253''') - second closing bracket on its own line: '''}'''&lt;br /&gt;
# Save the file and exit the editor&lt;br /&gt;
# Remount the file system as read-only&lt;br /&gt;
# Logout of your root session&lt;br /&gt;
# Reboot the device&lt;br /&gt;
&lt;br /&gt;
You should now see a full timestamp on all received messages.&lt;br /&gt;
&lt;br /&gt;
== Acknowledgements ==&lt;br /&gt;
&lt;br /&gt;
Thanks to [[User:tk102|tk102]] and [[User:scuba_steve|scuba_steve]] on [http://www.precentral.net/  PreCentral] for the mod.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
= Add Timestamps to All Messages - another approach =&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The method described above is the easiest way to display message timestamps.  I went a little farther since I didn't want the &amp;quot;Message Sent:&amp;quot; label and I also wanted to format the string a bit more.  While I was at it, I also modified the view for the message text to display as pre-formatted text since text messages are text after all, not html.&lt;br /&gt;
&lt;br /&gt;
== Procedure ==&lt;br /&gt;
&lt;br /&gt;
* same as steps 1 &amp;amp; 2 above&lt;br /&gt;
* save a backup of /usr/palm/applications/com.palm.app.messaging/&lt;br /&gt;
** stylesheets/messaging.css&lt;br /&gt;
** app/views/chatview/message/message-text.html&lt;br /&gt;
** app/controllers/chatview-assistant.js&lt;br /&gt;
* edit stylesheets/messaging.css&lt;br /&gt;
** search for the string 'messageText' and append the following after its style definition&lt;br /&gt;
&lt;br /&gt;
 .messageText pre {&lt;br /&gt;
    font-family: inherit;&lt;br /&gt;
    font-size: inherit;&lt;br /&gt;
    color: inherit;&lt;br /&gt;
 }&lt;br /&gt;
 .timeStamp {&lt;br /&gt;
    font-size: 12px;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    color: #1111ff;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
**feel free to change the style to your liking.  I tried using 'white-space: pre-wrap' in the .messageText class but it didn't behave as expected, hence the use of the pre tag.&lt;br /&gt;
* edit app/views/chatview/message/message-text.html&lt;br /&gt;
** change the single line to:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div class=&amp;quot;messageText&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;#{-messageText}&amp;lt;/pre&amp;gt; #{-errorContent}&amp;lt;span class=&amp;quot;timeStamp&amp;quot;&amp;gt;#{-timeStampText}&amp;lt;/span&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* edit app/controllers/chatview-assistant.js&lt;br /&gt;
** search for the string 'preFormatChatList:' and just below that look for 'var msg = stuff.list[i];'&lt;br /&gt;
** somewhere after that line (within the for loop) add the following:&lt;br /&gt;
 var ts = new Date();&lt;br /&gt;
 ts.setTime(msg.deviceTimeStamp);&lt;br /&gt;
 msg.timeStampText = Mojo.Format.formatDate(ts,'short');&lt;br /&gt;
** note that I used msg.deviceTimeStamp which I believe is when your phone sent/received the message.  If you'd prefer the time it was actually sent by the sender, use msg.timeStamp instead.  while you're in here, you may consider applying the [[Change_Enter_To_Create_Newline_Instead_of_Send_Message|send on return behavior]] changes.&lt;br /&gt;
* restart LunaSysMgr or reboot&lt;br /&gt;
&lt;br /&gt;
be sure to save the files you modified as they could get overwritten on the next sprint update.  better yet, install [[Applying_Patches|quilt]] to manage the diffs as a patch.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= New Card For Each Conversation =&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The message app can be a pain when you have multiple conversations going on. You often have to swipe back and then pick someone else. &lt;br /&gt;
It gets annoying fast. This modification modifies the messaging application so that a new card is created whenever you click into a conversation.&lt;br /&gt;
&lt;br /&gt;
== Procedure ==&lt;br /&gt;
&lt;br /&gt;
Edit '''/usr/palm/applications/com.palm.app.messaging/app/controllers/listview-assistant.js''' and replace the launchChatView function with the following function:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
launchChatView: function(chatThreadId) {&lt;br /&gt;
    //Need to jump to that stage if it exists&lt;br /&gt;
    var stageController = Mojo.Controller.appController.getStageController(&amp;quot;messaging&amp;quot;+chatThreadId);&lt;br /&gt;
        if (stageController) {&lt;br /&gt;
            stageController.activate();&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    var params = {name: 'messaging' + chatThreadId,&lt;br /&gt;
            lightweight: Mojo.Controller.appInfo.lwStages&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var callback = function(controller) {&lt;br /&gt;
        controller.pushScene('chatview',chatThreadId,{&lt;br /&gt;
                    focusWindow: true&lt;br /&gt;
                });        &lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    Mojo.Controller.getAppController().createStageWithCallback(params, callback); //doesnt create ifit exists sooo&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  clearListBadgeForChatThreadId: function(chatThreadId) {&lt;br /&gt;
    var badgeContainers = [&amp;quot;buddyBageContainer&amp;quot;,&amp;quot;historyBageContainer&amp;quot;];&lt;br /&gt;
    var listItem;&lt;br /&gt;
    for (var i = 0; i &amp;lt; badgeContainers.length; i++) {&lt;br /&gt;
        listItem = this.controller.get(badgeContainers[i] + chatThreadId);&lt;br /&gt;
        if (listItem &amp;amp;&amp;amp; !listItem.hasClassName('hide-unread-count')) {&lt;br /&gt;
            listItem.addClassName('hide-unread-count');&lt;br /&gt;
        }&lt;br /&gt;
    }    &lt;br /&gt;
  },&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now in '''/usr/palm/applications/com.palm.app.messaging/app/controllers/chatview-assistant.js''', comment out lines 246 and 247 (webOS 1.1: comment out lines '''289''' and '''290''').&lt;br /&gt;
This change will ensure that if you use the &amp;quot;back gesture&amp;quot; in a chat, the application doesn't bring you back to the conversation list...or do anything else.&lt;br /&gt;
&lt;br /&gt;
To &amp;quot;comment out&amp;quot; a line, add // at the beginning. Example:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
printf(&amp;quot;This is code&amp;quot;);&lt;br /&gt;
//printf(&amp;quot;This is commented out&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Concerns ==&lt;br /&gt;
There is some delay in creating the new cards. I'm not sure why though.&lt;br /&gt;
As stated above, the cards are only opened when you click into the conversation.  Responding to a notification will result in the reuse of the buddy list window, and you have disabled the back gesture.&lt;br /&gt;
&lt;br /&gt;
== Acknolwedgements ==&lt;br /&gt;
&lt;br /&gt;
Thanks to [[User:mikedg|mikedg]] for the mod.&lt;br /&gt;
&lt;br /&gt;
[[User:chris_phelps|chris_phelps]] is continuing to work on this modification to get it working more completely.&lt;br /&gt;
The first step is to clean up the other launchChatNNN functionality in app-assistant.js which accepts Luna System calls from the notification dashboard items which are created when a new message is received on the phone. These code modifications are being tested currently, and will be posted when we figure out how to clear the new message counters in the main listview-assistant.js.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Character Counter =&lt;br /&gt;
&lt;br /&gt;
[[Image:Messaging_CharacterCounter.jpg|border|right|Character Counter]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
One of the features I liked about my old Treo was the character counter built-in to the messaging application. I thought it would be useful on the Pre, so I modified the messaging application to show the current character count. I made this a separate page from the other modifications because it requires many code changes. Maybe the other messaging modifications could be rolled into this page as well.&lt;br /&gt;
&lt;br /&gt;
== Procedure ==&lt;br /&gt;
&lt;br /&gt;
Run the following commands:&lt;br /&gt;
&lt;br /&gt;
''In this example, I have the patch file located in my home directory under '''patches'''''&lt;br /&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/charcounter.patch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&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/palm/applications/com.palm.app.messaging/app/controllers/chatview-assistant.js&lt;br /&gt;
patching file /usr/palm/applications/com.palm.app.messaging/app/controllers/compose-assistant.js&lt;br /&gt;
patching file /usr/palm/applications/com.palm.app.messaging/app/utilities/CharacterCounter.js&lt;br /&gt;
patching file /usr/palm/applications/com.palm.app.messaging/app/views/chatview/chatview-scene.html&lt;br /&gt;
patching file /usr/palm/applications/com.palm.app.messaging/app/views/compose/compose-scene.html&lt;br /&gt;
patching file /usr/palm/applications/com.palm.app.messaging/stylesheets/messaging.css&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These modifications will require LunaSysMgr to be restarted. A rescan will not work. After you've run the commands above, run one more command:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pkill LunaSysMgr&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== charcounter.patch ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
diff -ur /usr/palm/applications/com.palm.app.messaging/app/controllers/chatview-assistant.js /usr/palm/app-modified/com.palm.app.messaging/app/controllers/chatview-assistant.js&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.messaging/app/controllers/chatview-assistant.js	2009-07-18 00:22:14.000000000 -0500&lt;br /&gt;
+++ /usr/palm/app-modified/com.palm.app.messaging/app/controllers/chatview-assistant.js	2009-07-23 23:13:19.000000000 -0500&lt;br /&gt;
@@ -160,6 +160,11 @@&lt;br /&gt;
 				segmentCountContainer: this.controller.get('segmentCounterContainer'),&lt;br /&gt;
 				segmentCountElement: this.controller.get('segmentCounter'),&lt;br /&gt;
 				setTextFieldValueFn: this.setTextFieldValue.bind(this)&lt;br /&gt;
+			},&lt;br /&gt;
+			charCounter: {&lt;br /&gt;
+				charCountContainer: this.controller.get('charCounterContainer'),&lt;br /&gt;
+				charCountElement: this.controller.get('charCounter'),&lt;br /&gt;
+				setTextFieldValueFn: this.setTextFieldValue.bind(this)&lt;br /&gt;
 			}&lt;br /&gt;
 		};&lt;br /&gt;
 &lt;br /&gt;
diff -ur /usr/palm/applications/com.palm.app.messaging/app/controllers/compose-assistant.js /usr/palm/app-modified/com.palm.app.messaging/app/controllers/compose-assistant.js&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.messaging/app/controllers/compose-assistant.js	2009-07-18 00:22:14.000000000 -0500&lt;br /&gt;
+++ /usr/palm/app-modified/com.palm.app.messaging/app/controllers/compose-assistant.js	2009-07-23 23:14:11.000000000 -0500&lt;br /&gt;
@@ -140,6 +140,11 @@&lt;br /&gt;
 			segmentCountContainer: this.controller.get('segmentCounterContainer'),&lt;br /&gt;
 			segmentCountElement: this.controller.get('segmentCounter'),&lt;br /&gt;
 			setTextFieldValueFn: this.setTextFieldValue.bind(this)&lt;br /&gt;
+		},&lt;br /&gt;
+		charCounter: {&lt;br /&gt;
+			charCountContainer: this.controller.get('charCounterContainer'),&lt;br /&gt;
+			charCountElement: this.controller.get('charCounter'),&lt;br /&gt;
+			setTextFieldValueFn: this.setTextFieldValue.bind(this)&lt;br /&gt;
 		}&lt;br /&gt;
 	};&lt;br /&gt;
 &lt;br /&gt;
diff -ur /usr/palm/applications/com.palm.app.messaging/app/utilities/CharacterCounter.js /usr/palm/app-modified/com.palm.app.messaging/app/utilities/CharacterCounter.js&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.messaging/app/utilities/CharacterCounter.js	2009-07-18 00:22:14.000000000 -0500&lt;br /&gt;
+++ /usr/palm/app-modified/com.palm.app.messaging/app/utilities/CharacterCounter.js	2009-07-23 23:47:32.000000000 -0500&lt;br /&gt;
@@ -39,6 +39,10 @@&lt;br /&gt;
 				containerElement: null,&lt;br /&gt;
 				valueElement: null&lt;br /&gt;
 			};&lt;br /&gt;
+			var charCounterUI = {&lt;br /&gt;
+				containerElement: null,&lt;br /&gt;
+				valueElement: null&lt;br /&gt;
+			};&lt;br /&gt;
 			&lt;br /&gt;
 						&lt;br /&gt;
 			// TODO: eventually we might want to implement some cleverness that counts&lt;br /&gt;
@@ -185,6 +189,20 @@&lt;br /&gt;
 				}&lt;br /&gt;
 			};&lt;br /&gt;
 			&lt;br /&gt;
+			var setCurrentCharCount = function(newCharCount) {&lt;br /&gt;
+				if(charCounterUI.valueElement)&lt;br /&gt;
+					charCounterUI.valueElement.update(newCharCount);&lt;br /&gt;
+				if(charCounterUI.containerElement) {&lt;br /&gt;
+					if (newCharCount == 0) {&lt;br /&gt;
+						if (charCounterUI.containerElement.visible())&lt;br /&gt;
+							charCounterUI.containerElement.hide();&lt;br /&gt;
+					} else {&lt;br /&gt;
+						if (!charCounterUI.containerElement.visible())&lt;br /&gt;
+							charCounterUI.containerElement.show();&lt;br /&gt;
+					}&lt;br /&gt;
+				}&lt;br /&gt;
+			};&lt;br /&gt;
+			&lt;br /&gt;
 			return {&lt;br /&gt;
 				&lt;br /&gt;
 				init: function(controller,platform,textElement,params) {&lt;br /&gt;
@@ -265,7 +283,13 @@&lt;br /&gt;
 								setTextFieldValueFn = params.segmentCounter.setTextFieldValueFn;&lt;br /&gt;
 							}						&lt;br /&gt;
 						}&lt;br /&gt;
-&lt;br /&gt;
+						if(params.charCounter) {&lt;br /&gt;
+							charCounterUI.containerElement = params.charCounter.charCountContainer;&lt;br /&gt;
+							charCounterUI.valueElement = params.charCounter.charCountElement;&lt;br /&gt;
+							if(params.charCounter.setTextFieldValueFn) {&lt;br /&gt;
+								setTextFieldValueFn = params.charCounter.setTextFieldValueFn;&lt;br /&gt;
+							}						&lt;br /&gt;
+						}&lt;br /&gt;
 					}					&lt;br /&gt;
 				},&lt;br /&gt;
 				&lt;br /&gt;
@@ -304,6 +328,7 @@&lt;br /&gt;
 					var rawCharacterData = getRawCharacterData();&lt;br /&gt;
 					var messageData = parseMessage(rawCharacterData.message,rawCharacterData.count,_maxLength,true);&lt;br /&gt;
 					adjustedCharacterCount = messageData.adjustedCharacterCount;&lt;br /&gt;
+					setCurrentCharCount(rawCharacterData.count);&lt;br /&gt;
 					if (_maxLength &amp;gt; 0)&lt;br /&gt;
 						setOverLimit(messageData.isOverLimit);&lt;br /&gt;
 					setCurrentSegmentCount(messageData.segmentCount);				&lt;br /&gt;
diff -ur /usr/palm/applications/com.palm.app.messaging/app/views/chatview/chatview-scene.html /usr/palm/app-modified/com.palm.app.messaging/app/views/chatview/chatview-scene.html&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.messaging/app/views/chatview/chatview-scene.html	2009-07-18 00:22:14.000000000 -0500&lt;br /&gt;
+++ /usr/palm/app-modified/com.palm.app.messaging/app/views/chatview/chatview-scene.html	2009-07-23 23:16:55.000000000 -0500&lt;br /&gt;
@@ -22,6 +22,10 @@&lt;br /&gt;
 			&amp;lt;div id=&amp;quot;messageContainer&amp;quot; class='palm-row'&amp;gt;&lt;br /&gt;
 				&amp;lt;div class=&amp;quot;palm-row-wrapper textfield-group focused&amp;quot;&amp;gt;&lt;br /&gt;
 					&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&lt;br /&gt;
+						&amp;lt;div id=&amp;quot;charCounterContainer&amp;quot;&amp;gt;&lt;br /&gt;
+							&amp;lt;div id=&amp;quot;charCounter&amp;quot;&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;attachmentContainer&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
 							&amp;lt;div id=&amp;quot;cancelAttachment&amp;quot;&amp;gt;&lt;br /&gt;
 							&amp;lt;/div&amp;gt;&lt;br /&gt;
diff -ur /usr/palm/applications/com.palm.app.messaging/app/views/compose/compose-scene.html /usr/palm/app-modified/com.palm.app.messaging/app/views/compose/compose-scene.html&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.messaging/app/views/compose/compose-scene.html	2009-07-18 00:22:14.000000000 -0500&lt;br /&gt;
+++ /usr/palm/app-modified/com.palm.app.messaging/app/views/compose/compose-scene.html	2009-07-23 23:17:14.000000000 -0500&lt;br /&gt;
@@ -6,6 +6,10 @@&lt;br /&gt;
 		&amp;lt;div id=&amp;quot;messageContainer&amp;quot; class='palm-row'&amp;gt;&lt;br /&gt;
 			&amp;lt;div class=&amp;quot;palm-row-wrapper textfield-group focused&amp;quot;&amp;gt;&lt;br /&gt;
 				&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&lt;br /&gt;
+					&amp;lt;div id=&amp;quot;charCounterContainer&amp;quot;&amp;gt;&lt;br /&gt;
+						&amp;lt;div id=&amp;quot;charCounter&amp;quot;&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;attachmentContainer&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
 						&amp;lt;div id=&amp;quot;cancelAttachment&amp;quot;&amp;gt;&lt;br /&gt;
 						&amp;lt;/div&amp;gt;&lt;br /&gt;
diff -ur /usr/palm/applications/com.palm.app.messaging/stylesheets/messaging.css /usr/palm/app-modified/com.palm.app.messaging/stylesheets/messaging.css&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.messaging/stylesheets/messaging.css	2009-07-18 00:22:22.000000000 -0500&lt;br /&gt;
+++ /usr/palm/app-modified/com.palm.app.messaging/stylesheets/messaging.css	2009-07-23 23:19:25.000000000 -0500&lt;br /&gt;
@@ -837,6 +837,23 @@&lt;br /&gt;
 #messageContainer.palm-row .icon.right {&lt;br /&gt;
 	height: 61px;&lt;br /&gt;
 }&lt;br /&gt;
+#messageContainer #charCounterContainer {&lt;br /&gt;
+	line-height: 20px;&lt;br /&gt;
+	display:block;&lt;br /&gt;
+	height: 20px;&lt;br /&gt;
+	border-width: 0px 10px 0px 9px;&lt;br /&gt;
+	-webkit-border-image: url(../images/message-segment-badge.png) 0 10 0 9 stretch stretch;&lt;br /&gt;
+	position: absolute;&lt;br /&gt;
+	z-index: 3;&lt;br /&gt;
+	top: 2px;&lt;br /&gt;
+	left: 2px;&lt;br /&gt;
+}&lt;br /&gt;
+#messageContainer #charCounterContainer #charCounter {&lt;br /&gt;
+	font-size: 12px;&lt;br /&gt;
+	font-weight: bold;&lt;br /&gt;
+	color: #679BC2;&lt;br /&gt;
+	margin: 0px -4px 3px -3px;&lt;br /&gt;
+}&lt;br /&gt;
 #messageContainer #attachmentContainer {&lt;br /&gt;
 	position: relative;&lt;br /&gt;
 	margin-top:10px;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Post os1.1 update, you will need to swap in the following for the utilities/CharacterCounter.js section: (mod confirmed working by tcurtin, 7/24/09)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
diff -ur /usr/palm/applications/com.palm.app.messaging/app/utilities/CharacterCounter.js /usr/palm/app-modified/com.palm.app.messaging/app/utilities/CharacterCounter.js&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.messaging/app/utilities/CharacterCounter.js	2009-07-18 00:22:14.000000000 -0500&lt;br /&gt;
+++ /usr/palm/app-modified/com.palm.app.messaging/app/utilities/CharacterCounter.js	2009-07-24 12:20:12.000000000 -0500&lt;br /&gt;
@@ -39,6 +39,11 @@&lt;br /&gt;
                                containerElement: null,&lt;br /&gt;
                                valueElement: null&lt;br /&gt;
                        };&lt;br /&gt;
+                       var charCounterUI = {&lt;br /&gt;
+                               containerElement: null,&lt;br /&gt;
+                               valueElement: null&lt;br /&gt;
+                       };&lt;br /&gt;
+&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                        // TODO: eventually we might want to implement some cleverness that counts&lt;br /&gt;
@@ -51,6 +56,10 @@&lt;br /&gt;
                                var message = textAreaElement.value;&lt;br /&gt;
                                return {count:message.length, message:message};&lt;br /&gt;
                        };&lt;br /&gt;
+                       var charCounterUI = {&lt;br /&gt;
+                               containerElement: null,&lt;br /&gt;
+                               valueElement: null&lt;br /&gt;
+                       };&lt;br /&gt;
&lt;br /&gt;
                        var setOverLimit = function(isOver) {&lt;br /&gt;
                                if (isOver) {&lt;br /&gt;
@@ -185,6 +194,21 @@&lt;br /&gt;
                                }&lt;br /&gt;
                        };&lt;br /&gt;
&lt;br /&gt;
+                       var setCurrentCharCount = function(newCharCount) {&lt;br /&gt;
+                               if(charCounterUI.valueElement)&lt;br /&gt;
+                                       charCounterUI.valueElement.update(newCharCount);&lt;br /&gt;
+                               if(charCounterUI.containerElement) {&lt;br /&gt;
+                                       if (newCharCount == 0) {&lt;br /&gt;
+                                               if (charCounterUI.containerElement.visible())&lt;br /&gt;
+                                                       charCounterUI.containerElement.hide();&lt;br /&gt;
+                                       } else {&lt;br /&gt;
+                                               if (!charCounterUI.containerElement.visible())&lt;br /&gt;
+                                                       charCounterUI.containerElement.show();&lt;br /&gt;
+                                       }&lt;br /&gt;
+                               }&lt;br /&gt;
+                       };&lt;br /&gt;
+&lt;br /&gt;
+&lt;br /&gt;
                        return {&lt;br /&gt;
&lt;br /&gt;
                                init: function(controller,platform,textElement,params) {&lt;br /&gt;
@@ -265,7 +289,13 @@&lt;br /&gt;
                                                                setTextFieldValueFn = params.segmentCounter.setTextFieldValueFn;&lt;br /&gt;
                                                        }&lt;br /&gt;
                                                }&lt;br /&gt;
-&lt;br /&gt;
+                                               if(params.charCounter) {&lt;br /&gt;
+                                                       charCounterUI.containerElement = params.charCounter.charCountContainer;&lt;br /&gt;
+                                                       charCounterUI.valueElement = params.charCounter.charCountElement;&lt;br /&gt;
+                                                       if(params.charCounter.setTextFieldValueFn) {&lt;br /&gt;
+                                                               setTextFieldValueFn = params.charCounter.setTextFieldValueFn;&lt;br /&gt;
+                                                       }&lt;br /&gt;
+                                               }&lt;br /&gt;
                                        }&lt;br /&gt;
                                },&lt;br /&gt;
&lt;br /&gt;
@@ -304,6 +334,7 @@&lt;br /&gt;
                                        var rawCharacterData = getRawCharacterData();&lt;br /&gt;
                                        var messageData = parseMessage(rawCharacterData.message,rawCharacterData.count,_maxLength,true);&lt;br /&gt;
                                        adjustedCharacterCount = messageData.adjustedCharacterCount;&lt;br /&gt;
+                                       setCurrentCharCount(rawCharacterData.count);&lt;br /&gt;
                                        if (_maxLength &amp;gt; 0)&lt;br /&gt;
                                                setOverLimit(messageData.isOverLimit);&lt;br /&gt;
                                        setCurrentSegmentCount(messageData.segmentCount);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
Message forwarding will not work when applying this patch, please take a look into this.  -thatdude&lt;br /&gt;
&lt;br /&gt;
== Acknowledgements ==&lt;br /&gt;
&lt;br /&gt;
* [[User:HattCzech|HattCzech]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Force Offline Send Without Dialog =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mount -o remount,rw /&lt;br /&gt;
sudo vi /usr/palm/applications/com.palm.app.messaging/app/controllers/chatview-assistant.js&lt;br /&gt;
/forceSendIfOffline =&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the line to true (below) , writequit , remount, reload , enjoy &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
forceSendIfOffline = true; &lt;br /&gt;
:wq &lt;br /&gt;
sudo mount -o remount,ro /&lt;br /&gt;
sudo stop LunaSysMgr ; sudo start LunaSysMgr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Thatdude</name></author>
	</entry>
</feed>