diff --git a/app/build.gradle b/app/build.gradle
index ba3ec9029d..99c1f95e15 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -68,6 +68,7 @@ dependencies {
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.60'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.2'
implementation 'com.itkacher.okhttpprofiler:okhttpprofiler:1.0.5'
+ implementation "com.google.android.gms:play-services-location:17.0.0"
implementation 'com.github.bumptech.glide:glide:4.10.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.10.0'
implementation 'com.otaliastudios:cameraview:2.4.0'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e29485190a..8d585d899d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -10,6 +10,7 @@
+
,
+ locationRequest: LocationRequest
+ ) {
+ locationSettingsResponseTask.addOnSuccessListener {
+ fusedLocationClient.requestLocationUpdates(
+ locationRequest,
+ locationCallback,
+ Looper.getMainLooper()
+ )
+ }
+ }
+
+ private fun onFailureLocationSettingsResponse(
+ locationSettingsResponseTask: Task,
+ activity: Activity
+ ) {
+ locationSettingsResponseTask.addOnFailureListener { exception ->
+ if (exception is ResolvableApiException) {
+ exception.startResolutionForResult(
+ activity,
+ REQUEST_LOCATION_SETTINGS
+ )
+ }
+ }
+ }
+
+ override fun onActivityPaused(activity: Activity) {
+ fusedLocationClient.removeLocationUpdates(locationCallback)
+ }
+
+ override fun onActivityResumed(activity: Activity) {
+ postLocation(activity)
+ }
+
+ override fun onActivityStarted(activity: Activity) {}
+
+ override fun onActivityDestroyed(activity: Activity) {}
+
+ override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
+
+ override fun onActivityStopped(activity: Activity) {}
+
+ override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {}
+
+ companion object {
+ const val REQUEST_LOCATION_SETTINGS = 100
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/common/PermissionsManager.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/manager/PermissionsManager.kt
similarity index 89%
rename from app/src/main/java/com/navi/medici/androidCustomerApp/common/PermissionsManager.kt
rename to app/src/main/java/com/navi/medici/androidCustomerApp/manager/PermissionsManager.kt
index d6a0acd0ca..42e83fae82 100644
--- a/app/src/main/java/com/navi/medici/androidCustomerApp/common/PermissionsManager.kt
+++ b/app/src/main/java/com/navi/medici/androidCustomerApp/manager/PermissionsManager.kt
@@ -1,7 +1,6 @@
-package com.navi.medici.androidCustomerApp.common
+package com.navi.medici.androidCustomerApp.manager
import android.app.Activity
-import android.content.Context
import android.content.pm.PackageManager
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/manager/repositories/UserDataRepository.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/manager/repositories/UserDataRepository.kt
index e6064b4f8c..c93dfe418f 100644
--- a/app/src/main/java/com/navi/medici/androidCustomerApp/manager/repositories/UserDataRepository.kt
+++ b/app/src/main/java/com/navi/medici/androidCustomerApp/manager/repositories/UserDataRepository.kt
@@ -1,10 +1,14 @@
package com.navi.medici.androidCustomerApp.manager.repositories
import com.navi.medici.androidCustomerApp.models.UserInstalledApp
+import com.navi.medici.androidCustomerApp.models.UserLocation
import com.navi.medici.androidCustomerApp.network.retrofit.ResponseCallback
import com.navi.medici.androidCustomerApp.utils.retrofitService
class UserDataRepository : ResponseCallback() {
suspend fun postInstalledApps(installedApps: List) =
apiResponseCallback(retrofitService().postInstalledApps(installedApps))
+
+ suspend fun postLocation(location: UserLocation) =
+ apiResponseCallback(retrofitService().postLocation(location))
}
\ No newline at end of file
diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/models/UserLocation.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/models/UserLocation.kt
new file mode 100644
index 0000000000..a1638ba1ff
--- /dev/null
+++ b/app/src/main/java/com/navi/medici/androidCustomerApp/models/UserLocation.kt
@@ -0,0 +1,9 @@
+package com.navi.medici.androidCustomerApp.models
+
+import com.google.gson.annotations.SerializedName
+
+data class UserLocation(
+ @SerializedName("latitude") val latitude: String?,
+ @SerializedName("longitude") val longitude: String?,
+ @SerializedName("date") val date: String?
+)
diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/network/retrofit/RetrofitService.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/network/retrofit/RetrofitService.kt
index 05b9230055..693b417161 100644
--- a/app/src/main/java/com/navi/medici/androidCustomerApp/network/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/navi/medici/androidCustomerApp/network/retrofit/RetrofitService.kt
@@ -6,10 +6,7 @@
package com.navi.medici.androidCustomerApp.network.retrofit
-import com.navi.medici.androidCustomerApp.models.ApplicationSummary
-import com.navi.medici.androidCustomerApp.models.OfferResponse
-import com.navi.medici.androidCustomerApp.models.OfferSelected
-import com.navi.medici.androidCustomerApp.models.UserInstalledApp
+import com.navi.medici.androidCustomerApp.models.*
import com.navi.medici.androidCustomerApp.models.request.*
import com.navi.medici.androidCustomerApp.models.response.*
import com.navi.medici.androidCustomerApp.network.GenericResponse
@@ -104,4 +101,8 @@ interface RetrofitService {
//User data
@POST("/user-device-data/apps")
suspend fun postInstalledApps(@Body installedApps: List): Response>
+
+ @POST("/user-device-data/location")
+ suspend fun postLocation(@Body userLocation: UserLocation): Response>
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/registration/RegistrationActivity.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/registration/RegistrationActivity.kt
index 35c93e0d6d..e9c2ce21b2 100644
--- a/app/src/main/java/com/navi/medici/androidCustomerApp/registration/RegistrationActivity.kt
+++ b/app/src/main/java/com/navi/medici/androidCustomerApp/registration/RegistrationActivity.kt
@@ -6,6 +6,7 @@
package com.navi.medici.androidCustomerApp.registration
+import android.Manifest
import android.content.Intent
import android.os.Bundle
import androidx.databinding.DataBindingUtil
@@ -13,6 +14,8 @@ import androidx.fragment.app.Fragment
import com.navi.medici.androidCustomerApp.R
import com.navi.medici.androidCustomerApp.common.BaseActivity
import com.navi.medici.androidCustomerApp.databinding.RegistrationActivityBinding
+import com.navi.medici.androidCustomerApp.manager.LocationManager
+import com.navi.medici.androidCustomerApp.manager.PermissionsManager
import com.navi.medici.androidCustomerApp.manager.repositories.UserDataRepository
import com.navi.medici.androidCustomerApp.models.UserInstalledApp
import com.navi.medici.androidCustomerApp.registration.listeners.RegistrationScreenListener
@@ -26,15 +29,29 @@ class RegistrationActivity : BaseActivity(), RegistrationScreenListener {
private lateinit var binding: RegistrationActivityBinding
private val coroutineScope = CoroutineScope(Dispatchers.Default)
+ private val locationManager = LocationManager()
+ private val permissionsManager = PermissionsManager(this)
+ private val permissions = arrayOf(Manifest.permission.ACCESS_FINE_LOCATION)
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- postInstalledPackages()
+ readUserData()
binding = DataBindingUtil.setContentView(this, R.layout.registration_activity)
onLoginScreen()
}
+
+ private fun readUserData() {
+ postInstalledPackages()
+ if (permissionsManager.hasPermissions(permissions)) {
+ locationManager.postLocation(this)
+ } else {
+ permissionsManager.requestPermissions(permissions)
+ }
+ }
+
private fun postInstalledPackages() {
val installedApps: List
try {
@@ -49,6 +66,21 @@ class RegistrationActivity : BaseActivity(), RegistrationScreenListener {
}
}
+ override fun onRequestPermissionsResult(
+ requestCode: Int,
+ permissions: Array,
+ grantResults: IntArray
+ ) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults)
+ if (requestCode == PermissionsManager.REQUEST_CODE) {
+ if (permissionsManager.hasPermissions(this.permissions)) {
+ readUserData()
+ } else {
+ permissionsManager.requestPermissions(this.permissions)
+ }
+ }
+ }
+
private fun navigateTo(screen: Int, data: String? = null) {
val fragmentManager = supportFragmentManager.beginTransaction()
val tag = getTag(screen)
@@ -62,6 +94,13 @@ class RegistrationActivity : BaseActivity(), RegistrationScreenListener {
fragmentManager.commit()
}
+ override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ super.onActivityResult(requestCode, resultCode, data)
+ if (requestCode == LocationManager.REQUEST_LOCATION_SETTINGS) {
+ locationManager.postLocation(this)
+ }
+ }
+
private fun getFragment(screen: Int, data: String? = null): Fragment {
return when (screen) {
LOGIN_SCREEN -> {