/** * Synchronously upload an updated meta/global. * * <p>All problems are logged and ignored. */ public void uploadUpdatedMetaGlobal() { updateMetaGlobalInPlace(); Logger.debug(LOG_TAG, "Uploading updated meta/global record."); final Object monitor = new Object(); Runnable doUpload = new Runnable() { @Override public void run() { config.metaGlobal.upload( new MetaGlobalDelegate() { @Override public void handleSuccess(MetaGlobal global, SyncStorageResponse response) { Logger.info(LOG_TAG, "Successfully uploaded updated meta/global record."); // Engine changes are stored as diffs, so update enabled engines in config to // match uploaded meta/global. config.enabledEngineNames = config.metaGlobal.getEnabledEngineNames(); // Clear userSelectedEngines because they are updated in config and meta/global. config.userSelectedEngines = null; synchronized (monitor) { monitor.notify(); } } @Override public void handleMissing(MetaGlobal global, SyncStorageResponse response) { Logger.warn( LOG_TAG, "Got 404 missing uploading updated meta/global record; shouldn't happen. Ignoring."); synchronized (monitor) { monitor.notify(); } } @Override public void handleFailure(SyncStorageResponse response) { Logger.warn(LOG_TAG, "Failed to upload updated meta/global record; ignoring."); synchronized (monitor) { monitor.notify(); } } @Override public void handleError(Exception e) { Logger.warn( LOG_TAG, "Got exception trying to upload updated meta/global record; ignoring.", e); synchronized (monitor) { monitor.notify(); } } }); } }; final Thread upload = new Thread(doUpload); synchronized (monitor) { try { upload.start(); monitor.wait(); Logger.debug(LOG_TAG, "Uploaded updated meta/global record."); } catch (InterruptedException e) { Logger.error(LOG_TAG, "Uploading updated meta/global interrupted; continuing."); } } }