compose: Introduce new compositionLocal for different Android OS

Android uses different variant of OS on devices such as TV, Wear, and Auto.
Introduce a new compositionLocal to detect and show different UI as needed.

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2025-05-02 18:38:13 +08:00
parent 26816e8fab
commit 6c38ff5479
2 changed files with 43 additions and 3 deletions

View File

@@ -9,11 +9,15 @@ import android.os.Bundle
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.compose.runtime.CompositionLocalProvider
import androidx.core.content.IntentCompat import androidx.core.content.IntentCompat
import androidx.navigation.compose.rememberNavController import androidx.navigation.compose.rememberNavController
import com.aurora.store.compose.compositions.UI
import com.aurora.store.compose.compositions.LocalUI
import com.aurora.store.compose.navigation.NavGraph import com.aurora.store.compose.navigation.NavGraph
import com.aurora.store.compose.navigation.Screen import com.aurora.store.compose.navigation.Screen
import com.aurora.store.compose.theme.AuroraTheme import com.aurora.store.compose.theme.AuroraTheme
import com.aurora.store.util.PackageUtil
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint @AndroidEntryPoint
@@ -30,10 +34,17 @@ class ComposeActivity : ComponentActivity() {
Screen::class.java Screen::class.java
) ?: Screen.Blacklist ) ?: Screen.Blacklist
val localUI = when {
PackageUtil.isTv(this) -> UI.TV
else -> UI.DEFAULT
}
setContent { setContent {
AuroraTheme { CompositionLocalProvider(LocalUI provides localUI) {
val navController = rememberNavController() AuroraTheme {
NavGraph(navHostController = navController, startDestination = startDestination) val navController = rememberNavController()
NavGraph(navHostController = navController, startDestination = startDestination)
}
} }
} }
} }

View File

@@ -0,0 +1,29 @@
/*
* SPDX-FileCopyrightText: 2025 The Calyx Institute
* SPDX-License-Identifier: GPL-3.0-or-later
*/
package com.aurora.store.compose.compositions
import androidx.compose.runtime.staticCompositionLocalOf
/**
* Supported UI styles for different types of Android OS
*/
enum class UI {
/**
* Targets Phone, Foldable, Tablets, Desktop
*/
DEFAULT,
/**
* Targets TV
*/
TV
}
/**
* CompositionLocal to provide information on which UI style should be used
*/
val LocalUI = staticCompositionLocalOf { UI.DEFAULT }