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.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.runtime.CompositionLocalProvider
import androidx.core.content.IntentCompat
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.Screen
import com.aurora.store.compose.theme.AuroraTheme
import com.aurora.store.util.PackageUtil
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
@@ -30,7 +34,13 @@ class ComposeActivity : ComponentActivity() {
Screen::class.java
) ?: Screen.Blacklist
val localUI = when {
PackageUtil.isTv(this) -> UI.TV
else -> UI.DEFAULT
}
setContent {
CompositionLocalProvider(LocalUI provides localUI) {
AuroraTheme {
val navController = rememberNavController()
NavGraph(navHostController = navController, startDestination = startDestination)
@@ -38,3 +48,4 @@ class ComposeActivity : ComponentActivity() {
}
}
}
}

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 }