Skip to content

Commit e1b870f

Browse files
committed
add more product flavors and build variants.
1 parent 150a37d commit e1b870f

File tree

10 files changed

+99
-47
lines changed

10 files changed

+99
-47
lines changed

.github/workflows/android.yml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,15 @@ jobs:
2727
run: ./gradlew build
2828
- name: Run Tests
2929
run: ./gradlew app:testDebugUnitTest
30-
- name: Generate APK Debug Build with Gradle
30+
- name: Generate APK Debug Build with Gradle (Dev)
3131
if: startsWith(github.ref, 'refs/tags/')
32-
run: ./gradlew assembleDebug
32+
run: ./gradlew assembleDevDebug
33+
- name: Generate APK Debug Build with Gradle (Demo)
34+
if: startsWith(github.ref, 'refs/tags/')
35+
run: ./gradlew assembleDemoDebug
36+
- name: Generate APK Debug Build with Gradle (Full)
37+
if: startsWith(github.ref, 'refs/tags/')
38+
run: ./gradlew assembleFullDebug
3339
- name: Upload to Github Page
3440
uses: softprops/action-gh-release@v1
3541
if: startsWith(github.ref, 'refs/tags/')

app/build.gradle

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,35 @@ android {
2929
multiDexEnabled true
3030
}
3131

