Home | History | Annotate | Download | only in impl
      1 /*
      2  * Copyright 2018 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package androidx.slice.builders.impl;
     18 
     19 import static androidx.annotation.RestrictTo.Scope.LIBRARY;
     20 
     21 import android.graphics.drawable.Icon;
     22 import android.os.Build;
     23 
     24 import androidx.annotation.RequiresApi;
     25 import androidx.annotation.RestrictTo;
     26 import androidx.core.graphics.drawable.IconCompat;
     27 import androidx.slice.Slice;
     28 import androidx.slice.SliceSpec;
     29 
     30 /**
     31  * @hide
     32  */
     33 @RestrictTo(LIBRARY)
     34 public class MessagingBasicImpl extends TemplateBuilderImpl implements
     35         MessagingBuilder {
     36     private MessageBuilder mLastMessage;
     37 
     38     /**
     39      */
     40     public MessagingBasicImpl(Slice.Builder builder, SliceSpec spec) {
     41         super(builder, spec);
     42     }
     43 
     44     /**
     45      */
     46     @Override
     47     public void apply(Slice.Builder builder) {
     48         if (mLastMessage != null) {
     49             if (Build.VERSION.SDK_INT >= 23) {
     50                 if (mLastMessage.mIcon != null) {
     51                     builder.addIcon(IconCompat.createFromIcon(mLastMessage.mIcon), null);
     52                 }
     53             }
     54             if (mLastMessage.mText != null) {
     55                 builder.addText(mLastMessage.mText, null);
     56             }
     57         }
     58     }
     59 
     60     /**
     61      */
     62     @Override
     63     public void add(TemplateBuilderImpl builder) {
     64         MessageBuilder b = (MessageBuilder) builder;
     65         if (mLastMessage == null || mLastMessage.mTimestamp < b.mTimestamp) {
     66             mLastMessage = b;
     67         }
     68     }
     69 
     70     /**
     71      */
     72     @Override
     73     public TemplateBuilderImpl createMessageBuilder() {
     74         return new MessageBuilder(this);
     75     }
     76 
     77     /**
     78      */
     79     public static final class MessageBuilder extends TemplateBuilderImpl
     80             implements MessagingBuilder.MessageBuilder {
     81 
     82         @RequiresApi(23)
     83         private Icon mIcon;
     84         private CharSequence mText;
     85         private long mTimestamp;
     86 
     87         /**
     88          */
     89         public MessageBuilder(MessagingBasicImpl parent) {
     90             this(parent.createChildBuilder());
     91         }
     92 
     93         /**
     94          */
     95         private MessageBuilder(Slice.Builder builder) {
     96             super(builder, null);
     97         }
     98 
     99         /**
    100          */
    101         @Override
    102         @RequiresApi(23)
    103         public void addSource(Icon source) {
    104             mIcon = source;
    105         }
    106 
    107         /**
    108          */
    109         @Override
    110         public void addText(CharSequence text) {
    111             mText = text;
    112         }
    113 
    114         /**
    115          */
    116         @Override
    117         public void addTimestamp(long timestamp) {
    118             mTimestamp = timestamp;
    119         }
    120 
    121         /**
    122          */
    123         @Override
    124         public void apply(Slice.Builder builder) {
    125         }
    126     }
    127 }
    128