Contact
Have a question
or an idea?
For product support, feedback, partnerships or project enquiries, get in touch.
@Composablefun StudioCard(app: App, onOpen: () -> Unit) {var pressed by remember { mutableStateOf(false) }val scale by animateFloatAsState(if (pressed) 0.98f else 1f)Card(modifier = Modifier.fillMaxWidth().graphicsLayer { scaleX = scale; scaleY = scale }.clickable(onClick = onOpen),shape = MaterialTheme.shapes.extraLarge,) {Row(verticalAlignment = Alignment.CenterVertically) {AppIcon(app.icon, size = 56.dp)Spacer(Modifier.width(16.dp))Column {Text(app.name, style = MaterialTheme.typography.titleLarge)Text(app.tagline, color = MaterialTheme.colorScheme.onSurfaceVariant)}}}}// Small details, shipped carefully.class ReleaseViewModel(private val repo: AppRepository) : ViewModel() {val apps = repo.observeApps().map { list -> list.sortedBy { it.name } }.stateIn(viewModelScope, SharingStarted.Lazily, emptyList())fun refresh() = viewModelScope.launch { repo.sync() }}
@Composablefun StudioCard(app: App, onOpen: () -> Unit) {var pressed by remember { mutableStateOf(false) }val scale by animateFloatAsState(if (pressed) 0.98f else 1f)Card(modifier = Modifier.fillMaxWidth().graphicsLayer { scaleX = scale; scaleY = scale }.clickable(onClick = onOpen),shape = MaterialTheme.shapes.extraLarge,) {Row(verticalAlignment = Alignment.CenterVertically) {AppIcon(app.icon, size = 56.dp)Spacer(Modifier.width(16.dp))Column {Text(app.name, style = MaterialTheme.typography.titleLarge)Text(app.tagline, color = MaterialTheme.colorScheme.onSurfaceVariant)}}}}// Small details, shipped carefully.class ReleaseViewModel(private val repo: AppRepository) : ViewModel() {val apps = repo.observeApps().map { list -> list.sortedBy { it.name } }.stateIn(viewModelScope, SharingStarted.Lazily, emptyList())fun refresh() = viewModelScope.launch { repo.sync() }}
@Composablefun StudioCard(app: App, onOpen: () -> Unit) {var pressed by remember { mutableStateOf(false) }val scale by animateFloatAsState(if (pressed) 0.98f else 1f)Card(modifier = Modifier.fillMaxWidth().graphicsLayer { scaleX = scale; scaleY = scale }.clickable(onClick = onOpen),shape = MaterialTheme.shapes.extraLarge,) {Row(verticalAlignment = Alignment.CenterVertically) {AppIcon(app.icon, size = 56.dp)Spacer(Modifier.width(16.dp))Column {Text(app.name, style = MaterialTheme.typography.titleLarge)Text(app.tagline, color = MaterialTheme.colorScheme.onSurfaceVariant)}}}}// Small details, shipped carefully.class ReleaseViewModel(private val repo: AppRepository) : ViewModel() {val apps = repo.observeApps().map { list -> list.sortedBy { it.name } }.stateIn(viewModelScope, SharingStarted.Lazily, emptyList())fun refresh() = viewModelScope.launch { repo.sync() }}
@Composablefun StudioCard(app: App, onOpen: () -> Unit) {var pressed by remember { mutableStateOf(false) }val scale by animateFloatAsState(if (pressed) 0.98f else 1f)Card(modifier = Modifier.fillMaxWidth().graphicsLayer { scaleX = scale; scaleY = scale }.clickable(onClick = onOpen),shape = MaterialTheme.shapes.extraLarge,) {Row(verticalAlignment = Alignment.CenterVertically) {AppIcon(app.icon, size = 56.dp)Spacer(Modifier.width(16.dp))Column {Text(app.name, style = MaterialTheme.typography.titleLarge)Text(app.tagline, color = MaterialTheme.colorScheme.onSurfaceVariant)}}}}// Small details, shipped carefully.class ReleaseViewModel(private val repo: AppRepository) : ViewModel() {val apps = repo.observeApps().map { list -> list.sortedBy { it.name } }.stateIn(viewModelScope, SharingStarted.Lazily, emptyList())fun refresh() = viewModelScope.launch { repo.sync() }}
Press Enter to send, or drag away and release.Write to the studioTap, or pull and releaseNeed app support?
- 111111111111111
Business enquiries
Questions about the studio or its products.
Email us → - 222222222222222
Partnerships
Collaboration, distribution or integration ideas.
Email us → - 333333333333333
Product feedback
Ideas and suggestions for any AeroLoom app.
Email us → - 444444444444444
Project enquiries
Discuss design or Android development work.
Email us →