From dcbf664f382a694b74ae6076a25b7ab8eda9dedf Mon Sep 17 00:00:00 2001
From: Phil Oliver <3497406+poliver@users.noreply.github.com>
Date: Sat, 4 Oct 2025 21:15:55 -0400
Subject: [PATCH] Move app intro to `:feature:intro` (#3348)
---
app/build.gradle.kts | 1 +
app/detekt-baseline.xml | 2 --
.../java/com/geeksville/mesh/MainActivity.kt | 2 +-
build.gradle.kts | 1 +
feature/intro/build.gradle.kts | 29 +++++++++++++++++++
feature/intro/detekt-baseline.xml | 8 +++++
.../feature}/intro/AppIntroductionScreen.kt | 2 +-
.../feature}/intro/CriticalAlertsScreen.kt | 2 +-
.../feature}/intro/FeatureUIData.kt | 2 +-
.../feature}/intro/IntroBottomBar.kt | 2 +-
.../feature}/intro/IntroUiHelpers.kt | 2 +-
.../feature}/intro/LocationScreen.kt | 2 +-
.../feature}/intro/NotificationsScreen.kt | 2 +-
.../feature}/intro/PermissionScreenLayout.kt | 2 +-
.../feature}/intro/WelcomeScreen.kt | 2 +-
settings.gradle.kts | 1 +
16 files changed, 50 insertions(+), 12 deletions(-)
create mode 100644 feature/intro/build.gradle.kts
create mode 100644 feature/intro/detekt-baseline.xml
rename {app/src/main/java/com/geeksville/mesh/ui => feature/intro/src/main/kotlin/org/meshtastic/feature}/intro/AppIntroductionScreen.kt (99%)
rename {app/src/main/java/com/geeksville/mesh/ui => feature/intro/src/main/kotlin/org/meshtastic/feature}/intro/CriticalAlertsScreen.kt (98%)
rename {app/src/main/java/com/geeksville/mesh/ui => feature/intro/src/main/kotlin/org/meshtastic/feature}/intro/FeatureUIData.kt (97%)
rename {app/src/main/java/com/geeksville/mesh/ui => feature/intro/src/main/kotlin/org/meshtastic/feature}/intro/IntroBottomBar.kt (98%)
rename {app/src/main/java/com/geeksville/mesh/ui => feature/intro/src/main/kotlin/org/meshtastic/feature}/intro/IntroUiHelpers.kt (99%)
rename {app/src/main/java/com/geeksville/mesh/ui => feature/intro/src/main/kotlin/org/meshtastic/feature}/intro/LocationScreen.kt (98%)
rename {app/src/main/java/com/geeksville/mesh/ui => feature/intro/src/main/kotlin/org/meshtastic/feature}/intro/NotificationsScreen.kt (99%)
rename {app/src/main/java/com/geeksville/mesh/ui => feature/intro/src/main/kotlin/org/meshtastic/feature}/intro/PermissionScreenLayout.kt (99%)
rename {app/src/main/java/com/geeksville/mesh/ui => feature/intro/src/main/kotlin/org/meshtastic/feature}/intro/WelcomeScreen.kt (99%)
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index e5702f712..97587507d 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -197,6 +197,7 @@ dependencies {
implementation(projects.core.service)
implementation(projects.core.strings)
implementation(projects.core.ui)
+ implementation(projects.feature.intro)
implementation(projects.feature.map)
implementation(projects.feature.node)
diff --git a/app/detekt-baseline.xml b/app/detekt-baseline.xml
index 9898c03c4..8ea03a869 100644
--- a/app/detekt-baseline.xml
+++ b/app/detekt-baseline.xml
@@ -32,7 +32,6 @@
ComposableParamOrder:NodeDetailScreen.kt$NodeActionButton
ComposableParamOrder:NodeDetailScreen.kt$NodeDetailList
ComposableParamOrder:PaxMetrics.kt$PaxMetricsChart
- ComposableParamOrder:PermissionScreenLayout.kt$PermissionScreenLayout
ComposableParamOrder:PowerMetrics.kt$PowerMetricsChart
ComposableParamOrder:QuickChat.kt$OutlinedTextFieldWithCounter
ComposableParamOrder:Share.kt$ShareScreen
@@ -281,7 +280,6 @@
ParameterNaming:MessageList.kt$onUnreadChanged
ParameterNaming:NodeDetailScreen.kt$onFirmwareSelected
ParameterNaming:UsbDevices.kt$onDeviceSelected
- ParameterNaming:WelcomeScreen.kt$onGetStarted
PreviewPublic:Channel.kt$ModemPresetInfoPreview
PreviewPublic:EmptyStateContent.kt$EmptyStateContentPreview
PreviewPublic:MapReportingPreference.kt$MapReportingPreview
diff --git a/app/src/main/java/com/geeksville/mesh/MainActivity.kt b/app/src/main/java/com/geeksville/mesh/MainActivity.kt
index 2e32a4a20..888c35074 100644
--- a/app/src/main/java/com/geeksville/mesh/MainActivity.kt
+++ b/app/src/main/java/com/geeksville/mesh/MainActivity.kt
@@ -41,12 +41,12 @@ import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.geeksville.mesh.model.UIViewModel
import com.geeksville.mesh.ui.MainScreen
-import com.geeksville.mesh.ui.intro.AppIntroductionScreen
import dagger.hilt.android.AndroidEntryPoint
import org.meshtastic.core.datastore.UiPreferencesDataSource
import org.meshtastic.core.navigation.DEEP_LINK_BASE_URI
import org.meshtastic.core.ui.theme.AppTheme
import org.meshtastic.core.ui.theme.MODE_DYNAMIC
+import org.meshtastic.feature.intro.AppIntroductionScreen
import timber.log.Timber
import javax.inject.Inject
diff --git a/build.gradle.kts b/build.gradle.kts
index fcf960472..8a8c59fb4 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -75,6 +75,7 @@ dependencies {
kover(projects.core.navigation)
kover(projects.core.network)
kover(projects.core.prefs)
+ kover(projects.feature.intro)
kover(projects.feature.map)
kover(projects.feature.node)
}
\ No newline at end of file
diff --git a/feature/intro/build.gradle.kts b/feature/intro/build.gradle.kts
new file mode 100644
index 000000000..7a07b1679
--- /dev/null
+++ b/feature/intro/build.gradle.kts
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2025 Meshtastic LLC
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+plugins {
+ alias(libs.plugins.kover)
+ alias(libs.plugins.meshtastic.android.library)
+ alias(libs.plugins.meshtastic.android.library.compose)
+}
+
+android { namespace = "org.meshtastic.feature.intro" }
+
+dependencies {
+ implementation(projects.core.strings)
+ implementation(libs.accompanist.permissions)
+}
diff --git a/feature/intro/detekt-baseline.xml b/feature/intro/detekt-baseline.xml
new file mode 100644
index 000000000..5c5d30217
--- /dev/null
+++ b/feature/intro/detekt-baseline.xml
@@ -0,0 +1,8 @@
+
+
+
+
+ ComposableParamOrder:PermissionScreenLayout.kt$PermissionScreenLayout
+ ParameterNaming:WelcomeScreen.kt$onGetStarted
+
+
diff --git a/app/src/main/java/com/geeksville/mesh/ui/intro/AppIntroductionScreen.kt b/feature/intro/src/main/kotlin/org/meshtastic/feature/intro/AppIntroductionScreen.kt
similarity index 99%
rename from app/src/main/java/com/geeksville/mesh/ui/intro/AppIntroductionScreen.kt
rename to feature/intro/src/main/kotlin/org/meshtastic/feature/intro/AppIntroductionScreen.kt
index 7c05a5d40..ee35c04ac 100644
--- a/app/src/main/java/com/geeksville/mesh/ui/intro/AppIntroductionScreen.kt
+++ b/feature/intro/src/main/kotlin/org/meshtastic/feature/intro/AppIntroductionScreen.kt
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-package com.geeksville.mesh.ui.intro
+package org.meshtastic.feature.intro
import android.Manifest
import android.content.Intent
diff --git a/app/src/main/java/com/geeksville/mesh/ui/intro/CriticalAlertsScreen.kt b/feature/intro/src/main/kotlin/org/meshtastic/feature/intro/CriticalAlertsScreen.kt
similarity index 98%
rename from app/src/main/java/com/geeksville/mesh/ui/intro/CriticalAlertsScreen.kt
rename to feature/intro/src/main/kotlin/org/meshtastic/feature/intro/CriticalAlertsScreen.kt
index 5537e0188..556c7bfe0 100644
--- a/app/src/main/java/com/geeksville/mesh/ui/intro/CriticalAlertsScreen.kt
+++ b/feature/intro/src/main/kotlin/org/meshtastic/feature/intro/CriticalAlertsScreen.kt
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-package com.geeksville.mesh.ui.intro
+package org.meshtastic.feature.intro
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
diff --git a/app/src/main/java/com/geeksville/mesh/ui/intro/FeatureUIData.kt b/feature/intro/src/main/kotlin/org/meshtastic/feature/intro/FeatureUIData.kt
similarity index 97%
rename from app/src/main/java/com/geeksville/mesh/ui/intro/FeatureUIData.kt
rename to feature/intro/src/main/kotlin/org/meshtastic/feature/intro/FeatureUIData.kt
index 089be7087..5bb669554 100644
--- a/app/src/main/java/com/geeksville/mesh/ui/intro/FeatureUIData.kt
+++ b/feature/intro/src/main/kotlin/org/meshtastic/feature/intro/FeatureUIData.kt
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-package com.geeksville.mesh.ui.intro
+package org.meshtastic.feature.intro
import androidx.annotation.StringRes
import androidx.compose.ui.graphics.vector.ImageVector
diff --git a/app/src/main/java/com/geeksville/mesh/ui/intro/IntroBottomBar.kt b/feature/intro/src/main/kotlin/org/meshtastic/feature/intro/IntroBottomBar.kt
similarity index 98%
rename from app/src/main/java/com/geeksville/mesh/ui/intro/IntroBottomBar.kt
rename to feature/intro/src/main/kotlin/org/meshtastic/feature/intro/IntroBottomBar.kt
index 0e25f70a1..ecdb44ae3 100644
--- a/app/src/main/java/com/geeksville/mesh/ui/intro/IntroBottomBar.kt
+++ b/feature/intro/src/main/kotlin/org/meshtastic/feature/intro/IntroBottomBar.kt
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-package com.geeksville.mesh.ui.intro
+package org.meshtastic.feature.intro
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Spacer
diff --git a/app/src/main/java/com/geeksville/mesh/ui/intro/IntroUiHelpers.kt b/feature/intro/src/main/kotlin/org/meshtastic/feature/intro/IntroUiHelpers.kt
similarity index 99%
rename from app/src/main/java/com/geeksville/mesh/ui/intro/IntroUiHelpers.kt
rename to feature/intro/src/main/kotlin/org/meshtastic/feature/intro/IntroUiHelpers.kt
index f5d729748..c9294be25 100644
--- a/app/src/main/java/com/geeksville/mesh/ui/intro/IntroUiHelpers.kt
+++ b/feature/intro/src/main/kotlin/org/meshtastic/feature/intro/IntroUiHelpers.kt
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-package com.geeksville.mesh.ui.intro
+package org.meshtastic.feature.intro
import android.content.Context
import androidx.annotation.StringRes
diff --git a/app/src/main/java/com/geeksville/mesh/ui/intro/LocationScreen.kt b/feature/intro/src/main/kotlin/org/meshtastic/feature/intro/LocationScreen.kt
similarity index 98%
rename from app/src/main/java/com/geeksville/mesh/ui/intro/LocationScreen.kt
rename to feature/intro/src/main/kotlin/org/meshtastic/feature/intro/LocationScreen.kt
index 46442d80a..3d0682015 100644
--- a/app/src/main/java/com/geeksville/mesh/ui/intro/LocationScreen.kt
+++ b/feature/intro/src/main/kotlin/org/meshtastic/feature/intro/LocationScreen.kt
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-package com.geeksville.mesh.ui.intro
+package org.meshtastic.feature.intro
import android.content.Intent
import android.net.Uri
diff --git a/app/src/main/java/com/geeksville/mesh/ui/intro/NotificationsScreen.kt b/feature/intro/src/main/kotlin/org/meshtastic/feature/intro/NotificationsScreen.kt
similarity index 99%
rename from app/src/main/java/com/geeksville/mesh/ui/intro/NotificationsScreen.kt
rename to feature/intro/src/main/kotlin/org/meshtastic/feature/intro/NotificationsScreen.kt
index d7a8a0942..aa1f51a5f 100644
--- a/app/src/main/java/com/geeksville/mesh/ui/intro/NotificationsScreen.kt
+++ b/feature/intro/src/main/kotlin/org/meshtastic/feature/intro/NotificationsScreen.kt
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-package com.geeksville.mesh.ui.intro
+package org.meshtastic.feature.intro
import android.content.Intent
import android.net.Uri
diff --git a/app/src/main/java/com/geeksville/mesh/ui/intro/PermissionScreenLayout.kt b/feature/intro/src/main/kotlin/org/meshtastic/feature/intro/PermissionScreenLayout.kt
similarity index 99%
rename from app/src/main/java/com/geeksville/mesh/ui/intro/PermissionScreenLayout.kt
rename to feature/intro/src/main/kotlin/org/meshtastic/feature/intro/PermissionScreenLayout.kt
index 4ea11d07e..d72fbabc5 100644
--- a/app/src/main/java/com/geeksville/mesh/ui/intro/PermissionScreenLayout.kt
+++ b/feature/intro/src/main/kotlin/org/meshtastic/feature/intro/PermissionScreenLayout.kt
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-package com.geeksville.mesh.ui.intro
+package org.meshtastic.feature.intro
import androidx.annotation.StringRes
import androidx.compose.foundation.gestures.detectTapGestures
diff --git a/app/src/main/java/com/geeksville/mesh/ui/intro/WelcomeScreen.kt b/feature/intro/src/main/kotlin/org/meshtastic/feature/intro/WelcomeScreen.kt
similarity index 99%
rename from app/src/main/java/com/geeksville/mesh/ui/intro/WelcomeScreen.kt
rename to feature/intro/src/main/kotlin/org/meshtastic/feature/intro/WelcomeScreen.kt
index 4c577f63e..01a7a3db8 100644
--- a/app/src/main/java/com/geeksville/mesh/ui/intro/WelcomeScreen.kt
+++ b/feature/intro/src/main/kotlin/org/meshtastic/feature/intro/WelcomeScreen.kt
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-package com.geeksville.mesh.ui.intro
+package org.meshtastic.feature.intro
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 34da3988b..7de9fcdea 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -31,6 +31,7 @@ include(
":core:service",
":core:strings",
":core:ui",
+ ":feature:intro",
":feature:map",
":feature:node",
":mesh_service_example",