mirror of
https://github.com/aljazceru/Android-nRF-Toolbox.git
synced 2025-12-22 08:54:21 +01:00
Change DFU label depends on DFU app presence.
This commit is contained in:
@@ -2,6 +2,16 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="no.nordicsemi.android.nrftoolbox">
|
package="no.nordicsemi.android.nrftoolbox">
|
||||||
|
|
||||||
|
<queries>
|
||||||
|
<package android:name="no.nordicsemi.android.dfu" />
|
||||||
|
|
||||||
|
<intent>
|
||||||
|
<action android:name="android.intent.action.VIEW" />
|
||||||
|
<category android:name="android.intent.category.BROWSABLE" />
|
||||||
|
<data android:scheme="https" />
|
||||||
|
</intent>
|
||||||
|
</queries>
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:name=".NrfToolboxApplication"
|
android:name=".NrfToolboxApplication"
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package no.nordicsemi.android.nrftoolbox
|
|||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.activity.compose.setContent
|
import androidx.activity.compose.setContent
|
||||||
|
import androidx.activity.viewModels
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.Surface
|
import androidx.compose.material3.Surface
|
||||||
@@ -11,11 +12,17 @@ import no.nordicsemi.android.gls.GLSDestinations
|
|||||||
import no.nordicsemi.android.material.you.NordicActivity
|
import no.nordicsemi.android.material.you.NordicActivity
|
||||||
import no.nordicsemi.android.material.you.NordicTheme
|
import no.nordicsemi.android.material.you.NordicTheme
|
||||||
import no.nordicsemi.android.navigation.NavigationView
|
import no.nordicsemi.android.navigation.NavigationView
|
||||||
|
import no.nordicsemi.android.nrftoolbox.repository.ActivitySignals
|
||||||
|
import no.nordicsemi.android.nrftoolbox.viewmodel.HomeViewModel
|
||||||
import no.nordicsemi.ui.scanner.ScannerDestinations
|
import no.nordicsemi.ui.scanner.ScannerDestinations
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class MainActivity : NordicActivity() {
|
class MainActivity : NordicActivity() {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
lateinit var activitySignals: ActivitySignals
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
@@ -30,4 +37,9 @@ class MainActivity : NordicActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
activitySignals.onResume()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package no.nordicsemi.android.nrftoolbox.repository
|
||||||
|
|
||||||
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
import kotlinx.coroutines.flow.asStateFlow
|
||||||
|
import javax.inject.Inject
|
||||||
|
import javax.inject.Singleton
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
class ActivitySignals @Inject constructor() {
|
||||||
|
|
||||||
|
private val _onResumeTrigger = MutableStateFlow(false)
|
||||||
|
val state = _onResumeTrigger.asStateFlow()
|
||||||
|
|
||||||
|
fun onResume() {
|
||||||
|
_onResumeTrigger.value = !_onResumeTrigger.value
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -14,6 +14,7 @@ import androidx.compose.ui.res.stringResource
|
|||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
|
import androidx.lifecycle.OnLifecycleEvent
|
||||||
import no.nordicsemi.android.nrftoolbox.BuildConfig
|
import no.nordicsemi.android.nrftoolbox.BuildConfig
|
||||||
import no.nordicsemi.android.nrftoolbox.ProfileDestination
|
import no.nordicsemi.android.nrftoolbox.ProfileDestination
|
||||||
import no.nordicsemi.android.nrftoolbox.R
|
import no.nordicsemi.android.nrftoolbox.R
|
||||||
@@ -124,7 +125,12 @@ fun HomeScreen() {
|
|||||||
val uriHandler = LocalUriHandler.current
|
val uriHandler = LocalUriHandler.current
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val packageManger = context.packageManager
|
val packageManger = context.packageManager
|
||||||
FeatureButton(R.drawable.ic_dfu, R.string.dfu_module, R.string.dfu_module_full, null, R.string.dfu_module_info) {
|
|
||||||
|
val description = packageManger.getLaunchIntentForPackage(DFU_PACKAGE_NAME)?.let {
|
||||||
|
R.string.dfu_module_info
|
||||||
|
} ?: R.string.dfu_module_install
|
||||||
|
|
||||||
|
FeatureButton(R.drawable.ic_dfu, R.string.dfu_module, R.string.dfu_module_full, null, description) {
|
||||||
val intent = packageManger.getLaunchIntentForPackage(DFU_PACKAGE_NAME)
|
val intent = packageManger.getLaunchIntentForPackage(DFU_PACKAGE_NAME)
|
||||||
if (intent != null) {
|
if (intent != null) {
|
||||||
context.startActivity(intent)
|
context.startActivity(intent)
|
||||||
|
|||||||
@@ -7,5 +7,11 @@ data class HomeViewState(
|
|||||||
val isRSCSModuleRunning: Boolean = false,
|
val isRSCSModuleRunning: Boolean = false,
|
||||||
val isPRXModuleRunning: Boolean = false,
|
val isPRXModuleRunning: Boolean = false,
|
||||||
val isCGMModuleRunning: Boolean = false,
|
val isCGMModuleRunning: Boolean = false,
|
||||||
val isUARTModuleRunning: Boolean = false
|
val isUARTModuleRunning: Boolean = false,
|
||||||
)
|
val refreshToggle: Boolean = false
|
||||||
|
) {
|
||||||
|
|
||||||
|
fun copyWithRefresh(): HomeViewState {
|
||||||
|
return copy(refreshToggle = !refreshToggle)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package no.nordicsemi.android.nrftoolbox.viewmodel
|
package no.nordicsemi.android.nrftoolbox.viewmodel
|
||||||
|
|
||||||
|
import android.util.Log
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
@@ -13,6 +14,7 @@ import no.nordicsemi.android.hrs.service.HRSRepository
|
|||||||
import no.nordicsemi.android.hts.repository.HTSRepository
|
import no.nordicsemi.android.hts.repository.HTSRepository
|
||||||
import no.nordicsemi.android.navigation.NavigationManager
|
import no.nordicsemi.android.navigation.NavigationManager
|
||||||
import no.nordicsemi.android.nrftoolbox.ProfileDestination
|
import no.nordicsemi.android.nrftoolbox.ProfileDestination
|
||||||
|
import no.nordicsemi.android.nrftoolbox.repository.ActivitySignals
|
||||||
import no.nordicsemi.android.nrftoolbox.view.HomeViewState
|
import no.nordicsemi.android.nrftoolbox.view.HomeViewState
|
||||||
import no.nordicsemi.android.prx.repository.PRXRepository
|
import no.nordicsemi.android.prx.repository.PRXRepository
|
||||||
import no.nordicsemi.android.rscs.repository.RSCSRepository
|
import no.nordicsemi.android.rscs.repository.RSCSRepository
|
||||||
@@ -22,6 +24,7 @@ import javax.inject.Inject
|
|||||||
@HiltViewModel
|
@HiltViewModel
|
||||||
class HomeViewModel @Inject constructor(
|
class HomeViewModel @Inject constructor(
|
||||||
private val navigationManager: NavigationManager,
|
private val navigationManager: NavigationManager,
|
||||||
|
private val activitySignals: ActivitySignals,
|
||||||
cgmRepository: CGMRepository,
|
cgmRepository: CGMRepository,
|
||||||
cscRepository: CSCRepository,
|
cscRepository: CSCRepository,
|
||||||
hrsRepository: HRSRepository,
|
hrsRepository: HRSRepository,
|
||||||
@@ -62,6 +65,10 @@ class HomeViewModel @Inject constructor(
|
|||||||
uartRepository.isRunning.onEach {
|
uartRepository.isRunning.onEach {
|
||||||
_state.value = _state.value.copy(isUARTModuleRunning = it)
|
_state.value = _state.value.copy(isUARTModuleRunning = it)
|
||||||
}.launchIn(viewModelScope)
|
}.launchIn(viewModelScope)
|
||||||
|
|
||||||
|
activitySignals.state.onEach {
|
||||||
|
_state.value = _state.value.copyWithRefresh()
|
||||||
|
}.launchIn(viewModelScope)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun openProfile(destination: ProfileDestination) {
|
fun openProfile(destination: ProfileDestination) {
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
<string name="dfu_module">DFU</string>
|
<string name="dfu_module">DFU</string>
|
||||||
<string name="dfu_module_full">Device Firmware Update</string>
|
<string name="dfu_module_full">Device Firmware Update</string>
|
||||||
<string name="dfu_module_info">Available in separate application.</string>
|
<string name="dfu_module_info">Available in separate application.</string>
|
||||||
|
<string name="dfu_module_install">Install from Google Play Store.</string>
|
||||||
|
|
||||||
<string name="viewmodel_profiles">ViewModel profiles</string>
|
<string name="viewmodel_profiles">ViewModel profiles</string>
|
||||||
<string name="service_profiles">Service profiles</string>
|
<string name="service_profiles">Service profiles</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user