diff --git a/app/build.gradle b/app/build.gradle index d4301114a..d9fa76296 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -172,8 +172,6 @@ dependencies { implementation 'com.google.android.gms:play-services-location:19.0.1' // For Google Sign-In (owner name accesss) implementation 'com.google.android.gms:play-services-auth:20.2.0' - // ML Kit barcode scanning - implementation 'com.google.android.gms:play-services-code-scanner:16.0.0-beta2' // Add the Firebase SDK for Crashlytics. implementation 'com.google.firebase:firebase-crashlytics:18.2.6' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 67799bf9e..535d6953d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -97,9 +97,6 @@ - = Build.VERSION_CODES.R) - packageManager.getInstallSourceInfo(packageName).installingPackageName - else - packageManager.getInstallerPackageName(packageName) -} - /** * return a list of the permissions we don't have */ 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 00664b17b..d2711e238 100644 --- a/app/src/main/java/com/geeksville/mesh/model/UIState.kt +++ b/app/src/main/java/com/geeksville/mesh/model/UIState.kt @@ -346,6 +346,17 @@ class UIViewModel @Inject constructor( meshService?.requestReboot(DataPacket.ID_LOCAL) } + fun requestFactoryReset() { + val config = _localConfig.value + if (config != null) { + val builder = config.device.toBuilder() + builder.factoryReset = true + val newConfig = ConfigProtos.Config.newBuilder() + newConfig.device = builder.build() + setDeviceConfig(newConfig.build()) + } + } + /** * Write the persisted packet data out to a CSV file in the specified location. */ 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 53faed41b..501bed195 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/AdvancedSettingsFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/AdvancedSettingsFragment.kt @@ -55,6 +55,7 @@ class AdvancedSettingsFragment : ScreenFragment("Advanced Settings"), Logging { binding.lsSleepSwitch.isEnabled = connected && model.isESP32() binding.shutdownButton.isEnabled = connected && model.hasAXP() binding.rebootButton.isEnabled = connected + binding.factoryResetButton.isEnabled = connected } binding.positionBroadcastPeriodEditText.on(EditorInfo.IME_ACTION_DONE) { @@ -132,5 +133,17 @@ class AdvancedSettingsFragment : ScreenFragment("Advanced Settings"), Logging { } .show() } + + binding.factoryResetButton.setOnClickListener { + MaterialAlertDialogBuilder(requireContext()) + .setTitle(R.string.are_you_sure_factory_reset) + .setMessage(R.string.factory_reset_description) + .setNeutralButton(R.string.cancel) { _, _ -> + } + .setPositiveButton(R.string.okay) { _, _ -> + model.requestFactoryReset() + } + .show() + } } } \ No newline at end of file diff --git a/app/src/main/java/com/geeksville/mesh/ui/ChannelFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/ChannelFragment.kt index bd4fe6a35..8a16011ff 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/ChannelFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/ChannelFragment.kt @@ -25,7 +25,6 @@ import com.geeksville.mesh.ConfigProtos import com.geeksville.mesh.R import com.geeksville.mesh.android.getCameraPermissions import com.geeksville.mesh.android.hasCameraPermission -import com.geeksville.mesh.android.installSource import com.geeksville.mesh.databinding.ChannelFragmentBinding import com.geeksville.mesh.model.Channel import com.geeksville.mesh.model.ChannelOption @@ -33,9 +32,6 @@ import com.geeksville.mesh.model.ChannelSet import com.geeksville.mesh.model.UIViewModel import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.snackbar.Snackbar -import com.google.mlkit.vision.barcode.common.Barcode -import com.google.mlkit.vision.codescanner.GmsBarcodeScannerOptions -import com.google.mlkit.vision.codescanner.GmsBarcodeScanning import com.google.protobuf.ByteString import com.journeyapps.barcodescanner.ScanContract import com.journeyapps.barcodescanner.ScanOptions @@ -238,24 +234,6 @@ class ChannelFragment : ScreenFragment("Channel"), Logging { .show() } - fun mlkitScan() { - debug("Starting ML Kit code scanner") - val options = GmsBarcodeScannerOptions.Builder() - .setBarcodeFormats(Barcode.FORMAT_QR_CODE) - .build() - val scanner = GmsBarcodeScanning.getClient(requireContext(), options) - scanner.startScan() - .addOnSuccessListener { barcode -> - if (barcode.rawValue != null) - model.setRequestChannelUrl(Uri.parse(barcode.rawValue)) - } - .addOnFailureListener { ex -> - errormsg("code scanner failed: ${ex.message}") - if (requireContext().hasCameraPermission()) zxingScan() - else requestPermissionAndScan() - } - } - binding.channelNameEdit.on(EditorInfo.IME_ACTION_DONE) { requireActivity().hideKeyboard() } @@ -279,13 +257,8 @@ class ChannelFragment : ScreenFragment("Channel"), Logging { } binding.scanButton.setOnClickListener { - // only use ML Kit for play store installs - if (requireContext().installSource() == "com.android.vending") { - mlkitScan() - } else { - if (requireContext().hasCameraPermission()) zxingScan() - else requestPermissionAndScan() - } + if (requireContext().hasCameraPermission()) zxingScan() + else requestPermissionAndScan() } // Note: Do not use setOnCheckedChanged here because we don't want to be called when we programmatically disable editing diff --git a/app/src/main/res/layout/advanced_settings.xml b/app/src/main/res/layout/advanced_settings.xml index e19cedb84..4d2ce438b 100644 --- a/app/src/main/res/layout/advanced_settings.xml +++ b/app/src/main/res/layout/advanced_settings.xml @@ -88,4 +88,16 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@id/shutdownButton" app:layout_constraintTop_toTopOf="@id/shutdownButton" /> + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c2caba121..7ca872e21 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -153,4 +153,7 @@ Append to message Instantly send Empty channel names use the default encryption key (any device on %s can read your messages). + Factory reset + Are you sure you want to factory reset? + This will clear all device configuration you have done.