 (defn on-long-click-call
   "Takes a function and yields a View.OnLongClickListener object that will
   invoke the function.  This function must take one argument, the view that was
-  clicked, and must evaluate to true if it has consumed the long click, false
-  otherwise."
+  clicked, and must evaluate to a truthy value if it has consumed the long
+  click, false or nil otherwise."
   [handler-fn]
   (reify android.view.View$OnLongClickListener
     (onLongClick [this view]
-      (handler-fn view))))
+      (boolean (handler-fn view)))))
 
 (defmacro on-long-click
   "Takes a body of expressions and yields a View.OnLongClickListener object
   that will invoke the body.  The body takes an implicit argument 'view' that
-  is the view that was clicked and held.  It should also evaluate to true if it
-  consumes the long click, false otherwise."
+  is the view that was clicked and held.  The body should also evaluate to a
+  truthy value if it consumes the long click, false or nil otherwise."
   [& body]
   `(on-long-click-call (fn [~'view] ~@body)))
 


(defn on-focus-change-call
  "Takes a function and yields a View.OnFocusChangeListener object that will
  invoke the function.  This function must take the three arguments This
  function must take the two arguments described in on-focus-change."
  [handler-fn]
  (reify android.view.View$OnFocusChangeListener
    (onFocusChange [this view focused?]

  view:  the view the touch event has been dispatched to
  event: the MotionEvent object containing full information about the event
  
  It should also evaluate to a truthy value if it consumes the event, false or
  nil otherwise."
  [& body]
  `(on-touch-call (fn [~'view ~'event] ~@body)))
