diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index babebda343..ae4072d6a0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -58,21 +58,26 @@ jobs: rm ./app/src/main/res/values/curfirmwareversion.xml echo -e "\n ${{ env.CUR_FIRMWARE_VERSION }}\n ${{ env.SHORT_FIRMWARE_VERSION }}\n" > ./app/src/main/res/values/curfirmwareversion.xml - - name: Fetch firmware release - uses: dsaltares/fetch-gh-release-asset@master - with: - repo: meshtastic/Meshtastic-device - file: firmware-${{ env.CUR_FIRMWARE_VERSION }}.zip - version: tags/${{ steps.firmware_version.outputs.tag }} - target: firmware.zip - token: ${{ secrets.GITHUB_TOKEN }} +# - name: Fetch firmware release +# uses: dsaltares/fetch-gh-release-asset@master +# with: +# repo: meshtastic/Meshtastic-device +# file: firmware-${{ env.CUR_FIRMWARE_VERSION }}.zip +# version: tags/${{ steps.firmware_version.outputs.tag }} +# target: firmware.zip +# token: ${{ secrets.GITHUB_TOKEN }} - - name: Unzip firmware into assets/firmware +# - name: Unzip firmware into assets/firmware +# run: | +# rm -rf ./app/src/main/assets/firmware +# mkdir -p ./app/src/main/assets/firmware +# unzip -qq ./firmware.zip 'littlefs-*.bin' 'firmware-heltec*.bin' 'firmware-tbeam*.bin' 'firmware-tlora*.bin' 'firmware-nano*.bin' -d ./app/src/main/assets/firmware +# rm ./firmware.zip + + - name: Mock firmware assets for release run: | rm -rf ./app/src/main/assets/firmware mkdir -p ./app/src/main/assets/firmware - unzip -qq ./firmware.zip 'littlefs-*.bin' 'firmware-heltec*.bin' 'firmware-tbeam*.bin' 'firmware-tlora*.bin' 'firmware-nano*.bin' -d ./app/src/main/assets/firmware - rm ./firmware.zip - name: Validate Gradle wrapper uses: gradle/wrapper-validation-action@v1 diff --git a/app/build.gradle b/app/build.gradle index c56338557f..d4301114a8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -43,8 +43,8 @@ android { applicationId "com.geeksville.mesh" minSdkVersion 21 // The oldest emulator image I have tried is 22 (though 21 probably works) targetSdkVersion 30 // 30 can't work until an explicit location permissions dialog is added - versionCode 20338 // format is Mmmss (where M is 1+the numeric major number - versionName "1.3.38" + versionCode 20339 // format is Mmmss (where M is 1+the numeric major number + versionName "1.3.39" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" // per https://developer.android.com/studio/write/vector-asset-studio diff --git a/app/src/main/java/com/geeksville/mesh/BaseActivity.kt b/app/src/main/java/com/geeksville/mesh/BaseActivity.kt index 1556dbd05b..205a20b250 100644 --- a/app/src/main/java/com/geeksville/mesh/BaseActivity.kt +++ b/app/src/main/java/com/geeksville/mesh/BaseActivity.kt @@ -37,12 +37,12 @@ open class BaseActivity: AppCompatActivity(), Logging { } } - private fun createLocale(language: String):Locale { - var langArray = language.split("_") - if (langArray.size == 2) { - return Locale(langArray[0], langArray[1]); + private fun createLocale(language: String): Locale { + val langArray = language.split("_") + return if (langArray.size == 2) { + Locale(langArray[0], langArray[1]) } else { - return Locale(langArray[0]); + Locale(langArray[0]) } } diff --git a/app/src/main/java/com/geeksville/mesh/MainActivity.kt b/app/src/main/java/com/geeksville/mesh/MainActivity.kt index d020412168..ed14accb0c 100644 --- a/app/src/main/java/com/geeksville/mesh/MainActivity.kt +++ b/app/src/main/java/com/geeksville/mesh/MainActivity.kt @@ -410,11 +410,10 @@ class MainActivity : BaseActivity(), Logging, installSplashScreen() super.onCreate(savedInstanceState) - if (preferences.getBoolean("app_intro_completed", false) == false) { + if (!preferences.getBoolean("app_intro_completed", false)) { startActivity(Intent(this, AppIntroduction::class.java)) } - binding = ActivityMainBinding.inflate(layoutInflater) val prefs = UIViewModel.getPreferences(this) diff --git a/app/src/main/java/com/geeksville/mesh/android/ContextServices.kt b/app/src/main/java/com/geeksville/mesh/android/ContextServices.kt index 3a9ddf10fd..6915ef4a5b 100644 --- a/app/src/main/java/com/geeksville/mesh/android/ContextServices.kt +++ b/app/src/main/java/com/geeksville/mesh/android/ContextServices.kt @@ -1,7 +1,6 @@ package com.geeksville.mesh.android import android.Manifest -import android.annotation.SuppressLint import android.app.NotificationManager import android.bluetooth.BluetoothManager import android.companion.CompanionDeviceManager @@ -19,7 +18,6 @@ import com.geeksville.mesh.MainActivity val Context.bluetoothManager: BluetoothManager? get() = getSystemService(Context.BLUETOOTH_SERVICE) as? BluetoothManager? val Context.deviceManager: CompanionDeviceManager? - @SuppressLint("InlinedApi") get() { if (GeeksvilleApplication.currentActivity is MainActivity) { val activity = GeeksvilleApplication.currentActivity @@ -47,7 +45,7 @@ fun Context.hasGps(): Boolean = packageManager.hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS) /** - * return app install source (sideload = null) + * return app install source (play store = com.android.vending) */ fun Context.installSource(): String? { return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) diff --git a/app/src/main/java/com/geeksville/mesh/model/UIState.kt b/app/src/main/java/com/geeksville/mesh/model/UIState.kt index daf27fa2db..00664b17b8 100644 --- a/app/src/main/java/com/geeksville/mesh/model/UIState.kt +++ b/app/src/main/java/com/geeksville/mesh/model/UIState.kt @@ -71,13 +71,10 @@ class UIViewModel @Inject constructor( private val _allPacketState = MutableStateFlow>(emptyList()) val allPackets: StateFlow> = _allPacketState - private val _localConfig = MutableLiveData() - val localConfig: LiveData get() = _localConfig + private val _localConfig = MutableLiveData() + val localConfig: LiveData get() = _localConfig - private val _quickChatActions = - MutableStateFlow>( - emptyList() - ) + private val _quickChatActions = MutableStateFlow>(emptyList()) val quickChatActions: StateFlow> = _quickChatActions init { diff --git a/app/src/main/java/com/geeksville/mesh/repository/datastore/LocalConfigRepository.kt b/app/src/main/java/com/geeksville/mesh/repository/datastore/LocalConfigRepository.kt index 972e4dfc0c..4291256921 100644 --- a/app/src/main/java/com/geeksville/mesh/repository/datastore/LocalConfigRepository.kt +++ b/app/src/main/java/com/geeksville/mesh/repository/datastore/LocalConfigRepository.kt @@ -61,6 +61,7 @@ class LocalConfigRepository @Inject constructor( if (config.hasWifi()) setWifiConfig(config.wifi) if (config.hasDisplay()) setDisplayConfig(config.display) if (config.hasLora()) setLoraConfig(config.lora) + if (config.hasBluetooth()) setBluetoothConfig(config.bluetooth) } private suspend fun setDeviceConfig(config: ConfigProtos.Config.DeviceConfig) { @@ -99,6 +100,12 @@ class LocalConfigRepository @Inject constructor( } } + private suspend fun setBluetoothConfig(config: ConfigProtos.Config.BluetoothConfig) { + localConfigStore.updateData { preference -> + preference.toBuilder().setBluetooth(config).build() + } + } + suspend fun fetchInitialLocalConfig() = localConfigStore.data.first() } diff --git a/app/src/main/java/com/geeksville/mesh/ui/AdvancedSettingsFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/AdvancedSettingsFragment.kt index 6d6bff5de6..53faed41bb 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/AdvancedSettingsFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/AdvancedSettingsFragment.kt @@ -115,6 +115,7 @@ class AdvancedSettingsFragment : ScreenFragment("Advanced Settings"), Logging { .setNeutralButton(R.string.cancel) { _, _ -> } .setPositiveButton(getString(R.string.okay)) { _, _ -> + debug("User clicked requestShutdown") model.requestShutdown() } .show() @@ -126,6 +127,7 @@ class AdvancedSettingsFragment : ScreenFragment("Advanced Settings"), Logging { .setNeutralButton(R.string.cancel) { _, _ -> } .setPositiveButton(getString(R.string.okay)) { _, _ -> + debug("User clicked requestReboot") model.requestReboot() } .show() diff --git a/app/src/main/java/com/geeksville/mesh/ui/SettingsFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/SettingsFragment.kt index 3326883c66..dff076719a 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/SettingsFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/SettingsFragment.kt @@ -281,7 +281,17 @@ class SettingsFragment : ScreenFragment("Settings"), Logging { } model.localConfig.observe(viewLifecycleOwner) { - updateNodeInfo() + if (!model.isConnected()) { + val configCount = it.allFields.size + binding.scanStatusText.text = "Device config ($configCount / 7)" + } else updateNodeInfo() + } + + model.channels.observe(viewLifecycleOwner) { + if (!model.isConnected()) { + val channelCount = it?.protobuf?.settingsCount ?: 0 + binding.scanStatusText.text = "Channels ($channelCount / 8)" + } } // Also watch myNodeInfo because it might change later diff --git a/app/src/main/play/release-notes/en-US/alpha.txt b/app/src/main/play/release-notes/en-US/alpha.txt index e7baf16551..e4da040805 100644 --- a/app/src/main/play/release-notes/en-US/alpha.txt +++ b/app/src/main/play/release-notes/en-US/alpha.txt @@ -1 +1 @@ -Lots of improvements - see meshtastic.discourse.group +For more information visit meshtastic.org. This application is made by volunteers. We are friendly and actively respond to forum posts with any questions you have. Post at meshtastic.discourse.group and we'll help. diff --git a/app/src/main/play/release-notes/en-US/beta.txt b/app/src/main/play/release-notes/en-US/beta.txt index e7baf16551..e4da040805 100644 --- a/app/src/main/play/release-notes/en-US/beta.txt +++ b/app/src/main/play/release-notes/en-US/beta.txt @@ -1 +1 @@ -Lots of improvements - see meshtastic.discourse.group +For more information visit meshtastic.org. This application is made by volunteers. We are friendly and actively respond to forum posts with any questions you have. Post at meshtastic.discourse.group and we'll help. diff --git a/app/src/main/play/release-notes/en-US/production.txt b/app/src/main/play/release-notes/en-US/production.txt index e7baf16551..e4da040805 100644 --- a/app/src/main/play/release-notes/en-US/production.txt +++ b/app/src/main/play/release-notes/en-US/production.txt @@ -1 +1 @@ -Lots of improvements - see meshtastic.discourse.group +For more information visit meshtastic.org. This application is made by volunteers. We are friendly and actively respond to forum posts with any questions you have. Post at meshtastic.discourse.group and we'll help.