Skip to content

Commit 359bccf

Browse files
committed
Fix errors in QuestionnaireActivityTest
com.google.android.gms.common.api.ApiException: 17: API: LocationServices.API is not available on this device. Connection failed with: ConnectionResult{statusCode=SERVICE_INVALID, resolution=null, message=null}
1 parent c06024f commit 359bccf

File tree

5 files changed

+21
-27
lines changed

5 files changed

+21
-27
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -273,9 +273,7 @@ jobs:
273273
force-avd-creation: true
274274
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
275275
disable-animations: true
276-
# script: ./gradlew clean -PlocalPropertiesFile=local.properties :quest:fhircoreJacocoReport --stacktrace -Pandroid.testInstrumentationRunnerArguments.notPackage=org.smartregister.fhircore.quest.performance
277-
# script: ./gradlew clean -PlocalPropertiesFile=local.properties :quest:testOpensrpDebugUnitTest --stacktrace -Pandroid.testInstrumentationRunnerArguments.notPackage=org.smartregister.fhircore.quest.performance
278-
script: ./gradlew clean -PlocalPropertiesFile=local.properties :quest:connectedOpensrpDebugAndroidTest --stacktrace -Pandroid.testInstrumentationRunnerArguments.notPackage=org.smartregister.fhircore.quest.performance
276+
script: ./gradlew clean -PlocalPropertiesFile=local.properties :quest:fhircoreJacocoReport --stacktrace -Pandroid.testInstrumentationRunnerArguments.notPackage=org.smartregister.fhircore.quest.performance
279277

280278
- name: Run Quest module unit and instrumentation tests and generate aggregated coverage report (Disabled)
281279
if: false

android/quest/src/main/assets/configs/app/application_config.json

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,6 @@
8383
]
8484
}
8585
],
86-
"logGpsLocation": [
87-
"QUESTIONNAIRE"
88-
],
86+
"logGpsLocation": [],
8987
"dateFormat": "MMM d, hh:mm aa"
9088
}

