Skip to content

Commit 3d1bc5f

Browse files
committed
Canonical Layouts appear first in appwidgets demo, Canonical layout activity uses own task affinity
1 parent ae39c55 commit 3d1bc5f

File tree

3 files changed

+28
-11
lines changed

3 files changed

+28
-11
lines changed

samples/user-interface/appwidgets/src/main/AndroidManifest.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
<activity
4242
android:label="Canonical Layouts"
4343
android:name=".glance.layout.MainActivity"
44+
android:clearTaskOnLaunch="true"
45+
android:taskAffinity="com.example.platform.canonicallayout"
4446
android:exported="true"
4547
android:theme="@style/Theme.LayoutSamples">
4648
<intent-filter>

samples/user-interface/appwidgets/src/main/java/com/example/platform/ui/appwidgets/AppWidgets.kt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,19 @@ import com.google.android.catalog.framework.annotations.Sample
5656
fun AppWidgets() {
5757
val context = LocalContext.current
5858
val widgetManager = AppWidgetManager.getInstance(context)
59+
5960
// Get a list of our app widget providers to retrieve their info
6061
val widgetProviders = widgetManager.getInstalledProvidersForPackage(context.packageName, null)
62+
.showCanonicalLayoutsFirst()
63+
64+
AppWidgetsList(widgetProviders)
65+
}
6166

67+
@RequiresApi(Build.VERSION_CODES.O)
68+
@Composable
69+
fun AppWidgetsList(widgetProviders: List<AppWidgetProviderInfo>) {
70+
val context = LocalContext.current
71+
val widgetManager = AppWidgetManager.getInstance(context)
6272
LazyColumn(contentPadding = PaddingValues(16.dp), verticalArrangement = Arrangement.spacedBy(16.dp)) {
6373
item {
6474
AppInfoText()
@@ -77,6 +87,16 @@ fun AppWidgets() {
7787
}
7888
}
7989

90+
private fun MutableList<AppWidgetProviderInfo>.showCanonicalLayoutsFirst(): List<AppWidgetProviderInfo> {
91+
return this.toMutableList().apply {
92+
sortWith (
93+
compareBy {
94+
if (it.provider.className.startsWith("com.example.platform.ui.appwidgets.glance.layout")) -1 else 1
95+
}
96+
)
97+
}
98+
}
99+
80100

81101
/**
82102
* Extension method to request the launcher to pin the given AppWidgetProviderInfo

samples/user-interface/appwidgets/src/main/java/com/example/platform/ui/appwidgets/glance/layout/MainActivity.kt

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ package com.example.platform.ui.appwidgets.glance.layout
33
import android.appwidget.AppWidgetManager
44
import android.appwidget.AppWidgetProviderInfo
55
import android.content.Context
6+
import android.os.Build
67
import android.os.Bundle
78
import androidx.activity.ComponentActivity
89
import androidx.activity.compose.setContent
10+
import androidx.annotation.RequiresApi
911
import androidx.compose.foundation.layout.Box
1012
import androidx.compose.foundation.layout.Column
1113
import androidx.compose.foundation.layout.PaddingValues
@@ -29,13 +31,15 @@ import androidx.compose.ui.unit.dp
2931
import androidx.compose.ui.unit.sp
3032
import androidx.glance.appwidget.GlanceAppWidgetManager
3133
import androidx.glance.appwidget.GlanceAppWidgetReceiver
34+
import com.example.platform.ui.appwidgets.AppWidgetsList
3235
import com.example.platform.ui.appwidgets.glance.layout.ui.theme.LayoutSamplesTheme
3336
import kotlinx.coroutines.CoroutineScope
3437
import kotlinx.coroutines.launch
3538

3639
val TAG = "layoutsamples"
3740

3841
class MainActivity : ComponentActivity() {
42+
@RequiresApi(Build.VERSION_CODES.O)
3943
override fun onCreate(savedInstanceState: Bundle?) {
4044
super.onCreate(savedInstanceState)
4145

@@ -44,16 +48,7 @@ class MainActivity : ComponentActivity() {
4448
setContent {
4549
val scope = rememberCoroutineScope()
4650
LayoutSamplesTheme {
47-
LazyColumn(Modifier.fillMaxSize(), contentPadding = PaddingValues(8.dp)) {
48-
item {
49-
AppDescription()
50-
}
51-
items(ourWidgets) { providerInfo: AppWidgetProviderInfo ->
52-
WidgetRow(
53-
providerInfo = providerInfo,
54-
onClick = { requestPin(providerInfo, this@MainActivity, scope) })
55-
}
56-
}
51+
AppWidgetsList(widgetProviders = ourWidgets)
5752
}
5853
}
5954
}
@@ -62,7 +57,7 @@ class MainActivity : ComponentActivity() {
6257
private fun Context.ourWidgets(): List<AppWidgetProviderInfo> {
6358
val appWidgetManager = AppWidgetManager.getInstance(this)
6459
return appWidgetManager.installedProviders
65-
.filter { providerInfo: AppWidgetProviderInfo -> providerInfo.provider.packageName == packageName }
60+
.filter { it.provider.className.startsWith("com.example.platform.ui.appwidgets.glance.layout") }
6661
}
6762

6863
@Composable

0 commit comments

Comments
 (0)