1a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk/* 2a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk * Copyright 2018 The Android Open Source Project 3a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk * 4a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk * Licensed under the Apache License, Version 2.0 (the "License"); 5a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk * you may not use this file except in compliance with the License. 6a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk * You may obtain a copy of the License at 7a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk * 8a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk * http://www.apache.org/licenses/LICENSE-2.0 9a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk * 10a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk * Unless required by applicable law or agreed to in writing, software 11a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk * distributed under the License is distributed on an "AS IS" BASIS, 12a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk * See the License for the specific language governing permissions and 14a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk * limitations under the License. 15a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk */ 16a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 1785ef1446b82c8783a50af92c4cb1389fe0d0e907Aurimas Liutikaspackage androidx.slice.builders.impl; 18a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 1987a9bf551f300ae379245a3edcb836f628439237Mady Mellorimport static android.app.slice.Slice.HINT_ACTIONS; 20a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monkimport static android.app.slice.Slice.HINT_LARGE; 21a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monkimport static android.app.slice.Slice.HINT_LIST_ITEM; 22a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monkimport static android.app.slice.Slice.HINT_NO_TINT; 23ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellorimport static android.app.slice.Slice.HINT_PARTIAL; 24e3b00e2b2346e4da67d083b3475ffc9302d72898Mady Mellorimport static android.app.slice.Slice.HINT_SEE_MORE; 25af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellorimport static android.app.slice.Slice.HINT_SHORTCUT; 266946d762c0926b683f176edbb4a97a118acadc61Mady Mellorimport static android.app.slice.Slice.HINT_SUMMARY; 27a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monkimport static android.app.slice.Slice.HINT_TITLE; 28a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monkimport static android.app.slice.Slice.SUBTYPE_COLOR; 298d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellorimport static android.app.slice.Slice.SUBTYPE_CONTENT_DESCRIPTION; 303bc2c820c8cbab1cf67dbd836697f780265f0e7aMady Mellorimport static android.app.slice.Slice.SUBTYPE_MAX; 313bc2c820c8cbab1cf67dbd836697f780265f0e7aMady Mellorimport static android.app.slice.Slice.SUBTYPE_RANGE; 323bc2c820c8cbab1cf67dbd836697f780265f0e7aMady Mellorimport static android.app.slice.Slice.SUBTYPE_VALUE; 33a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monkimport static android.app.slice.SliceItem.FORMAT_TEXT; 34af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor 358d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellorimport static androidx.annotation.RestrictTo.Scope.LIBRARY; 36588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellorimport static androidx.slice.builders.ListBuilder.ICON_IMAGE; 37e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellorimport static androidx.slice.builders.ListBuilder.INFINITY; 38588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellorimport static androidx.slice.builders.ListBuilder.LARGE_IMAGE; 390707dbe9fa3225cc921a2305a611272f0dee1ca8Mady Mellorimport static androidx.slice.core.SliceHints.HINT_KEYWORDS; 40e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellorimport static androidx.slice.core.SliceHints.HINT_LAST_UPDATED; 41e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellorimport static androidx.slice.core.SliceHints.HINT_TTL; 42e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellorimport static androidx.slice.core.SliceHints.SUBTYPE_MILLIS; 433bc2c820c8cbab1cf67dbd836697f780265f0e7aMady Mellorimport static androidx.slice.core.SliceHints.SUBTYPE_MIN; 44a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 45a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monkimport android.app.PendingIntent; 46a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monkimport android.net.Uri; 47a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 488d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellorimport androidx.annotation.ColorInt; 498d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellorimport androidx.annotation.NonNull; 508d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellorimport androidx.annotation.RestrictTo; 513ec422a2e2a46b51d4cc6926fcaa35caacbdf98dJason Monkimport androidx.core.graphics.drawable.IconCompat; 5285ef1446b82c8783a50af92c4cb1389fe0d0e907Aurimas Liutikasimport androidx.slice.Slice; 5385ef1446b82c8783a50af92c4cb1389fe0d0e907Aurimas Liutikasimport androidx.slice.SliceItem; 5485ef1446b82c8783a50af92c4cb1389fe0d0e907Aurimas Liutikasimport androidx.slice.SliceSpec; 5585ef1446b82c8783a50af92c4cb1389fe0d0e907Aurimas Liutikasimport androidx.slice.builders.SliceAction; 56a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 57f0da2e67517c774cb034bd73830a3dfc8818afccMady Mellorimport java.util.ArrayList; 58f0da2e67517c774cb034bd73830a3dfc8818afccMady Mellorimport java.util.List; 59f0da2e67517c774cb034bd73830a3dfc8818afccMady Mellor 60a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk/** 61a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk * @hide 62a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk */ 63a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk@RestrictTo(LIBRARY) 64a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monkpublic class ListBuilderV1Impl extends TemplateBuilderImpl implements ListBuilder { 65a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 66af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor private List<Slice> mSliceActions; 6787a9bf551f300ae379245a3edcb836f628439237Mady Mellor private Slice mSliceHeader; 6887a9bf551f300ae379245a3edcb836f628439237Mady Mellor 69a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk /** 70a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk */ 71a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk public ListBuilderV1Impl(Slice.Builder b, SliceSpec spec) { 72a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk super(b, spec); 73a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 74a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 75a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk /** 76a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk */ 77a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @Override 78a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk public void apply(Slice.Builder builder) { 79378ff19cef9998493bc715c58d923150cfd3d816Mady Mellor builder.addLong(System.currentTimeMillis(), SUBTYPE_MILLIS, HINT_LAST_UPDATED); 8087a9bf551f300ae379245a3edcb836f628439237Mady Mellor if (mSliceHeader != null) { 8187a9bf551f300ae379245a3edcb836f628439237Mady Mellor builder.addSubSlice(mSliceHeader); 8287a9bf551f300ae379245a3edcb836f628439237Mady Mellor } 8387a9bf551f300ae379245a3edcb836f628439237Mady Mellor if (mSliceActions != null) { 84af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor Slice.Builder sb = new Slice.Builder(builder); 85af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor for (int i = 0; i < mSliceActions.size(); i++) { 86af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor sb.addSubSlice(mSliceActions.get(i)); 87af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor } 88af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor builder.addSubSlice(sb.addHints(HINT_ACTIONS).build()); 8987a9bf551f300ae379245a3edcb836f628439237Mady Mellor } 90a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 91a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 92a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk /** 93a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk * Add a row to list builder. 94a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk */ 95a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @NonNull 96a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @Override 97a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk public void addRow(@NonNull TemplateBuilderImpl builder) { 98378ff19cef9998493bc715c58d923150cfd3d816Mady Mellor builder.getBuilder().addHints(HINT_LIST_ITEM); 99a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk getBuilder().addSubSlice(builder.build()); 100a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 101a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 102a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk /** 103a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk */ 104a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @NonNull 105a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @Override 106f0da2e67517c774cb034bd73830a3dfc8818afccMady Mellor public void addGridRow(@NonNull TemplateBuilderImpl builder) { 107378ff19cef9998493bc715c58d923150cfd3d816Mady Mellor builder.getBuilder().addHints(HINT_LIST_ITEM); 108a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk getBuilder().addSubSlice(builder.build()); 109a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 110a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 111a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk /** 112a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk */ 113a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @Override 11487a9bf551f300ae379245a3edcb836f628439237Mady Mellor public void setHeader(@NonNull TemplateBuilderImpl builder) { 11587a9bf551f300ae379245a3edcb836f628439237Mady Mellor mSliceHeader = builder.build(); 11687a9bf551f300ae379245a3edcb836f628439237Mady Mellor } 11787a9bf551f300ae379245a3edcb836f628439237Mady Mellor 11887a9bf551f300ae379245a3edcb836f628439237Mady Mellor /** 11987a9bf551f300ae379245a3edcb836f628439237Mady Mellor */ 12087a9bf551f300ae379245a3edcb836f628439237Mady Mellor @Override 121af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor public void addAction(@NonNull SliceAction action) { 122af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor if (mSliceActions == null) { 123af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor mSliceActions = new ArrayList<>(); 124af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor } 125af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor Slice.Builder b = new Slice.Builder(getBuilder()).addHints(HINT_ACTIONS); 126af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor mSliceActions.add(action.buildSlice(b)); 127a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 128a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 129853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh @Override 130853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh public void addInputRange(TemplateBuilderImpl builder) { 131853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh getBuilder().addSubSlice(builder.build(), SUBTYPE_RANGE); 132853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh } 133853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh 134853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh @Override 135853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh public void addRange(TemplateBuilderImpl builder) { 136853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh getBuilder().addSubSlice(builder.build(), SUBTYPE_RANGE); 137853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh } 138853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh 139853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh /** 140e3b00e2b2346e4da67d083b3475ffc9302d72898Mady Mellor */ 141e3b00e2b2346e4da67d083b3475ffc9302d72898Mady Mellor @Override 142eefde12330498ed74472389b5c4dbda4239e61c8Mady Mellor public void setSeeMoreRow(TemplateBuilderImpl builder) { 143e3b00e2b2346e4da67d083b3475ffc9302d72898Mady Mellor builder.getBuilder().addHints(HINT_SEE_MORE); 144e3b00e2b2346e4da67d083b3475ffc9302d72898Mady Mellor getBuilder().addSubSlice(builder.build()); 145e3b00e2b2346e4da67d083b3475ffc9302d72898Mady Mellor } 146e3b00e2b2346e4da67d083b3475ffc9302d72898Mady Mellor 147e3b00e2b2346e4da67d083b3475ffc9302d72898Mady Mellor /** 148e3b00e2b2346e4da67d083b3475ffc9302d72898Mady Mellor */ 149e3b00e2b2346e4da67d083b3475ffc9302d72898Mady Mellor @Override 150eefde12330498ed74472389b5c4dbda4239e61c8Mady Mellor public void setSeeMoreAction(PendingIntent intent) { 151e3b00e2b2346e4da67d083b3475ffc9302d72898Mady Mellor getBuilder().addSubSlice( 152e3b00e2b2346e4da67d083b3475ffc9302d72898Mady Mellor new Slice.Builder(getBuilder()) 153e3b00e2b2346e4da67d083b3475ffc9302d72898Mady Mellor .addHints(HINT_SEE_MORE) 15453380fecd1a1537e913578d1e53aa516d3f6e58eMady Mellor .addAction(intent, new Slice.Builder(getBuilder()) 15553380fecd1a1537e913578d1e53aa516d3f6e58eMady Mellor .addHints(HINT_SEE_MORE).build(), null) 156e3b00e2b2346e4da67d083b3475ffc9302d72898Mady Mellor .build()); 157e3b00e2b2346e4da67d083b3475ffc9302d72898Mady Mellor } 158e3b00e2b2346e4da67d083b3475ffc9302d72898Mady Mellor 159e3b00e2b2346e4da67d083b3475ffc9302d72898Mady Mellor 160e3b00e2b2346e4da67d083b3475ffc9302d72898Mady Mellor /** 161853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh * Builder to construct an input row. 162853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh */ 163853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh public static class RangeBuilderImpl extends TemplateBuilderImpl implements RangeBuilder { 1643bc2c820c8cbab1cf67dbd836697f780265f0e7aMady Mellor private int mMin = 0; 165853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh private int mMax = 100; 166853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh private int mValue = 0; 167853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh private CharSequence mTitle; 168ec2359f11170a2742cd1650900de320aa22eab58Mady Mellor private CharSequence mSubtitle; 1698d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor private CharSequence mContentDescr; 170ec2359f11170a2742cd1650900de320aa22eab58Mady Mellor private SliceAction mPrimaryAction; 171853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh 172853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh public RangeBuilderImpl(Slice.Builder sb) { 173853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh super(sb, null); 174853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh } 175853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh 176853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh @Override 1773bc2c820c8cbab1cf67dbd836697f780265f0e7aMady Mellor public void setMin(int min) { 1783bc2c820c8cbab1cf67dbd836697f780265f0e7aMady Mellor mMin = min; 1793bc2c820c8cbab1cf67dbd836697f780265f0e7aMady Mellor } 1803bc2c820c8cbab1cf67dbd836697f780265f0e7aMady Mellor 1813bc2c820c8cbab1cf67dbd836697f780265f0e7aMady Mellor @Override 182853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh public void setMax(int max) { 183853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh mMax = max; 184853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh } 185853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh 186853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh @Override 187853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh public void setValue(int value) { 188853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh mValue = value; 189853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh } 190853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh 191853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh @Override 192853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh public void setTitle(@NonNull CharSequence title) { 193853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh mTitle = title; 194853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh } 195853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh 196853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh @Override 197ec2359f11170a2742cd1650900de320aa22eab58Mady Mellor public void setSubtitle(@NonNull CharSequence title) { 198ec2359f11170a2742cd1650900de320aa22eab58Mady Mellor mSubtitle = title; 199ec2359f11170a2742cd1650900de320aa22eab58Mady Mellor } 200ec2359f11170a2742cd1650900de320aa22eab58Mady Mellor 201ec2359f11170a2742cd1650900de320aa22eab58Mady Mellor @Override 202ec2359f11170a2742cd1650900de320aa22eab58Mady Mellor public void setPrimaryAction(@NonNull SliceAction action) { 203ec2359f11170a2742cd1650900de320aa22eab58Mady Mellor mPrimaryAction = action; 204ec2359f11170a2742cd1650900de320aa22eab58Mady Mellor } 205ec2359f11170a2742cd1650900de320aa22eab58Mady Mellor 206ec2359f11170a2742cd1650900de320aa22eab58Mady Mellor @Override 2078d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor public void setContentDescription(@NonNull CharSequence description) { 2088d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor mContentDescr = description; 2098d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor } 2108d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor 2118d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor @Override 212853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh public void apply(Slice.Builder builder) { 213853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh if (mTitle != null) { 214853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh builder.addText(mTitle, null, HINT_TITLE); 215853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh } 216ec2359f11170a2742cd1650900de320aa22eab58Mady Mellor if (mSubtitle != null) { 217ec2359f11170a2742cd1650900de320aa22eab58Mady Mellor builder.addText(mSubtitle, null); 218ec2359f11170a2742cd1650900de320aa22eab58Mady Mellor } 2198d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor if (mContentDescr != null) { 2208d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor builder.addText(mContentDescr, SUBTYPE_CONTENT_DESCRIPTION); 2218d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor } 222ec2359f11170a2742cd1650900de320aa22eab58Mady Mellor if (mPrimaryAction != null) { 223ec2359f11170a2742cd1650900de320aa22eab58Mady Mellor Slice.Builder sb = new Slice.Builder( 224ec2359f11170a2742cd1650900de320aa22eab58Mady Mellor getBuilder()).addHints(HINT_TITLE, HINT_SHORTCUT); 225ec2359f11170a2742cd1650900de320aa22eab58Mady Mellor builder.addSubSlice(mPrimaryAction.buildSlice(sb), null /* subtype */); 226ec2359f11170a2742cd1650900de320aa22eab58Mady Mellor } 227853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh builder.addHints(HINT_LIST_ITEM) 2283bc2c820c8cbab1cf67dbd836697f780265f0e7aMady Mellor .addInt(mMin, SUBTYPE_MIN) 229853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh .addInt(mMax, SUBTYPE_MAX) 230853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh .addInt(mValue, SUBTYPE_VALUE); 231853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh } 232853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh } 233853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh 234853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh /** 235853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh * Builder to construct an input range row. 236853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh */ 237853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh public static class InputRangeBuilderImpl 238853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh extends RangeBuilderImpl implements InputRangeBuilder { 239853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh private PendingIntent mAction; 2403ec422a2e2a46b51d4cc6926fcaa35caacbdf98dJason Monk private IconCompat mThumb; 241853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh 242853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh public InputRangeBuilderImpl(Slice.Builder sb) { 243853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh super(sb); 244853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh } 245853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh 246853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh @Override 247ec2359f11170a2742cd1650900de320aa22eab58Mady Mellor public void setInputAction(@NonNull PendingIntent action) { 248853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh mAction = action; 249853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh } 250853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh 251853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh @Override 2523ec422a2e2a46b51d4cc6926fcaa35caacbdf98dJason Monk public void setThumb(@NonNull IconCompat thumb) { 253853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh mThumb = thumb; 254853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh } 255853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh 256853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh @Override 257853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh public void apply(Slice.Builder builder) { 258853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh if (mAction == null) { 259853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh throw new IllegalStateException("Input ranges must have an associated action."); 260853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh } 261853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh Slice.Builder sb = new Slice.Builder(builder); 262853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh super.apply(sb); 263853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh if (mThumb != null) { 264853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh sb.addIcon(mThumb, null); 265853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh } 266853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh builder.addAction(mAction, sb.build(), SUBTYPE_RANGE).addHints(HINT_LIST_ITEM); 267853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh } 268853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh } 269853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh 270a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk /** 271a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk */ 272a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @NonNull 273a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @Override 274ca3bf191270c01ba28dda3be273f49254be409fcAmin Shaikh public void setColor(@ColorInt int color) { 275a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk getBuilder().addInt(color, SUBTYPE_COLOR); 276a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 277a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 278a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk /** 279a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk */ 280a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @Override 281ebdd84b863747bae349407af37f8822c5c589d95Mady Mellor public void setKeywords(@NonNull List<String> keywords) { 282ebdd84b863747bae349407af37f8822c5c589d95Mady Mellor Slice.Builder sb = new Slice.Builder(getBuilder()); 283ebdd84b863747bae349407af37f8822c5c589d95Mady Mellor for (int i = 0; i < keywords.size(); i++) { 284ebdd84b863747bae349407af37f8822c5c589d95Mady Mellor sb.addText(keywords.get(i), null); 285ebdd84b863747bae349407af37f8822c5c589d95Mady Mellor } 2860707dbe9fa3225cc921a2305a611272f0dee1ca8Mady Mellor getBuilder().addSubSlice(sb.addHints(HINT_KEYWORDS).build()); 287ebdd84b863747bae349407af37f8822c5c589d95Mady Mellor } 288ebdd84b863747bae349407af37f8822c5c589d95Mady Mellor 289ebdd84b863747bae349407af37f8822c5c589d95Mady Mellor /** 290ebdd84b863747bae349407af37f8822c5c589d95Mady Mellor */ 291ebdd84b863747bae349407af37f8822c5c589d95Mady Mellor @Override 292e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor public void setTtl(long ttl) { 293e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor long expiry = ttl == INFINITY ? INFINITY : System.currentTimeMillis() + ttl; 294e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor getBuilder().addTimestamp(expiry, SUBTYPE_MILLIS, HINT_TTL); 295e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor } 296e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 297e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor /** 298e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor */ 299e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor @Override 300a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk public TemplateBuilderImpl createRowBuilder() { 301a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk return new RowBuilderImpl(this); 302a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 303a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 304a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk /** 305a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk */ 306a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @Override 307a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk public TemplateBuilderImpl createRowBuilder(Uri uri) { 308a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk return new RowBuilderImpl(uri); 309a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 310a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 311853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh 312853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh @Override 313853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh public TemplateBuilderImpl createInputRangeBuilder() { 314853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh return new InputRangeBuilderImpl(createChildBuilder()); 315853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh } 316853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh 317853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh @Override 318853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh public TemplateBuilderImpl createRangeBuilder() { 319853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh return new RangeBuilderImpl(createChildBuilder()); 320853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh } 321853c11f11cd3d1378eac2c37d1e8c258420644a8Amin Shaikh 322a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk /** 323a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk */ 324a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @Override 325a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk public TemplateBuilderImpl createGridBuilder() { 326f0da2e67517c774cb034bd73830a3dfc8818afccMady Mellor return new GridRowBuilderListV1Impl(this); 327a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 328a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 329a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk /** 330a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk */ 33187a9bf551f300ae379245a3edcb836f628439237Mady Mellor @Override 33287a9bf551f300ae379245a3edcb836f628439237Mady Mellor public TemplateBuilderImpl createHeaderBuilder() { 33387a9bf551f300ae379245a3edcb836f628439237Mady Mellor return new HeaderBuilderImpl(this); 33487a9bf551f300ae379245a3edcb836f628439237Mady Mellor } 33587a9bf551f300ae379245a3edcb836f628439237Mady Mellor 33687a9bf551f300ae379245a3edcb836f628439237Mady Mellor @Override 33787a9bf551f300ae379245a3edcb836f628439237Mady Mellor public TemplateBuilderImpl createHeaderBuilder(Uri uri) { 33887a9bf551f300ae379245a3edcb836f628439237Mady Mellor return new HeaderBuilderImpl(uri); 33987a9bf551f300ae379245a3edcb836f628439237Mady Mellor } 34087a9bf551f300ae379245a3edcb836f628439237Mady Mellor 34187a9bf551f300ae379245a3edcb836f628439237Mady Mellor /** 34287a9bf551f300ae379245a3edcb836f628439237Mady Mellor */ 343a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk public static class RowBuilderImpl extends TemplateBuilderImpl 344a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk implements ListBuilder.RowBuilder { 345a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 346af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor private SliceAction mPrimaryAction; 347a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk private SliceItem mTitleItem; 348a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk private SliceItem mSubtitleItem; 349af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor private Slice mStartItem; 350af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor private ArrayList<Slice> mEndItems = new ArrayList<>(); 3518d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor private CharSequence mContentDescr; 352a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 353a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk /** 354a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk */ 355a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk public RowBuilderImpl(@NonNull ListBuilderV1Impl parent) { 356a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk super(parent.createChildBuilder(), null); 357a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 358a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 359a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk /** 360a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk */ 361a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk public RowBuilderImpl(@NonNull Uri uri) { 362a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk super(new Slice.Builder(uri), null); 363a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 364a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 365a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk /** 366a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk */ 367a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk public RowBuilderImpl(Slice.Builder builder) { 368a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk super(builder, null); 369a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 370a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 371a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk /** 372a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk */ 373a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @NonNull 374a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @Override 375a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk public void setTitleItem(long timeStamp) { 376af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor mStartItem = new Slice.Builder(getBuilder()) 377af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor .addTimestamp(timeStamp, null).addHints(HINT_TITLE).build(); 378a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 379a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 380a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk /** 381a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk */ 382a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @NonNull 383a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @Override 3843ec422a2e2a46b51d4cc6926fcaa35caacbdf98dJason Monk public void setTitleItem(IconCompat icon, int imageMode) { 385588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor setTitleItem(icon, imageMode, false /* isLoading */); 386ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor } 387ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor 388ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor /** 389ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor */ 390588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor @NonNull 391ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor @Override 3923ec422a2e2a46b51d4cc6926fcaa35caacbdf98dJason Monk public void setTitleItem(IconCompat icon, int imageMode, boolean isLoading) { 393588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor ArrayList<String> hints = new ArrayList<>(); 394588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor if (imageMode != ICON_IMAGE) { 395588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor hints.add(HINT_NO_TINT); 396588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor } 397588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor if (imageMode == LARGE_IMAGE) { 398588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor hints.add(HINT_LARGE); 399588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor } 400588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor if (isLoading) { 401588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor hints.add(HINT_PARTIAL); 402588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor } 403588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor Slice.Builder sb = new Slice.Builder(getBuilder()) 404588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor .addIcon(icon, null /* subType */, hints); 405ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor if (isLoading) { 406af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor sb.addHints(HINT_PARTIAL); 407ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor } 408af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor mStartItem = sb.addHints(HINT_TITLE).build(); 409a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 410a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 411a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk /** 412a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk */ 413a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @NonNull 414a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @Override 415af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor public void setTitleItem(@NonNull SliceAction action) { 416af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor setTitleItem(action, false /* isLoading */); 417ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor } 418ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor 419ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor /** 420ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor */ 421ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor @Override 422af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor public void setTitleItem(SliceAction action, boolean isLoading) { 423af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor Slice.Builder sb = new Slice.Builder(getBuilder()).addHints(HINT_TITLE); 424ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor if (isLoading) { 425af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor sb.addHints(HINT_PARTIAL); 426ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor } 427af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor mStartItem = action.buildSlice(sb); 428a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 429a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 430a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk /** 431a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk */ 432a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @NonNull 433a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @Override 434af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor public void setPrimaryAction(@NonNull SliceAction action) { 435af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor mPrimaryAction = action; 436a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 437a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 438a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk /** 439a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk */ 440a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @NonNull 441a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @Override 442a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk public void setTitle(CharSequence title) { 443ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor setTitle(title, false /* isLoading */); 444ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor } 445ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor 446ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor /** 447ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor */ 448ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor @Override 449ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor public void setTitle(CharSequence title, boolean isLoading) { 450ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor mTitleItem = new SliceItem(title, FORMAT_TEXT, null, new String[] {HINT_TITLE}); 451ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor if (isLoading) { 452ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor mTitleItem.addHint(HINT_PARTIAL); 453ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor } 454a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 455a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 456a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk /** 457a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk */ 458a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @NonNull 459a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @Override 460a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk public void setSubtitle(CharSequence subtitle) { 461ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor setSubtitle(subtitle, false /* isLoading */); 462ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor } 463ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor 464ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor /** 465ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor */ 466ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor @Override 467ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor public void setSubtitle(CharSequence subtitle, boolean isLoading) { 468a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk mSubtitleItem = new SliceItem(subtitle, FORMAT_TEXT, null, new String[0]); 469ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor if (isLoading) { 470ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor mSubtitleItem.addHint(HINT_PARTIAL); 471ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor } 472a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 473a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 474a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk /** 475a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk */ 476a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @NonNull 477a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @Override 478a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk public void addEndItem(long timeStamp) { 479af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor mEndItems.add(new Slice.Builder(getBuilder()).addTimestamp(timeStamp, 480af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor null, new String[0]).build()); 481a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 482a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 483a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk /** 484a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk */ 485a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @NonNull 486a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @Override 4873ec422a2e2a46b51d4cc6926fcaa35caacbdf98dJason Monk public void addEndItem(IconCompat icon, int imageMode) { 488588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor addEndItem(icon, imageMode, false /* isLoading */); 489ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor } 490ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor 491ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor /** 492ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor */ 493588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor @NonNull 494ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor @Override 4953ec422a2e2a46b51d4cc6926fcaa35caacbdf98dJason Monk public void addEndItem(IconCompat icon, int imageMode, boolean isLoading) { 496588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor ArrayList<String> hints = new ArrayList<>(); 497588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor if (imageMode != ICON_IMAGE) { 498588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor hints.add(HINT_NO_TINT); 499588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor } 500588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor if (imageMode == LARGE_IMAGE) { 501588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor hints.add(HINT_LARGE); 502588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor } 503588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor if (isLoading) { 504588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor hints.add(HINT_PARTIAL); 505588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor } 506588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor Slice.Builder sb = new Slice.Builder(getBuilder()) 507588bcc115f4fbbfab66c2c7da304c42f3b2783b8Mady Mellor .addIcon(icon, null /* subType */, hints); 508ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor if (isLoading) { 509af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor sb.addHints(HINT_PARTIAL); 510ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor } 511af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor mEndItems.add(sb.build()); 512a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 513a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 514a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk /** 515a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk */ 516a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @NonNull 517a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @Override 518af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor public void addEndItem(@NonNull SliceAction action) { 519af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor addEndItem(action, false /* isLoading */); 520ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor } 521ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor 522ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor /** 523ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor */ 524ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor @Override 525af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor public void addEndItem(@NonNull SliceAction action, boolean isLoading) { 526af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor Slice.Builder sb = new Slice.Builder(getBuilder()); 527ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor if (isLoading) { 528af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor sb.addHints(HINT_PARTIAL); 529ba4198f4bc37284c5a6e8ce993f3652d3e3c88e6Mady Mellor } 530af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor mEndItems.add(action.buildSlice(sb)); 531a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 532a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk 5338d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor @Override 5348d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor public void setContentDescription(CharSequence description) { 5358d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor mContentDescr = description; 5368d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor } 5378d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor 538a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk /** 539a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk */ 540a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk @Override 541a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk public void apply(Slice.Builder b) { 542a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk if (mStartItem != null) { 543af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor b.addSubSlice(mStartItem); 544a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 545a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk if (mTitleItem != null) { 546a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk b.addItem(mTitleItem); 547a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 548a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk if (mSubtitleItem != null) { 549a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk b.addItem(mSubtitleItem); 550a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 551a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk for (int i = 0; i < mEndItems.size(); i++) { 552af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor Slice item = mEndItems.get(i); 553af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor b.addSubSlice(item); 554a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 5558d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor if (mContentDescr != null) { 5568d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor b.addText(mContentDescr, SUBTYPE_CONTENT_DESCRIPTION); 5578d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor } 558af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor if (mPrimaryAction != null) { 559af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor Slice.Builder sb = new Slice.Builder( 560af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor getBuilder()).addHints(HINT_TITLE, HINT_SHORTCUT); 561af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor b.addSubSlice(mPrimaryAction.buildSlice(sb), null); 562a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 56387a9bf551f300ae379245a3edcb836f628439237Mady Mellor } 56487a9bf551f300ae379245a3edcb836f628439237Mady Mellor } 56587a9bf551f300ae379245a3edcb836f628439237Mady Mellor 56687a9bf551f300ae379245a3edcb836f628439237Mady Mellor /** 56787a9bf551f300ae379245a3edcb836f628439237Mady Mellor */ 56887a9bf551f300ae379245a3edcb836f628439237Mady Mellor public static class HeaderBuilderImpl extends TemplateBuilderImpl 56987a9bf551f300ae379245a3edcb836f628439237Mady Mellor implements ListBuilder.HeaderBuilder { 57087a9bf551f300ae379245a3edcb836f628439237Mady Mellor 57109ec20c424ec3e546b10424a401c2343c2df205aMady Mellor private SliceItem mTitleItem; 57209ec20c424ec3e546b10424a401c2343c2df205aMady Mellor private SliceItem mSubtitleItem; 57309ec20c424ec3e546b10424a401c2343c2df205aMady Mellor private SliceItem mSummaryItem; 574af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor private SliceAction mPrimaryAction; 5758d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor private CharSequence mContentDescr; 57687a9bf551f300ae379245a3edcb836f628439237Mady Mellor 57787a9bf551f300ae379245a3edcb836f628439237Mady Mellor /** 57887a9bf551f300ae379245a3edcb836f628439237Mady Mellor */ 57987a9bf551f300ae379245a3edcb836f628439237Mady Mellor public HeaderBuilderImpl(@NonNull ListBuilderV1Impl parent) { 58087a9bf551f300ae379245a3edcb836f628439237Mady Mellor super(parent.createChildBuilder(), null); 58187a9bf551f300ae379245a3edcb836f628439237Mady Mellor } 58287a9bf551f300ae379245a3edcb836f628439237Mady Mellor 58387a9bf551f300ae379245a3edcb836f628439237Mady Mellor /** 58487a9bf551f300ae379245a3edcb836f628439237Mady Mellor */ 58587a9bf551f300ae379245a3edcb836f628439237Mady Mellor public HeaderBuilderImpl(@NonNull Uri uri) { 58687a9bf551f300ae379245a3edcb836f628439237Mady Mellor super(new Slice.Builder(uri), null); 58787a9bf551f300ae379245a3edcb836f628439237Mady Mellor } 58887a9bf551f300ae379245a3edcb836f628439237Mady Mellor 58987a9bf551f300ae379245a3edcb836f628439237Mady Mellor /** 59087a9bf551f300ae379245a3edcb836f628439237Mady Mellor */ 59187a9bf551f300ae379245a3edcb836f628439237Mady Mellor @Override 59287a9bf551f300ae379245a3edcb836f628439237Mady Mellor public void apply(Slice.Builder b) { 59309ec20c424ec3e546b10424a401c2343c2df205aMady Mellor if (mTitleItem != null) { 59409ec20c424ec3e546b10424a401c2343c2df205aMady Mellor b.addItem(mTitleItem); 59587a9bf551f300ae379245a3edcb836f628439237Mady Mellor } 59609ec20c424ec3e546b10424a401c2343c2df205aMady Mellor if (mSubtitleItem != null) { 59709ec20c424ec3e546b10424a401c2343c2df205aMady Mellor b.addItem(mSubtitleItem); 59887a9bf551f300ae379245a3edcb836f628439237Mady Mellor } 59909ec20c424ec3e546b10424a401c2343c2df205aMady Mellor if (mSummaryItem != null) { 60009ec20c424ec3e546b10424a401c2343c2df205aMady Mellor b.addItem(mSummaryItem); 60187a9bf551f300ae379245a3edcb836f628439237Mady Mellor } 6028d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor if (mContentDescr != null) { 6038d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor b.addText(mContentDescr, SUBTYPE_CONTENT_DESCRIPTION); 6048d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor } 605af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor if (mPrimaryAction != null) { 606af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor Slice.Builder sb = new Slice.Builder( 607af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor getBuilder()).addHints(HINT_TITLE, HINT_SHORTCUT); 608af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor b.addSubSlice(mPrimaryAction.buildSlice(sb), null /* subtype */); 60987a9bf551f300ae379245a3edcb836f628439237Mady Mellor } 61087a9bf551f300ae379245a3edcb836f628439237Mady Mellor } 61187a9bf551f300ae379245a3edcb836f628439237Mady Mellor 61287a9bf551f300ae379245a3edcb836f628439237Mady Mellor /** 61387a9bf551f300ae379245a3edcb836f628439237Mady Mellor */ 61487a9bf551f300ae379245a3edcb836f628439237Mady Mellor @Override 61509ec20c424ec3e546b10424a401c2343c2df205aMady Mellor public void setTitle(CharSequence title, boolean isLoading) { 61609ec20c424ec3e546b10424a401c2343c2df205aMady Mellor mTitleItem = new SliceItem(title, FORMAT_TEXT, null, new String[] {HINT_TITLE}); 61709ec20c424ec3e546b10424a401c2343c2df205aMady Mellor if (isLoading) { 61809ec20c424ec3e546b10424a401c2343c2df205aMady Mellor mTitleItem.addHint(HINT_PARTIAL); 61909ec20c424ec3e546b10424a401c2343c2df205aMady Mellor } 62087a9bf551f300ae379245a3edcb836f628439237Mady Mellor } 62187a9bf551f300ae379245a3edcb836f628439237Mady Mellor 62287a9bf551f300ae379245a3edcb836f628439237Mady Mellor /** 62387a9bf551f300ae379245a3edcb836f628439237Mady Mellor */ 62487a9bf551f300ae379245a3edcb836f628439237Mady Mellor @Override 62509ec20c424ec3e546b10424a401c2343c2df205aMady Mellor public void setSubtitle(CharSequence subtitle, boolean isLoading) { 62609ec20c424ec3e546b10424a401c2343c2df205aMady Mellor mSubtitleItem = new SliceItem(subtitle, FORMAT_TEXT, null, new String[0]); 62709ec20c424ec3e546b10424a401c2343c2df205aMady Mellor if (isLoading) { 62809ec20c424ec3e546b10424a401c2343c2df205aMady Mellor mSubtitleItem.addHint(HINT_PARTIAL); 62909ec20c424ec3e546b10424a401c2343c2df205aMady Mellor } 63087a9bf551f300ae379245a3edcb836f628439237Mady Mellor } 63187a9bf551f300ae379245a3edcb836f628439237Mady Mellor 63287a9bf551f300ae379245a3edcb836f628439237Mady Mellor /** 63387a9bf551f300ae379245a3edcb836f628439237Mady Mellor */ 63487a9bf551f300ae379245a3edcb836f628439237Mady Mellor @Override 635d156eab29cd6c14308a32d7c116e16e904509a7aMady Mellor public void setSummary(CharSequence summarySubtitle, boolean isLoading) { 63609ec20c424ec3e546b10424a401c2343c2df205aMady Mellor mSummaryItem = new SliceItem(summarySubtitle, FORMAT_TEXT, null, 63709ec20c424ec3e546b10424a401c2343c2df205aMady Mellor new String[] {HINT_SUMMARY}); 63809ec20c424ec3e546b10424a401c2343c2df205aMady Mellor if (isLoading) { 63909ec20c424ec3e546b10424a401c2343c2df205aMady Mellor mSummaryItem.addHint(HINT_PARTIAL); 64009ec20c424ec3e546b10424a401c2343c2df205aMady Mellor } 64187a9bf551f300ae379245a3edcb836f628439237Mady Mellor } 64287a9bf551f300ae379245a3edcb836f628439237Mady Mellor 64387a9bf551f300ae379245a3edcb836f628439237Mady Mellor /** 64487a9bf551f300ae379245a3edcb836f628439237Mady Mellor */ 64587a9bf551f300ae379245a3edcb836f628439237Mady Mellor @Override 646af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor public void setPrimaryAction(SliceAction action) { 647af76b3bd62a6b218bb44917b1dddfa1ee4803149Mady Mellor mPrimaryAction = action; 648a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 6498d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor 6508d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor /** 6518d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor */ 6528d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor @Override 6538d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor public void setContentDescription(CharSequence description) { 6548d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor mContentDescr = description; 6558d66e2cb94d97f4559eab97d0c1f348e5ed8b50aMady Mellor } 656a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk } 657a09cb677db982c92d3172fa79a6a4585fc29da14Jason Monk} 658