/**
 * Copyright (c) 2015-present, Facebook, Inc.
 * All rights reserved.
 *
 * This source code is licensed under the BSD-style license found in the
 * LICENSE file in the root directory of this source tree. An additional grant
 * of patent rights can be found in the PATENTS file in the same directory.
 */

 package com.facebook.react.views.text;

 import javax.annotation.Nullable;

 import android.graphics.drawable.Drawable;
 import android.text.Spannable;
 import android.text.style.ReplacementSpan;
 import android.view.View;
 import android.widget.TextView;

 /**
  * Base class for inline image spans.
  */
 public abstract class TextInlineImageSpan extends ReplacementSpan {

   /**
    * For TextInlineImageSpan we need to update the Span to know that the window is attached and
    * the TextView that we will set as the callback on the Drawable.
    *
    * @param spannable The spannable that may contain TextInlineImageSpans
    * @param view The view which will be set as the callback for the Drawable
    */
   public static void possiblyUpdateInlineImageSpans(Spannable spannable, TextView view) {
     TextInlineImageSpan[] spans =
       spannable.getSpans(0, spannable.length(), TextInlineImageSpan.class);
     for (TextInlineImageSpan span : spans) {
       span.onAttachedToWindow();
       span.setTextView(view);
     }
   }

   /**
    * Get the drawable that is span represents.
    */
   public abstract @Nullable Drawable getDrawable();

   /**
    * Called by the text view from {@link View#onDetachedFromWindow()},
    */
   public abstract void onDetachedFromWindow();

   /**
    * Called by the text view from {@link View#onStartTemporaryDetach()}.
    */
   public abstract void onStartTemporaryDetach();

   /**
    * Called by the text view from {@link View#onAttachedToWindow()}.
    */
   public abstract void onAttachedToWindow();

   /**
    * Called by the text view from {@link View#onFinishTemporaryDetach()}.
    */
   public abstract void onFinishTemporaryDetach();

   /**
    * Set the textview that will contain this span.
    */
   public abstract void setTextView(TextView textView);

   /**
    * Get the width of the span.
    */
   public abstract int getWidth();

   /**
    * Get the height of the span.
    */
   public abstract int getHeight();
 }
