1 /*
<lambda>null2  * Copyright 2021 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package androidx.glance.appwidget.demos
18 
19 import android.content.Context
20 import android.content.Intent
21 import android.os.Build
22 import android.util.Log
23 import androidx.compose.runtime.Composable
24 import androidx.compose.ui.unit.dp
25 import androidx.glance.Button
26 import androidx.glance.GlanceId
27 import androidx.glance.GlanceModifier
28 import androidx.glance.GlanceTheme
29 import androidx.glance.LocalContext
30 import androidx.glance.LocalSize
31 import androidx.glance.action.clickable
32 import androidx.glance.appwidget.GlanceAppWidget
33 import androidx.glance.appwidget.GlanceAppWidgetReceiver
34 import androidx.glance.appwidget.action.actionStartActivity
35 import androidx.glance.appwidget.appWidgetBackground
36 import androidx.glance.appwidget.cornerRadius
37 import androidx.glance.appwidget.lazy.GridCells
38 import androidx.glance.appwidget.lazy.LazyVerticalGrid
39 import androidx.glance.appwidget.lazy.itemsIndexed
40 import androidx.glance.appwidget.provideContent
41 import androidx.glance.background
42 import androidx.glance.layout.Alignment
43 import androidx.glance.layout.Row
44 import androidx.glance.layout.fillMaxSize
45 import androidx.glance.layout.fillMaxWidth
46 import androidx.glance.layout.padding
47 import androidx.glance.text.Text
48 
49 class VerticalGridAppWidget : GlanceAppWidget() {
50     private val gridModifier =
51         GlanceModifier.padding(R.dimen.external_padding)
52             .fillMaxSize()
53             .appWidgetBackground()
54             .cornerRadius(R.dimen.corner_radius)
55             .background(R.color.default_widget_background)
56     private val gridCells =
57         if (Build.VERSION.SDK_INT >= 31) {
58             GridCells.Adaptive(100.dp)
59         } else {
60             GridCells.Fixed(3)
61         }
62 
63     override suspend fun provideGlance(context: Context, id: GlanceId) = provideContent {
64         SampleGrid(gridCells, gridModifier)
65     }
66 
67     override suspend fun providePreview(context: Context, widgetCategory: Int) = provideContent {
68         SampleGrid(gridCells, gridModifier)
69     }
70 }
71 
72 @Composable
SampleGridnull73 fun SampleGrid(cells: GridCells, modifier: GlanceModifier = GlanceModifier.fillMaxSize()) {
74     val localSize = LocalSize.current
75     LazyVerticalGrid(modifier = modifier, gridCells = cells) {
76         item { Text("LazyVerticalGrid") }
77         item { Text("${localSize.width}x${localSize.height}") }
78         items(count = 22, itemId = { it * 2L }) { index -> Text("Item $index") }
79         item {
80             Text(
81                 text = "Clickable text",
82                 modifier =
83                     GlanceModifier.background(GlanceTheme.colors.surfaceVariant)
84                         .padding(8.dp)
85                         .cornerRadius(28.dp)
86                         .clickable { Log.i("SampleGrid", "Clicked the clickable text!") }
87             )
88         }
89         itemsIndexed(
90             listOf(
91                 GlanceAppWidgetDemoActivity::class.java,
92                 ListClickDestinationActivity::class.java
93             )
94         ) { index, activityClass ->
95             Row(
96                 modifier = GlanceModifier.fillMaxWidth(),
97                 horizontalAlignment = Alignment.Horizontal.CenterHorizontally
98             ) {
99                 Button(
100                     text = "Activity ${index + 1}",
101                     onClick = actionStartActivity(Intent(LocalContext.current, activityClass))
102                 )
103             }
104         }
105     }
106 }
107 
108 class VerticalGridAppWidgetReceiver : GlanceAppWidgetReceiver() {
109     override val glanceAppWidget: GlanceAppWidget = VerticalGridAppWidget()
110 }
111