182d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir/*
2ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * Copyright 2018 The Android Open Source Project
382d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir *
482d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * Licensed under the Apache License, Version 2.0 (the "License");
582d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * you may not use this file except in compliance with the License.
682d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * You may obtain a copy of the License at
782d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir *
882d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir *      http://www.apache.org/licenses/LICENSE-2.0
982d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir *
1082d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * Unless required by applicable law or agreed to in writing, software
1182d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * distributed under the License is distributed on an "AS IS" BASIS,
1282d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1382d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * See the License for the specific language governing permissions and
1482d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * limitations under the License.
1582d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir */
16ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.emoji.text;
1782d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir
18ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP;
1982d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir
2082d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinirimport android.graphics.Canvas;
2182d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinirimport android.graphics.Paint;
2238746a682208c764867ffe4415d0b62fb22b5b9aAurimas Liutikasimport android.text.TextPaint;
2338746a682208c764867ffe4415d0b62fb22b5b9aAurimas Liutikas
24ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.IntRange;
25ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.NonNull;
26ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.RequiresApi;
27ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.RestrictTo;
2882d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir
2982d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir/**
3082d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * EmojiSpan subclass used to render emojis using Typeface.
3182d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir *
3282d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * @hide
3382d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir */
3482d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir@RestrictTo(LIBRARY_GROUP)
3577b5c5b734f9f665577d1e3d178615db43ae1d4fSiyamed Sinir@RequiresApi(19)
3682d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinirpublic final class TypefaceEmojiSpan extends EmojiSpan {
3782d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir
3882d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    /**
393dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir     * Paint object used to draw a background in debug mode.
403dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir     */
413dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir    private static Paint sDebugPaint;
423dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir
433dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir    /**
4482d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir     * Default constructor.
4582d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir     *
4682d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir     * @param metadata metadata representing the emoji that this span will draw
4782d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir     */
4882d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    public TypefaceEmojiSpan(final EmojiMetadata metadata) {
4982d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir        super(metadata);
5082d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    }
5182d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir
5282d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    @Override
533dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir    public void draw(@NonNull final Canvas canvas, final CharSequence text,
543dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir            @IntRange(from = 0) final int start, @IntRange(from = 0) final int end, final float x,
553dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir            final int top, final int y, final int bottom, @NonNull final Paint paint) {
563dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir        if (EmojiCompat.get().isEmojiSpanIndicatorEnabled()) {
573dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir            canvas.drawRect(x, top , x + getWidth(), bottom, getDebugPaint());
583dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir        }
5982d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir        getMetadata().draw(canvas, x, y, paint);
6082d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    }
613dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir
623dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir    private static Paint getDebugPaint() {
633dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir        if (sDebugPaint == null) {
643dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir            sDebugPaint = new TextPaint();
653dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir            sDebugPaint.setColor(EmojiCompat.get().getEmojiSpanIndicatorColor());
663dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir            sDebugPaint.setStyle(Paint.Style.FILL);
673dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir        }
683dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir        return sDebugPaint;
693dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir    }
703dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir
713dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir
7282d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir}
73