1 /* 2 * Copyright (C) 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.settingslib.spa.slice.provider 18 19 import android.app.PendingIntent 20 import android.content.Context 21 import android.net.Uri 22 import androidx.core.R 23 import androidx.core.graphics.drawable.IconCompat 24 import androidx.slice.Slice 25 import androidx.slice.SliceManager 26 import androidx.slice.builders.ListBuilder 27 import androidx.slice.builders.SliceAction 28 import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory 29 import com.android.settingslib.spa.slice.createBroadcastPendingIntent 30 import com.android.settingslib.spa.slice.createBrowsePendingIntent 31 32 fun createDemoBrowseSlice(sliceUri: Uri, title: String, summary: String): Slice? { 33 val intent = sliceUri.createBrowsePendingIntent() ?: return null 34 return createDemoSlice(sliceUri, title, summary, intent) 35 } 36 37 fun createDemoActionSlice(sliceUri: Uri, title: String, summary: String): Slice? { 38 val intent = sliceUri.createBroadcastPendingIntent() ?: return null 39 return createDemoSlice(sliceUri, title, summary, intent) 40 } 41 42 fun createDemoSlice(sliceUri: Uri, title: String, summary: String, intent: PendingIntent): Slice? { 43 val context = SpaEnvironmentFactory.instance.appContext 44 if (!SliceManager.getInstance(context).pinnedSlices.contains(sliceUri)) return null 45 return ListBuilder(context, sliceUri, ListBuilder.INFINITY) 46 .addRow(ListBuilder.RowBuilder().apply { 47 setPrimaryAction(createSliceAction(context, intent)) 48 setTitle(title) 49 setSubtitle(summary) 50 }).build() 51 } 52 53 private fun createSliceAction(context: Context, intent: PendingIntent): SliceAction { 54 return SliceAction.create( 55 intent, 56 IconCompat.createWithResource(context, R.drawable.notification_action_background), 57 ListBuilder.ICON_IMAGE, 58 "Enter app" 59 ) 60 } 61