/** * Blocks current thread until subject object is released. It should be used to block UI thread * before the <tt>View</tt> is hidden. */ public synchronized void waitForObjectRelease() { if (providedObject != null) { try { logger.info("Waiting for object release... " + hashCode()); this.wait(REMOVAL_TIMEOUT); if (providedObject != null) { throw new RuntimeException("Timeout waiting for preview surface removal"); } logger.info("Object released! " + hashCode()); } catch (InterruptedException e) { throw new RuntimeException(e); } } ensureViewDestroyed(); }
/** * Should be called by consumer to obtain the object. It is causing hidden <tt>View</tt> to be * displayed and eventually {@link #onObjectCreated(Object)} method to be called which results in * object creation. * * @return provided object. */ public synchronized T obtainObject() { ensureViewCreated(); if (this.providedObject == null) { try { logger.info("Waiting for object..." + hashCode()); this.wait(CREATE_TIMEOUT); if (providedObject == null) { throw new RuntimeException("Timeout waiting for surface"); } logger.info("Returning object! " + hashCode()); } catch (InterruptedException e) { throw new RuntimeException(e); } } return providedObject; }