Skip to content

Commit e507a5f

Browse files
committed
.
1 parent ed2fa2b commit e507a5f

File tree

19 files changed

+577
-199
lines changed

19 files changed

+577
-199
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,4 @@ google-services.json
3131

3232
# Android Profiling
3333
*.hprof
34+
/.kotlin/sessions

app/build.gradle.kts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import org.jetbrains.kotlin.ir.backend.js.compile
1+
//import org.jetbrains.kotlin.ir.backend.js.compile
22

33
plugins {
44
alias(libs.plugins.android.application)
@@ -20,12 +20,12 @@ plugins {
2020

2121
android {
2222
namespace = "com.perkedel.htlauncher"
23-
compileSdk = 35
23+
compileSdk = 36
2424

2525
defaultConfig {
2626
applicationId = "com.perkedel.htlauncher"
27-
minSdk = 21
28-
targetSdk = 35
27+
minSdk = 30 // was 21, pushed to 30 for glance & composeXR.
28+
targetSdk = 36
2929
versionCode = 1
3030
versionName = "2025.8.0"
3131

@@ -210,6 +210,12 @@ dependencies {
210210
// https://youtu.be/bhrN7yFG0D4
211211
implementation(libs.androidx.glance)
212212
implementation(libs.androidx.glance.appwidget)
213+
214+
// Shapes
215+
// https://developer.android.com/jetpack/androidx/releases/graphics
216+
implementation(libs.androidx.graphics.core)
217+
implementation(libs.androidx.graphics.path)
218+
implementation(libs.androidx.graphics.shapes)
213219
}
214220

215221
//composeCompiler {

app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@
111111
android:roundIcon="@mipmap/ic_launcher_round"
112112
android:supportsRtl="true"
113113
android:theme="@style/Theme.HTLauncher"
114-
tools:targetApi="35">
114+
tools:targetApi="36">
115115

116116
<!-- <uses-library android:name="com.google.android.wearable" -->
117117
<!-- android:required="false"/> -->
@@ -146,6 +146,7 @@
146146
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
147147
</intent-filter>
148148
</activity>
149+
149150
</application>
150151

151152
</manifest>

app/src/main/java/com/perkedel/htlauncher/Navigation.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,15 @@ import androidx.compose.foundation.isSystemInDarkTheme
5252
import androidx.compose.foundation.pager.PagerState
5353
import androidx.compose.foundation.pager.rememberPagerState
5454
import androidx.compose.material.icons.Icons
55+
import androidx.compose.material.icons.automirrored.filled.List
5556
import androidx.compose.material.icons.filled.Add
57+
import androidx.compose.material.icons.filled.AddModerator
58+
import androidx.compose.material.icons.filled.Cancel
5659
import androidx.compose.material.icons.filled.Create
5760
import androidx.compose.material.icons.filled.Folder
61+
import androidx.compose.material.icons.filled.List
5862
import androidx.compose.material.icons.filled.Security
63+
import androidx.compose.material.icons.filled.SettingsApplications
5964
import androidx.compose.material3.ColorScheme
6065
import androidx.compose.material3.ExperimentalMaterial3Api
6166
import androidx.compose.material3.Icon
@@ -1955,12 +1960,18 @@ fun Navigation(
19551960
HTAlertDialog(
19561961
title = stringResource(R.string.permission_dialog),
19571962
text = stringResource(R.string.permission_description),
1963+
swapButton = true,
19581964
thirdButton = true,
19591965
confirmText = stringResource(R.string.permission_grant),
19601966
thirdText = stringResource(R.string.permission_details),
1967+
confirmLeadingIcon = Icons.Default.AddModerator,
1968+
thirdLeadingIcon = Icons.AutoMirrored.Filled.List,
1969+
dismissLeadingIcon = Icons.Default.Cancel,
1970+
thirdTrailingIcon = Icons.Default.SettingsApplications,
19611971
icon = {
19621972
Icon(Icons.Default.Security,"")
19631973
},
1974+
19641975
onConfirm = {
19651976
Log.d("PermissionDialog","Attempt to run permission grant!")
19661977
multiplePermissionLauncher.launch(permissionRequests)
@@ -1982,6 +1993,7 @@ fun Navigation(
19821993
// attemptPermission.value = false
19831994
anViewModel.openPermissionRequest(false)
19841995
},
1996+
fancyButtonDesign = true,
19851997
tts = tts,
19861998
)
19871999
}

app/src/main/java/com/perkedel/htlauncher/data/SettingData.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@ data class SettingData(
1717
* 1 = Force On
1818
* 2 = Force Off
1919
* */
20-
20+
val portaitBarOnBottom:Boolean = false,
21+
val landscapeBarOnRight:Boolean = false,
2122
)

app/src/main/java/com/perkedel/htlauncher/enumerations/ButtonTypes.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ enum class ButtonTypes(@IntegerRes val buttonType:Int) {
77
OutlineButton(buttonType = 1),
88
TextButton(buttonType = 2),
99
IconButton(buttonType = 3),
10+
RawButton(buttonType = 4),
1011
}

app/src/main/java/com/perkedel/htlauncher/ui/activities/ItemEditorActivity.kt

Lines changed: 75 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ class ItemEditorActivity : ComponentActivity() {
251251
}
252252
}
253253

254-
fun soPressBack(nav:ThreePaneScaffoldNavigator<Any>){
254+
suspend fun soPressBack(nav:ThreePaneScaffoldNavigator<Any>){
255255
if(!nav.canNavigateBack()){
256256
// finis
257257
} else {
@@ -440,7 +440,10 @@ fun ItemEditorGreeting(
440440
// saveNow()
441441
// pressBackButton()
442442
if(navigator.canNavigateBack()){
443-
navigator.navigateBack()
443+
coroutineScope.launch {
444+
navigator.navigateBack()
445+
}
446+
444447
} else {
445448
onBack()
446449
}
@@ -494,7 +497,10 @@ fun ItemEditorGreeting(
494497
navigateUp = {
495498
saveNow()
496499
if(navigator.canNavigateBack()){
497-
navigator.navigateBack()
500+
coroutineScope.launch {
501+
navigator.navigateBack()
502+
}
503+
498504
} else {
499505
onBack()
500506
}
@@ -544,10 +550,13 @@ fun ItemEditorGreeting(
544550
viewModel.updateActionData(actionData)
545551
viewModel.selectDetailNavigate(ItemDetailPaneNavigate.EditingAction)
546552
viewModel.setOpenActionData(true)
547-
navigator.navigateTo(
548-
pane = ListDetailPaneScaffoldRole.Detail,
549-
content = "Action ${idOf} ${viewModel.actionEdit}"
550-
)
553+
coroutineScope.launch {
554+
navigator.navigateTo(
555+
pane = ListDetailPaneScaffoldRole.Detail,
556+
contentKey = "Action ${idOf} ${viewModel.actionEdit}"
557+
)
558+
}
559+
551560
},
552561
onRebuildItem = {
553562
viewModel.updateItemData(it)
@@ -567,10 +576,13 @@ fun ItemEditorGreeting(
567576
when(it){
568577
"reorder_items" -> {
569578
viewModel.selectDetailNavigate(ItemDetailPaneNavigate.ReorderItems)
570-
navigator.navigateTo(
571-
pane = ListDetailPaneScaffoldRole.Detail,
572-
content = "Reorder Items"
573-
)
579+
coroutineScope.launch {
580+
navigator.navigateTo(
581+
pane = ListDetailPaneScaffoldRole.Detail,
582+
contentKey = "Reorder Items"
583+
)
584+
}
585+
574586
}
575587
else -> {}
576588
}
@@ -589,10 +601,13 @@ fun ItemEditorGreeting(
589601
when(it) {
590602
"reorder_pages" -> {
591603
viewModel.selectDetailNavigate(ItemDetailPaneNavigate.ReorderPages)
592-
navigator.navigateTo(
593-
pane = ListDetailPaneScaffoldRole.Detail,
594-
content = "Reorder Pages"
595-
)
604+
coroutineScope.launch {
605+
navigator.navigateTo(
606+
pane = ListDetailPaneScaffoldRole.Detail,
607+
contentKey = "Reorder Pages"
608+
)
609+
}
610+
596611
}
597612
else -> {}
598613
}
@@ -621,10 +636,12 @@ fun ItemEditorGreeting(
621636
modifier = Modifier,
622637
title = "Hello",
623638
onClick = {
624-
navigator.navigateTo(
625-
pane = ListDetailPaneScaffoldRole.Detail,
626-
content = "Item aaa ${viewModel.rawContent}"
627-
)
639+
coroutineScope.launch {
640+
navigator.navigateTo(
641+
pane = ListDetailPaneScaffoldRole.Detail,
642+
contentKey = "Item aaa ${viewModel.rawContent}"
643+
)
644+
}
628645
}
629646
)
630647
}
@@ -633,7 +650,7 @@ fun ItemEditorGreeting(
633650

634651
},
635652
detailPane = {
636-
val content = navigator.currentDestination?.content?.toString() ?: "idk"
653+
val content = navigator.currentDestination?.contentKey?.toString() ?: "idk"
637654
// val content: Any? = navigator.currentDestination?.content? ?: {
638655
// when{
639656
// viewModel.editType == EditWhich.Items -> {
@@ -680,14 +697,18 @@ fun ItemEditorGreeting(
680697
viewModel.setOpenActionData(false)
681698
Log.d("ItemEditorActivity","Total Action${viewModel.itemData?.action}")
682699
viewModel.selectDetailNavigate(ItemDetailPaneNavigate.Default)
683-
navigator.navigateBack()
700+
coroutineScope.launch {
701+
navigator.navigateBack()
702+
}
684703
},
685704
onSelectAction = {
686705
viewModel.selectExtraNavigate(ItemExtraPaneNavigate.SelectApp)
687-
navigator.navigateTo(
688-
pane = ListDetailPaneScaffoldRole.Extra,
689-
content = "select action aaa ${viewModel.rawContent}"
690-
)
706+
coroutineScope.launch {
707+
navigator.navigateTo(
708+
pane = ListDetailPaneScaffoldRole.Extra,
709+
contentKey = "select action aaa ${viewModel.rawContent}"
710+
)
711+
}
691712
},
692713
snackbarHostState = snackbarHostState,
693714
)
@@ -699,7 +720,9 @@ fun ItemEditorGreeting(
699720
onClose = {
700721
saveNow()
701722
viewModel.selectDetailNavigate(ItemDetailPaneNavigate.Default)
702-
navigator.navigateBack()
723+
coroutineScope.launch {
724+
navigator.navigateBack()
725+
}
703726
},
704727
onSwap = {
705728
// Log.d("SwapPageItems","Here now list\n ${it}")
@@ -718,10 +741,12 @@ fun ItemEditorGreeting(
718741
},
719742
onTryAdd = {
720743
viewModel.selectExtraNavigate(ItemExtraPaneNavigate.AddItem)
721-
navigator.navigateTo(
722-
pane = ListDetailPaneScaffoldRole.Extra,
723-
content = "Add Item to Page"
724-
)
744+
coroutineScope.launch {
745+
navigator.navigateTo(
746+
pane = ListDetailPaneScaffoldRole.Extra,
747+
contentKey = "Add Item to Page"
748+
)
749+
}
725750
},
726751
snackbarHostState = snackbarHostState,
727752
)
@@ -733,7 +758,10 @@ fun ItemEditorGreeting(
733758
onClose = {
734759
saveNow()
735760
viewModel.selectDetailNavigate(ItemDetailPaneNavigate.Default)
736-
navigator.navigateBack()
761+
coroutineScope.launch {
762+
navigator.navigateBack()
763+
}
764+
737765
},
738766
onSwap = {
739767
// viewModel.changePageOrders(it)
@@ -745,10 +773,13 @@ fun ItemEditorGreeting(
745773
},
746774
onTryAdd = {
747775
viewModel.selectExtraNavigate(ItemExtraPaneNavigate.AddItem)
748-
navigator.navigateTo(
749-
pane = ListDetailPaneScaffoldRole.Extra,
750-
content = "Add Page to Home"
751-
)
776+
coroutineScope.launch {
777+
navigator.navigateTo(
778+
pane = ListDetailPaneScaffoldRole.Extra,
779+
contentKey = "Add Page to Home"
780+
)
781+
}
782+
752783
},
753784
snackbarHostState = snackbarHostState,
754785
)
@@ -781,7 +812,7 @@ fun ItemEditorGreeting(
781812
}
782813
},
783814
extraPane = {
784-
val content = navigator.currentDestination?.content?.toString() ?: "aaa"
815+
val content = navigator.currentDestination?.contentKey?.toString() ?: "aaa"
785816
AnimatedPane {
786817
when{
787818
viewModel.itemExtraPaneNavigate == ItemExtraPaneNavigate.SelectApp -> {
@@ -793,7 +824,10 @@ fun ItemEditorGreeting(
793824
saveNow()
794825
viewModel.selectExtraNavigate(ItemExtraPaneNavigate.Default)
795826
// viewModel.resyncItemDataAction()
796-
navigator.navigateBack()
827+
coroutineScope.launch {
828+
navigator.navigateBack()
829+
}
830+
797831
},
798832
snackbarHostState = snackbarHostState,
799833
)
@@ -838,7 +872,10 @@ fun ItemEditorGreeting(
838872
else -> {}
839873
}
840874
viewModel.selectExtraNavigate(ItemExtraPaneNavigate.Default)
841-
navigator.navigateBack()
875+
coroutineScope.launch {
876+
navigator.navigateBack()
877+
}
878+
842879
},
843880
pm = context.packageManager,
844881
snackbarHostState = snackbarHostState,

app/src/main/java/com/perkedel/htlauncher/ui/bars/HTAppBar.kt

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ package com.perkedel.htlauncher.ui.bars
55
import android.view.SoundEffectConstants
66
import android.view.View
77
import androidx.compose.foundation.basicMarquee
8+
import androidx.compose.foundation.layout.Box
89
import androidx.compose.foundation.layout.Column
910
import androidx.compose.foundation.layout.Row
1011
import androidx.compose.foundation.layout.RowScope
1112
import androidx.compose.foundation.layout.WindowInsets
1213
import androidx.compose.foundation.layout.padding
14+
import androidx.compose.foundation.layout.sizeIn
1315
import androidx.compose.material.icons.Icons
1416
import androidx.compose.material.icons.automirrored.filled.ArrowBack
1517
import androidx.compose.material.icons.filled.MoreVert
@@ -41,6 +43,7 @@ import androidx.compose.ui.unit.sp
4143
import coil3.compose.AsyncImage
4244
import com.perkedel.htlauncher.R
4345
import com.perkedel.htlauncher.enumerations.Screen
46+
import com.perkedel.htlauncher.ui.previews.HTPreviewAnnotations
4447
import com.perkedel.htlauncher.ui.theme.HTLauncherTheme
4548

4649
@OptIn(ExperimentalMaterial3Api::class)
@@ -54,7 +57,10 @@ fun HTAppBar(
5457
icon: (@Composable () -> Unit)? = {
5558
iconModel?.let {
5659
AsyncImage(
57-
modifier = Modifier.padding(8.dp),
60+
modifier = Modifier
61+
.padding(8.dp)
62+
.sizeIn(maxWidth = 48.dp, maxHeight = 48.dp)
63+
,
5864
model = it,
5965
contentDescription = "",
6066
placeholder = painterResource(R.drawable.placeholder),
@@ -173,11 +179,12 @@ private fun setShowTopBar(into:Boolean = true,handover:()->Boolean){
173179

174180
}
175181

176-
@PreviewFontScale
177-
@PreviewLightDark
178-
@PreviewScreenSizes
179-
@PreviewDynamicColors
180-
@Preview(showBackground = true)
182+
//@PreviewFontScale
183+
//@PreviewLightDark
184+
//@PreviewScreenSizes
185+
//@PreviewDynamicColors
186+
//@Preview(showBackground = true)
187+
@HTPreviewAnnotations
181188
@Composable
182189
fun HTAppBarPreview(){
183190
HTLauncherTheme {

0 commit comments

Comments
 (0)