Merge "Fix NullPointerException in NetworkProviderSettings" into main
diff --git a/Android.bp b/Android.bp
index 0271b2f..a62aa11 100644
--- a/Android.bp
+++ b/Android.bp
@@ -55,6 +55,9 @@
],
srcs: ["src/**/*.java", "src/**/*.kt"],
+ exclude_srcs: [
+ "src/com/android/settings/biometrics/fingerprint2/shared/**/*.kt",
+ ],
use_resource_processor: true,
resource_dirs: [
"res",
@@ -113,6 +116,7 @@
"SystemUIUnfoldLib",
"aconfig_settings_flags_lib",
"android.content.pm.flags-aconfig-java",
+ "FingerprintManagerInteractor",
],
plugins: [
diff --git a/TEST_MAPPING b/TEST_MAPPING
index c448de9..9722a85 100644
--- a/TEST_MAPPING
+++ b/TEST_MAPPING
@@ -16,17 +16,6 @@
"include-filter": "com.android.settings.biometrics2"
}
]
- },
- {
- "name": "SettingsUITests",
- "options": [
- {
- "include-filter": "com.android.settings.ui"
- },
- {
- "exclude-annotation": "org.junit.Ignore"
- }
- ]
}
],
"postsubmit": [
@@ -42,9 +31,6 @@
"name": "SettingsUITests",
"options": [
{
- "exclude-filter": "com.android.settings.ui"
- },
- {
"exclude-annotation": "org.junit.Ignore"
}
]
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2cd7806..d5ad3d3 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -10732,9 +10732,9 @@
</string-array>
<!-- Debugging developer settings: enable angle as system driver? [CHAR LIMIT=50] -->
- <string name="enable_angle_as_system_driver">Enable ANGLE</string>
+ <string name="enable_angle_as_system_driver">Experimental: Enable ANGLE</string>
<!-- Debugging developer settings: enable angle as system driver summary [CHAR LIMIT=NONE] -->
- <string name="enable_angle_as_system_driver_summary">Enable ANGLE as default OpenGL ES driver. Enabling it on incompatible devices may break some applications.</string>
+ <string name="enable_angle_as_system_driver_summary">Warning: Enable ANGLE as default OpenGL ES driver. This feature is in experiment and may not be compatible with some camera and video apps.</string>
<!--Dialog body text used to explain a reboot is required after changing ANGLE as system GLES driver setting-->
<string name="reboot_dialog_enable_angle_as_system_driver">A reboot is required to change the system OpenGL ES driver</string>
diff --git a/src/com/android/settings/accessibility/LockScreenRotationPreferenceController.java b/src/com/android/settings/accessibility/LockScreenRotationPreferenceController.java
index db19096..bde2ef5 100644
--- a/src/com/android/settings/accessibility/LockScreenRotationPreferenceController.java
+++ b/src/com/android/settings/accessibility/LockScreenRotationPreferenceController.java
@@ -54,7 +54,8 @@
*/
@Override
public boolean setChecked(boolean isChecked) {
- RotationPolicy.setRotationLock(mContext, !isChecked);
+ RotationPolicy.setRotationLock(mContext, !isChecked,
+ /* caller= */ "LockScreenRotationPreferenceController#setChecked");
return true;
}
diff --git a/src/com/android/settings/biometrics/fingerprint2/conversion/Util.kt b/src/com/android/settings/biometrics/fingerprint2/conversion/Util.kt
new file mode 100644
index 0000000..b2767c3
--- /dev/null
+++ b/src/com/android/settings/biometrics/fingerprint2/conversion/Util.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.biometrics.fingerprint2.conversion
+
+import android.hardware.fingerprint.FingerprintManager
+import android.hardware.fingerprint.FingerprintSensorProperties
+import android.hardware.fingerprint.FingerprintSensorPropertiesInternal
+import com.android.settings.biometrics.fingerprint2.shared.model.EnrollReason
+import com.android.settings.biometrics.fingerprint2.shared.model.FingerprintSensorPropertyViewModel
+import com.android.settings.biometrics.fingerprint2.shared.model.SensorStrength
+import com.android.settings.biometrics.fingerprint2.shared.model.SensorType
+
+class Util {
+ companion object {
+ fun sensorPropsToViewModel(
+ props: FingerprintSensorPropertiesInternal
+ ): FingerprintSensorPropertyViewModel {
+ val sensorStrength: SensorStrength =
+ when (props.sensorStrength) {
+ FingerprintSensorProperties.STRENGTH_CONVENIENCE -> SensorStrength.Convenient
+ FingerprintSensorProperties.STRENGTH_WEAK -> SensorStrength.Weak
+ FingerprintSensorProperties.STRENGTH_STRONG -> SensorStrength.Strong
+ else -> SensorStrength.Unknown
+ }
+ val sensorType: SensorType =
+ when (props.sensorType) {
+ FingerprintSensorProperties.TYPE_UDFPS_OPTICAL -> SensorType.Optical
+ FingerprintSensorProperties.TYPE_UDFPS_ULTRASONIC -> SensorType.Ultrasonic
+ FingerprintSensorProperties.TYPE_REAR -> SensorType.RFPS
+ FingerprintSensorProperties.TYPE_POWER_BUTTON -> SensorType.SFPS
+ else -> SensorType.Unknown
+ }
+ return FingerprintSensorPropertyViewModel(
+ props.sensorId,
+ sensorStrength,
+ props.maxEnrollmentsPerUser,
+ sensorType
+ )
+ }
+ }
+
+}
+fun EnrollReason.toOriginalReason(): Int {
+ return when (this) {
+ EnrollReason.EnrollEnrolling -> FingerprintManager.ENROLL_ENROLL
+ EnrollReason.FindSensor -> FingerprintManager.ENROLL_FIND_SENSOR
+ }
+}
diff --git a/src/com/android/settings/biometrics/fingerprint2/domain/interactor/FingerprintManagerInteractor.kt b/src/com/android/settings/biometrics/fingerprint2/domain/interactor/FingerprintManagerInteractorImpl.kt
similarity index 75%
rename from src/com/android/settings/biometrics/fingerprint2/domain/interactor/FingerprintManagerInteractor.kt
rename to src/com/android/settings/biometrics/fingerprint2/domain/interactor/FingerprintManagerInteractorImpl.kt
index 2c8ee8f..41da247 100644
--- a/src/com/android/settings/biometrics/fingerprint2/domain/interactor/FingerprintManagerInteractor.kt
+++ b/src/com/android/settings/biometrics/fingerprint2/domain/interactor/FingerprintManagerInteractorImpl.kt
@@ -21,15 +21,16 @@
import android.hardware.fingerprint.FingerprintManager
import android.hardware.fingerprint.FingerprintManager.GenerateChallengeCallback
import android.hardware.fingerprint.FingerprintManager.RemovalCallback
-import android.hardware.fingerprint.FingerprintSensorPropertiesInternal
import android.os.CancellationSignal
import android.util.Log
import com.android.settings.biometrics.GatekeeperPasswordProvider
+import com.android.settings.biometrics.fingerprint2.conversion.Util
+import com.android.settings.biometrics.fingerprint2.conversion.toOriginalReason
+import com.android.settings.biometrics.fingerprint2.shared.domain.interactor.FingerprintManagerInteractor
+import com.android.settings.biometrics.fingerprint2.shared.model.EnrollReason
import com.android.settings.biometrics.fingerprint2.shared.model.FingerprintAuthAttemptViewModel
import com.android.settings.biometrics.fingerprint2.shared.model.FingerprintViewModel
-import com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel.EnrollReason
-import com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel.FingerEnrollStateViewModel
-import com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel.toOriginalReason
+import com.android.settings.biometrics.fingerprint2.shared.model.FingerEnrollStateViewModel
import com.android.settings.password.ChooseLockSettingsHelper
import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine
@@ -45,59 +46,6 @@
private const val TAG = "FingerprintManagerInteractor"
-/** Encapsulates business logic related to managing fingerprints. */
-interface FingerprintManagerInteractor {
- /** Returns the list of current fingerprints. */
- val enrolledFingerprints: Flow<List<FingerprintViewModel>>
-
- /** Returns the max enrollable fingerprints, note during SUW this might be 1 */
- val maxEnrollableFingerprints: Flow<Int>
-
- /** Returns true if a user can enroll a fingerprint false otherwise. */
- val canEnrollFingerprints: Flow<Boolean>
-
- /** Retrieves the sensor properties of a device */
- val sensorPropertiesInternal: Flow<FingerprintSensorPropertiesInternal?>
-
- /** Runs [FingerprintManager.authenticate] */
- suspend fun authenticate(): FingerprintAuthAttemptViewModel
-
- /**
- * Generates a challenge with the provided [gateKeeperPasswordHandle] and on success returns a
- * challenge and challenge token. This info can be used for secure operations such as
- * [FingerprintManager.enroll]
- *
- * @param gateKeeperPasswordHandle GateKeeper password handle generated by a Confirm
- * @return A [Pair] of the challenge and challenge token
- */
- suspend fun generateChallenge(gateKeeperPasswordHandle: Long): Pair<Long, ByteArray>
-
- /**
- * Runs [FingerprintManager.enroll] with the [hardwareAuthToken] and [EnrollReason] for this
- * enrollment. Returning the [FingerEnrollStateViewModel] that represents this fingerprint
- * enrollment state.
- */
- suspend fun enroll(
- hardwareAuthToken: ByteArray?,
- enrollReason: EnrollReason,
- ): Flow<FingerEnrollStateViewModel>
-
- /**
- * Removes the given fingerprint, returning true if it was successfully removed and false
- * otherwise
- */
- suspend fun removeFingerprint(fp: FingerprintViewModel): Boolean
-
- /** Renames the given fingerprint if one exists */
- suspend fun renameFingerprint(fp: FingerprintViewModel, newName: String)
-
- /** Indicates if the device has side fingerprint */
- suspend fun hasSideFps(): Boolean
-
- /** Indicates if the press to auth feature has been enabled */
- suspend fun pressToAuthEnabled(): Boolean
-}
-
class FingerprintManagerInteractorImpl(
applicationContext: Context,
private val backgroundDispatcher: CoroutineDispatcher,
@@ -144,7 +92,10 @@
override val sensorPropertiesInternal = flow {
val sensorPropertiesInternal = fingerprintManager.sensorPropertiesInternal
- emit(if (sensorPropertiesInternal.isEmpty()) null else sensorPropertiesInternal.first())
+ emit(
+ if (sensorPropertiesInternal.isEmpty()) null
+ else Util.sensorPropsToViewModel(sensorPropertiesInternal.first())
+ )
}
override val maxEnrollableFingerprints = flow { emit(maxFingerprints) }
@@ -183,7 +134,7 @@
cancellationSignal,
applicationContext.userId,
enrollmentCallback,
- enrollReason.toOriginalReason()
+ enrollReason.toOriginalReason(),
)
awaitClose {
// If the stream has not been ended, and the user has stopped collecting the flow
diff --git a/src/com/android/settings/biometrics/fingerprint2/shared/Android.bp b/src/com/android/settings/biometrics/fingerprint2/shared/Android.bp
new file mode 100644
index 0000000..8873fd8
--- /dev/null
+++ b/src/com/android/settings/biometrics/fingerprint2/shared/Android.bp
@@ -0,0 +1,13 @@
+// This library is mainly used for fakes which will be shared across are various types of tests
+// unit/robo/screenshot etc.
+//
+// This library shouldn't have many dependencies.
+android_library {
+ name: "FingerprintManagerInteractor",
+ srcs: [
+ "**/*.kt"
+ ],
+ static_libs: [
+ "kotlinx-coroutines-android",
+ ],
+}
\ No newline at end of file
diff --git a/src/com/android/settings/biometrics/fingerprint2/shared/AndroidManifest.xml b/src/com/android/settings/biometrics/fingerprint2/shared/AndroidManifest.xml
new file mode 100644
index 0000000..e2c97fc
--- /dev/null
+++ b/src/com/android/settings/biometrics/fingerprint2/shared/AndroidManifest.xml
@@ -0,0 +1,18 @@
+<!--
+ ~ Copyright (C) 2023 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.settings.biometrics.fingerprint2.shared">
+</manifest>
diff --git a/src/com/android/settings/biometrics/fingerprint2/shared/domain/interactor/FingerprintManagerInteractor.kt b/src/com/android/settings/biometrics/fingerprint2/shared/domain/interactor/FingerprintManagerInteractor.kt
new file mode 100644
index 0000000..5353bb2
--- /dev/null
+++ b/src/com/android/settings/biometrics/fingerprint2/shared/domain/interactor/FingerprintManagerInteractor.kt
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.biometrics.fingerprint2.shared.domain.interactor
+
+import com.android.settings.biometrics.fingerprint2.shared.model.EnrollReason
+import com.android.settings.biometrics.fingerprint2.shared.model.FingerprintAuthAttemptViewModel
+import com.android.settings.biometrics.fingerprint2.shared.model.FingerprintSensorPropertyViewModel
+import com.android.settings.biometrics.fingerprint2.shared.model.FingerprintViewModel
+import com.android.settings.biometrics.fingerprint2.shared.model.FingerEnrollStateViewModel
+import kotlinx.coroutines.flow.Flow
+
+/**
+ * Interface to obtain the necessary data for FingerprintEnrollment/Settings
+ *
+ * Note that this interface should not have dependencies on heavyweight libraries such as the
+ * framework, hidl/aidl, etc. This makes it much easier to test and create fakes for.
+ */
+interface FingerprintManagerInteractor {
+ /** Returns the list of current fingerprints. */
+ val enrolledFingerprints: Flow<List<FingerprintViewModel>>
+
+ /** Returns the max enrollable fingerprints, note during SUW this might be 1 */
+ val maxEnrollableFingerprints: Flow<Int>
+
+ /** Returns true if a user can enroll a fingerprint false otherwise. */
+ val canEnrollFingerprints: Flow<Boolean>
+
+ /** Retrieves the sensor properties of a device */
+ val sensorPropertiesInternal: Flow<FingerprintSensorPropertyViewModel?>
+
+ /** Runs the authenticate flow */
+ suspend fun authenticate(): FingerprintAuthAttemptViewModel
+
+ /**
+ * Generates a challenge with the provided [gateKeeperPasswordHandle] and on success returns a
+ * challenge and challenge token. This info can be used for secure operations such as enrollment
+ *
+ * @param gateKeeperPasswordHandle GateKeeper password handle generated by a Confirm
+ * @return A [Pair] of the challenge and challenge token
+ */
+ suspend fun generateChallenge(gateKeeperPasswordHandle: Long): Pair<Long, ByteArray>
+
+ /**
+ * Runs [FingerprintManager.enroll] with the [hardwareAuthToken] and [EnrollReason] for this
+ * enrollment. Returning the [FingerEnrollStateViewModel] that represents this fingerprint
+ * enrollment state.
+ */
+ suspend fun enroll(
+ hardwareAuthToken: ByteArray?,
+ enrollReason: EnrollReason,
+ ): Flow<FingerEnrollStateViewModel>
+
+ /**
+ * Removes the given fingerprint, returning true if it was successfully removed and false
+ * otherwise
+ */
+ suspend fun removeFingerprint(fp: FingerprintViewModel): Boolean
+
+ /** Renames the given fingerprint if one exists */
+ suspend fun renameFingerprint(fp: FingerprintViewModel, newName: String)
+
+ /** Indicates if the device has side fingerprint */
+ suspend fun hasSideFps(): Boolean
+
+ /** Indicates if the press to auth feature has been enabled */
+ suspend fun pressToAuthEnabled(): Boolean
+
+}
diff --git a/src/com/android/settings/biometrics/fingerprint2/shared/model/EnrollReasonViewModel.kt b/src/com/android/settings/biometrics/fingerprint2/shared/model/EnrollReasonViewModel.kt
new file mode 100644
index 0000000..47a0af0
--- /dev/null
+++ b/src/com/android/settings/biometrics/fingerprint2/shared/model/EnrollReasonViewModel.kt
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.biometrics.fingerprint2.shared.model
+
+/** The reason for enrollment */
+enum class EnrollReason {
+ /**
+ * The enroll happens on education screen. This is to support legacy flows where we require the
+ * user to touch the sensor before going ahead to the EnrollEnrolling flow
+ */
+ FindSensor,
+ /** The enroll happens on enrolling screen. */
+ EnrollEnrolling
+}
diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerEnrollStateViewModel.kt b/src/com/android/settings/biometrics/fingerprint2/shared/model/FingerEnrollStateViewModel.kt
similarity index 94%
rename from src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerEnrollStateViewModel.kt
rename to src/com/android/settings/biometrics/fingerprint2/shared/model/FingerEnrollStateViewModel.kt
index 73343bd..179ac60 100644
--- a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerEnrollStateViewModel.kt
+++ b/src/com/android/settings/biometrics/fingerprint2/shared/model/FingerEnrollStateViewModel.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel
+package com.android.settings.biometrics.fingerprint2.shared.model
import android.annotation.StringRes
diff --git a/src/com/android/settings/biometrics/fingerprint2/shared/model/FingerprintViewModel.kt b/src/com/android/settings/biometrics/fingerprint2/shared/model/FingerprintViewModel.kt
index db28e79..fc9539c 100644
--- a/src/com/android/settings/biometrics/fingerprint2/shared/model/FingerprintViewModel.kt
+++ b/src/com/android/settings/biometrics/fingerprint2/shared/model/FingerprintViewModel.kt
@@ -32,3 +32,36 @@
val message: String,
) : FingerprintAuthAttemptViewModel()
}
+
+/** The various types of fingerprint sensors */
+sealed class SensorType {
+ /** Rear fingerprint sensor */
+ data object RFPS : SensorType()
+
+ /** Optical under display sensor */
+ data object Optical : SensorType()
+
+ /** Ultrasonic under display sensor */
+ data object Ultrasonic : SensorType()
+
+ /** Side fingerprint sensor */
+ data object SFPS : SensorType()
+
+ /** Unkonwn fingerprint sensor */
+ data object Unknown : SensorType()
+}
+
+/** The strength of a given sensor */
+sealed class SensorStrength {
+ data object Convenient : SensorStrength()
+ data object Weak : SensorStrength()
+ data object Strong : SensorStrength()
+ data object Unknown : SensorStrength()
+}
+
+data class FingerprintSensorPropertyViewModel(
+ val sensorId: Int,
+ val sensorStrength: SensorStrength,
+ val maxEnrollmentsPerUser: Int,
+ val sensorType: SensorType
+)
diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/fragment/FingerprintEnrollFindSensorV2Fragment.kt b/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/fragment/FingerprintEnrollFindSensorV2Fragment.kt
index dcdcccf..e4ac00f 100644
--- a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/fragment/FingerprintEnrollFindSensorV2Fragment.kt
+++ b/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/fragment/FingerprintEnrollFindSensorV2Fragment.kt
@@ -29,6 +29,7 @@
import com.android.settings.R
import com.android.settings.biometrics.fingerprint.FingerprintErrorDialog
import com.android.settings.biometrics.fingerprint.FingerprintFindSensorAnimation
+import com.android.settings.biometrics.fingerprint2.shared.model.SensorType
import com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel.FingerprintEnrollFindSensorViewModel
import com.android.systemui.biometrics.shared.model.FingerprintSensorType
import com.google.android.setupcompat.template.FooterBarMixin
@@ -65,9 +66,9 @@
viewModel.sensorType.collect {
contentLayoutId =
when (it) {
- FingerprintSensorType.UDFPS_OPTICAL,
- FingerprintSensorType.UDFPS_ULTRASONIC -> R.layout.udfps_enroll_find_sensor_layout
- FingerprintSensorType.POWER_BUTTON -> R.layout.sfps_enroll_find_sensor_layout
+ SensorType.Optical,
+ SensorType.Ultrasonic -> R.layout.udfps_enroll_find_sensor_layout
+ SensorType.SFPS -> R.layout.sfps_enroll_find_sensor_layout
else -> R.layout.fingerprint_v2_enroll_find_sensor
}
}
@@ -170,14 +171,14 @@
illustrationLottie?.visibility = View.VISIBLE
}
- private fun setTexts(sensorType: FingerprintSensorType, view: GlifLayout) {
+ private fun setTexts(sensorType: SensorType, view: GlifLayout) {
when (sensorType) {
- FingerprintSensorType.UDFPS_OPTICAL,
- FingerprintSensorType.UDFPS_ULTRASONIC -> {
+ SensorType.Optical,
+ SensorType.Ultrasonic -> {
view.setHeaderText(R.string.security_settings_udfps_enroll_find_sensor_title)
view.setDescriptionText(R.string.security_settings_udfps_enroll_find_sensor_message)
}
- FingerprintSensorType.POWER_BUTTON -> {
+ SensorType.SFPS -> {
view.setHeaderText(R.string.security_settings_sfps_enroll_find_sensor_title)
view.setDescriptionText(R.string.security_settings_sfps_enroll_find_sensor_message)
}
diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/fragment/FingerprintEnrollIntroV2Fragment.kt b/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/fragment/FingerprintEnrollIntroV2Fragment.kt
index dbf6d12..2ebc5d5 100644
--- a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/fragment/FingerprintEnrollIntroV2Fragment.kt
+++ b/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/fragment/FingerprintEnrollIntroV2Fragment.kt
@@ -35,10 +35,10 @@
import com.android.settings.R
import com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel.FingerprintEnrollNavigationViewModel
import com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel.FingerprintEnrollViewModel
+import com.android.settings.biometrics.fingerprint2.shared.model.SensorType
import com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel.FingerprintGatekeeperViewModel
import com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel.FingerprintScrollViewModel
import com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel.Unicorn
-import com.android.systemui.biometrics.shared.model.FingerprintSensorType
import com.google.android.setupcompat.template.FooterBarMixin
import com.google.android.setupcompat.template.FooterButton
import com.google.android.setupdesign.GlifLayout
@@ -144,8 +144,8 @@
val iconShield: ImageView = view.requireViewById(R.id.icon_shield)
val footerMessage6: TextView = view.requireViewById(R.id.footer_message_6)
when (sensorType) {
- FingerprintSensorType.UDFPS_ULTRASONIC,
- FingerprintSensorType.UDFPS_OPTICAL -> {
+ SensorType.Ultrasonic,
+ SensorType.Optical -> {
footerMessage6.visibility = View.VISIBLE
iconShield.visibility = View.VISIBLE
}
diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/EnrollReason.kt b/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/EnrollReason.kt
deleted file mode 100644
index 87deeb3..0000000
--- a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/EnrollReason.kt
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel
-
-import android.hardware.fingerprint.FingerprintManager
-
-/**
- * The reason for enrollment. Represents [FingerprintManager.EnrollReason]
- */
-enum class EnrollReason {
- /** The enroll happens on education screen. */
- FindSensor,
- /** The enroll happens on enrolling screen. */
- EnrollEnrolling
-}
-
-/** Convert EnrollReason to original [FingerprintManager.EnrollReason]. */
-fun EnrollReason.toOriginalReason(): Int {
- return when (this) {
- EnrollReason.EnrollEnrolling -> FingerprintManager.ENROLL_ENROLL
- EnrollReason.FindSensor -> FingerprintManager.ENROLL_FIND_SENSOR
- }
-}
diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintEnrollFindSensorViewModel.kt b/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintEnrollFindSensorViewModel.kt
index dbf6b33..c877d67 100644
--- a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintEnrollFindSensorViewModel.kt
+++ b/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintEnrollFindSensorViewModel.kt
@@ -20,6 +20,9 @@
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
+import com.android.settings.biometrics.fingerprint2.shared.model.EnrollReason
+import com.android.settings.biometrics.fingerprint2.shared.model.FingerEnrollStateViewModel
+import com.android.settings.biometrics.fingerprint2.shared.model.SensorType
import com.android.systemui.biometrics.shared.model.FingerprintSensorType
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
@@ -42,13 +45,13 @@
orientationStateViewModel: OrientationStateViewModel
) : ViewModel() {
/** Represents the stream of sensor type. */
- val sensorType: Flow<FingerprintSensorType> =
+ val sensorType: Flow<SensorType> =
fingerprintEnrollViewModel.sensorType.filterWhenEducationIsShown()
private val _isUdfps: Flow<Boolean> =
sensorType.map {
- it == FingerprintSensorType.UDFPS_OPTICAL || it == FingerprintSensorType.UDFPS_ULTRASONIC
+ it == SensorType.Optical || it == SensorType.Ultrasonic
}
- private val _isSfps: Flow<Boolean> = sensorType.map { it == FingerprintSensorType.POWER_BUTTON }
+ private val _isSfps: Flow<Boolean> = sensorType.map { it == SensorType.RFPS }
private val _isRearSfps: Flow<Boolean> =
combineTransform(_isSfps, _isUdfps) { v1, v2 -> !v1 && !v2 }
@@ -92,8 +95,8 @@
) { sensorType, hasValidGatekeeperInfo, gatekeeperInfo, navigationViewModel ->
val shouldStartEnroll =
navigationViewModel.currStep == Education &&
- sensorType != FingerprintSensorType.UDFPS_OPTICAL &&
- sensorType != FingerprintSensorType.UDFPS_ULTRASONIC &&
+ sensorType != SensorType.Optical &&
+ sensorType != SensorType.Ultrasonic &&
hasValidGatekeeperInfo
if (shouldStartEnroll) (gatekeeperInfo as GatekeeperInfo.GatekeeperPasswordInfo).token
else null
diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintEnrollViewModel.kt b/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintEnrollViewModel.kt
index cb1beb9..b2c51db 100644
--- a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintEnrollViewModel.kt
+++ b/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintEnrollViewModel.kt
@@ -17,13 +17,14 @@
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
-import com.android.settings.biometrics.fingerprint2.domain.interactor.FingerprintManagerInteractor
+import com.android.settings.biometrics.fingerprint2.shared.domain.interactor.FingerprintManagerInteractor
+import com.android.settings.biometrics.fingerprint2.shared.model.EnrollReason
+import com.android.settings.biometrics.fingerprint2.shared.model.FingerEnrollStateViewModel
+import com.android.settings.biometrics.fingerprint2.shared.model.SensorType
import com.android.systemui.biometrics.shared.model.FingerprintSensorType
-import com.android.systemui.biometrics.shared.model.toSensorType
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
-import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.flowOn
@@ -39,17 +40,15 @@
backgroundDispatcher: CoroutineDispatcher,
) : ViewModel() {
- /** Represents the stream of [FingerprintSensorType] */
- val sensorType: Flow<FingerprintSensorType> =
- fingerprintManagerInteractor.sensorPropertiesInternal.filterNotNull().map {
- it.sensorType.toSensorType()
- }
-
private var _enrollReason: MutableStateFlow<EnrollReason> =
MutableStateFlow(EnrollReason.FindSensor)
private var _hardwareAuthToken: MutableStateFlow<ByteArray?> = MutableStateFlow(null)
private var _consumerShouldEnroll: MutableStateFlow<Boolean> = MutableStateFlow(false)
+ /** Represents the stream of [FingerprintSensorType] */
+ val sensorType: Flow<SensorType> =
+ fingerprintManagerInteractor.sensorPropertiesInternal.filterNotNull().map { it.sensorType }
+
/**
* A flow that contains a [FingerprintEnrollViewModel] which contains the relevant information for
* an enrollment process
diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintEnrolllNavigationViewModel.kt b/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintEnrolllNavigationViewModel.kt
index dafe545..d2bb321 100644
--- a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintEnrolllNavigationViewModel.kt
+++ b/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintEnrolllNavigationViewModel.kt
@@ -20,7 +20,7 @@
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
-import com.android.settings.biometrics.fingerprint2.domain.interactor.FingerprintManagerInteractor
+import com.android.settings.biometrics.fingerprint2.shared.domain.interactor.FingerprintManagerInteractor
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
@@ -39,7 +39,7 @@
/**
* The [EnrollType] for fingerprint enrollment indicates information on how the flow should behave.
*/
-sealed class EnrollType()
+sealed class EnrollType
/** The default enrollment experience, typically called from Settings */
object Default : EnrollType()
diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintGatekeeperViewModel.kt b/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintGatekeeperViewModel.kt
index fa4463a..db93d02 100644
--- a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintGatekeeperViewModel.kt
+++ b/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintGatekeeperViewModel.kt
@@ -21,7 +21,7 @@
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
-import com.android.settings.biometrics.fingerprint2.domain.interactor.FingerprintManagerInteractor
+import com.android.settings.biometrics.fingerprint2.shared.domain.interactor.FingerprintManagerInteractor
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintScrollViewModel.kt b/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintScrollViewModel.kt
index d79d9c0..989d4d3 100644
--- a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintScrollViewModel.kt
+++ b/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintScrollViewModel.kt
@@ -27,6 +27,7 @@
class FingerprintScrollViewModel : ViewModel() {
private val _hasReadConsentScreen: MutableStateFlow<Boolean> = MutableStateFlow(false)
+
/** Indicates if a user has consented to FingerprintEnrollment */
val hasReadConsentScreen: Flow<Boolean> = _hasReadConsentScreen.asStateFlow()
@@ -35,7 +36,7 @@
_hasReadConsentScreen.update { true }
}
- class FingerprintScrollViewModelFactory() : ViewModelProvider.Factory {
+ class FingerprintScrollViewModelFactory : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel> create(
diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/settings/binder/FingerprintSettingsViewBinder.kt b/src/com/android/settings/biometrics/fingerprint2/ui/settings/binder/FingerprintSettingsViewBinder.kt
index 9f42d81..e66b4cd 100644
--- a/src/com/android/settings/biometrics/fingerprint2/ui/settings/binder/FingerprintSettingsViewBinder.kt
+++ b/src/com/android/settings/biometrics/fingerprint2/ui/settings/binder/FingerprintSettingsViewBinder.kt
@@ -34,7 +34,6 @@
import com.android.settings.biometrics.fingerprint2.ui.settings.viewmodel.ShowSettings
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
-import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.launch
@@ -55,7 +54,6 @@
challenge: Long?,
challengeToken: ByteArray?
)
-
/** Helper to launch an add fingerprint request */
fun launchAddFingerprint(userId: Int, challengeToken: ByteArray?)
/**
@@ -63,10 +61,8 @@
* choose a PIN/PATTERN/PASS.
*/
fun launchConfirmOrChooseLock(userId: Int)
-
/** Used to indicate that FingerprintSettings is finished. */
fun finish()
-
/** Indicates what result should be set for the returning callee */
fun setResultExternal(resultCode: Int)
/** Indicates the settings UI should be shown */
diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/settings/fragment/FingerprintSettingsRenameDialog.kt b/src/com/android/settings/biometrics/fingerprint2/ui/settings/fragment/FingerprintSettingsRenameDialog.kt
index 84f33ff..9bde0b0 100644
--- a/src/com/android/settings/biometrics/fingerprint2/ui/settings/fragment/FingerprintSettingsRenameDialog.kt
+++ b/src/com/android/settings/biometrics/fingerprint2/ui/settings/fragment/FingerprintSettingsRenameDialog.kt
@@ -106,8 +106,9 @@
val dialog = FingerprintSettingsRenameDialog()
val onClick =
DialogInterface.OnClickListener { _, _ ->
- val dialogTextField = dialog.requireDialog()
- .requireViewById(R.id.fingerprint_rename_field) as ImeAwareEditText
+ val dialogTextField =
+ dialog.requireDialog().requireViewById(R.id.fingerprint_rename_field)
+ as ImeAwareEditText
val newName = dialogTextField.text.toString()
if (!TextUtils.equals(newName, fp.name)) {
Log.d(TAG, "rename $fp.name to $newName for $dialog")
diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/settings/viewmodel/FingerprintSettingsNavigationViewModel.kt b/src/com/android/settings/biometrics/fingerprint2/ui/settings/viewmodel/FingerprintSettingsNavigationViewModel.kt
index 538bb6d..22a25e1 100644
--- a/src/com/android/settings/biometrics/fingerprint2/ui/settings/viewmodel/FingerprintSettingsNavigationViewModel.kt
+++ b/src/com/android/settings/biometrics/fingerprint2/ui/settings/viewmodel/FingerprintSettingsNavigationViewModel.kt
@@ -21,7 +21,7 @@
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
import com.android.settings.biometrics.BiometricEnrollBase
-import com.android.settings.biometrics.fingerprint2.domain.interactor.FingerprintManagerInteractor
+import com.android.settings.biometrics.fingerprint2.shared.domain.interactor.FingerprintManagerInteractor
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
@@ -32,17 +32,18 @@
/** A Viewmodel that represents the navigation of the FingerprintSettings activity. */
class FingerprintSettingsNavigationViewModel(
- private val userId: Int,
- private val fingerprintManagerInteractor: FingerprintManagerInteractor,
- private val backgroundDispatcher: CoroutineDispatcher,
- tokenInit: ByteArray?,
- challengeInit: Long?,
+ private val userId: Int,
+ private val fingerprintManagerInteractor: FingerprintManagerInteractor,
+ private val backgroundDispatcher: CoroutineDispatcher,
+ tokenInit: ByteArray?,
+ challengeInit: Long?,
) : ViewModel() {
private var token = tokenInit
private var challenge = challengeInit
private val _nextStep: MutableStateFlow<NextStepViewModel?> = MutableStateFlow(null)
+
/** This flow represents the high level state for the FingerprintSettingsV2Fragment. */
val nextStep: StateFlow<NextStepViewModel?> = _nextStep.asStateFlow()
@@ -118,8 +119,8 @@
launchFinishSettings("Error, empty keyChallenge")
return
}
- token = theToken!!
- challenge = theChallenge!!
+ token = theToken
+ challenge = theChallenge
showSettingsHelper()
}
@@ -170,12 +171,13 @@
private fun launchFinishSettings(reason: String, errorCode: Int) {
_nextStep.update { FinishSettingsWithResult(errorCode, reason) }
}
+
class FingerprintSettingsNavigationModelFactory(
- private val userId: Int,
- private val interactor: FingerprintManagerInteractor,
- private val backgroundDispatcher: CoroutineDispatcher,
- private val token: ByteArray?,
- private val challenge: Long?,
+ private val userId: Int,
+ private val interactor: FingerprintManagerInteractor,
+ private val backgroundDispatcher: CoroutineDispatcher,
+ private val token: ByteArray?,
+ private val challenge: Long?,
) : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/settings/viewmodel/FingerprintSettingsViewModel.kt b/src/com/android/settings/biometrics/fingerprint2/ui/settings/viewmodel/FingerprintSettingsViewModel.kt
index 5770d09..d2691b4 100644
--- a/src/com/android/settings/biometrics/fingerprint2/ui/settings/viewmodel/FingerprintSettingsViewModel.kt
+++ b/src/com/android/settings/biometrics/fingerprint2/ui/settings/viewmodel/FingerprintSettingsViewModel.kt
@@ -21,11 +21,10 @@
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
-import com.android.settings.biometrics.fingerprint2.domain.interactor.FingerprintManagerInteractor
+import com.android.settings.biometrics.fingerprint2.shared.domain.interactor.FingerprintManagerInteractor
import com.android.settings.biometrics.fingerprint2.shared.model.FingerprintAuthAttemptViewModel
import com.android.settings.biometrics.fingerprint2.shared.model.FingerprintViewModel
-import com.android.systemui.biometrics.shared.model.FingerprintSensorType
-import com.android.systemui.biometrics.shared.model.toSensorType
+import com.android.settings.biometrics.fingerprint2.shared.model.SensorType
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableSharedFlow
@@ -90,10 +89,8 @@
private val _consumerShouldAuthenticate: MutableStateFlow<Boolean> = MutableStateFlow(false)
- private val _fingerprintSensorType: Flow<FingerprintSensorType> =
- fingerprintManagerInteractor.sensorPropertiesInternal.filterNotNull().map {
- it.sensorType.toSensorType()
- }
+ private val _fingerprintSensorType: Flow<SensorType> =
+ fingerprintManagerInteractor.sensorPropertiesInternal.filterNotNull().map { it.sensorType }
private val _sensorNullOrEmpty: Flow<Boolean> =
fingerprintManagerInteractor.sensorPropertiesInternal.map { it == null }
@@ -149,10 +146,7 @@
if (sensorNullOrEmpty) {
return@combine false
}
- if (
- listOf(FingerprintSensorType.UDFPS_ULTRASONIC, FingerprintSensorType.UDFPS_OPTICAL)
- .contains(sensorType)
- ) {
+ if (listOf(SensorType.Ultrasonic, SensorType.Optical).contains(sensorType)) {
return@combine false
}
diff --git a/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverController.java b/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverController.java
index b3af95e..95cf64c 100644
--- a/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverController.java
+++ b/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverController.java
@@ -57,6 +57,10 @@
@VisibleForTesting
static final String PROPERTY_PERSISTENT_GRAPHICS_EGL = "persist.graphics.egl";
+ @VisibleForTesting
+ static final String PROPERTY_DEBUG_ANGLE_DEVELOPER_OPTION =
+ "debug.graphics.angle.developeroption.enable";
+
@VisibleForTesting static final String ANGLE_DRIVER_SUFFIX = "angle";
@VisibleForTesting
@@ -72,6 +76,11 @@
public void set(String key, String val) {
SystemProperties.set(key, val);
}
+
+ @Override
+ public boolean getBoolean(String key, boolean def) {
+ return SystemProperties.getBoolean(key, def);
+ }
};
}
}
@@ -81,6 +90,13 @@
this(context, fragment, new Injector());
}
+ // Return true if the ANGLE developer option entry point is enabled.
+ // This can be enabled by calling:
+ // `adb shell setprop debug.graphics.angle.developeroption.enable true`
+ private boolean isAngleDeveloperOptionEnabled() {
+ return mSystemProperties.getBoolean(PROPERTY_DEBUG_ANGLE_DEVELOPER_OPTION, false);
+ }
+
private boolean isAngleSupported() {
return TextUtils.equals(
mSystemProperties.get(PROPERTY_RO_GFX_ANGLE_SUPPORTED, ""), "true");
@@ -96,6 +112,10 @@
// Exception is when user chooses to reboot now, the switch should keep its current value
// and persist its' state over reboot.
mShouldToggleSwitchBackOnRebootDialogDismiss = true;
+ final String persistGraphicsEglValue =
+ mSystemProperties.get(PROPERTY_PERSISTENT_GRAPHICS_EGL, "");
+ Log.v(TAG, "Value of " + PROPERTY_PERSISTENT_GRAPHICS_EGL + " is: "
+ + persistGraphicsEglValue);
}
@Override
@@ -149,6 +169,12 @@
mPreference.setEnabled(false);
((SwitchPreference) mPreference).setChecked(false);
}
+
+ // Regardless of whether ANGLE is enabled, disable the developer option UI
+ // as long as UI is not enabled via debug property.
+ if (!isAngleDeveloperOptionEnabled()) {
+ mPreference.setEnabled(false);
+ }
}
@Override
diff --git a/src/com/android/settings/development/graphicsdriver/GraphicsDriverSystemPropertiesWrapper.java b/src/com/android/settings/development/graphicsdriver/GraphicsDriverSystemPropertiesWrapper.java
index 549cd81..9684282 100644
--- a/src/com/android/settings/development/graphicsdriver/GraphicsDriverSystemPropertiesWrapper.java
+++ b/src/com/android/settings/development/graphicsdriver/GraphicsDriverSystemPropertiesWrapper.java
@@ -41,4 +41,13 @@
* SELinux. libc will log the underlying reason.
*/
void set(@NonNull String key, @Nullable String val);
+
+ /**
+ * Get the boolean value for the given {@code key}.
+ *
+ * @param key the key to lookup
+ * @param def the default value in case the property is not set or empty
+ * @return if the {@code key} isn't found, return {@code def}.
+ */
+ boolean getBoolean(@NonNull String key, @NonNull boolean def);
}
diff --git a/src/com/android/settings/display/AutoRotatePreferenceController.java b/src/com/android/settings/display/AutoRotatePreferenceController.java
index f16cbfb..ec2592d 100644
--- a/src/com/android/settings/display/AutoRotatePreferenceController.java
+++ b/src/com/android/settings/display/AutoRotatePreferenceController.java
@@ -103,7 +103,8 @@
final boolean isLocked = !isChecked;
mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_ROTATION_LOCK,
isLocked);
- RotationPolicy.setRotationLock(mContext, isLocked);
+ RotationPolicy.setRotationLock(mContext, isLocked,
+ /* caller= */ "AutoRotatePreferenceController#setChecked");
return true;
}
}
diff --git a/src/com/android/settings/display/AutoRotateSwitchBarController.java b/src/com/android/settings/display/AutoRotateSwitchBarController.java
index 93420b0..e6fc2e3 100644
--- a/src/com/android/settings/display/AutoRotateSwitchBarController.java
+++ b/src/com/android/settings/display/AutoRotateSwitchBarController.java
@@ -82,7 +82,8 @@
final boolean isLocked = !isChecked;
mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_ROTATE_ROTATE_MASTER_TOGGLE,
isLocked);
- RotationPolicy.setRotationLock(mContext, isLocked);
+ RotationPolicy.setRotationLock(mContext, isLocked,
+ /* caller= */ "AutoRotateSwitchBarController#setChecked");
return true;
}
diff --git a/src/com/android/settings/display/SmartAutoRotatePreferenceController.java b/src/com/android/settings/display/SmartAutoRotatePreferenceController.java
index 311068f..a5c15b6 100644
--- a/src/com/android/settings/display/SmartAutoRotatePreferenceController.java
+++ b/src/com/android/settings/display/SmartAutoRotatePreferenceController.java
@@ -169,7 +169,8 @@
final boolean isLocked = !isChecked;
mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_ROTATION_LOCK,
isLocked);
- RotationPolicy.setRotationLock(mContext, isLocked);
+ RotationPolicy.setRotationLock(mContext, isLocked,
+ /* caller= */ "SmartAutoRotatePreferenceController#setChecked");
return true;
}
diff --git a/src/com/android/settings/gestures/GlobalActionsPanelPreferenceController.java b/src/com/android/settings/gestures/GlobalActionsPanelPreferenceController.java
deleted file mode 100644
index 32a7ba5..0000000
--- a/src/com/android/settings/gestures/GlobalActionsPanelPreferenceController.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.settings.gestures;
-
-import android.content.Context;
-import android.provider.Settings;
-import android.text.TextUtils;
-
-import com.android.internal.annotations.VisibleForTesting;
-
-public class GlobalActionsPanelPreferenceController extends GesturePreferenceController {
- private static final String PREF_KEY_VIDEO = "global_actions_panel_video";
-
- @VisibleForTesting
- protected static final String ENABLED_SETTING = Settings.Secure.GLOBAL_ACTIONS_PANEL_ENABLED;
- @VisibleForTesting
- protected static final String AVAILABLE_SETTING =
- Settings.Secure.GLOBAL_ACTIONS_PANEL_AVAILABLE;
-
- @VisibleForTesting
- protected static final String TOGGLE_KEY = "gesture_global_actions_panel_switch";
-
- public GlobalActionsPanelPreferenceController(Context context, String key) {
- super(context, key);
- }
-
- @Override
- public int getAvailabilityStatus() {
- int enabled = Settings.Secure.getInt(mContext.getContentResolver(), AVAILABLE_SETTING, 0);
- return enabled == 1 ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
- }
-
- @Override
- public boolean setChecked(boolean isChecked) {
- return Settings.Secure.putInt(mContext.getContentResolver(), ENABLED_SETTING,
- isChecked ? 1 : 0);
- }
-
- @Override
- protected String getVideoPrefKey() {
- return PREF_KEY_VIDEO;
- }
-
- @Override
- public boolean isSliceable() {
- return TextUtils.equals(getPreferenceKey(), TOGGLE_KEY);
- }
-
- @Override
- public boolean isPublicSlice() {
- return true;
- }
-
- @Override
- public boolean isChecked() {
- int enabled = Settings.Secure.getInt(mContext.getContentResolver(), ENABLED_SETTING, 0);
- return enabled == 1;
- }
-}
diff --git a/src/com/android/settings/network/MobileNetworkRepository.java b/src/com/android/settings/network/MobileNetworkRepository.java
index 5d6ad33..80c5464 100644
--- a/src/com/android/settings/network/MobileNetworkRepository.java
+++ b/src/com/android/settings/network/MobileNetworkRepository.java
@@ -40,6 +40,7 @@
import androidx.annotation.GuardedBy;
import androidx.lifecycle.LifecycleOwner;
+import com.android.internal.telephony.flags.Flags;
import com.android.settings.network.telephony.MobileNetworkUtils;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -703,9 +704,10 @@
Log.d(TAG, "insert subInfo to subInfoEntity, subInfo = " + subInfo);
}
if (subInfo.isEmbedded()
- && subInfo.getProfileClass() == PROFILE_CLASS_PROVISIONING) {
+ && (subInfo.getProfileClass() == PROFILE_CLASS_PROVISIONING
+ || (Flags.oemEnabledSatelliteFlag() && subInfo.isNtn()))) {
if (DEBUG) {
- Log.d(TAG, "Do not insert the provision eSIM");
+ Log.d(TAG, "Do not insert the provisioning or satellite eSIM");
}
continue;
}
diff --git a/src/com/android/settings/network/SubscriptionsPreferenceController.java b/src/com/android/settings/network/SubscriptionsPreferenceController.java
index 9cd49c8..cc62189 100644
--- a/src/com/android/settings/network/SubscriptionsPreferenceController.java
+++ b/src/com/android/settings/network/SubscriptionsPreferenceController.java
@@ -265,9 +265,8 @@
/**@return {@code true} if subId is the default data sub. **/
private boolean isDds(int subId) {
- return mSubscriptionManager.getDefaultDataSubscriptionInfo() != null
- && mSubscriptionManager.getDefaultDataSubscriptionInfo().getSubscriptionId()
- == subId;
+ SubscriptionInfo info = mSubscriptionManager.getDefaultDataSubscriptionInfo();
+ return info != null && info.getSubscriptionId() == subId;
}
private CharSequence getMobilePreferenceSummary(int subId) {
diff --git a/src/com/android/settings/search/SettingsSearchIndexablesProvider.java b/src/com/android/settings/search/SettingsSearchIndexablesProvider.java
index 3b10c09..3b04186 100644
--- a/src/com/android/settings/search/SettingsSearchIndexablesProvider.java
+++ b/src/com/android/settings/search/SettingsSearchIndexablesProvider.java
@@ -454,7 +454,7 @@
// Skip Settings injected items because they should be indexed in the sub-pages.
return false;
}
- return true;
+ return tile.isSearchable();
}
private static Object[] createIndexableRawColumnObjects(SearchIndexableRaw raw) {
diff --git a/src/com/android/settings/sim/CallsSimListDialogFragment.java b/src/com/android/settings/sim/CallsSimListDialogFragment.java
index cbee634..bc0ab08 100644
--- a/src/com/android/settings/sim/CallsSimListDialogFragment.java
+++ b/src/com/android/settings/sim/CallsSimListDialogFragment.java
@@ -26,6 +26,8 @@
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
+import com.android.internal.telephony.flags.Flags;
+
import java.util.ArrayList;
import java.util.List;
@@ -56,7 +58,8 @@
SubscriptionInfo info = subscriptionManager.getActiveSubscriptionInfo(subId);
if (info == null || (info.isEmbedded()
- && info.getProfileClass() == PROFILE_CLASS_PROVISIONING)) {
+ && (info.getProfileClass() == PROFILE_CLASS_PROVISIONING
+ || (Flags.oemEnabledSatelliteFlag() && info.isNtn())))) {
continue;
}
result.add(subscriptionManager.getActiveSubscriptionInfo(subId));
diff --git a/src/com/android/settings/sim/PreferredSimDialogFragment.java b/src/com/android/settings/sim/PreferredSimDialogFragment.java
index 50eb993..c1e98f0 100644
--- a/src/com/android/settings/sim/PreferredSimDialogFragment.java
+++ b/src/com/android/settings/sim/PreferredSimDialogFragment.java
@@ -32,6 +32,7 @@
import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AlertDialog;
+import com.android.internal.telephony.flags.Flags;
import com.android.settings.R;
import com.android.settings.network.SubscriptionUtil;
@@ -98,7 +99,8 @@
final SubscriptionInfo info = getPreferredSubscription();
if (info == null || (info.isEmbedded()
- && info.getProfileClass() == PROFILE_CLASS_PROVISIONING)) {
+ && (info.getProfileClass() == PROFILE_CLASS_PROVISIONING
+ || (Flags.oemEnabledSatelliteFlag() && info.isNtn())))) {
dismiss();
return;
}
diff --git a/src/com/android/settings/sim/SelectSpecificDataSimDialogFragment.java b/src/com/android/settings/sim/SelectSpecificDataSimDialogFragment.java
index 6ac0067..218efc0 100644
--- a/src/com/android/settings/sim/SelectSpecificDataSimDialogFragment.java
+++ b/src/com/android/settings/sim/SelectSpecificDataSimDialogFragment.java
@@ -35,6 +35,7 @@
import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AlertDialog;
+import com.android.internal.telephony.flags.Flags;
import com.android.settings.R;
import com.android.settings.network.SubscriptionUtil;
@@ -133,10 +134,13 @@
return;
}
- if ((newSubInfo.isEmbedded() && newSubInfo.getProfileClass() == PROFILE_CLASS_PROVISIONING)
- || (currentDataSubInfo.isEmbedded()
- && currentDataSubInfo.getProfileClass() == PROFILE_CLASS_PROVISIONING)) {
- Log.d(TAG, "do not set the provision eSIM");
+ if ((newSubInfo.isEmbedded()
+ && (newSubInfo.getProfileClass() == PROFILE_CLASS_PROVISIONING
+ || (Flags.oemEnabledSatelliteFlag() && newSubInfo.isNtn())))
+ || (currentDataSubInfo.isEmbedded()
+ && (currentDataSubInfo.getProfileClass() == PROFILE_CLASS_PROVISIONING
+ || (Flags.oemEnabledSatelliteFlag() && currentDataSubInfo.isNtn())))) {
+ Log.d(TAG, "do not set the provisioning or satellite eSIM");
dismiss();
return;
}
diff --git a/src/com/android/settings/sim/SimListDialogFragment.java b/src/com/android/settings/sim/SimListDialogFragment.java
index 2763211..4a478e9 100644
--- a/src/com/android/settings/sim/SimListDialogFragment.java
+++ b/src/com/android/settings/sim/SimListDialogFragment.java
@@ -39,6 +39,7 @@
import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AlertDialog;
+import com.android.internal.telephony.flags.Flags;
import com.android.settings.R;
import com.android.settings.network.SubscriptionUtil;
@@ -141,9 +142,10 @@
return;
}
- // Remove the provision eSIM from the subscription list.
+ // Remove the provisioning or satellite eSIM from the subscription list.
currentSubscriptions.removeIf(info -> info.isEmbedded()
- && info.getProfileClass() == PROFILE_CLASS_PROVISIONING);
+ && (info.getProfileClass() == PROFILE_CLASS_PROVISIONING
+ || (Flags.oemEnabledSatelliteFlag() && info.isNtn())));
boolean includeAskEveryTime = getArguments().getBoolean(KEY_INCLUDE_ASK_EVERY_TIME);
boolean isCancelItemShowed = getArguments().getBoolean(KEY_SHOW_CANCEL_ITEM);
diff --git a/tests/robotests/Android.bp b/tests/robotests/Android.bp
index 910bbbd..fbfd888 100644
--- a/tests/robotests/Android.bp
+++ b/tests/robotests/Android.bp
@@ -61,6 +61,7 @@
"flag-junit",
"aconfig_settings_flags_lib",
"platform-test-annotations",
+ "Settings-testutils2",
],
libs: [
diff --git a/tests/robotests/assets/exempt_slice_controller_not_in_xml b/tests/robotests/assets/exempt_slice_controller_not_in_xml
index 385b702..4a71a7b 100644
--- a/tests/robotests/assets/exempt_slice_controller_not_in_xml
+++ b/tests/robotests/assets/exempt_slice_controller_not_in_xml
@@ -3,6 +3,7 @@
com.android.settings.biometrics.face.FaceSettingsAttentionPreferenceController
com.android.settings.display.DeviceStateAutoRotateSettingController
com.android.settings.display.SmartAutoRotatePreferenceController
+com.android.settings.gestures.OneHandedMainSwitchPreferenceController
com.android.settings.network.telephony.MmsMessagePreferenceController
com.android.settings.network.telephony.AutoDataSwitchPreferenceController
com.android.settings.network.telephony.Enhanced4gBasePreferenceController
diff --git a/tests/robotests/src/com/android/settings/biometrics/combination/CombinedBiometricProfileSettingsTest.java b/tests/robotests/src/com/android/settings/biometrics/combination/CombinedBiometricProfileSettingsTest.java
index 4781f56..43d2add 100644
--- a/tests/robotests/src/com/android/settings/biometrics/combination/CombinedBiometricProfileSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/combination/CombinedBiometricProfileSettingsTest.java
@@ -72,6 +72,7 @@
import org.junit.After;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -407,6 +408,7 @@
}
@Test
+ @Ignore("b/295325503")
public void testClickFaceUnlock_inMultiWindow_withoutEnrolledFp_showsDialog() {
testClickFaceUnlock(true /* isInMultiWindow */, false /*hasEnrolledFace*/);
verifyShowsDialogAfterClickingUnlock(mFragment.getFacePreferenceKey());
diff --git a/tests/robotests/src/com/android/settings/biometrics/face/FaceEnrollEducationTest.java b/tests/robotests/src/com/android/settings/biometrics/face/FaceEnrollEducationTest.java
index b4dddde..474ea8c 100644
--- a/tests/robotests/src/com/android/settings/biometrics/face/FaceEnrollEducationTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/face/FaceEnrollEducationTest.java
@@ -50,6 +50,7 @@
import org.junit.After;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
@@ -127,6 +128,7 @@
}
@Test
+ @Ignore("b/295325503")
public void testFaceEnrollEducation_hasHeader() {
setupActivity();
CharSequence headerText = getGlifLayout().getHeaderText();
diff --git a/tests/robotests/src/com/android/settings/biometrics/face/FaceEnrollIntroductionTest.java b/tests/robotests/src/com/android/settings/biometrics/face/FaceEnrollIntroductionTest.java
index 3165d05..459e377 100644
--- a/tests/robotests/src/com/android/settings/biometrics/face/FaceEnrollIntroductionTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/face/FaceEnrollIntroductionTest.java
@@ -76,6 +76,7 @@
import org.junit.After;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
@@ -282,6 +283,7 @@
}
@Test
+ @Ignore("b/295325503")
public void testOnCreateToGenerateChallenge() {
setupActivityWithGenerateChallenge(
new Intent().putExtra(ChooseLockSettingsHelper.EXTRA_KEY_GK_PW_HANDLE, 1L));
@@ -432,6 +434,7 @@
}
@Test
+ @Ignore("b/295325503")
public void testFaceEnrollIntroduction_onStartRegisteredPostureChangeCallback() {
setupActivityForPosture();
mSpyActivity.onStart();
diff --git a/tests/robotests/src/com/android/settings/biometrics/face/FaceSettingsRemoveButtonPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/biometrics/face/FaceSettingsRemoveButtonPreferenceControllerTest.java
index 5f56fa7..ae35972 100644
--- a/tests/robotests/src/com/android/settings/biometrics/face/FaceSettingsRemoveButtonPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/face/FaceSettingsRemoveButtonPreferenceControllerTest.java
@@ -32,6 +32,7 @@
import com.android.settingslib.widget.LayoutPreference;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -44,6 +45,7 @@
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowApplication;
+@Ignore("b/295325503")
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowUserManager.class})
public class FaceSettingsRemoveButtonPreferenceControllerTest {
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java
index fa0cd2b..4de369e 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java
@@ -70,6 +70,7 @@
import com.google.android.setupdesign.GlifLayout;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
@@ -85,6 +86,7 @@
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
+@Ignore("b/295325503")
@RunWith(RobolectricTestRunner.class)
@LooperMode(LooperMode.Mode.LEGACY)
public class FingerprintEnrollEnrollingTest {
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensorTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensorTest.java
index 8727153..72f1ab8 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensorTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensorTest.java
@@ -65,6 +65,7 @@
import org.junit.After;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
@@ -556,6 +557,7 @@
}
@Test
+ @Ignore("b/295325503")
public void fingerprintEnrollFindSensor_activityApplyDarkLightStyle() {
setupActivity_onSfpsDevice();
verifySidecar_onRearOrSfpsDevice();
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFinishTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFinishTest.java
index e238a0e..fa33f9c 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFinishTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFinishTest.java
@@ -35,6 +35,7 @@
import com.google.android.setupcompat.template.FooterBarMixin;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
@@ -115,6 +116,7 @@
}
@Test
+ @Ignore("b/295325503")
public void onActivityResult_fingerprintCountIsOne_fingerprintSuggestionActivityEnabled() {
Shadows.shadowOf((FingerprintManager) mFingerprintManager).setDefaultFingerprints(1);
@@ -135,6 +137,7 @@
}
@Test
+ @Ignore("b/295325503")
public void clickNext_fingerprintCountIsOne_fngerprintSuggestionActivityEnabled() {
Shadows.shadowOf((FingerprintManager) mFingerprintManager).setDefaultFingerprints(1);
@@ -155,6 +158,7 @@
}
@Test
+ @Ignore("b/295325503")
public void onBackPressed_fingerprintCountIsOne_fngerprintSuggestionActivityEnabled() {
Shadows.shadowOf((FingerprintManager) mFingerprintManager).setDefaultFingerprints(1);
diff --git a/tests/robotests/src/com/android/settings/core/InstrumentedPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/core/InstrumentedPreferenceFragmentTest.java
index dc173e5..838edc6 100644
--- a/tests/robotests/src/com/android/settings/core/InstrumentedPreferenceFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/core/InstrumentedPreferenceFragmentTest.java
@@ -23,6 +23,7 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.content.Context;
import android.os.Bundle;
import androidx.fragment.app.FragmentActivity;
@@ -38,6 +39,7 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.util.ReflectionHelpers;
@@ -53,7 +55,7 @@
private PreferenceManager mPreferenceManager;
@Mock
private FragmentActivity mActivity;
-
+ private Context mContext;
private InstrumentedPreferenceFragmentTestable mFragment;
@Before
@@ -61,7 +63,9 @@
MockitoAnnotations.initMocks(this);
when(mPreferenceManager.getPreferenceScreen()).thenReturn(mScreen);
+ mContext = RuntimeEnvironment.application;
mFragment = spy(new InstrumentedPreferenceFragmentTestable());
+ when(mFragment.getContext()).thenReturn(mContext);
ReflectionHelpers.setField(mFragment, "mPreferenceManager", mPreferenceManager);
}
diff --git a/tests/robotests/src/com/android/settings/datetime/TimePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/datetime/TimePreferenceControllerTest.java
index 3481f80..ebb56f4 100644
--- a/tests/robotests/src/com/android/settings/datetime/TimePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/datetime/TimePreferenceControllerTest.java
@@ -36,7 +36,6 @@
@RunWith(RobolectricTestRunner.class)
public class TimePreferenceControllerTest {
- @Mock
private Context mContext;
@Mock
private TimePreferenceController.TimePreferenceHost mHost;
@@ -49,6 +48,7 @@
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
mPreference = new RestrictedPreference(RuntimeEnvironment.application);
mController = new TimePreferenceController(mContext, mHost, mDatePreferenceController);
}
diff --git a/tests/robotests/src/com/android/settings/development/RebootWithMtePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/RebootWithMtePreferenceControllerTest.java
index f1e7d3f..eec7a7b 100644
--- a/tests/robotests/src/com/android/settings/development/RebootWithMtePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/RebootWithMtePreferenceControllerTest.java
@@ -26,6 +26,8 @@
import androidx.preference.Preference;
import androidx.test.core.app.ApplicationProvider;
+import com.android.settingslib.development.DevelopmentSettingsEnabler;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -52,6 +54,7 @@
mContext = ApplicationProvider.getApplicationContext();
mController = new RebootWithMtePreferenceController(mContext);
mController.setFragment(mFragment);
+ DevelopmentSettingsEnabler.setDevelopmentSettingsEnabled(mContext, true);
}
@Test
diff --git a/tests/robotests/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverControllerTest.java b/tests/robotests/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverControllerTest.java
index a338de3..686df7a 100644
--- a/tests/robotests/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverControllerTest.java
@@ -17,6 +17,7 @@
package com.android.settings.development.graphicsdriver;
import static com.android.settings.development.graphicsdriver.GraphicsDriverEnableAngleAsSystemDriverController.ANGLE_DRIVER_SUFFIX;
+import static com.android.settings.development.graphicsdriver.GraphicsDriverEnableAngleAsSystemDriverController.PROPERTY_DEBUG_ANGLE_DEVELOPER_OPTION;
import static com.android.settings.development.graphicsdriver.GraphicsDriverEnableAngleAsSystemDriverController.PROPERTY_PERSISTENT_GRAPHICS_EGL;
import static com.android.settings.development.graphicsdriver.GraphicsDriverEnableAngleAsSystemDriverController.PROPERTY_RO_GFX_ANGLE_SUPPORTED;
@@ -71,6 +72,7 @@
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
+ ShadowSystemProperties.override(PROPERTY_DEBUG_ANGLE_DEVELOPER_OPTION, "true");
doReturn(mTransaction).when(mFragmentManager).beginTransaction();
doReturn(mFragmentManager).when(mActivity).getSupportFragmentManager();
doReturn(mActivity).when(mFragment).getActivity();
diff --git a/tests/robotests/src/com/android/settings/display/AutoRotatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/AutoRotatePreferenceControllerTest.java
index 2bcf060..fd91867 100644
--- a/tests/robotests/src/com/android/settings/display/AutoRotatePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/AutoRotatePreferenceControllerTest.java
@@ -190,15 +190,17 @@
private void enableAutoRotationPreference() {
when(mPackageManager.hasSystemFeature(anyString())).thenReturn(true);
when(mContext.getResources().getBoolean(anyInt())).thenReturn(true);
- Settings.System.putInt(mContentResolver,
- Settings.System.HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY, 0);
+ Settings.System.putIntForUser(mContentResolver,
+ Settings.System.HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY, 0,
+ UserHandle.USER_CURRENT);
}
private void disableAutoRotationPreference() {
when(mPackageManager.hasSystemFeature(anyString())).thenReturn(true);
when(mContext.getResources().getBoolean(anyInt())).thenReturn(true);
- Settings.System.putInt(mContentResolver,
- Settings.System.HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY, 1);
+ Settings.System.putIntForUser(mContentResolver,
+ Settings.System.HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY, 1,
+ UserHandle.USER_CURRENT);
}
private void enableAutoRotation() {
diff --git a/tests/robotests/src/com/android/settings/display/SmartAutoRotatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/SmartAutoRotatePreferenceControllerTest.java
index 0e7a86f..9f1b5d4 100644
--- a/tests/robotests/src/com/android/settings/display/SmartAutoRotatePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/SmartAutoRotatePreferenceControllerTest.java
@@ -42,6 +42,7 @@
import com.android.settings.testutils.ResolveInfoBuilder;
import com.android.settings.testutils.shadow.ShadowDeviceStateRotationLockSettingsManager;
import com.android.settings.testutils.shadow.ShadowSensorPrivacyManager;
+import com.android.settings.testutils.shadow.ShadowSystemSettings;
import org.junit.Before;
import org.junit.Test;
@@ -55,6 +56,7 @@
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {
+ ShadowSystemSettings.class,
ShadowSensorPrivacyManager.class,
ShadowDeviceStateRotationLockSettingsManager.class
})
@@ -234,15 +236,17 @@
private void enableAutoRotationPreference() {
when(mPackageManager.hasSystemFeature(anyString())).thenReturn(true);
when(mResources.getBoolean(anyInt())).thenReturn(true);
- Settings.System.putInt(mContentResolver,
- Settings.System.HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY, 0);
+ Settings.System.putIntForUser(mContentResolver,
+ Settings.System.HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY, 0,
+ UserHandle.USER_CURRENT);
}
private void disableAutoRotationPreference() {
when(mPackageManager.hasSystemFeature(anyString())).thenReturn(true);
when(mResources.getBoolean(anyInt())).thenReturn(true);
- Settings.System.putInt(mContentResolver,
- Settings.System.HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY, 1);
+ Settings.System.putIntForUser(mContentResolver,
+ Settings.System.HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY, 1,
+ UserHandle.USER_CURRENT);
}
private void enableAutoRotation() {
diff --git a/tests/robotests/src/com/android/settings/gestures/GlobalActionsPanelPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/GlobalActionsPanelPreferenceControllerTest.java
deleted file mode 100644
index 65f7ac7..0000000
--- a/tests/robotests/src/com/android/settings/gestures/GlobalActionsPanelPreferenceControllerTest.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.settings.gestures;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import android.content.Context;
-import android.provider.Settings;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-
-@RunWith(RobolectricTestRunner.class)
-public class GlobalActionsPanelPreferenceControllerTest {
-
- private Context mContext;
- private GlobalActionsPanelPreferenceController mController;
-
- private static final String KEY_GESTURE_PANEL = "gesture_global_actions_panel";
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- mContext = RuntimeEnvironment.application;
- mController = new GlobalActionsPanelPreferenceController(mContext, KEY_GESTURE_PANEL);
- }
-
- @Test
- public void testIsChecked_panelEnabled() {
- Settings.Secure.putInt(
- mContext.getContentResolver(), mController.ENABLED_SETTING, 1);
- assertThat(mController.isChecked()).isTrue();
- }
-
- @Test
- public void testIsChecked_panelDisabled() {
- Settings.Secure.putInt(
- mContext.getContentResolver(), mController.ENABLED_SETTING, 0);
- assertThat(mController.isChecked()).isFalse();
- }
-
- @Test
- public void getAvailabilityStatus_panelAvailable() {
- Settings.Secure.putInt(
- mContext.getContentResolver(), mController.AVAILABLE_SETTING, 1);
- assertThat(mController.getAvailabilityStatus()).isEqualTo(mController.AVAILABLE);
- }
-
- @Test
- public void getAvailabilityStatus_panelUnavailable() {
- Settings.Secure.putInt(
- mContext.getContentResolver(), mController.AVAILABLE_SETTING, 0);
- assertThat(mController.getAvailabilityStatus())
- .isEqualTo(mController.CONDITIONALLY_UNAVAILABLE);
- }
-
- @Test
- public void isSliceable_correctKey() {
- final GlobalActionsPanelPreferenceController controller =
- new GlobalActionsPanelPreferenceController(mContext, mController.TOGGLE_KEY);
- assertThat(controller.isSliceable()).isTrue();
- }
-
- @Test
- public void isSliceable_incorrectKey() {
- final GlobalActionsPanelPreferenceController controller =
- new GlobalActionsPanelPreferenceController(mContext, "bad_key");
- assertThat(controller.isSliceable()).isFalse();
- }
-
- @Test
- public void isPublicSlice_returnTrue() {
- assertThat(mController.isPublicSlice()).isTrue();
- }
-}
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java
index fceb79d..0909675 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java
@@ -145,7 +145,7 @@
@Test
public void getCardCount_hasConfiguredCardCount_returnConfiguredCardCount() {
int configCount = 4;
- Settings.Global.putLong(mContext.getContentResolver(),
+ Settings.Global.putInt(mContext.getContentResolver(),
ContextualCardLoader.CONTEXTUAL_CARD_COUNT, configCount);
assertThat(mContextualCardLoader.getCardCount()).isEqualTo(configCount);
diff --git a/tests/robotests/src/com/android/settings/inputmethod/InputMethodAndSubtypePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/InputMethodAndSubtypePreferenceControllerTest.java
index 26cdd0a..0d1f683 100644
--- a/tests/robotests/src/com/android/settings/inputmethod/InputMethodAndSubtypePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/inputmethod/InputMethodAndSubtypePreferenceControllerTest.java
@@ -47,7 +47,10 @@
import java.util.List;
@RunWith(RobolectricTestRunner.class)
-@Config(shadows = ShadowInputMethodManagerWithMethodList.class)
+@Config(shadows = {
+ ShadowInputMethodManagerWithMethodList.class,
+ com.android.settings.testutils.shadow.ShadowFragment.class,
+})
public class InputMethodAndSubtypePreferenceControllerTest {
@Mock
diff --git a/tests/robotests/src/com/android/settings/inputmethod/KeyboardLayoutPickerControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/KeyboardLayoutPickerControllerTest.java
index 734f610..0a1ccbb 100644
--- a/tests/robotests/src/com/android/settings/inputmethod/KeyboardLayoutPickerControllerTest.java
+++ b/tests/robotests/src/com/android/settings/inputmethod/KeyboardLayoutPickerControllerTest.java
@@ -50,6 +50,9 @@
import org.robolectric.shadows.ShadowApplication;
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {
+ com.android.settings.testutils.shadow.ShadowFragment.class,
+})
public class KeyboardLayoutPickerControllerTest {
@Mock
diff --git a/tests/robotests/src/com/android/settings/password/ConfirmCredentialTest.java b/tests/robotests/src/com/android/settings/password/ConfirmCredentialTest.java
index 299b1eb..92b2b62 100644
--- a/tests/robotests/src/com/android/settings/password/ConfirmCredentialTest.java
+++ b/tests/robotests/src/com/android/settings/password/ConfirmCredentialTest.java
@@ -47,6 +47,7 @@
import com.android.settings.testutils.shadow.ShadowUtils;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;
@@ -128,6 +129,7 @@
}
@Test
+ @Ignore("b/295325503")
public void onCreate_remoteValidation_invalidServiceComponentName_finishActivity()
throws Exception {
Intent intentWithInvalidComponentName = new Intent()
diff --git a/tests/robotests/src/com/android/settings/password/ConfirmLockPasswordTest.java b/tests/robotests/src/com/android/settings/password/ConfirmLockPasswordTest.java
index d26c33b..4ac375f 100644
--- a/tests/robotests/src/com/android/settings/password/ConfirmLockPasswordTest.java
+++ b/tests/robotests/src/com/android/settings/password/ConfirmLockPasswordTest.java
@@ -62,6 +62,7 @@
import org.junit.After;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
@@ -176,6 +177,7 @@
}
@Test
+ @Ignore("b/295325503")
public void handleNext_remoteValidation_correctGuess_checkboxChecked() throws Exception {
ConfirmDeviceCredentialBaseActivity activity =
buildConfirmDeviceCredentialBaseActivity(
@@ -201,6 +203,7 @@
}
@Test
+ @Ignore("b/295325503")
public void handleNext_remoteValidation_correctGuess_checkboxUnchecked() throws Exception {
ConfirmDeviceCredentialBaseActivity activity =
buildConfirmDeviceCredentialBaseActivity(
@@ -227,6 +230,7 @@
}
@Test
+ @Ignore("b/295325503")
public void handleNext_remoteValidation_guessInvalid() throws Exception {
ConfirmDeviceCredentialBaseActivity activity =
buildConfirmDeviceCredentialBaseActivity(
@@ -251,6 +255,7 @@
}
@Test
+ @Ignore("b/295325503")
public void handleNext_remoteValidation_lockout() throws Exception {
ConfirmDeviceCredentialBaseActivity activity =
buildConfirmDeviceCredentialBaseActivity(
@@ -275,6 +280,7 @@
}
@Test
+ @Ignore("b/295325503")
public void handleNext_remoteValidation_noRemainingAttempts_finishActivity() throws Exception {
ConfirmDeviceCredentialBaseActivity activity =
buildConfirmDeviceCredentialBaseActivity(
diff --git a/tests/robotests/src/com/android/settings/password/ConfirmLockPatternTest.java b/tests/robotests/src/com/android/settings/password/ConfirmLockPatternTest.java
index 2ed7988..04a76b8 100644
--- a/tests/robotests/src/com/android/settings/password/ConfirmLockPatternTest.java
+++ b/tests/robotests/src/com/android/settings/password/ConfirmLockPatternTest.java
@@ -58,6 +58,7 @@
import org.junit.After;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
@@ -156,6 +157,7 @@
}
@Test
+ @Ignore("b/295325503")
public void onPatternDetected_remoteValidation_guessValid_checkboxChecked() throws Exception {
ConfirmDeviceCredentialBaseActivity activity =
buildConfirmDeviceCredentialBaseActivity(
@@ -181,6 +183,7 @@
}
@Test
+ @Ignore("b/295325503")
public void onPatternDetected_remoteValidation_guessValid_checkboxUnchecked() throws Exception {
ConfirmDeviceCredentialBaseActivity activity =
buildConfirmDeviceCredentialBaseActivity(
@@ -207,6 +210,7 @@
}
@Test
+ @Ignore("b/295325503")
public void onPatternDetected_remoteValidation_guessInvalid() throws Exception {
ConfirmDeviceCredentialBaseActivity activity =
buildConfirmDeviceCredentialBaseActivity(
@@ -231,6 +235,7 @@
}
@Test
+ @Ignore("b/295325503")
public void onPatternDetected_remoteValidation_lockout() throws Exception {
ConfirmDeviceCredentialBaseActivity activity =
buildConfirmDeviceCredentialBaseActivity(
@@ -255,6 +260,7 @@
}
@Test
+ @Ignore("b/295325503")
public void onPatternDetected_noRemainingAttempts_finishActivity() throws Exception {
ConfirmDeviceCredentialBaseActivity activity =
buildConfirmDeviceCredentialBaseActivity(
diff --git a/tests/robotests/src/com/android/settings/password/SetNewPasswordActivityTest.java b/tests/robotests/src/com/android/settings/password/SetNewPasswordActivityTest.java
index af44d39..5e429d9 100644
--- a/tests/robotests/src/com/android/settings/password/SetNewPasswordActivityTest.java
+++ b/tests/robotests/src/com/android/settings/password/SetNewPasswordActivityTest.java
@@ -50,6 +50,7 @@
import org.junit.After;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
@@ -90,6 +91,7 @@
}
@Test
+ @Ignore("b/295325503")
public void testChooseLockGeneric() {
Settings.Global.putInt(RuntimeEnvironment.application.getContentResolver(),
Settings.Global.DEVICE_PROVISIONED, 1);
diff --git a/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java b/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
index 97a326f..e207d24 100644
--- a/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
+++ b/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
@@ -47,6 +47,7 @@
import org.junit.After;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
@@ -122,6 +123,7 @@
@Test
@Config(shadows = ShadowChooseLockGenericController.class)
+ @Ignore("b/295325503")
public void createActivity_withShowOptionsButtonExtra_buttonNotVisibleIfNoVisibleLockTypes() {
SetupChooseLockPassword activity = createSetupChooseLockPassword();
Button optionsButton = activity.findViewById(R.id.screen_lock_options);
diff --git a/tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java b/tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java
index 648c42f..7767644 100644
--- a/tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java
+++ b/tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java
@@ -51,6 +51,7 @@
import com.google.android.setupcompat.template.FooterButton;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
@@ -99,6 +100,7 @@
}
@Test
+ @Ignore("b/295325503")
public void optionsButton_whenPatternSelected_shouldBeVisible() {
final Button button = mActivity.findViewById(R.id.screen_lock_options);
assertThat(button).isNotNull();
@@ -125,12 +127,14 @@
@Config(qualifiers = "sw400dp")
@Test
+ @Ignore("b/295325503")
public void sw400dp_shouldShowScreenLockOptions() {
verifyScreenLockOptionsShown();
}
@Config(qualifiers = "sw400dp-land")
@Test
+ @Ignore("b/295325503")
public void sw400dpLandscape_shouldShowScreenLockOptions() {
verifyScreenLockOptionsShown();
}
@@ -143,17 +147,20 @@
@Config(qualifiers = "sw300dp")
@Test
+ @Ignore("b/295325503")
public void smallScreens_shouldHideScreenLockOptions() {
verifyScreenLockOptionsHidden();
}
@Config(qualifiers = "sw300dp-land")
@Test
+ @Ignore("b/295325503")
public void smallScreensLandscape_shouldHideScreenLockOptions() {
verifyScreenLockOptionsHidden();
}
@Test
+ @Ignore("b/295325503")
public void skipButton_shouldBeVisible_duringNonFingerprintFlow() {
final PartnerCustomizationLayout layout = mActivity.findViewById(R.id.setup_wizard_layout);
final Button skipOrClearButton =
diff --git a/tests/robotests/src/com/android/settings/search/SettingsSearchIndexablesProviderTest.java b/tests/robotests/src/com/android/settings/search/SettingsSearchIndexablesProviderTest.java
index 21b00a3..5de64b5 100644
--- a/tests/robotests/src/com/android/settings/search/SettingsSearchIndexablesProviderTest.java
+++ b/tests/robotests/src/com/android/settings/search/SettingsSearchIndexablesProviderTest.java
@@ -1,5 +1,6 @@
package com.android.settings.search;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SEARCHABLE;
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE;
import static com.google.common.truth.Truth.assertThat;
@@ -205,6 +206,19 @@
assertThat(mProvider.isEligibleForIndexing(PACKAGE_NAME, activityTile)).isTrue();
}
+ @Test
+ public void isEligibleForIndexing_disabledByMetadata_shouldReturnFalse() {
+ final ActivityInfo activityInfo = new ActivityInfo();
+ activityInfo.packageName = PACKAGE_NAME;
+ activityInfo.name = "class";
+ activityInfo.metaData = new Bundle();
+ activityInfo.metaData.putBoolean(META_DATA_PREFERENCE_SEARCHABLE, false);
+ final ActivityTile activityTile = new ActivityTile(activityInfo,
+ CategoryKey.CATEGORY_CONNECT);
+
+ assertThat(mProvider.isEligibleForIndexing(PACKAGE_NAME, activityTile)).isFalse();
+ }
+
@Implements(CategoryManager.class)
public static class ShadowCategoryManager {
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowRotationPolicy.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowRotationPolicy.java
index 1f1e2be..d052340 100644
--- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowRotationPolicy.java
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowRotationPolicy.java
@@ -30,12 +30,13 @@
private static boolean rotationSupported = true;
@Implementation
- protected static void setRotationLock(Context context, final boolean enabled) {
+ protected static void setRotationLock(Context context, final boolean enabled, String caller) {
rotationLockEnabled = enabled;
}
@Implementation
- protected static void setRotationLockForAccessibility(Context context, final boolean enabled) {
+ protected static void setRotationLockForAccessibility(
+ Context context, final boolean enabled, String caller) {
rotationLockEnabled = enabled;
}
diff --git a/tests/robotests/src/com/android/settings/users/UserDetailsSettingsTest.java b/tests/robotests/src/com/android/settings/users/UserDetailsSettingsTest.java
index 256e08b..b339052 100644
--- a/tests/robotests/src/com/android/settings/users/UserDetailsSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/users/UserDetailsSettingsTest.java
@@ -80,7 +80,8 @@
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {
- // ShadowUserManager.class,
+ ShadowUserManager.class,
+ com.android.settings.testutils.shadow.ShadowFragment.class,
ShadowDevicePolicyManager.class
})
public class UserDetailsSettingsTest {
diff --git a/tests/robotests/src/com/android/settings/vpn2/AppDialogFragmentTest.java b/tests/robotests/src/com/android/settings/vpn2/AppDialogFragmentTest.java
index 2b81f16..b13ec6a 100644
--- a/tests/robotests/src/com/android/settings/vpn2/AppDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/vpn2/AppDialogFragmentTest.java
@@ -29,8 +29,13 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {
+ com.android.settings.testutils.shadow.ShadowFragment.class,
+})
+
public class AppDialogFragmentTest {
@Mock
diff --git a/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java b/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java
index bed88e7..c693938 100644
--- a/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java
+++ b/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java
@@ -66,6 +66,7 @@
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {
ShadowUserManager.class,
+ com.android.settings.testutils.shadow.ShadowFragment.class,
})
public class WebViewAppPickerTest {
diff --git a/tests/robotests/src/com/android/settings/widget/EntityHeaderControllerTest.java b/tests/robotests/src/com/android/settings/widget/EntityHeaderControllerTest.java
index 06b99a4..9ed6de3 100644
--- a/tests/robotests/src/com/android/settings/widget/EntityHeaderControllerTest.java
+++ b/tests/robotests/src/com/android/settings/widget/EntityHeaderControllerTest.java
@@ -52,8 +52,12 @@
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {
+ com.android.settings.testutils.shadow.ShadowFragment.class,
+})
public class EntityHeaderControllerTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/widget/HighlightablePreferenceGroupAdapterTest.java b/tests/robotests/src/com/android/settings/widget/HighlightablePreferenceGroupAdapterTest.java
index d6d5abf..29560ab 100644
--- a/tests/robotests/src/com/android/settings/widget/HighlightablePreferenceGroupAdapterTest.java
+++ b/tests/robotests/src/com/android/settings/widget/HighlightablePreferenceGroupAdapterTest.java
@@ -53,9 +53,13 @@
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
import org.robolectric.util.ReflectionHelpers;
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {
+ com.android.settings.testutils.shadow.ShadowFragment.class,
+})
public class HighlightablePreferenceGroupAdapterTest {
private static final String TEST_KEY = "key";
diff --git a/tests/robotests/src/com/android/settings/widget/SettingsMainSwitchPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/SettingsMainSwitchPreferenceTest.java
index d64d237..a5ebdad 100644
--- a/tests/robotests/src/com/android/settings/widget/SettingsMainSwitchPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/widget/SettingsMainSwitchPreferenceTest.java
@@ -22,12 +22,9 @@
import android.content.Context;
import android.view.View;
-import android.widget.ImageView;
import androidx.preference.PreferenceViewHolder;
-import com.android.settings.R;
-
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -59,17 +56,6 @@
}
@Test
- public void onBindViewHolder_isRestricted_restrictIconShouldDisplay() {
- mPreference.onBindViewHolder(mHolder);
-
- final SettingsMainSwitchBar switchBar = mPreference.getSwitchBar();
- final ImageView restrictedIcon = switchBar.findViewById(
- com.android.settingslib.widget.restricted.R.id.restricted_icon);
-
- assertThat(restrictedIcon.getVisibility() == View.VISIBLE).isTrue();
- }
-
- @Test
public void show_preferenceShouldDisplay() {
mPreference.show();
diff --git a/tests/robotests/src/com/android/settings/wifi/ConfigureWifiSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/ConfigureWifiSettingsTest.java
index 5e3d715..5bacfab 100644
--- a/tests/robotests/src/com/android/settings/wifi/ConfigureWifiSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/ConfigureWifiSettingsTest.java
@@ -45,6 +45,9 @@
import java.util.List;
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {
+ com.android.settings.testutils.shadow.ShadowFragment.class,
+})
public class ConfigureWifiSettingsTest {
@Rule
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiScanningRequiredFragmentTest.java b/tests/robotests/src/com/android/settings/wifi/WifiScanningRequiredFragmentTest.java
index 6969e14..f732b5e 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiScanningRequiredFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiScanningRequiredFragmentTest.java
@@ -47,8 +47,12 @@
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {
+ com.android.settings.testutils.shadow.ShadowFragment.class,
+})
public class WifiScanningRequiredFragmentTest {
private WifiScanningRequiredFragment mFragment;
diff --git a/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragmentTest.java b/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragmentTest.java
index 303963d..699a8e8 100644
--- a/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragmentTest.java
@@ -55,12 +55,16 @@
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
import org.robolectric.shadows.androidx.fragment.FragmentController;
import java.util.ArrayList;
import java.util.List;
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {
+ com.android.settings.testutils.shadow.ShadowFragment.class,
+})
public class AddAppNetworksFragmentTest {
private static final String FAKE_APP_NAME = "fake_app_name";
diff --git a/tests/robotests/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2Test.java b/tests/robotests/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2Test.java
index 4b01aaf..38b7463 100644
--- a/tests/robotests/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2Test.java
+++ b/tests/robotests/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2Test.java
@@ -120,7 +120,10 @@
// TODO(b/143326832): Should add test cases for connect button.
@RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowDevicePolicyManager.class, ShadowEntityHeaderController.class})
+@Config(shadows = {
+ ShadowDevicePolicyManager.class,
+ com.android.settings.testutils.shadow.ShadowFragment.class,
+ ShadowEntityHeaderController.class})
public class WifiDetailPreferenceController2Test {
private static final int LEVEL = 1;
diff --git a/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragmentTest.java b/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragmentTest.java
index bf978c7..ff1125d 100644
--- a/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragmentTest.java
@@ -43,10 +43,14 @@
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
import java.util.Arrays;
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {
+ com.android.settings.testutils.shadow.ShadowFragment.class,
+})
public class WifiDppQrCodeScannerFragmentTest {
static final String WIFI_SSID = "wifi-ssid";
diff --git a/tests/shared/Android.bp b/tests/shared/Android.bp
new file mode 100644
index 0000000..fca24b6
--- /dev/null
+++ b/tests/shared/Android.bp
@@ -0,0 +1,9 @@
+android_library {
+ name: "Settings-testutils2",
+ srcs: [
+ "src/**/*.kt"
+ ],
+ libs: [
+ "FingerprintManagerInteractor",
+ ],
+}
diff --git a/tests/shared/AndroidManifest.xml b/tests/shared/AndroidManifest.xml
new file mode 100644
index 0000000..7e1842c
--- /dev/null
+++ b/tests/shared/AndroidManifest.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2022 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.settings.testutils2">
+</manifest>
diff --git a/tests/unit/src/com/android/settings/fingerprint2/domain/interactor/FakeFingerprintManagerInteractor.kt b/tests/shared/src/com/android/settings/testutils2/FakeFingerprintManagerInteractor.kt
similarity index 71%
rename from tests/unit/src/com/android/settings/fingerprint2/domain/interactor/FakeFingerprintManagerInteractor.kt
rename to tests/shared/src/com/android/settings/testutils2/FakeFingerprintManagerInteractor.kt
index f807f70..05c3e3c 100644
--- a/tests/unit/src/com/android/settings/fingerprint2/domain/interactor/FakeFingerprintManagerInteractor.kt
+++ b/tests/shared/src/com/android/settings/testutils2/FakeFingerprintManagerInteractor.kt
@@ -14,18 +14,19 @@
* limitations under the License.
*/
-package com.android.settings.fingerprint2.domain.interactor
+package com.android.settings.testutils2
-import android.hardware.biometrics.SensorProperties
-import android.hardware.fingerprint.FingerprintSensorProperties.TYPE_POWER_BUTTON
-import android.hardware.fingerprint.FingerprintSensorPropertiesInternal
-import com.android.settings.biometrics.fingerprint2.domain.interactor.FingerprintManagerInteractor
+import com.android.settings.biometrics.fingerprint2.shared.domain.interactor.FingerprintManagerInteractor
import com.android.settings.biometrics.fingerprint2.shared.model.FingerprintAuthAttemptViewModel
+import com.android.settings.biometrics.fingerprint2.shared.model.FingerprintSensorPropertyViewModel
import com.android.settings.biometrics.fingerprint2.shared.model.FingerprintViewModel
-import com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel.EnrollReason
-import com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel.FingerEnrollStateViewModel
+import com.android.settings.biometrics.fingerprint2.shared.model.EnrollReason
+import com.android.settings.biometrics.fingerprint2.shared.model.FingerEnrollStateViewModel
+import com.android.settings.biometrics.fingerprint2.shared.model.SensorStrength
+import com.android.settings.biometrics.fingerprint2.shared.model.SensorType
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
+import kotlinx.coroutines.flow.flowOf
/** Fake to be used by other classes to easily fake the FingerprintManager implementation. */
class FakeFingerprintManagerInteractor : FingerprintManagerInteractor {
@@ -37,17 +38,8 @@
val enrollStateViewModel = FingerEnrollStateViewModel.EnrollProgress(1)
var pressToAuthEnabled = true
- var sensorProps =
- listOf(
- FingerprintSensorPropertiesInternal(
- 0 /* sensorId */,
- SensorProperties.STRENGTH_STRONG,
- 5 /* maxEnrollmentsPerUser */,
- emptyList() /* ComponentInfoInternal */,
- TYPE_POWER_BUTTON,
- true /* resetLockoutRequiresHardwareAuthToken */
- )
- )
+ var sensorProp =
+ FingerprintSensorPropertyViewModel(0 /* sensorId */, SensorStrength.Strong, 5, SensorType.SFPS)
override suspend fun authenticate(): FingerprintAuthAttemptViewModel {
return authenticateAttempt
@@ -65,8 +57,8 @@
emit(enrolledFingerprintsInternal.size < enrollableFingerprints)
}
- override val sensorPropertiesInternal: Flow<FingerprintSensorPropertiesInternal?> = flow {
- emit(sensorProps.first())
+ override val sensorPropertiesInternal: Flow<FingerprintSensorPropertyViewModel?> = flow {
+ emit(sensorProp)
}
override val maxEnrollableFingerprints: Flow<Int> = flow { emit(enrollableFingerprints) }
@@ -74,7 +66,7 @@
override suspend fun enroll(
hardwareAuthToken: ByteArray?,
enrollReason: EnrollReason
- ): Flow<FingerEnrollStateViewModel> = flow { emit(enrollStateViewModel) }
+ ): Flow<FingerEnrollStateViewModel> = flowOf(enrollStateViewModel)
override suspend fun removeFingerprint(fp: FingerprintViewModel): Boolean {
return enrolledFingerprintsInternal.remove(fp)
@@ -87,7 +79,7 @@
}
override suspend fun hasSideFps(): Boolean {
- return sensorProps.any { it.isAnySidefpsType }
+ return sensorProp.sensorType == SensorType.SFPS
}
override suspend fun pressToAuthEnabled(): Boolean {
diff --git a/tests/unit/Android.bp b/tests/unit/Android.bp
index 196b809..4f044c7 100644
--- a/tests/unit/Android.bp
+++ b/tests/unit/Android.bp
@@ -28,6 +28,7 @@
"truth-prebuilt",
"kotlinx_coroutines_test",
"flag-junit",
+ "Settings-testutils2",
// Don't add SettingsLib libraries here - you can use them directly as they are in the
// instrumented Settings app.
],
diff --git a/tests/unit/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverControllerJUnitTest.java b/tests/unit/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverControllerJUnitTest.java
index ae35431..4aa38ae 100644
--- a/tests/unit/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverControllerJUnitTest.java
+++ b/tests/unit/src/com/android/settings/development/graphicsdriver/GraphicsDriverEnableAngleAsSystemDriverControllerJUnitTest.java
@@ -18,12 +18,14 @@
import static com.android.settings.development.graphicsdriver.GraphicsDriverEnableAngleAsSystemDriverController.ANGLE_DRIVER_SUFFIX;
import static com.android.settings.development.graphicsdriver.GraphicsDriverEnableAngleAsSystemDriverController.Injector;
+import static com.android.settings.development.graphicsdriver.GraphicsDriverEnableAngleAsSystemDriverController.PROPERTY_DEBUG_ANGLE_DEVELOPER_OPTION;
import static com.android.settings.development.graphicsdriver.GraphicsDriverEnableAngleAsSystemDriverController.PROPERTY_PERSISTENT_GRAPHICS_EGL;
import static com.android.settings.development.graphicsdriver.GraphicsDriverEnableAngleAsSystemDriverController.PROPERTY_RO_GFX_ANGLE_SUPPORTED;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.when;
@@ -98,6 +100,8 @@
}
mContext = ApplicationProvider.getApplicationContext();
+ when(mSystemPropertiesMock.getBoolean(eq(PROPERTY_DEBUG_ANGLE_DEVELOPER_OPTION),
+ anyBoolean())).thenReturn(true);
// Construct a GraphicsDriverEnableAngleAsSystemDriverController with two Overrides:
// 1) Override the mSystemProperties with mSystemPropertiesMock,
diff --git a/tests/unit/src/com/android/settings/fingerprint2/domain/interactor/FingerprintManagerInteractorTest.kt b/tests/unit/src/com/android/settings/fingerprint2/domain/interactor/FingerprintManagerInteractorTest.kt
index de2c494..f0d0a0a 100644
--- a/tests/unit/src/com/android/settings/fingerprint2/domain/interactor/FingerprintManagerInteractorTest.kt
+++ b/tests/unit/src/com/android/settings/fingerprint2/domain/interactor/FingerprintManagerInteractorTest.kt
@@ -26,12 +26,12 @@
import android.os.Handler
import androidx.test.core.app.ApplicationProvider
import com.android.settings.biometrics.GatekeeperPasswordProvider
-import com.android.settings.biometrics.fingerprint2.domain.interactor.FingerprintManagerInteractor
+import com.android.settings.biometrics.fingerprint2.shared.domain.interactor.FingerprintManagerInteractor
import com.android.settings.biometrics.fingerprint2.domain.interactor.FingerprintManagerInteractorImpl
+import com.android.settings.biometrics.fingerprint2.shared.model.EnrollReason
import com.android.settings.biometrics.fingerprint2.shared.model.FingerprintAuthAttemptViewModel
import com.android.settings.biometrics.fingerprint2.shared.model.FingerprintViewModel
-import com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel.EnrollReason.FindSensor
-import com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel.FingerEnrollStateViewModel
+import com.android.settings.biometrics.fingerprint2.shared.model.FingerEnrollStateViewModel
import com.android.settings.password.ChooseLockSettingsHelper
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.cancelAndJoin
@@ -283,7 +283,7 @@
testScope.runTest {
val token = byteArrayOf(5, 3, 2)
var result: FingerEnrollStateViewModel? = null
- val job = launch { underTest.enroll(token, FindSensor).collect { result = it } }
+ val job = launch { underTest.enroll(token, EnrollReason.FindSensor).collect { result = it } }
val enrollCallback: ArgumentCaptor<FingerprintManager.EnrollmentCallback> = argumentCaptor()
runCurrent()
@@ -307,7 +307,7 @@
testScope.runTest {
val token = byteArrayOf(5, 3, 2)
var result: FingerEnrollStateViewModel? = null
- val job = launch { underTest.enroll(token, FindSensor).collect { result = it } }
+ val job = launch { underTest.enroll(token, EnrollReason.FindSensor).collect { result = it } }
val enrollCallback: ArgumentCaptor<FingerprintManager.EnrollmentCallback> = argumentCaptor()
runCurrent()
@@ -331,7 +331,7 @@
testScope.runTest {
val token = byteArrayOf(5, 3, 2)
var result: FingerEnrollStateViewModel? = null
- val job = launch { underTest.enroll(token, FindSensor).collect { result = it } }
+ val job = launch { underTest.enroll(token, EnrollReason.FindSensor).collect { result = it } }
val enrollCallback: ArgumentCaptor<FingerprintManager.EnrollmentCallback> = argumentCaptor()
runCurrent()
diff --git a/tests/unit/src/com/android/settings/fingerprint2/settings/viewmodel/FingerprintSettingsNavigationViewModelTest.kt b/tests/unit/src/com/android/settings/fingerprint2/ui/settings/FingerprintSettingsNavigationViewModelTest.kt
similarity index 94%
rename from tests/unit/src/com/android/settings/fingerprint2/settings/viewmodel/FingerprintSettingsNavigationViewModelTest.kt
rename to tests/unit/src/com/android/settings/fingerprint2/ui/settings/FingerprintSettingsNavigationViewModelTest.kt
index 6bb8a16..d4dbec5 100644
--- a/tests/unit/src/com/android/settings/fingerprint2/settings/viewmodel/FingerprintSettingsNavigationViewModelTest.kt
+++ b/tests/unit/src/com/android/settings/fingerprint2/ui/settings/FingerprintSettingsNavigationViewModelTest.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.settings.fingerprint2.settings.viewmodel
+package com.android.settings.fingerprint2.ui.settings
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import com.android.settings.biometrics.BiometricEnrollBase
@@ -26,7 +26,7 @@
import com.android.settings.biometrics.fingerprint2.ui.settings.viewmodel.LaunchConfirmDeviceCredential
import com.android.settings.biometrics.fingerprint2.ui.settings.viewmodel.NextStepViewModel
import com.android.settings.biometrics.fingerprint2.ui.settings.viewmodel.ShowSettings
-import com.android.settings.fingerprint2.domain.interactor.FakeFingerprintManagerInteractor
+import com.android.settings.testutils2.FakeFingerprintManagerInteractor
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -133,22 +133,6 @@
}
@Test
- fun firstEnrollment_fails() =
- testScope.runTest {
- fakeFingerprintManagerInteractor.enrolledFingerprintsInternal = mutableListOf()
-
- var nextStep: NextStepViewModel? = null
- val job = launch { underTest.nextStep.collect { nextStep = it } }
-
- underTest.onConfirmDevice(true, 10L)
- underTest.onEnrollFirstFailure("We failed!!")
- runCurrent()
-
- assertThat(nextStep).isInstanceOf(FinishSettings::class.java)
- job.cancel()
- }
-
- @Test
fun firstEnrollment_failsWithReason() =
testScope.runTest {
fakeFingerprintManagerInteractor.enrolledFingerprintsInternal = mutableListOf()
diff --git a/tests/unit/src/com/android/settings/fingerprint2/settings/viewmodel/FingerprintSettingsViewModelTest.kt b/tests/unit/src/com/android/settings/fingerprint2/ui/settings/FingerprintSettingsViewModelTest.kt
similarity index 86%
rename from tests/unit/src/com/android/settings/fingerprint2/settings/viewmodel/FingerprintSettingsViewModelTest.kt
rename to tests/unit/src/com/android/settings/fingerprint2/ui/settings/FingerprintSettingsViewModelTest.kt
index e8a4d55..fb1d05a 100644
--- a/tests/unit/src/com/android/settings/fingerprint2/settings/viewmodel/FingerprintSettingsViewModelTest.kt
+++ b/tests/unit/src/com/android/settings/fingerprint2/ui/settings/FingerprintSettingsViewModelTest.kt
@@ -14,18 +14,18 @@
* limitations under the License.
*/
-package com.android.settings.fingerprint2.settings.viewmodel
+package com.android.settings.fingerprint2.ui.settings
-import android.hardware.biometrics.SensorProperties
-import android.hardware.fingerprint.FingerprintSensorProperties
-import android.hardware.fingerprint.FingerprintSensorPropertiesInternal
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import com.android.settings.biometrics.fingerprint2.shared.model.FingerprintAuthAttemptViewModel
+import com.android.settings.biometrics.fingerprint2.shared.model.FingerprintSensorPropertyViewModel
import com.android.settings.biometrics.fingerprint2.shared.model.FingerprintViewModel
+import com.android.settings.biometrics.fingerprint2.shared.model.SensorStrength
+import com.android.settings.biometrics.fingerprint2.shared.model.SensorType
import com.android.settings.biometrics.fingerprint2.ui.settings.viewmodel.FingerprintSettingsNavigationViewModel
import com.android.settings.biometrics.fingerprint2.ui.settings.viewmodel.FingerprintSettingsViewModel
import com.android.settings.biometrics.fingerprint2.ui.settings.viewmodel.PreferenceViewModel
-import com.android.settings.fingerprint2.domain.interactor.FakeFingerprintManagerInteractor
+import com.android.settings.testutils2.FakeFingerprintManagerInteractor
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.collectLatest
@@ -95,16 +95,12 @@
@Test
fun authenticate_DoesNotRun_ifOptical() =
testScope.runTest {
- fakeFingerprintManagerInteractor.sensorProps =
- listOf(
- FingerprintSensorPropertiesInternal(
- 0 /* sensorId */,
- SensorProperties.STRENGTH_STRONG,
- 5 /* maxEnrollmentsPerUser */,
- emptyList() /* ComponentInfoInternal */,
- FingerprintSensorProperties.TYPE_UDFPS_OPTICAL,
- true /* resetLockoutRequiresHardwareAuthToken */
- )
+ fakeFingerprintManagerInteractor.sensorProp =
+ FingerprintSensorPropertyViewModel(
+ 0 /* sensorId */,
+ SensorStrength.Strong,
+ 5 /* maxEnrollmentsPerUser */,
+ SensorType.Optical,
)
fakeFingerprintManagerInteractor.enrolledFingerprintsInternal =
mutableListOf(FingerprintViewModel("a", 1, 3L))
@@ -135,16 +131,12 @@
@Test
fun authenticate_DoesNotRun_ifUltrasonic() =
testScope.runTest {
- fakeFingerprintManagerInteractor.sensorProps =
- listOf(
- FingerprintSensorPropertiesInternal(
- 0 /* sensorId */,
- SensorProperties.STRENGTH_STRONG,
- 5 /* maxEnrollmentsPerUser */,
- emptyList() /* ComponentInfoInternal */,
- FingerprintSensorProperties.TYPE_UDFPS_ULTRASONIC,
- true /* resetLockoutRequiresHardwareAuthToken */
- )
+ fakeFingerprintManagerInteractor.sensorProp =
+ FingerprintSensorPropertyViewModel(
+ 0 /* sensorId */,
+ SensorStrength.Strong,
+ 5 /* maxEnrollmentsPerUser */,
+ SensorType.Ultrasonic,
)
fakeFingerprintManagerInteractor.enrolledFingerprintsInternal =
mutableListOf(FingerprintViewModel("a", 1, 3L))
@@ -173,16 +165,12 @@
@Test
fun authenticate_DoesRun_ifNotUdfps() =
testScope.runTest {
- fakeFingerprintManagerInteractor.sensorProps =
- listOf(
- FingerprintSensorPropertiesInternal(
- 0 /* sensorId */,
- SensorProperties.STRENGTH_STRONG,
- 5 /* maxEnrollmentsPerUser */,
- emptyList() /* ComponentInfoInternal */,
- FingerprintSensorProperties.TYPE_POWER_BUTTON,
- true /* resetLockoutRequiresHardwareAuthToken */
- )
+ fakeFingerprintManagerInteractor.sensorProp =
+ FingerprintSensorPropertyViewModel(
+ 0 /* sensorId */,
+ SensorStrength.Strong,
+ 5 /* maxEnrollmentsPerUser */,
+ SensorType.SFPS
)
fakeFingerprintManagerInteractor.enrolledFingerprintsInternal =
mutableListOf(FingerprintViewModel("a", 1, 3L))
@@ -383,16 +371,12 @@
}
private fun setupAuth(): MutableList<FingerprintViewModel> {
- fakeFingerprintManagerInteractor.sensorProps =
- listOf(
- FingerprintSensorPropertiesInternal(
- 0 /* sensorId */,
- SensorProperties.STRENGTH_STRONG,
- 5 /* maxEnrollmentsPerUser */,
- emptyList() /* ComponentInfoInternal */,
- FingerprintSensorProperties.TYPE_POWER_BUTTON,
- true /* resetLockoutRequiresHardwareAuthToken */
- )
+ fakeFingerprintManagerInteractor.sensorProp =
+ FingerprintSensorPropertyViewModel(
+ 0 /* sensorId */,
+ SensorStrength.Strong,
+ 5 /* maxEnrollmentsPerUser */,
+ SensorType.SFPS
)
val fingerprints =
mutableListOf(FingerprintViewModel("a", 1, 3L), FingerprintViewModel("b", 2, 5L))