private void inflateBinding()

in firebase-inappmessaging-display/src/main/java/com/google/firebase/inappmessaging/display/FirebaseInAppMessagingDisplay.java [295:434]


  private void inflateBinding(final Activity activity, final BindingWrapper bindingWrapper) {
    // On click listener when X button or collapse button is clicked
    final View.OnClickListener dismissListener =
        new View.OnClickListener() {
          @Override
          public void onClick(View v) {
            if (callbacks != null) {
              callbacks.messageDismissed(InAppMessagingDismissType.CLICK);
            }
            dismissFiam(activity);
          }
        };

    Map<Action, View.OnClickListener> actionListeners = new HashMap<>();
    for (Action action : extractActions(inAppMessage)) {
      final View.OnClickListener actionListener;
      // TODO: need an onclick listener per action
      // If the message has an action and an action url, set up an intent to handle the url
      if (action != null && !TextUtils.isEmpty(action.getActionUrl())) {
        actionListener =
            new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                if (callbacks != null) {
                  Logging.logi("Calling callback for click action");
                  callbacks.messageClicked(action);
                }
                launchUriIntent(activity, Uri.parse(action.getActionUrl()));
                notifyFiamClick();
                // Ensure that we remove the displayed FIAM, and ensure that on re-load, the message
                // isn't re-displayed
                removeDisplayedFiam(activity);
                inAppMessage = null;
                callbacks = null;
              }
            };
      } else {
        Logging.logi("No action url found for action. Treating as dismiss.");
        actionListener = dismissListener;
      }
      actionListeners.put(action, actionListener);
    }

    final OnGlobalLayoutListener layoutListener =
        bindingWrapper.inflate(actionListeners, dismissListener);
    if (layoutListener != null) {
      bindingWrapper.getImageView().getViewTreeObserver().addOnGlobalLayoutListener(layoutListener);
    }

    // Show fiam after image successfully loads
    loadNullableImage(
        activity,
        bindingWrapper,
        extractImageData(inAppMessage),
        new FiamImageLoader.Callback() {
          @Override
          public void onSuccess() {
            // Setup dismiss on touch outside
            if (!bindingWrapper.getConfig().backgroundEnabled()) {
              bindingWrapper
                  .getRootView()
                  .setOnTouchListener(
                      new View.OnTouchListener() {
                        @Override
                        public boolean onTouch(View v, MotionEvent event) {
                          if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
                            if (callbacks != null) {
                              callbacks.messageDismissed(
                                  InAppMessagingDismissType.UNKNOWN_DISMISS_TYPE);
                            }
                            dismissFiam(activity);
                            return true;
                          }
                          return false;
                        }
                      });
            }

            // Setup impression timer
            impressionTimer.start(
                new RenewableTimer.Callback() {
                  @Override
                  public void onFinish() {
                    if (inAppMessage != null && callbacks != null) {
                      Logging.logi(
                          "Impression timer onFinish for: "
                              + inAppMessage.getCampaignMetadata().getCampaignId());

                      callbacks.impressionDetected();
                    }
                  }
                },
                IMPRESSION_THRESHOLD_MILLIS,
                INTERVAL_MILLIS);

            // Setup auto dismiss timer
            if (bindingWrapper.getConfig().autoDismiss()) {
              autoDismissTimer.start(
                  new RenewableTimer.Callback() {
                    @Override
                    public void onFinish() {
                      if (inAppMessage != null && callbacks != null) {
                        callbacks.messageDismissed(InAppMessagingDismissType.AUTO);
                      }

                      dismissFiam(activity);
                    }
                  },
                  DISMISS_THRESHOLD_MILLIS,
                  INTERVAL_MILLIS);
            }

            activity.runOnUiThread(
                new Runnable() {
                  @Override
                  public void run() {
                    windowManager.show(bindingWrapper, activity);
                    if (bindingWrapper.getConfig().animate()) {
                      // Animate entry
                      animator.slideIntoView(application, bindingWrapper.getRootView(), TOP);
                    }
                  }
                });
          }

          @Override
          public void onError(Exception e) {
            Logging.loge("Image download failure ");
            if (layoutListener != null) {
              bindingWrapper
                  .getImageView()
                  .getViewTreeObserver()
                  .removeGlobalOnLayoutListener(layoutListener);
            }
            cancelTimers(); // Not strictly necessary.
            inAppMessage = null;
            callbacks = null;
          }
        });
  }