Patch Camera Using Volume Buttons to Take a Picture

From WebOS Internals
Jump to navigation Jump to search


Note: If you are only looking for a hardware-based button to take a picture, the space bar will do that for you already.

Preamble

You will need write permissions to the filesystem on your Pre to apply this patch.

To get write persmissions execute:

rootfs_open -w

To remount the filesystem as read-only:

mount -o remount,ro /

Procedure

The patch is performed on /usr/palm/applications/com.palm.app.camera/app/controllers/capture-assistant.js. Please back up this file before proceeding.

--- sftp://Palm Pre/apps/com.palm.app.camera/app/controllers/capture-assistant.js.webosinternals.orig 
+++ sftp://Palm Pre/apps/com.palm.app.camera/app/controllers/capture-assistant.js 
@@ -134,6 +134,7 @@
 				this._handleCaptureToggle();
 			}.bind(this));
 		}
+		this.volumeKeySubscription = undefined;		
 		
 		
 		
@@ -164,6 +165,15 @@
 			AppAssistant.photoRollVideoLoader = AppAssistant.libraries["metascene.videos"];
 
 		}
+		// listen to volume key events
+		this.volumeKeySubscription = new Mojo.Service.Request(
+			'palm://com.palm.keys/audio', 
+			{
+				method: 'status',
+				parameters: {'subscribe': true},
+				onFailure: function() { Mojo.Log.error("Could not subscribe to volume key events"); },
+				onSuccess: this.handleVolumeKeys.bind(this), 
+			});
 		
 		llog("CaptureAssistant::setup() finished");
 	}catch(e){llog("setup threw: "+Object.toJSON(e));}},
@@ -332,6 +342,11 @@
 		}
 		
 		this.cameraControl.closeCamera();
+		
+		// clean up listener for volume keys
+		if(this.volumeKeySubscription) {
+			this.volumeKeySubscription.cancel();
+		}
 	},
 	
 	handleCommand: function(event){
@@ -383,6 +398,13 @@
 		}
 	},
   
+	// capture on release of volume keys
+	handleVolumeKeys: function(payload) {
+		// capture when either volume up or down buttons are released
+		if(payload.state === 'up' && (payload.key === 'volume_up' || payload.key === 'volume_down')) {
+ 			this.cameraControl.stillCapture();
+ 		}
+ 	},
 	
 	/**
 	 * Called by Mojo when the orientation of the device changes.

Notes

Volume Control

The keys will still alter the volume of the device. There is a way to lock the buttons so that they don't modify volume when pressed but still report events. Needs futher investigation.

~FXDemolisher