コード例 #1
0
 /** Changes the bridge mode. */
 public void setBridgeMode(int value) {
   if (value < 0 || value >= registeredListeners.length) {
     Log.d(LOG_TAG, "Invalid NativeToJsBridgeMode: " + value);
   } else {
     if (value != activeListenerIndex) {
       Log.d(LOG_TAG, "Set native->JS mode to " + value);
       synchronized (this) {
         activeListenerIndex = value;
         BridgeMode activeListener = registeredListeners[value];
         if (!paused && !queue.isEmpty() && activeListener != null) {
           activeListener.onNativeToJsMessageAvailable();
         }
       }
     }
   }
 }
コード例 #2
0
 private void enqueueMessage(JsMessage message) {
   synchronized (this) {
     if (activeBridgeMode == null) {
       Log.d(LOG_TAG, "Dropping Native->JS message due to disabled bridge");
       return;
     }
     queue.add(message);
     if (!paused) {
       activeBridgeMode.onNativeToJsMessageAvailable();
     }
   }
 }
コード例 #3
0
 /** Changes the bridge mode. */
 public void setBridgeMode(int value) {
   if (value < -1 || value >= registeredListeners.length) {
     Log.d(LOG_TAG, "Invalid NativeToJsBridgeMode: " + value);
   } else {
     BridgeMode newMode = value < 0 ? null : registeredListeners[value];
     if (newMode != activeBridgeMode) {
       Log.d(
           LOG_TAG,
           "Set native->JS mode to "
               + (newMode == null ? "null" : newMode.getClass().getSimpleName()));
       synchronized (this) {
         activeBridgeMode = newMode;
         if (newMode != null) {
           newMode.reset();
           if (!paused && !queue.isEmpty()) {
             newMode.onNativeToJsMessageAvailable();
           }
         }
       }
     }
   }
 }
コード例 #4
0
 public void setPaused(boolean value) {
   if (paused && value) {
     // This should never happen. If a use-case for it comes up, we should
     // change pause to be a counter.
     Log.e(LOG_TAG, "nested call to setPaused detected.", new Throwable());
   }
   paused = value;
   if (!value) {
     synchronized (this) {
       if (!queue.isEmpty() && activeBridgeMode != null) {
         activeBridgeMode.onNativeToJsMessageAvailable();
       }
     }
   }
 }
コード例 #5
0
  /**
   * Combines and returns queued messages combined into a single string. Combines as many messages
   * as possible, while staying under MAX_PAYLOAD_SIZE. Returns null if the queue is empty.
   */
  public String popAndEncode(boolean fromOnlineEvent) {
    synchronized (this) {
      if (activeBridgeMode == null) {
        return null;
      }
      activeBridgeMode.notifyOfFlush(fromOnlineEvent);
      if (queue.isEmpty()) {
        return null;
      }
      int totalPayloadLen = 0;
      int numMessagesToSend = 0;
      for (JsMessage message : queue) {
        int messageSize = calculatePackedMessageLength(message);
        if (numMessagesToSend > 0
            && totalPayloadLen + messageSize > MAX_PAYLOAD_SIZE
            && MAX_PAYLOAD_SIZE > 0) {
          break;
        }
        totalPayloadLen += messageSize;
        numMessagesToSend += 1;
      }

      StringBuilder sb = new StringBuilder(totalPayloadLen);
      for (int i = 0; i < numMessagesToSend; ++i) {
        JsMessage message = queue.removeFirst();
        packMessage(message, sb);
      }

      if (!queue.isEmpty()) {
        // Attach a char to indicate that there are more messages pending.
        sb.append('*');
      }
      String ret = sb.toString();
      return ret;
    }
  }