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