32+
flavorDimensions "mode"
33+
productFlavors {
34+
35+
dev {
36+
dimension "mode"
37+
versionNameSuffix "-dev"
38+
}
39+
40+
demo {
41+
dimension "mode"
42+
versionNameSuffix "-demo"
43+
}
44+
45+
full {
46+
dimension "mode"
47+
versionNameSuffix "-full"
48+
}
49+
50+
}
51+
3252
buildTypes {
3353
release {
54+
minifyEnabled true
55+
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
56+
}
57+
58+
debug {
59+
// below will add the suffix to the *com.lcl.lclmeasurementtool* => **com.lcl.lclmeasurementtool.debug**
60+
// applicationIdSuffix ".debug"
3461
minifyEnabled false
3562
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
3663
}

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
<meta-data android:name="ScopedStorage" android:value="true" />
4747
<provider
4848
android:name="androidx.core.content.FileProvider"
49-
android:authorities="com.lcl.lclmeasurementtool.fileprovider"
49+
android:authorities="{applicationId}.fileprovider"
5050
android:exported="false"
5151
android:grantUriPermissions="true">
5252
<meta-data

app/src/main/java/com/lcl/lclmeasurementtool/LCLApplication.kt

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,6 @@ import javax.inject.Inject
1414
@HiltAndroidApp
1515
//class LCLApplication : Application(), Configuration.Provider {
1616
class LCLApplication : Application() {
17-
// @Inject lateinit var workerFactory: HiltWorkerFactory
18-
//
19-
// override fun getWorkManagerConfiguration() = Configuration.Builder()
20-
// .setMinimumLoggingLevel(Log.DEBUG)
21-
// .setWorkerFactory(workerFactory)
22-
// .build()
23-
2417
override fun onCreate() {
2518
super.onCreate()
2619

app/src/main/java/com/lcl/lclmeasurementtool/MainActivity2.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,12 @@ class MainActivity2 : ComponentActivity() {
103103
// including IME animations
104104
WindowCompat.setDecorFitsSystemWindows(window, false)
105105
setContent {
106-
if (uiState == MainActivityUiState.Login) {
107-
viewModel.setDeviceId(UUID.randomUUID().toString())
108-
Login(viewModel = viewModel)
109-
return@setContent
106+
if (com.lcl.lclmeasurementtool.BuildConfig.FLAVOR != "dev") {
107+
if (uiState == MainActivityUiState.Login) {
108+
viewModel.setDeviceId(UUID.randomUUID().toString())
109+
Login(viewModel = viewModel)
110+
return@setContent
111+
}
110112
}
111113
LCLApp(windowSizeClass = calculateWindowSizeClass(activity = this), networkMonitor, simStateMonitor)
112114
}

app/src/main/java/com/lcl/lclmeasurementtool/MainActivityViewModel.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,11 @@ class MainActivityViewModel @Inject constructor(
9797
userDataRepository.setDeviceID(id)
9898
}
9999

100+
fun demoLogin() {
101+
login(hPKR = ByteString.EMPTY, skT = ByteString.EMPTY)
102+
_loginState.value = LoginStatus.RegistrationSucceeded
103+
}
104+
100105
suspend fun login(result: String) {
101106
val job = viewModelScope.async {
102107
val jsonObj: QRCodeKeysModel
@@ -403,6 +408,11 @@ class MainActivityViewModel @Inject constructor(
403408
}
404409

405410
private suspend fun report(reportModel: BaseMeasureDataModel, userData: UserData) {
411+
if (BuildConfig.FLAVOR != "full") {
412+
Log.d(TAG, "Only with ProductFlavor *full* will the data be reported to the remote server")
413+
return
414+
}
415+
406416
try {
407417
val reportString = prepareReportData(reportModel, userData)
408418
val response: ResponseBody = if (reportModel is SignalStrengthReportModel) {

app/src/main/java/com/lcl/lclmeasurementtool/ui/HomeScreen.kt

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import androidx.compose.ui.tooling.preview.Preview
2727
import androidx.compose.ui.unit.dp
2828
import androidx.compose.ui.unit.sp
2929
import androidx.lifecycle.compose.collectAsStateWithLifecycle
30+
import com.lcl.lclmeasurementtool.BuildConfig
3031
import com.lcl.lclmeasurementtool.ConnectivityTestResult
3132
import com.lcl.lclmeasurementtool.MainActivityViewModel
3233
import com.lcl.lclmeasurementtool.PingResultState
@@ -44,6 +45,7 @@ fun HomeRoute(isOffline: Boolean, mainActivityViewModel: MainActivityViewModel)
4445
fun HomeScreen(modifier: Modifier = Modifier, isOffline: Boolean, mainActivityViewModel: MainActivityViewModel) {
4546

4647
val offline by remember { mutableStateOf(isOffline) }
48+
val snackbarHostState = remember { SnackbarHostState() }
4749

4850
val isMLabTestActive = mainActivityViewModel.isMLabTestActive.collectAsStateWithLifecycle()
4951
val mlabPingResult = mainActivityViewModel.mLabPingResult.collectAsStateWithLifecycle()
@@ -73,6 +75,12 @@ fun HomeScreen(modifier: Modifier = Modifier, isOffline: Boolean, mainActivityVi
7375
}
7476

7577
FloatingActionButton(onClick = {
78+
79+
if (BuildConfig.FLAVOR == "full" && offline) {
80+
Log.d("HomeScreen", "device is currently offline")
81+
return@FloatingActionButton
82+
}
83+
7684
if (!isMLabTestActive.value) {
7785
mainActivityViewModel.runMLabTest()
7886
} else {
@@ -86,14 +94,17 @@ fun HomeScreen(modifier: Modifier = Modifier, isOffline: Boolean, mainActivityVi
8694
Icon(imageVector = if (isMLabTestActive.value) Filled.Pause else Filled.PlayArrow, contentDescription = null)
8795
}
8896
}
97+
98+
if (BuildConfig.FLAVOR == "full" && offline) {
99+
ShowMessage(isOffline = true, msg = "Your Device is offline. Please connect to the Internet via Cellular network", snackbarHostState = snackbarHostState)
100+
}
89101
}
90102

91103
@Composable
92104
fun ShowMessage(isOffline: Boolean, msg: String, snackbarHostState: SnackbarHostState) {
93105
LaunchedEffect(isOffline) {
94106
snackbarHostState.showSnackbar(message = msg, duration = SnackbarDuration.Long)
95107
}
96-
97108
}
98109

99110
@Composable
@@ -200,7 +211,9 @@ private fun ConnectivityCard(
200211
}
201212
}
202213
Box(modifier = Modifier.fillMaxWidth()) {
203-
Text(text = "Powered by $label", fontWeight = FontWeight.Thin, fontSize = 10.sp, modifier = Modifier.align(Alignment.BottomEnd).padding(end = 10.dp, bottom = 4.dp))
214+
Text(text = "Powered by $label", fontWeight = FontWeight.Thin, fontSize = 10.sp, modifier = Modifier
215+
.align(Alignment.BottomEnd)
216+
.padding(end = 10.dp, bottom = 4.dp))
204217
}
205218
}
206219
}

app/src/main/java/com/lcl/lclmeasurementtool/ui/LCLApplication.kt

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import androidx.navigation.NavDestination
1717
import androidx.navigation.NavDestination.Companion.hierarchy
1818
import androidx.navigation.NavHostController
1919
import androidx.navigation.compose.NavHost
20+
import com.lcl.lclmeasurementtool.BuildConfig
2021
import com.lcl.lclmeasurementtool.MainActivityViewModel
2122

2223
import com.lcl.lclmeasurementtool.networking.NetworkMonitor
@@ -55,22 +56,23 @@ fun LCLApp(
5556

5657
Log.d("LCLApplication", "isOffline is $isOffline")
5758
Log.d("LCLApplication", "isSimCardInserted is $isSimCardInserted")
58-
// LaunchedEffect(isOffline) {
59-
// if (isOffline) {
60-
// Log.d("LCLApplication", "show snack bar")
61-
// snackbarHostState.showSnackbar(message = "Please connect to a cellular network before running the test", duration = SnackbarDuration.Indefinite)
62-
// }
63-
// }
59+
if (BuildConfig.FLAVOR.equals("full")) {
60+
LaunchedEffect(isOffline) {
61+
if (isOffline) {
62+
Log.d("LCLApplication", "show snack bar")
63+
snackbarHostState.showSnackbar(message = "Please connect to a cellular network before running the test", duration = SnackbarDuration.Indefinite)
64+
}
65+
}
6466

65-
if (!isSimCardInserted) {
66-
// MessageDialog.show("Error", "Please insert the sim card")
67-
Dialog(icon = LCLIcons.NoSIM,
68-
onConfirmClicked = {
69-
// should logout
70-
mainViewModel.logout()
71-
Log.d("LCLApplication", "confirm!") },
72-
title = "Error",
73-
text = "Please insert the sim card")
67+
if (!isSimCardInserted) {
68+
Dialog(icon = LCLIcons.NoSIM,
69+
onConfirmClicked = {
70+
// should logout
71+
mainViewModel.logout()
72+
Log.d("LCLApplication", "confirm!") },
73+
title = "Error",
74+
text = "Please insert the sim card")
75+
}
7476
}
7577

7678

app/src/main/java/com/lcl/lclmeasurementtool/ui/Login.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import androidx.compose.ui.Modifier
1414
import androidx.compose.ui.res.painterResource
1515
import androidx.compose.ui.unit.dp
1616
import androidx.lifecycle.compose.collectAsStateWithLifecycle
17+
import com.lcl.lclmeasurementtool.BuildConfig
1718
import com.lcl.lclmeasurementtool.LoginStatus
1819
import com.lcl.lclmeasurementtool.MainActivityViewModel
1920
import com.lcl.lclmeasurementtool.R
@@ -74,7 +75,16 @@ fun Login(
7475
.width(300.dp)
7576
.height(300.dp)
7677
.padding(top = 50.dp))
77-
Button(onClick = {qrCodeLauncher.launch(null)}, colors = ButtonDefaults.buttonColors(containerColor = MaterialTheme.colorScheme.onPrimaryContainer), modifier = Modifier.padding(top = 30.dp)) {
78+
Button(onClick = {
79+
if (BuildConfig.FLAVOR == "full") {
80+
qrCodeLauncher.launch(null)
81+
} else if (BuildConfig.FLAVOR == "demo") {
82+
viewModel.demoLogin()
83+
}
84+
},
85+
colors = ButtonDefaults.buttonColors(containerColor = MaterialTheme.colorScheme.onPrimaryContainer),
86+
modifier = Modifier.padding(top = 30.dp))
87+
{
7888
Text(text = "Scan to Login")
7989
}
8090
}

app/src/main/java/com/lcl/lclmeasurementtool/ui/SettingsView.kt

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,13 @@ import androidx.compose.ui.graphics.vector.ImageVector
1919
import androidx.compose.ui.platform.LocalContext
2020
import androidx.compose.ui.res.stringResource
2121
import androidx.compose.ui.text.TextStyle
22+
import androidx.compose.ui.tooling.preview.Preview
2223
import androidx.compose.ui.unit.dp
2324
import androidx.compose.ui.unit.sp
2425
import androidx.core.content.ContextCompat
2526
import androidx.hilt.navigation.compose.hiltViewModel
2627
import androidx.lifecycle.compose.collectAsStateWithLifecycle
28+
import com.lcl.lclmeasurementtool.BuildConfig
2729
import com.lcl.lclmeasurementtool.R
2830
import com.lcl.lclmeasurementtool.model.viewmodels.SettingsViewModel
2931

@@ -45,20 +47,7 @@ fun SettingsDialog(
4547
text = {
4648
Divider()
4749
Column(Modifier.verticalScroll(rememberScrollState())) {
48-
// when (settingsUiState) {
49-
// Loading -> {
50-
// Text(
51-
// text = stringResource(string.loading),
52-
// modifier = Modifier.padding(vertical = 16.dp)
53-
// )
54-
// }
55-
// is Success -> {
56-
// SettingsPanel(
57-
// onSelectPublishData = {}
58-
// )
59-
// }
60-
// }
61-
SettingsPanel(onSelectShowData = {viewModel.toggleShowData(!showData.value)}, onLogoutClicked = {viewModel.logout()}, showData = showData.value)
50+
SettingsPanel(onSelectShowData = {viewModel.toggleShowData(!showData.value)}, onLogoutClicked = {viewModel.logout()}, showData = showData.value)
6251
Divider(Modifier.padding(top = 8.dp))
6352
LinksPanel()
6453
VersionInfo()
@@ -147,7 +136,7 @@ private fun VersionInfo() {
147136
Modifier
148137
.fillMaxWidth()
149138
.padding(top = 10.dp), horizontalAlignment = Alignment.CenterHorizontally) {
150-
Text(text = "v1.0")
139+
Text(text = BuildConfig.VERSION_NAME)
151140
TextSummary(text = "By Local Connectivity Lab @ UWCSE")
152141
}
153142
}

0 commit comments

Comments
 (0)