1e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor/* 2e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor * Copyright 2018 The Android Open Source Project 3e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor * 4e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor * Licensed under the Apache License, Version 2.0 (the "License"); 5e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor * you may not use this file except in compliance with the License. 6e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor * You may obtain a copy of the License at 7e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor * 8e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor * http://www.apache.org/licenses/LICENSE-2.0 9e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor * 10e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor * Unless required by applicable law or agreed to in writing, software 11e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor * distributed under the License is distributed on an "AS IS" BASIS, 12e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor * See the License for the specific language governing permissions and 14e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor * limitations under the License. 15e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor */ 16e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 17e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellorpackage androidx.slice; 18e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 19e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellorimport static android.app.slice.Slice.HINT_TITLE; 20e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 21e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellorimport static androidx.slice.SliceMetadata.LOADED_ALL; 22e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellorimport static androidx.slice.SliceMetadata.LOADED_NONE; 23e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellorimport static androidx.slice.SliceMetadata.LOADED_PARTIAL; 24ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellorimport static androidx.slice.builders.ListBuilder.ICON_IMAGE; 250707dbe9fa3225cc921a2305a611272f0dee1ca8Mady Mellorimport static androidx.slice.core.SliceHints.HINT_KEYWORDS; 26cc08a035e673a2bb24c2dd3dc26508794d46e4cdMady Mellorimport static androidx.slice.core.SliceHints.INFINITY; 27e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 28e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellorimport static junit.framework.Assert.assertEquals; 29e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellorimport static junit.framework.Assert.assertTrue; 30e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 31e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellorimport static org.junit.Assert.assertArrayEquals; 32e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellorimport static org.junit.Assert.assertNull; 33e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 34ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellorimport android.app.PendingIntent; 35e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellorimport android.content.Context; 36ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellorimport android.content.Intent; 37ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellorimport android.graphics.Bitmap; 38ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellorimport android.graphics.Canvas; 39e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellorimport android.net.Uri; 40e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellorimport android.support.test.InstrumentationRegistry; 41e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellorimport android.support.test.filters.SmallTest; 42e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellorimport android.support.test.runner.AndroidJUnit4; 43e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 44decaa736515b8c773842750af79b034964a6ca62Mady Mellorimport androidx.core.graphics.drawable.IconCompat; 45ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellorimport androidx.core.util.Pair; 46ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellorimport androidx.slice.builders.GridRowBuilder; 47ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellorimport androidx.slice.builders.ListBuilder; 48ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellorimport androidx.slice.builders.SliceAction; 49ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellorimport androidx.slice.core.SliceActionImpl; 50e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellorimport androidx.slice.core.SliceHints; 51ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellorimport androidx.slice.render.SliceRenderActivity; 52ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellorimport androidx.slice.widget.EventInfo; 53ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellorimport androidx.slice.widget.SliceLiveData; 54e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 55ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellorimport org.junit.Before; 56e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellorimport org.junit.Test; 57e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellorimport org.junit.runner.RunWith; 58e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 59ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellorimport java.util.ArrayList; 60e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellorimport java.util.List; 61e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellorimport java.util.concurrent.TimeUnit; 62e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 63e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor/** 64e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor * Tests for {@link SliceMetadata}. 65e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor */ 66e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor@RunWith(AndroidJUnit4.class) 67e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor@SmallTest 68e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellorpublic class SliceMetadataTest { 69e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 70e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor private final Context mContext = InstrumentationRegistry.getContext(); 71e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 72ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor @Before 73ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor public void setup() { 74ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS); 75ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 76ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 77ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor @Test 78ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor public void testGetSliceActionsNull() { 79ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Uri uri = Uri.parse("content://pkg/slice"); 80ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 81ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ListBuilder lb = new ListBuilder(mContext, uri, ListBuilder.INFINITY); 82ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor lb.addRow(new ListBuilder.RowBuilder(lb).setTitle("Text")); 83ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 84ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata sliceMetadata = SliceMetadata.from(mContext, lb.build()); 85ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertNull(sliceMetadata.getSliceActions()); 86ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 87ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 88ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor @Test 89ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor public void testGetSliceActions() { 90ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Uri uri = Uri.parse("content://pkg/slice"); 91ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor PendingIntent pi = getIntent(""); 92ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Bitmap b = Bitmap.createBitmap(50, 25, Bitmap.Config.ARGB_8888); 93ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor new Canvas(b).drawColor(0xffff0000); 9438db00ef5d4b5a9d0d171f1bb15a5df567d448f6Jason Monk IconCompat icon = IconCompat.createWithBitmap(b); 95ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 96ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceAction action1 = new SliceAction(pi, icon, "action1"); 97ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceAction action2 = new SliceAction(pi, icon, "action2"); 98ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceAction action3 = new SliceAction(pi, icon, "action3"); 99ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 100ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ListBuilder lb = new ListBuilder(mContext, uri, ListBuilder.INFINITY); 101ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor lb.addRow(new ListBuilder.RowBuilder(lb).setTitle("Text")) 102ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .addAction(action1) 103ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .addAction(action2) 104ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .addAction(action3); 105ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 106ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ArrayList<SliceAction> expectedActions = new ArrayList<>(); 107ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor expectedActions.add(action1); 108ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor expectedActions.add(action2); 109ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor expectedActions.add(action3); 110ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 111ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata sliceMetadata = SliceMetadata.from(mContext, lb.build()); 112ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor List<SliceItem> actions = sliceMetadata.getSliceActions(); 113ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 114ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor for (int i = 0; i < expectedActions.size(); i++) { 115ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertEquivalent(expectedActions.get(i), new SliceActionImpl(actions.get(i))); 116ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 117ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 118ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 119ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor @Test 120ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor public void testGetPrimaryActionForGrid() { 121ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Uri uri = Uri.parse("content://pkg/slice"); 122ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor PendingIntent pi = getIntent(""); 123ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Bitmap b = Bitmap.createBitmap(50, 25, Bitmap.Config.ARGB_8888); 124ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor new Canvas(b).drawColor(0xffff0000); 12538db00ef5d4b5a9d0d171f1bb15a5df567d448f6Jason Monk IconCompat icon = IconCompat.createWithBitmap(b); 126ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 127ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceAction primaryAction = new SliceAction(pi, icon, "action"); 128ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 129ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ListBuilder lb = new ListBuilder(mContext, uri, ListBuilder.INFINITY); 130ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor GridRowBuilder grb = new GridRowBuilder(lb); 131ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor grb.setPrimaryAction(primaryAction); 132ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor grb.addCell(new GridRowBuilder.CellBuilder(grb).addText("some text")); 133ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor grb.addCell(new GridRowBuilder.CellBuilder(grb).addText("some text")); 134ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor grb.addCell(new GridRowBuilder.CellBuilder(grb).addText("some text")); 135ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor lb.addGridRow(grb); 136ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 137ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Slice gridSlice = lb.build(); 138ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata gridInfo = SliceMetadata.from(mContext, gridSlice); 139ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertEquivalent(primaryAction, gridInfo.getPrimaryAction()); 140ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 141ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 142ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor @Test 143ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor public void testGetPrimaryActionForRow() { 144ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Uri uri = Uri.parse("content://pkg/slice"); 145ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor PendingIntent pi = getIntent(""); 146ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Bitmap b = Bitmap.createBitmap(50, 25, Bitmap.Config.ARGB_8888); 147ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor new Canvas(b).drawColor(0xffff0000); 14838db00ef5d4b5a9d0d171f1bb15a5df567d448f6Jason Monk IconCompat icon = IconCompat.createWithBitmap(b); 149ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 150ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceAction primaryAction = new SliceAction(pi, icon, "action"); 151ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceAction endAction = new SliceAction(pi, "toogle action", false); 152ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 153ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ListBuilder lb = new ListBuilder(mContext, uri, ListBuilder.INFINITY); 154ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ListBuilder.RowBuilder rb = new ListBuilder.RowBuilder(lb) 155ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .setTitle("a title") 156ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .addEndItem(endAction) 157ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .setPrimaryAction(primaryAction); 158ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor lb.addRow(rb); 159ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 160ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Slice rowSlice = lb.build(); 161ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata rowInfo = SliceMetadata.from(mContext, rowSlice); 162ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertEquivalent(primaryAction, rowInfo.getPrimaryAction()); 163ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 164ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 165ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor @Test 166ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor public void testGetPrimaryActionForHeader() { 167ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Uri uri = Uri.parse("content://pkg/slice"); 168ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor PendingIntent pi = getIntent(""); 169ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Bitmap b = Bitmap.createBitmap(50, 25, Bitmap.Config.ARGB_8888); 170ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor new Canvas(b).drawColor(0xffff0000); 17138db00ef5d4b5a9d0d171f1bb15a5df567d448f6Jason Monk IconCompat icon = IconCompat.createWithBitmap(b); 172ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 173ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceAction primaryAction = new SliceAction(pi, icon, "action"); 174ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceAction sliceAction = new SliceAction(pi, "another action", true); 175ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 176ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ListBuilder lb = new ListBuilder(mContext, uri, ListBuilder.INFINITY); 177ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor lb.addAction(sliceAction); 178ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ListBuilder.HeaderBuilder hb = new ListBuilder.HeaderBuilder(lb); 179ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor hb.setTitle("header title"); 180ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor hb.setPrimaryAction(primaryAction); 181ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor lb.setHeader(hb); 182ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 183ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Slice headerSlice = lb.build(); 184ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata headerInfo = SliceMetadata.from(mContext, headerSlice); 185ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertEquivalent(primaryAction, headerInfo.getPrimaryAction()); 186ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 187ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 188ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor @Test 189ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor public void testGetPrimaryActionNull() { 190ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Uri uri = Uri.parse("content://pkg/slice"); 191ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor PendingIntent pi = getIntent(""); 192ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Bitmap b = Bitmap.createBitmap(50, 25, Bitmap.Config.ARGB_8888); 193ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor new Canvas(b).drawColor(0xffff0000); 19438db00ef5d4b5a9d0d171f1bb15a5df567d448f6Jason Monk IconCompat icon = IconCompat.createWithBitmap(b); 195ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 196ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceAction endAction1 = new SliceAction(pi, icon, "action"); 197ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceAction endAction2 = new SliceAction(pi, "toogle action", false); 198ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 199ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ListBuilder lb = new ListBuilder(mContext, uri, ListBuilder.INFINITY); 200ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ListBuilder.RowBuilder rb = new ListBuilder.RowBuilder(lb) 201ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .setTitle("a title") 202ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .addEndItem(endAction1) 203ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .addEndItem(endAction2); 204ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor lb.addRow(rb); 205ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 206ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Slice rowSlice = lb.build(); 207ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata rowInfo = SliceMetadata.from(mContext, rowSlice); 208ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertNull(rowInfo.getPrimaryAction()); 209ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 210ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 211ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor @Test 212ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor public void testGetHeaderTypeGrid() { 213ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Uri uri = Uri.parse("content://pkg/slice"); 214ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 215ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ListBuilder lb = new ListBuilder(mContext, uri, ListBuilder.INFINITY); 216ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor GridRowBuilder grb = new GridRowBuilder(lb); 217ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor grb.addCell(new GridRowBuilder.CellBuilder(grb).addText("some text")); 218ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor grb.addCell(new GridRowBuilder.CellBuilder(grb).addText("some text")); 219ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor grb.addCell(new GridRowBuilder.CellBuilder(grb).addText("some text")); 220ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor lb.addGridRow(grb); 221ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 222ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Slice gridSlice = lb.build(); 223ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata gridInfo = SliceMetadata.from(mContext, gridSlice); 224ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertEquals(EventInfo.ROW_TYPE_GRID, gridInfo.getHeaderType()); 225ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 226ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 227ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor @Test 228ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor public void testGetHeaderTypeRow() { 229ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Uri uri = Uri.parse("content://pkg/slice"); 230ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 231ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ListBuilder lb = new ListBuilder(mContext, uri, ListBuilder.INFINITY); 232ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor lb.addRow(new ListBuilder.RowBuilder(lb).setTitle("a title")); 233ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 234ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Slice rowSlice = lb.build(); 235ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata rowInfo = SliceMetadata.from(mContext, rowSlice); 236ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertEquals(EventInfo.ROW_TYPE_LIST, rowInfo.getHeaderType()); 237ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 238ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 239ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor @Test 240ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor public void testGetHeaderTypeToggle() { 241ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Uri uri = Uri.parse("content://pkg/slice"); 242ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor PendingIntent pi = getIntent(""); 243ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 244ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceAction toggleAction = new SliceAction(pi, "toggle", false /* isChecked */); 245ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ListBuilder lb = new ListBuilder(mContext, uri, ListBuilder.INFINITY); 246ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor lb.addRow(new ListBuilder.RowBuilder(lb) 247ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .setTitle("another title") 248ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .addEndItem(toggleAction)); 249ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 250ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Slice toggleSlice = lb.build(); 251ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata toggleInfo = SliceMetadata.from(mContext, toggleSlice); 252ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertEquals(EventInfo.ROW_TYPE_TOGGLE, toggleInfo.getHeaderType()); 253ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 254ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 255ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor @Test 256ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor public void testGetHeaderTypeSlider() { 257ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Uri uri = Uri.parse("content://pkg/slice"); 258ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor PendingIntent pi = getIntent(""); 259ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 260ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ListBuilder lb = new ListBuilder(mContext, uri, ListBuilder.INFINITY); 261ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor lb.addInputRange(new ListBuilder.InputRangeBuilder(lb) 262ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .setTitle("another title") 263ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .setValue(5) 264ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .setMax(10) 2659313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor .setInputAction(pi)); 266ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 267ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Slice sliderSlice = lb.build(); 268ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata sliderInfo = SliceMetadata.from(mContext, sliderSlice); 269ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertEquals(EventInfo.ROW_TYPE_SLIDER, sliderInfo.getHeaderType()); 270ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 271ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 272ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor @Test 273ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor public void testGetHeaderTypeProgress() { 274ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Uri uri = Uri.parse("content://pkg/slice"); 275ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 276ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ListBuilder lb = new ListBuilder(mContext, uri, ListBuilder.INFINITY); 277ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor lb.addRange(new ListBuilder.RangeBuilder(lb) 278ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .setTitle("another title") 279ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .setValue(5) 280ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .setMax(10)); 281ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 282ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Slice sliderSlice = lb.build(); 283ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata progressInfo = SliceMetadata.from(mContext, sliderSlice); 284ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertEquals(EventInfo.ROW_TYPE_PROGRESS, progressInfo.getHeaderType()); 285ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 286ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 287ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor @Test 288ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor public void testGetHeaderTypeHeader() { 289ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Uri uri = Uri.parse("content://pkg/slice"); 290ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 291ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ListBuilder lb = new ListBuilder(mContext, uri, ListBuilder.INFINITY); 292ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ListBuilder.HeaderBuilder hb = new ListBuilder.HeaderBuilder(lb); 293ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor hb.setTitle("header title"); 294ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor lb.setHeader(hb); 295ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 296ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Slice headerSlice = lb.build(); 297ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata headerInfo = SliceMetadata.from(mContext, headerSlice); 298ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertEquals(EventInfo.ROW_TYPE_LIST, headerInfo.getHeaderType()); 299ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 300ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 301ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor @Test 302ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor public void testHasLargeModeFullGrid() { 303ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor // If a grid is "full" with two text and an image there is a different small / large state. 304ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Uri uri = Uri.parse("content://pkg/slice"); 305ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Bitmap b = Bitmap.createBitmap(50, 25, Bitmap.Config.ARGB_8888); 306ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor new Canvas(b).drawColor(0xffff0000); 30738db00ef5d4b5a9d0d171f1bb15a5df567d448f6Jason Monk IconCompat icon = IconCompat.createWithBitmap(b); 308ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 309ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ListBuilder lb = new ListBuilder(mContext, uri, ListBuilder.INFINITY); 310ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor GridRowBuilder grb = new GridRowBuilder(lb); 311ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor grb.addCell(new GridRowBuilder.CellBuilder(grb) 312ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .addText("some text") 313ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .addText("more text") 31438db00ef5d4b5a9d0d171f1bb15a5df567d448f6Jason Monk .addImage(icon, ICON_IMAGE)); 315ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor grb.addCell(new GridRowBuilder.CellBuilder(grb) 316ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .addText("some text") 317ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .addText("more text") 31838db00ef5d4b5a9d0d171f1bb15a5df567d448f6Jason Monk .addImage(icon, ICON_IMAGE)); 319ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor grb.addCell(new GridRowBuilder.CellBuilder(grb) 320ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .addText("some text") 321ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .addText("more text") 32238db00ef5d4b5a9d0d171f1bb15a5df567d448f6Jason Monk .addImage(icon, ICON_IMAGE)); 323ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor lb.addGridRow(grb); 324ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 325ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Slice gridSlice = lb.build(); 326ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata gridInfo = SliceMetadata.from(mContext, gridSlice); 327ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertTrue(gridInfo.hasLargeMode()); 328ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 329ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 330ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor @Test 331ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor public void testHasLargeModeGrid() { 332ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor // If a grid is not "full" either no image or an image and one text item, small / large 333ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor // is the same. 334ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Uri uri = Uri.parse("content://pkg/slice"); 335ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 336ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ListBuilder lb = new ListBuilder(mContext, uri, ListBuilder.INFINITY); 337ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor GridRowBuilder grb = new GridRowBuilder(lb); 338ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor grb.addCell(new GridRowBuilder.CellBuilder(grb).addText("some text")); 339ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor grb.addCell(new GridRowBuilder.CellBuilder(grb).addText("some text")); 340ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor grb.addCell(new GridRowBuilder.CellBuilder(grb).addText("some text")); 341ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor lb.addGridRow(grb); 342ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 343ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Slice gridSlice = lb.build(); 344ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata gridInfo = SliceMetadata.from(mContext, gridSlice); 345ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertTrue(!gridInfo.hasLargeMode()); 346ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 347ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 348ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor @Test 349ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor public void testGetLargeModeMultipleRows() { 350ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Uri uri = Uri.parse("content://pkg/slice"); 351ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 352ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ListBuilder lb = new ListBuilder(mContext, uri, ListBuilder.INFINITY); 353ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor lb.addRow(new ListBuilder.RowBuilder(lb).setTitle("a title")); 354ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor lb.addRow(new ListBuilder.RowBuilder(lb).setTitle("another row another title")); 355ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 356ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Slice rowSlice = lb.build(); 357ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata rowInfo = SliceMetadata.from(mContext, rowSlice); 358ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertTrue(rowInfo.hasLargeMode()); 359ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 360ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 361ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor @Test 362ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor public void testGetLargeModeSingleRow() { 363ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Uri uri = Uri.parse("content://pkg/slice"); 364ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 365ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ListBuilder lb = new ListBuilder(mContext, uri, ListBuilder.INFINITY); 366ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor lb.addRow(new ListBuilder.RowBuilder(lb).setTitle("a title")); 367ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 368ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Slice rowSlice = lb.build(); 369ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata rowInfo = SliceMetadata.from(mContext, rowSlice); 370ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertTrue(!rowInfo.hasLargeMode()); 371ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 372ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 373ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor @Test 374ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor public void testGetTogglesNone() { 375ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Uri uri = Uri.parse("content://pkg/slice"); 376ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 377ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ListBuilder lb = new ListBuilder(mContext, uri, ListBuilder.INFINITY); 378ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor lb.addRow(new ListBuilder.RowBuilder(lb).setTitle("a title")); 379ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 380ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Slice rowSlice = lb.build(); 381ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata rowInfo = SliceMetadata.from(mContext, rowSlice); 382ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertTrue(rowInfo.getToggles().isEmpty()); 383ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 384ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 385ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor @Test 386ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor public void testGetTogglesSingle() { 387ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Uri uri = Uri.parse("content://pkg/slice"); 388ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor PendingIntent pi = getIntent(""); 389ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 390ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceAction toggleAction = new SliceAction(pi, "toggle", false /* isChecked */); 391ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ListBuilder lb = new ListBuilder(mContext, uri, ListBuilder.INFINITY); 392ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor lb.addRow(new ListBuilder.RowBuilder(lb) 393ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .setTitle("another title") 394ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .addEndItem(toggleAction)); 395ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 396ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Slice toggleSlice = lb.build(); 397ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata toggleInfo = SliceMetadata.from(mContext, toggleSlice); 398ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor List<androidx.slice.core.SliceAction> actualToggles = toggleInfo.getToggles(); 399ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertEquals(1, actualToggles.size()); 400ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertEquivalent(toggleAction, actualToggles.get(0)); 401ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 402ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 403ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor @Test 404ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor public void testGetTogglesMultiple() { 405ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Uri uri = Uri.parse("content://pkg/slice"); 406ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor PendingIntent pi = getIntent(""); 407ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Bitmap b = Bitmap.createBitmap(50, 25, Bitmap.Config.ARGB_8888); 408ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor new Canvas(b).drawColor(0xffff0000); 40938db00ef5d4b5a9d0d171f1bb15a5df567d448f6Jason Monk IconCompat icon = IconCompat.createWithBitmap(b); 410ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 411ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceAction toggleAction = new SliceAction(pi, icon, "toggle", false /* isChecked */); 412ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceAction toggleAction2 = new SliceAction(pi, icon, "toggle2", true /* isChecked */); 413ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 414ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ListBuilder lb = new ListBuilder(mContext, uri, ListBuilder.INFINITY); 415ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor lb.addRow(new ListBuilder.RowBuilder(lb) 416ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .setTitle("another title") 417ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .addEndItem(toggleAction) 418ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .addEndItem(toggleAction2)); 419ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 420ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Slice toggleSlice = lb.build(); 421ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata toggleInfo = SliceMetadata.from(mContext, toggleSlice); 422ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor List<androidx.slice.core.SliceAction> actualToggles = toggleInfo.getToggles(); 423ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 424ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor List<SliceAction> expectedToggles = new ArrayList<>(); 425ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor expectedToggles.add(toggleAction); 426ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor expectedToggles.add(toggleAction2); 427ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 428ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor for (int i = 0; i < expectedToggles.size(); i++) { 429ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertEquivalent(expectedToggles.get(i), actualToggles.get(i)); 430ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 431ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 432ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 433ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor @Test 434ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor public void testGetRangeNull() { 435ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Uri uri = Uri.parse("content://pkg/slice"); 436ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 437ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ListBuilder lb = new ListBuilder(mContext, uri, ListBuilder.INFINITY); 438ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor lb.addRow(new ListBuilder.RowBuilder(lb).setTitle("a title")); 439ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 440ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Slice rowSlice = lb.build(); 441ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata rowInfo = SliceMetadata.from(mContext, rowSlice); 442ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertNull(rowInfo.getRange()); 443ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 444ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 445ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor @Test 446ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor public void testGetRangeForSlider() { 447ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Uri uri = Uri.parse("content://pkg/slice"); 448ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor PendingIntent pi = getIntent(""); 449ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 450ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ListBuilder lb = new ListBuilder(mContext, uri, ListBuilder.INFINITY); 451ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor lb.addInputRange(new ListBuilder.InputRangeBuilder(lb) 452ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .setTitle("another title") 4533bc2c820c8cbab1cf67dbd836697f780265f0e7aMady Mellor .setValue(7) 4543bc2c820c8cbab1cf67dbd836697f780265f0e7aMady Mellor .setMin(5) 455ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .setMax(10) 4563bc2c820c8cbab1cf67dbd836697f780265f0e7aMady Mellor .setInputAction(pi)); 457ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 458ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Slice sliderSlice = lb.build(); 459ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata sliderInfo = SliceMetadata.from(mContext, sliderSlice); 4603bc2c820c8cbab1cf67dbd836697f780265f0e7aMady Mellor 461ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Pair<Integer, Integer> values = sliderInfo.getRange(); 462ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertEquals(5, (int) values.first); 463ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertEquals(10, (int) values.second); 4643bc2c820c8cbab1cf67dbd836697f780265f0e7aMady Mellor 4653bc2c820c8cbab1cf67dbd836697f780265f0e7aMady Mellor int currentValue = sliderInfo.getRangeValue(); 4663bc2c820c8cbab1cf67dbd836697f780265f0e7aMady Mellor assertEquals(7, currentValue); 467ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 468ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 469ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor @Test 4709313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor public void testGetInputRangeAction() { 4719313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor Uri uri = Uri.parse("content://pkg/slice"); 4729313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor PendingIntent expectedIntent = getIntent("rangeintent"); 4739313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor 4749313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor Bitmap b = Bitmap.createBitmap(50, 25, Bitmap.Config.ARGB_8888); 4759313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor new Canvas(b).drawColor(0xffff0000); 4769313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor IconCompat icon = IconCompat.createWithBitmap(b); 4779313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor SliceAction primaryAction = new SliceAction(getIntent(""), icon, "action"); 4789313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor 4799313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor ListBuilder lb = new ListBuilder(mContext, uri, ListBuilder.INFINITY); 4809313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor lb.addInputRange(new ListBuilder.InputRangeBuilder(lb) 4819313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor .setTitle("another title") 4829313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor .setValue(7) 4839313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor .setMin(5) 4849313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor .setMax(10) 4859313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor .setPrimaryAction(primaryAction) 4869313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor .setInputAction(expectedIntent)); 4879313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor Slice sliderSlice = lb.build(); 4889313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor 4899313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor SliceMetadata sliderInfo = SliceMetadata.from(mContext, sliderSlice); 4909313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor assertEquals(expectedIntent, sliderInfo.getInputRangeAction()); 4919313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor assertEquivalent(primaryAction, sliderInfo.getPrimaryAction()); 4929313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor } 4939313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor 4949313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor @Test 495ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor public void testGetRangeForProgress() { 496ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Uri uri = Uri.parse("content://pkg/slice"); 497ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 498ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor ListBuilder lb = new ListBuilder(mContext, uri, ListBuilder.INFINITY); 499ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor lb.addRange(new ListBuilder.RangeBuilder(lb) 500ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .setTitle("another title") 501ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .setValue(5) 502ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor .setMax(10)); 503ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 504ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Slice sliderSlice = lb.build(); 505ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata progressInfo = SliceMetadata.from(mContext, sliderSlice); 506ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Pair<Integer, Integer> values = progressInfo.getRange(); 5073bc2c820c8cbab1cf67dbd836697f780265f0e7aMady Mellor assertEquals(0, (int) values.first); 508ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertEquals(10, (int) values.second); 509ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 510ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 511e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor @Test 512e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor public void testKeywords() { 513e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor Uri uri = Uri.parse("content://pkg/slice"); 514e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor Slice keywordSlice = new Slice.Builder(uri) 5150707dbe9fa3225cc921a2305a611272f0dee1ca8Mady Mellor .addHints(HINT_KEYWORDS) 516e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor .addText("keyword1", null) 517e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor .addText("keyword2", null) 518e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor .addText("keyword3", null).build(); 519e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor Slice slice = new Slice.Builder(uri) 520e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor .addText("Some text", null, HINT_TITLE) 521e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor .addText("Some other text", null) 522e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor .addSubSlice(keywordSlice) 523e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor .build(); 524e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 525ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata SliceMetadata1 = SliceMetadata.from(mContext, slice); 526ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor List<String> sliceKeywords = SliceMetadata1.getSliceKeywords(); 527e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor String[] expectedList = new String[] {"keyword1", "keyword2", "keyword3"}; 528e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor assertArrayEquals(expectedList, sliceKeywords.toArray()); 529e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 530e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor // Make sure it doesn't find keywords that aren't there 531e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor Slice slice2 = new Slice.Builder(uri) 532e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor .addText("Some text", null, HINT_TITLE) 533e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor .addText("Some other text", null).build(); 534e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 535ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata SliceMetadata2 = SliceMetadata.from(mContext, slice2); 536ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor List<String> slice2Keywords = SliceMetadata2.getSliceKeywords(); 537e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor assertNull(slice2Keywords); 538e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 539e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor // Make sure empty list if specified to have no keywords 5400707dbe9fa3225cc921a2305a611272f0dee1ca8Mady Mellor Slice noKeywordSlice = new Slice.Builder(uri).addHints(HINT_KEYWORDS).build(); 541e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor Slice slice3 = new Slice.Builder(uri) 542e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor .addText("Some text", null, HINT_TITLE) 543e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor .addSubSlice(noKeywordSlice) 544e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor .build(); 545e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 546e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor SliceMetadata sliceMetadata3 = SliceMetadata.from(mContext, slice3); 547e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor List<String> slice3Keywords = sliceMetadata3.getSliceKeywords(); 548e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor assertTrue(slice3Keywords.isEmpty()); 549e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor } 550e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 551e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor @Test 552e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor public void testGetLoadingState() { 553e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor Uri uri = Uri.parse("content://pkg/slice"); 554cc08a035e673a2bb24c2dd3dc26508794d46e4cdMady Mellor Slice s1 = new ListBuilder(mContext, uri, INFINITY).build(); 555ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata SliceMetadata1 = SliceMetadata.from(mContext, s1); 556ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor int actualState1 = SliceMetadata1.getLoadingState(); 557e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor assertEquals(LOADED_NONE, actualState1); 558e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 559cc08a035e673a2bb24c2dd3dc26508794d46e4cdMady Mellor ListBuilder lb = new ListBuilder(mContext, uri, INFINITY); 560cc08a035e673a2bb24c2dd3dc26508794d46e4cdMady Mellor Slice s2 = lb.addRow(new ListBuilder.RowBuilder(lb) 561cc08a035e673a2bb24c2dd3dc26508794d46e4cdMady Mellor .setTitle(null, true /* isLoading */)) 562cc08a035e673a2bb24c2dd3dc26508794d46e4cdMady Mellor .build(); 563ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata SliceMetadata2 = SliceMetadata.from(mContext, s2); 564ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor int actualState2 = SliceMetadata2.getLoadingState(); 565e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor assertEquals(LOADED_PARTIAL, actualState2); 566e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 567cc08a035e673a2bb24c2dd3dc26508794d46e4cdMady Mellor ListBuilder lb2 = new ListBuilder(mContext, uri, INFINITY); 568cc08a035e673a2bb24c2dd3dc26508794d46e4cdMady Mellor Slice s3 = lb2.addRow(new ListBuilder.RowBuilder(lb2) 569cc08a035e673a2bb24c2dd3dc26508794d46e4cdMady Mellor .setTitle("Title", false /* isLoading */)) 570cc08a035e673a2bb24c2dd3dc26508794d46e4cdMady Mellor .build(); 571ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor SliceMetadata SliceMetadata3 = SliceMetadata.from(mContext, s3); 572ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor int actualState3 = SliceMetadata3.getLoadingState(); 573e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor assertEquals(LOADED_ALL, actualState3); 574e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor } 575e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 576e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor @Test 577e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor public void testGetExpiry() { 578e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor Uri uri = Uri.parse("content://pkg/slice"); 579e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor long timestamp = System.currentTimeMillis(); 580e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor long ttl = TimeUnit.DAYS.toMillis(1); 581e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor Slice ttlSlice = new Slice.Builder(uri) 582e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor .addText("Some text", null) 5839313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor .addLong(timestamp, null) 5849313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor .addLong(timestamp, null, SliceHints.HINT_LAST_UPDATED) 5859313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor .addLong(ttl, null, SliceHints.HINT_TTL) 586e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor .build(); 587e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 588e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor SliceMetadata si1 = SliceMetadata.from(mContext, ttlSlice); 589e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor long retrievedTtl = si1.getExpiry(); 590e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor assertEquals(ttl, retrievedTtl); 591e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 592e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor Slice noTtlSlice = new Slice.Builder(uri) 593e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor .addText("Some text", null) 5949313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor .addLong(timestamp, null).build(); 595e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor SliceMetadata si2 = SliceMetadata.from(mContext, noTtlSlice); 596e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor long retrievedTtl2 = si2.getExpiry(); 597e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor assertEquals(0, retrievedTtl2); 598e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor } 599e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 600e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor @Test 601e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor public void testGetLastUpdated() { 602e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor Uri uri = Uri.parse("content://pkg/slice"); 603e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor long timestamp = System.currentTimeMillis(); 604e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor long ttl = TimeUnit.DAYS.toMillis(1); 605e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor Slice ttlSlice = new Slice.Builder(uri) 606e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor .addText("Some text", null) 6079313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor .addLong(timestamp - 20, null) 6089313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor .addLong(timestamp, null, SliceHints.HINT_LAST_UPDATED) 6099313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor .addLong(ttl, null, SliceHints.HINT_TTL) 610e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor .build(); 611e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 612e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor SliceMetadata si1 = SliceMetadata.from(mContext, ttlSlice); 613e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor long retrievedLastUpdated = si1.getLastUpdatedTime(); 614e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor assertEquals(timestamp, retrievedLastUpdated); 615e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 616e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor Slice noTtlSlice = new Slice.Builder(uri) 617e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor .addText("Some text", null) 6189313d3f2232b02bd3fdbdbb8486e83273fb1c7cbMady Mellor .addLong(timestamp, null).build(); 619e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor 620e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor SliceMetadata si2 = SliceMetadata.from(mContext, noTtlSlice); 621e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor long retrievedLastUpdated2 = si2.getLastUpdatedTime(); 622e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor assertEquals(0, retrievedLastUpdated2); 623e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor } 624ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 625ac7a30acc7b945a83e70f94375a172acc16e2e7dMady Mellor @Test 626ac7a30acc7b945a83e70f94375a172acc16e2e7dMady Mellor public void testIsPermissionSlice() { 627ac7a30acc7b945a83e70f94375a172acc16e2e7dMady Mellor Uri uri = Uri.parse("content://pkg/slice"); 628ac7a30acc7b945a83e70f94375a172acc16e2e7dMady Mellor Slice permissionSlice = 6299399b1430f150241bd4ddbd89b78f3c352420f09Jason Monk SliceProvider.createPermissionSlice(mContext, uri, mContext.getPackageName()); 630ac7a30acc7b945a83e70f94375a172acc16e2e7dMady Mellor 631ac7a30acc7b945a83e70f94375a172acc16e2e7dMady Mellor SliceMetadata metadata = SliceMetadata.from(mContext, permissionSlice); 632ac7a30acc7b945a83e70f94375a172acc16e2e7dMady Mellor assertEquals(true, metadata.isPermissionSlice()); 633ac7a30acc7b945a83e70f94375a172acc16e2e7dMady Mellor } 634ac7a30acc7b945a83e70f94375a172acc16e2e7dMady Mellor 635ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor private PendingIntent getIntent(String action) { 636ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor Intent intent = new Intent(action); 637ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor intent.setClassName(mContext.getPackageName(), SliceRenderActivity.class.getName()); 638ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor return PendingIntent.getActivity(mContext, 0, intent, 0); 639ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 640ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor 641ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor private void assertEquivalent(androidx.slice.core.SliceAction desired, 642ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor androidx.slice.core.SliceAction actual) { 643ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertEquals(desired.getTitle(), actual.getTitle()); 644ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertEquals(desired.getContentDescription(), actual.getContentDescription()); 645ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertEquals(desired.isToggle(), actual.isToggle()); 646ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertEquals(desired.isDefaultToggle(), actual.isDefaultToggle()); 647ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertEquals(desired.isChecked(), actual.isChecked()); 648ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertEquals(desired.getPriority(), actual.getPriority()); 649ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertEquals(desired.getIcon() == null, actual.getIcon() == null); 650ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor assertEquals(desired.getImageMode(), actual.getImageMode()); 651ca12087a732c2e40be512a8d9d25e0aec8bf92d8Mady Mellor } 652e7f1c6cf75ce36c633075445bd676572a9fe0f47Mady Mellor} 653