Patch Phone Show Call Duration in the Call Log

From WebOS Internals

Revision as of 23:17, 2 August 2009 by Hopspitfire (Talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search


This page details ways to enable hidden functionality in on the palm pre. You will need root shell access to perform these changes. Follow these instructions at your own risk, if you make an error (or perhaps even if you do it correctly) you risk bricking your phone, voiding your warranty, etc. These instructions assume a working knowledge of unix. Also, note that these changes require rebooting the phone to take effect.

Show call duration in the call log

Sprint always customizes their phones to conceal call duration information. This avoids angry phone calls from confused customers who are surprised when their 1:01 phone call results in 2:00 minutes charged to their account. I can sympathize. However, I won't call complain, and I occasionally want to know how long a call was after the fact.

There is now a shell script for executing the commands below if you do not feel comfortable doing the steps below manually. See http://gitorious.org/webos-internals/modifications/commit/3b2e55a22e64b5302b5d45521ccf94fe28db3595

There is a system preference phoneAppHideCallDuration which appears to control this, but it merely provides a default value. The phone app caches the value and saves it as a cookie. As an exercise, I'll show you how to set the preference as well.

To set the phoneAppHideCallDuration preference:

[user@linuxhost]$ ssh -p 222 palm-pre
user@castle:~$ su
root@castle:/home/user# luna-send -n 1 palm://com.palm.systemservice/setPreferences '{"phoneAppHideCallDuration": false}'
** Message: serviceResponse Handling: 2, { "returnValue": true }

Here we've used luna-send to broadcast a message requesting the systemservice to set a preference (I believe you can actually specify multiple preferences at once, the payload format is a json hashtable). Unfortunately, that only sets the default, so to actually see the change we need to update a cookie stored in the phone app. We'll do that now:

root@castle:/home/user# cd /var/palm/data/
root@castle:/var/palm/data# sqlite3 cookies.db
SQLite version 3.6.1
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>  update Cookies set value = "%220%22" where domain_head = ".usr.palm.applications.com.palm." and domain_tail = "app.phone" and path = "/usr/palm/applications/com.palm.app.phone" and "name" = "mojo_cookie_hidecalllogduration";
sqlite> .exit
root@castle:/var/palm/data# exit
user@castle:~$ exit
Connection to palm-pre closed.

This time we've used sqlite3 to update the cookies database directly. The primary key of the Cookies table (in the cookies database) is (domain_head, domain_tail, path, name), we specify the full key, and update the value. Note the value field is always percent-encoded and in this case represents the string "0" (including the quotes).

To see your changes, you can either reboot your phone or just restart the LunaSysMgr front-end.

  • To reboot: Hold the power key and turning it off or type shutdown -r in the shell.
  • To restart the system manager without rebooting (faster):
initctl stop LunaSysMgr
initctl start LunaSysMgr


Note: if you are typing in the sql by hand, take care you get it correct. If you make a typo and the where portion does not match any records you will not get any feedback. To verify that your update was successful run the following SQL after your issue the update: select * from Cookies where domain_tail = "app.phone"

Personal tools
Google AdSense