mirror of
https://github.com/hmalik144/Driver.git
synced 2025-12-10 02:45:20 +00:00
- mid commit
Took 4 hours 2 minutes
This commit is contained in:
@@ -121,6 +121,7 @@ dependencies {
|
||||
androidTestImplementation "androidx.test.espresso.idling:idling-concurrent:$espressoVersion"
|
||||
implementation "androidx.test.espresso:espresso-idling-resource:$espressoVersion"
|
||||
androidTestImplementation "androidx.test:runner:$testRunnerVersion"
|
||||
androidTestImplementation "androidx.test.espresso:espresso-contrib:$espressoVersion"
|
||||
/ * Google play services */
|
||||
implementation "com.google.android.gms:play-services-auth:20.4.1"
|
||||
/ * Google firebase */
|
||||
@@ -156,4 +157,8 @@ dependencies {
|
||||
implementation 'com.squareup.okhttp3:okhttp:4.10.0'
|
||||
/ * Kotlin Reflect */
|
||||
implementation "org.jetbrains.kotlin:kotlin-reflect:1.8.10"
|
||||
/ * Retrofit2 */
|
||||
def retrofit_version = "2.9.0"
|
||||
androidTestImplementation "com.squareup.retrofit2:retrofit:$retrofit_version"
|
||||
androidTestImplementation "com.squareup.retrofit2:converter-gson:$retrofit_version"
|
||||
}
|
||||
|
||||
@@ -7,4 +7,8 @@ const val deleteAccountFirebase =
|
||||
"http://10.0.2.2:9099/identitytoolkit.googleapis.com/v1/accounts:delete?key=$apiKey"
|
||||
|
||||
|
||||
const val USER_PASSWORD = "LetMeIn123!"
|
||||
const val USER_PASSWORD = "LetMeIn123!"
|
||||
|
||||
const val DRIVER_EMAIL = "existing-driver@driver.com"
|
||||
const val ADMIN_EMAIL = "admin@driver.com"
|
||||
const val PASSWORD = "test123456"
|
||||
@@ -0,0 +1,56 @@
|
||||
package h_mal.appttude.com.driver.firebase.api
|
||||
|
||||
import h_mal.appttude.com.driver.firebase.model.*
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import retrofit2.Response
|
||||
import retrofit2.Retrofit
|
||||
import retrofit2.converter.gson.GsonConverterFactory
|
||||
import retrofit2.http.Body
|
||||
import retrofit2.http.GET
|
||||
import retrofit2.http.PUT
|
||||
import retrofit2.http.Query
|
||||
|
||||
interface FirebaseApi {
|
||||
|
||||
@PUT("v1/accounts:signUp")
|
||||
suspend fun signUp(@Body request: SignUpRequest): Response<SignUpResponse>
|
||||
|
||||
@PUT("v1/accounts:signInWithPassword")
|
||||
suspend fun signInWithPassword(@Body request: SignUpRequest): Response<SignUpResponse>
|
||||
|
||||
@PUT("v1/accounts:sendOobCode")
|
||||
suspend fun sendOobCode(@Body request: Map<String, String>): Response<OobCodeResponse>
|
||||
|
||||
@PUT("v1/accounts:resetPassword")
|
||||
suspend fun resetPassword(@Body request: ResetPasswordRequest): Response<ResetPasswordResponse>
|
||||
|
||||
// invoke method creating an invocation of the api call
|
||||
companion object{
|
||||
operator fun invoke() : FirebaseApi {
|
||||
val host = "10.0.2.2"
|
||||
val baseUrl = "http://$host:9099/identitytoolkit.googleapis.com/"
|
||||
|
||||
val okkHttpclient = OkHttpClient.Builder()
|
||||
.addInterceptor {
|
||||
val original = it.request()
|
||||
val url = original.url.newBuilder()
|
||||
.addQueryParameter("key", "apikeydfasdfasdfasdf")
|
||||
.build()
|
||||
|
||||
val requestBuilder = original.newBuilder().url(url)
|
||||
val request: Request = requestBuilder.build()
|
||||
it.proceed(request)
|
||||
}
|
||||
.build()
|
||||
|
||||
// creation of retrofit class
|
||||
return Retrofit.Builder()
|
||||
.client(okkHttpclient)
|
||||
.baseUrl(baseUrl)
|
||||
.addConverterFactory(GsonConverterFactory.create())
|
||||
.build()
|
||||
.create(FirebaseApi::class.java)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package h_mal.appttude.com.driver.firebase.api
|
||||
|
||||
import android.content.Context
|
||||
import android.net.ConnectivityManager
|
||||
import android.net.NetworkCapabilities
|
||||
import okhttp3.Interceptor
|
||||
import java.io.IOException
|
||||
|
||||
class NetworkConnectionInterceptor(
|
||||
context: Context
|
||||
) : Interceptor {
|
||||
|
||||
private val applicationContext = context.applicationContext
|
||||
|
||||
override fun intercept(chain: Interceptor.Chain): okhttp3.Response {
|
||||
if (!isInternetAvailable()){
|
||||
throw IOException("Make sure you have an active data connection")
|
||||
}
|
||||
return chain.proceed(chain.request())
|
||||
}
|
||||
|
||||
private fun isInternetAvailable(): Boolean {
|
||||
var result = false
|
||||
val connectivityManager =
|
||||
applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
|
||||
connectivityManager?.let {
|
||||
it.getNetworkCapabilities(connectivityManager.activeNetwork)?.apply {
|
||||
result = when {
|
||||
hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true
|
||||
hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package h_mal.appttude.com.driver.firebase.model
|
||||
|
||||
data class OobCodeResponse(
|
||||
val kind: String? = null,
|
||||
val oobLink: String? = null,
|
||||
val oobCode: String? = null,
|
||||
val email: String? = null
|
||||
)
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package h_mal.appttude.com.driver.firebase.model
|
||||
|
||||
data class ResetPasswordRequest(
|
||||
val oldPassword: String? = null,
|
||||
val tenantId: String? = null,
|
||||
val newPassword: String? = null,
|
||||
val oobCode: String? = null,
|
||||
val email: String? = null
|
||||
)
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package h_mal.appttude.com.driver.firebase.model
|
||||
|
||||
data class ResetPasswordResponse(
|
||||
val requestType: String? = null,
|
||||
val kind: String? = null,
|
||||
val newEmail: String? = null,
|
||||
val email: String? = null
|
||||
)
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package h_mal.appttude.com.driver.firebase.model
|
||||
|
||||
data class SignUpRequest(
|
||||
val password: String? = null,
|
||||
val email: String? = null
|
||||
)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package h_mal.appttude.com.driver.firebase
|
||||
package h_mal.appttude.com.driver.firebase.model
|
||||
|
||||
data class SignUpResponse(
|
||||
val expiresIn: String? = null,
|
||||
@@ -1,5 +1,8 @@
|
||||
package h_mal.appttude.com.driver.robots
|
||||
|
||||
import androidx.test.espresso.Espresso.onView
|
||||
import androidx.test.espresso.contrib.DrawerActions
|
||||
import androidx.test.espresso.matcher.ViewMatchers.withId
|
||||
import h_mal.appttude.com.driver.BaseTestRobot
|
||||
import h_mal.appttude.com.driver.R
|
||||
|
||||
@@ -8,4 +11,20 @@ class HomeRobot : BaseTestRobot() {
|
||||
|
||||
fun checkTitleExists(title: String) = matchText(R.id.prova_title_tv, title)
|
||||
|
||||
fun openDrawer() {
|
||||
onView(withId(R.id.drawer_layout)).perform(DrawerActions.open())
|
||||
}
|
||||
|
||||
fun closeDrawer() {
|
||||
onView(withId(R.id.drawer_layout)).perform(DrawerActions.close())
|
||||
}
|
||||
|
||||
fun updateProfile() {
|
||||
openDrawer()
|
||||
clickButton(R.id.nav_user_settings)
|
||||
}
|
||||
|
||||
fun openDriverProfile() = clickButton(R.id.driver)
|
||||
fun openVehicleProfile() = clickButton(R.id.car)
|
||||
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package h_mal.appttude.com.driver.robots
|
||||
|
||||
import androidx.test.espresso.Espresso.onView
|
||||
import androidx.test.espresso.contrib.DrawerActions
|
||||
import androidx.test.espresso.matcher.ViewMatchers.withId
|
||||
import h_mal.appttude.com.driver.BaseTestRobot
|
||||
import h_mal.appttude.com.driver.R
|
||||
|
||||
fun update(func: UpdateRobot.() -> Unit) = UpdateRobot().apply { func() }
|
||||
class UpdateRobot : BaseTestRobot() {
|
||||
|
||||
fun updateEmail() = clickButton(R.id.update_email_button)
|
||||
fun updatePassword() = clickButton(R.id.update_password_button)
|
||||
fun updateProfile() = clickButton(R.id.update_profile_button)
|
||||
fun deleteProfile() = clickButton(R.id.delete_profile)
|
||||
|
||||
}
|
||||
@@ -33,7 +33,10 @@ class UserAuthenticationActivityTest : FirebaseTest<LoginActivity>(LoginActivity
|
||||
}
|
||||
home {
|
||||
checkTitleExists(getResourceString(R.string.welcome_title))
|
||||
updateProfile()
|
||||
}
|
||||
|
||||
// TODO: update user details
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -33,6 +33,7 @@ class MainActivity : DrawerActivity<MainViewModel, ActivityMainBinding>() {
|
||||
setupDrawer(data)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private fun setupDrawer(user: FirebaseUser) {
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package h_mal.appttude.com.driver.application
|
||||
|
||||
import android.app.Application
|
||||
import com.google.firebase.auth.FirebaseAuth
|
||||
import com.google.firebase.database.FirebaseDatabase
|
||||
import com.google.firebase.storage.FirebaseStorage
|
||||
import h_mal.appttude.com.driver.data.FirebaseAuthSource
|
||||
import h_mal.appttude.com.driver.data.FirebaseDatabaseSource
|
||||
import h_mal.appttude.com.driver.data.FirebaseStorageSource
|
||||
@@ -15,6 +18,16 @@ import org.kodein.di.generic.singleton
|
||||
|
||||
class DriverApplication : Application(), KodeinAware {
|
||||
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
|
||||
val localHost = "10.0.2.2"
|
||||
|
||||
FirebaseAuth.getInstance().useEmulator(localHost, 9099)
|
||||
FirebaseDatabase.getInstance().useEmulator(localHost, 9000)
|
||||
FirebaseStorage.getInstance().useEmulator(localHost, 9199)
|
||||
}
|
||||
|
||||
// Kodein aware to initialise the classes used for DI
|
||||
override val kodein = Kodein.lazy {
|
||||
import(androidXModule(this@DriverApplication))
|
||||
|
||||
@@ -45,8 +45,6 @@ abstract class BaseActivity<V : BaseViewModel, VB : ViewBinding> : AppCompatActi
|
||||
{ defaultViewModelCreationExtras }
|
||||
)
|
||||
|
||||
private var loading: Boolean = false
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
configureObserver()
|
||||
@@ -95,7 +93,6 @@ abstract class BaseActivity<V : BaseViewModel, VB : ViewBinding> : AppCompatActi
|
||||
*/
|
||||
open fun onStarted() {
|
||||
loadingView.fadeIn()
|
||||
loading = true
|
||||
mIdlingResource?.setIdleState(false)
|
||||
}
|
||||
|
||||
@@ -104,7 +101,6 @@ abstract class BaseActivity<V : BaseViewModel, VB : ViewBinding> : AppCompatActi
|
||||
*/
|
||||
open fun onSuccess(data: Any?) {
|
||||
loadingView.fadeOut()
|
||||
loading = false
|
||||
mIdlingResource?.setIdleState(true)
|
||||
}
|
||||
|
||||
@@ -114,7 +110,6 @@ abstract class BaseActivity<V : BaseViewModel, VB : ViewBinding> : AppCompatActi
|
||||
open fun onFailure(error: String?) {
|
||||
error?.let { displayToast(it) }
|
||||
loadingView.fadeOut()
|
||||
loading = false
|
||||
mIdlingResource?.setIdleState(true)
|
||||
}
|
||||
|
||||
@@ -140,7 +135,8 @@ abstract class BaseActivity<V : BaseViewModel, VB : ViewBinding> : AppCompatActi
|
||||
|
||||
|
||||
override fun onBackPressed() {
|
||||
if (!loading) super.onBackPressed()
|
||||
loadingView.hide()
|
||||
super.onBackPressed()
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -48,7 +48,6 @@ abstract class DrawerActivity<V : BaseViewModel, VB : ViewBinding> : BaseActivit
|
||||
appBarConfiguration = AppBarConfiguration(navController.graph, drawerLayout)
|
||||
navView.setupWithNavController(navController)
|
||||
setupActionBarWithNavController(navController, appBarConfiguration)
|
||||
|
||||
}
|
||||
|
||||
override fun onSupportNavigateUp(): Boolean {
|
||||
|
||||
@@ -44,13 +44,13 @@
|
||||
android:text="@string/update_password" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
style="@style/TextButton.WithIcon"
|
||||
android:id="@+id/update_profile_button"
|
||||
android:layout_marginBottom="12dp"
|
||||
style="@style/TextButton.WithIcon"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:text="@string/update_profile"
|
||||
app:layout_constraintBottom_toTopOf="@id/delete_profile"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
android:text="@string/update_profile" />
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
style="@style/TextButton.WithIcon"
|
||||
|
||||
Reference in New Issue
Block a user