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