diff --git a/android/src/main/java/io/parity/signer/domain/FeatureFlags.kt b/android/src/main/java/io/parity/signer/domain/FeatureFlags.kt index f91791cfc2..d7e2793f8a 100644 --- a/android/src/main/java/io/parity/signer/domain/FeatureFlags.kt +++ b/android/src/main/java/io/parity/signer/domain/FeatureFlags.kt @@ -12,6 +12,7 @@ object FeatureFlags { FeatureOption.SKIP_ROOTED_CHECK_EMULATOR -> false FeatureOption.EXPORT_SECRET_KEY -> false //unused FeatureOption.FAIL_DB_VERSION_CHECK -> false + FeatureOption.SKIP_USB_CHECK -> true } } @@ -24,6 +25,7 @@ enum class FeatureOption { FAIL_DB_VERSION_CHECK, SKIP_UNLOCK_FOR_DEVELOPMENT, SKIP_ROOTED_CHECK_EMULATOR, + SKIP_USB_CHECK, EXPORT_SECRET_KEY; //unused as sample fun isEnabled() = FeatureFlags.isEnabled(this) diff --git a/android/src/main/java/io/parity/signer/screens/initial/eachstartchecks/airgap/AirGapViewModel.kt b/android/src/main/java/io/parity/signer/screens/initial/eachstartchecks/airgap/AirGapViewModel.kt index 395a62993b..266d0940fd 100644 --- a/android/src/main/java/io/parity/signer/screens/initial/eachstartchecks/airgap/AirGapViewModel.kt +++ b/android/src/main/java/io/parity/signer/screens/initial/eachstartchecks/airgap/AirGapViewModel.kt @@ -1,8 +1,12 @@ package io.parity.signer.screens.initial.eachstartchecks.airgap +import android.content.Context +import android.provider.Settings import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import io.parity.signer.dependencygraph.ServiceLocator +import io.parity.signer.domain.FeatureFlags +import io.parity.signer.domain.FeatureOption import io.parity.signer.domain.NetworkState import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job @@ -34,6 +38,15 @@ class AirGapViewModel : ViewModel() { _state.update { it.copy(cablesDisconnected = !_state.value.cablesDisconnected) } } + fun isAdbEnabled(context: Context): Boolean { + //todo dmitry check usb checks + if (FeatureFlags.isEnabled(FeatureOption.SKIP_USB_CHECK)) return false + + return Settings.Global.getInt(context.contentResolver, + Settings.Global.ADB_ENABLED, 0 + ) == 1; + } + fun init() { val scope = CoroutineScope(viewModelScope.coroutineContext + Job()) scope.launch { diff --git a/android/src/main/java/io/parity/signer/screens/initial/eachstartchecks/airgap/AirgapScreen.kt b/android/src/main/java/io/parity/signer/screens/initial/eachstartchecks/airgap/AirgapScreen.kt index f1c7fc24d5..70fe6190ad 100644 --- a/android/src/main/java/io/parity/signer/screens/initial/eachstartchecks/airgap/AirgapScreen.kt +++ b/android/src/main/java/io/parity/signer/screens/initial/eachstartchecks/airgap/AirgapScreen.kt @@ -10,6 +10,7 @@ import androidx.compose.material.MaterialTheme import androidx.compose.material.Surface import androidx.compose.material.Text import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Adb import androidx.compose.material.icons.filled.AirplanemodeActive import androidx.compose.material.icons.filled.Bluetooth import androidx.compose.material.icons.filled.Cable @@ -113,47 +114,10 @@ private fun AirgapScreen( AirgapItem(AirgapItemType.WIFI, state.wifiDisabled) SignerDivider(modifier = Modifier.padding(start = 40.dp)) AirgapItem(AirgapItemType.BLUETOOTH, state.bluetoothDisabled) - } - } - - Surface( - shape = RoundedCornerShape(dimensionResource(id = R.dimen.innerFramesCornerRadius)), - border = BorderStroke(1.dp, color = MaterialTheme.colors.fill12), - color = MaterialTheme.colors.fill6, - modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp) - ) { - Column( - horizontalAlignment = Alignment.CenterHorizontally, - ) { - Row( - verticalAlignment = Alignment.CenterVertically, - modifier = Modifier.padding(16.dp), - ) { - Image( - imageVector = Icons.Filled.Cable, - contentDescription = null, - colorFilter = ColorFilter.tint(MaterialTheme.colors.textTertiary), - modifier = Modifier - .padding(8.dp) - .size(24.dp) - ) - Text( - text = stringResource(R.string.airgap_onboarding_disconnect_cable_header), - color = MaterialTheme.colors.textTertiary, - style = SignerTypeface.TitleS, - modifier = Modifier - .padding(horizontal = 16.dp, vertical = 14.dp) - .weight(1f) - ) - } - SignerDivider() - CheckboxWithTextWithGap( - checked = state.cablesDisconnected, - text = stringResource(R.string.airgap_onboarding_disconnect_cable_checkbox_description), - modifier = Modifier.padding(16.dp), - ) { newIsChecked -> - onCablesConfirmCheckbox() - } + SignerDivider(modifier = Modifier.padding(start = 40.dp)) + AirgapItem(AirgapItemType.ADB_ENABLED, false, )//todo dmitry + SignerDivider(modifier = Modifier.padding(start = 40.dp)) + AirgapItem(AirgapItemType.USB, false)//todo dmitry } } } @@ -221,6 +185,8 @@ private fun AirgapItem(type: AirgapItemType, isPassed: Boolean) { AirgapItemType.WIFI -> Icons.Filled.Wifi AirgapItemType.AIRPLANE_MODE -> Icons.Filled.AirplanemodeActive AirgapItemType.BLUETOOTH -> Icons.Filled.Bluetooth + AirgapItemType.USB -> Icons.Filled.Cable + AirgapItemType.ADB_ENABLED -> Icons.Filled.Adb } IconWithCheckmark(color, icon, backgroundColor, isPassed) @@ -228,6 +194,8 @@ private fun AirgapItem(type: AirgapItemType, isPassed: Boolean) { AirgapItemType.WIFI -> stringResource(R.string.airgap_onboarding_wifi_header) AirgapItemType.AIRPLANE_MODE -> stringResource(R.string.airgap_onboarding_airplane_mode_header) AirgapItemType.BLUETOOTH -> stringResource(R.string.airgap_onboarding_bluetooth_header) + AirgapItemType.USB -> stringResource(R.string.airgap_onboarding_disconnect_cable_checkbox_description) + AirgapItemType.ADB_ENABLED -> stringResource(R.string.airgap_onboarding_adb_disable) } Text( text = text, @@ -277,8 +245,7 @@ private fun IconWithCheckmark( } } - -private enum class AirgapItemType { WIFI, AIRPLANE_MODE, BLUETOOTH } +private enum class AirgapItemType { WIFI, AIRPLANE_MODE, BLUETOOTH, USB, ADB_ENABLED, } @Preview( diff --git a/android/src/main/java/io/parity/signer/screens/scan/camera/CameraViewModel.kt b/android/src/main/java/io/parity/signer/screens/scan/camera/CameraViewModel.kt index 49da5c2453..ce0665cb60 100644 --- a/android/src/main/java/io/parity/signer/screens/scan/camera/CameraViewModel.kt +++ b/android/src/main/java/io/parity/signer/screens/scan/camera/CameraViewModel.kt @@ -3,14 +3,10 @@ package io.parity.signer.screens.scan.camera import android.annotation.SuppressLint import android.os.Trace import android.util.Log -import android.widget.Toast import androidx.camera.core.ImageProxy import androidx.lifecycle.ViewModel import com.google.mlkit.vision.barcode.BarcodeScanner import com.google.mlkit.vision.common.InputImage -import io.parity.signer.dependencygraph.ServiceLocator -import io.parity.signer.domain.FeatureFlags -import io.parity.signer.domain.FeatureOption import io.parity.signer.domain.encodeHex import io.parity.signer.domain.submitErrorState import io.parity.signer.uniffi.* diff --git a/android/src/main/res/values/strings.xml b/android/src/main/res/values/strings.xml index e245d1934a..f8523f5eff 100644 --- a/android/src/main/res/values/strings.xml +++ b/android/src/main/res/values/strings.xml @@ -454,6 +454,7 @@ Confirm and Add Keys Confirm by entering the PIN code To finalize the addition of keys to the key set, please confirm that you have scanned the QR code back into the app by entering the PIN code. + Disable ADB on the device