/**
* 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();
}