android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireActivity.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ import androidx.core.os.bundleOf
3535
import androidx.fragment.app.commit
3636
import androidx.lifecycle.lifecycleScope
3737
import com.google.android.fhir.datacapture.QuestionnaireFragment
38-
import com.google.android.gms.location.FusedLocationProviderClient
3938
import com.google.android.gms.location.LocationServices
4039
import dagger.hilt.android.AndroidEntryPoint
4140
import java.io.Serializable
@@ -78,7 +77,6 @@ class QuestionnaireActivity : BaseMultiLanguageActivity() {
7877
private lateinit var viewBinding: QuestionnaireActivityBinding
7978
private var questionnaire: Questionnaire? = null
8079
private var alertDialog: AlertDialog? = null
81-
private lateinit var fusedLocationClient: FusedLocationProviderClient
8280
private var currentLocation: Location? = null
8381
private val locationPermissionLauncher: ActivityResultLauncher<Array<String>> =
8482
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) {
@@ -155,8 +153,6 @@ class QuestionnaireActivity : BaseMultiLanguageActivity() {
155153
if (
156154
viewModel.applicationConfiguration.logGpsLocation.contains(LocationLogOptions.QUESTIONNAIRE)
157155
) {
158-
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
159-
160156
if (!LocationUtils.isLocationEnabled(this)) {
161157
showLocationSettingsDialog(
162158
Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS).apply {
@@ -195,6 +191,9 @@ class QuestionnaireActivity : BaseMultiLanguageActivity() {
195191
}
196192

197193
fun fetchLocation(highAccuracy: Boolean = true) {
194+
val fusedLocationClient =
195+
LocationServices.getFusedLocationProviderClient(this@QuestionnaireActivity)
196+
198197
lifecycleScope.launch {
199198
try {
200199
currentLocation =

android/quest/src/test/assets/configs/app/application_config.json

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,5 @@
7777
}
7878
}
7979
],
80-
"logGpsLocation": [
81-
"QUESTIONNAIRE"
82-
]
80+
"logGpsLocation": []
8381
}

android/quest/src/test/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireActivityTest.kt

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import android.widget.Toast
2525
import androidx.test.core.app.ApplicationProvider
2626
import com.google.android.fhir.FhirEngine
2727
import com.google.android.fhir.db.ResourceNotFoundException
28-
import com.google.android.gms.location.LocationServices
2928
import dagger.hilt.android.testing.BindValue
3029
import dagger.hilt.android.testing.HiltAndroidRule
3130
import dagger.hilt.android.testing.HiltAndroidTest
@@ -57,8 +56,10 @@ import org.robolectric.Shadows.shadowOf
5756
import org.robolectric.android.controller.ActivityController
5857
import org.robolectric.shadows.ShadowAlertDialog
5958
import org.robolectric.shadows.ShadowToast
59+
import org.smartregister.fhircore.engine.configuration.ConfigType
6060
import org.smartregister.fhircore.engine.configuration.ConfigurationRegistry
6161
import org.smartregister.fhircore.engine.configuration.QuestionnaireConfig
62+
import org.smartregister.fhircore.engine.configuration.app.ApplicationConfiguration
6263
import org.smartregister.fhircore.engine.configuration.app.LocationLogOptions
6364
import org.smartregister.fhircore.engine.data.local.ContentCache
6465
import org.smartregister.fhircore.engine.data.local.DefaultRepository
@@ -205,29 +206,29 @@ class QuestionnaireActivityTest : RobolectricTest() {
205206
fun `setupLocationServices should open location settings if location is disabled`() = runTest {
206207
// Questionnaire will be retrieved from the database
207208
fhirEngine.create(questionnaire.apply { id = questionnaireConfig.id })
209+
val initialConfig =
210+
configurationRegistry.retrieveConfiguration<ApplicationConfiguration>(ConfigType.Application)
211+
val logQuestionnaireGpsConfig =
212+
initialConfig.copy(logGpsLocation = listOf(LocationLogOptions.QUESTIONNAIRE))
213+
configurationRegistry.configCacheMap[ConfigType.Application.name] = logQuestionnaireGpsConfig
214+
215+
shadowOf(context).grantPermissions(android.Manifest.permission.ACCESS_FINE_LOCATION)
216+
val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
217+
locationManager.setTestProviderEnabled(LocationManager.GPS_PROVIDER, false)
218+
locationManager.setTestProviderEnabled(LocationManager.NETWORK_PROVIDER, false)
219+
208220
setupActivity()
209221
assertTrue(
210222
questionnaireActivity.viewModel.applicationConfiguration.logGpsLocation.contains(
211223
LocationLogOptions.QUESTIONNAIRE,
212224
),
213225
)
214-
215-
val fusedLocationProviderClient =
216-
LocationServices.getFusedLocationProviderClient(questionnaireActivity)
217-
assertNotNull(fusedLocationProviderClient)
218-
219-
shadowOf(questionnaireActivity)
220-
.grantPermissions(android.Manifest.permission.ACCESS_FINE_LOCATION)
221-
val locationManager =
222-
questionnaireActivity.getSystemService(Context.LOCATION_SERVICE) as LocationManager
223-
locationManager.setTestProviderEnabled(LocationManager.GPS_PROVIDER, false)
224-
locationManager.setTestProviderEnabled(LocationManager.NETWORK_PROVIDER, false)
225-
226-
questionnaireActivity.fetchLocation()
227226
val startedIntent = shadowOf(questionnaireActivity).nextStartedActivity
228227
val expectedIntent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
229228

230229
assertEquals(expectedIntent.component, startedIntent.component)
230+
// reset
231+
configurationRegistry.configCacheMap[ConfigType.Application.name] = initialConfig
231232
}
232233

233234
@Test

0 commit comments

Comments
 (0)