Patch Camera Using Volume Buttons to Take a Picture

From WebOS Internals

Jump to: navigation, 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.

Contents

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.

--- a/usr/palm/applications/com.palm.app.camera/app/controllers/capture-assistant.js
+++ b/usr/palm/applications/com.palm.app.camera/app/controllers/capture-assistant.js
@@ -134,6 +134,7 @@
 				this._handleCaptureToggle();
 			}.bind(this));
 		}
+		this.volumeKeySubscription = null;
 		
 		
 		
@@ -136,7 +137,6 @@
 		}
 		
 		
-		
 		this.onKeyPressHandler = this.onKeyPress.bindAsEventListener(this);
 		Mojo.listen(this.controller.sceneElement, Mojo.Event.keydown, this.onKeyPressHandler);
 		Mojo.listen(this.controller.sceneElement, Mojo.Event.keyup, this.onKeyPressHandler);
@@ -164,7 +164,16 @@
 			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 +341,11 @@
 		}
 		
 		this.cameraControl.closeCamera();
+		
+		// clean up listener for volume keys
+		if(this.volumeKeySubscription) {
+			this.volumeKeySubscription.cancel();
+		}		
 	},
 	
 	handleCommand: function(event){
@@ -382,6 +396,14 @@
 			this.cameraControl.stillCapture();
 		}
 	},
+	
+	// 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();
+ 		}
+	},
   
 	
 	/**

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

Personal tools
Google AdSense