Merge pull request #16 from hmalik144/flavours_build

Flavours build
This commit is contained in:
2023-03-29 17:09:28 +01:00
committed by GitHub
130 changed files with 806 additions and 706 deletions

View File

@@ -14,6 +14,11 @@ orbs:
jobs: jobs:
# Below is the definition of your job to build and test your app, you can rename and customize it as you want. # Below is the definition of your job to build and test your app, you can rename and customize it as you want.
build-and-test: build-and-test:
# Parameters used for determining
parameters:
flavour:
type: string
default: "Driver"
# These next lines define the Android machine image executor. # These next lines define the Android machine image executor.
# See: https://circleci.com/docs/2.0/executor-types/ # See: https://circleci.com/docs/2.0/executor-types/
executor: executor:
@@ -29,14 +34,13 @@ jobs:
name: Setup variables for build name: Setup variables for build
command: | command: |
echo "$GOOGLE_SERVICES_KEY" > "app/google-services.json" echo "$GOOGLE_SERVICES_KEY" > "app/google-services.json"
# echo "$RELEASE_KEYSTORE_BASE64" | base64 --decode > "android/app/release_keystore.jks"
- run: - run:
name: Grant execute permission for gradlew name: Grant execute permission for gradlew
command: | command: |
chmod +x gradlew chmod +x gradlew
# The next step will run the unit tests # The next step will run the unit tests
- android/run-tests: - android/run-tests:
test-command: ./gradlew testDriverDebugUnitTest --continue test-command: ./gradlew test<< parameters.flavour >>DebugUnitTest --continue
# Install Firebase tools needed for firebase emulator # Install Firebase tools needed for firebase emulator
- run: - run:
name: Install firebase tools name: Install firebase tools
@@ -50,15 +54,10 @@ jobs:
background: true background: true
# Then start the emulator and run the Instrumentation tests! # Then start the emulator and run the Instrumentation tests!
- android/start-emulator-and-run-tests: - android/start-emulator-and-run-tests:
post-emulator-launch-assemble-command: ./gradlew assembleDriverDebugAndroidTest post-emulator-launch-assemble-command: ./gradlew assemble<< parameters.flavour >>DebugAndroidTest
test-command: ./gradlew connectedDriverDebugAndroidTest test-command: ./gradlew connected<< parameters.flavour >>DebugAndroidTest
system-image: system-images;android-25;google_apis;x86 system-image: system-images;android-25;google_apis;x86
# And finally run the release build # store test reports
# - run:
# name: Assemble release build
# command: |
# ./gradlew assembleDriverRelease
# Then publish the artifacts of the Instrumentation tests!
- store_artifacts: - store_artifacts:
path: app/build/reports/androidTests/connected path: app/build/reports/androidTests/connected
destination: reports destination: reports
@@ -74,11 +73,50 @@ jobs:
# Then publish the results of the Instrumentation tests! # Then publish the results of the Instrumentation tests!
- store_test_results: - store_test_results:
path: app/build/outputs/androidTest-results/connected path: app/build/outputs/androidTest-results/connected
# Assemble
assemble-and-release:
# Parameters used for determining
parameters:
flavour:
type: string
default: ""
executor:
name: android/android-machine
steps:
- run:
name: Setup variables for release
command: |
echo "$RELEASE_KEYSTORE_BASE64" | base64 --decode > "android/app/release_keystore.jks"
echo "$GOOGLE_PLAY_KEY" > "android/playstore.json"
# And finally run the release build
- run:
name: Assemble release build
command: |
./gradlew assembleDriverRelease
# Invoke jobs via workflows # Invoke jobs via workflows
# See: https://circleci.com/docs/2.0/configuration-reference/#workflows # See: https://circleci.com/docs/2.0/configuration-reference/#workflows
workflows: workflows:
sample: # This is the name of the workflow, feel free to change it to better match your workflow. version: 2
# Inside the workflow, you define the jobs you want to run. build-release-driver:
jobs: jobs:
- build-and-test - build-and-test:
flavour: Driver
- assemble-and-release:
flavour: "Driver"
filters:
branches:
only:
- main_driver
requires:
- build-and-test
build-release-admin:
jobs:
- build-and-test:
flavour: Admin
- assemble-and-release:
flavour: Admin
filters:
branches:
only: main_admin
requires:
- build-and-test

View File

@@ -14,7 +14,7 @@ def relStoreFile = System.getenv("RELEASE_KEYSTORE")
android { android {
compileSdkVersion 31 compileSdkVersion 31
defaultConfig { defaultConfig {
applicationId "h_mal.appttude.com" applicationId "h_mal.appttude.com.driver"
minSdkVersion 24 minSdkVersion 24
targetSdkVersion 31 targetSdkVersion 31
versionCode 6 versionCode 6
@@ -47,7 +47,7 @@ android {
buildTypes { buildTypes {
release { release {
// signingConfig signingConfigs.release signingConfig signingConfigs.release
minifyEnabled false minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
} }
@@ -66,12 +66,11 @@ android {
flavorDimensions "Default" flavorDimensions "Default"
productFlavors { productFlavors {
driver { driver {
applicationIdSuffix ".driver"
versionCode 6 versionCode 6
versionName "1.0.5" versionName "1.0.5"
} }
admin { admin {
applicationIdSuffix ".driverAdmin" applicationIdSuffix ".admin"
versionCode 4 versionCode 4
versionName "0.0.5" versionName "0.0.5"
} }
@@ -84,7 +83,7 @@ android {
} }
admin { admin {
manifest { manifest {
srcFile 'src/driver_admin/AndroidManifest.xml' srcFile 'src/admin/AndroidManifest.xml'
} }
} }
} }

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- To auto-complete the email text field in the login form with the user's emails -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round">
</application>
</manifest>

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.objects package h_mal.appttude.com.driver.admin.objects
class ApprovalsObject { class ApprovalsObject {
@@ -29,6 +29,6 @@ class ApprovalsObject {
this.mot_details_approval = mot_details_approval this.mot_details_approval = mot_details_approval
this.insurance_details_approval = insurance_details_approval this.insurance_details_approval = insurance_details_approval
this.log_book_approval = log_book_approval this.log_book_approval = log_book_approval
ph_car_approval = private_hire_vehicle_approval this.ph_car_approval = private_hire_vehicle_approval
} }
} }

View File

@@ -0,0 +1,33 @@
package h_mal.appttude.com.driver.admin.objects
import h_mal.appttude.com.driver.model.*
import java.util.*
class ArchiveObject {
var driver_license: HashMap<String, DriversLicense>? = null
var private_hire: HashMap<String, PrivateHireLicense>? = null
var vehicle_details: HashMap<String, VehicleProfile>? = null
var insurance_details: HashMap<String, Insurance>? = null
var mot_details: HashMap<String, Mot>? = null
var log_book: HashMap<String, Logbook>? = null
var ph_car: HashMap<String, PrivateHireVehicle>? = null
constructor()
constructor(
driver_license: HashMap<String, DriversLicense>?,
private_hire: HashMap<String, PrivateHireLicense>?,
vehicle_details: HashMap<String, VehicleProfile>?,
insurance_details: HashMap<String, Insurance>?,
mot_details: HashMap<String, Mot>?,
log_book: HashMap<String, Logbook>?,
private_hire_vehicle: HashMap<String, PrivateHireVehicle>?
) {
this.driver_license = driver_license
this.private_hire = private_hire
this.vehicle_details = vehicle_details
this.insurance_details = insurance_details
this.mot_details = mot_details
this.log_book = log_book
this.ph_car = private_hire_vehicle
}
}

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.objects package h_mal.appttude.com.driver.admin.objects
class UserObject { class UserObject {

View File

@@ -1,7 +1,7 @@
package h_mal.appttude.com.objects package h_mal.appttude.com.driver.admin.objects
import h_mal.appttude.com.objects.wholeObject.DriverProfile import h_mal.appttude.com.driver.admin.objects.wholeObject.DriverProfile
import h_mal.appttude.com.objects.wholeObject.VehicleProfile import h_mal.appttude.com.driver.admin.objects.wholeObject.VehicleProfile
class WholeDriverObject { class WholeDriverObject {

View File

@@ -0,0 +1,24 @@
package h_mal.appttude.com.driver.admin.objects.wholeObject
import h_mal.appttude.com.driver.model.DriverProfile
import h_mal.appttude.com.driver.model.DriversLicense
import h_mal.appttude.com.driver.model.PrivateHireLicense
class DriverProfile {
var driver_profile: DriverProfile? = null
var driver_license: DriversLicense? = null
var private_hire: PrivateHireLicense? = null
constructor(
driver_profile: DriverProfile?,
driver_license: DriversLicense?,
private_hire: PrivateHireLicense?
) {
this.driver_profile = driver_profile
this.driver_license = driver_license
this.private_hire = private_hire
}
constructor()
}

View File

@@ -1,8 +1,8 @@
package h_mal.appttude.com.objects.wholeObject package h_mal.appttude.com.driver.admin.objects.wholeObject
import android.os.Parcel import android.os.Parcel
import android.os.Parcelable import android.os.Parcelable
import h_mal.appttude.com.objects.WholeDriverObject import h_mal.appttude.com.driver.admin.objects.WholeDriverObject
class MappedObject : Parcelable { class MappedObject : Parcelable {

View File

@@ -0,0 +1,31 @@
package h_mal.appttude.com.driver.admin.objects.wholeObject
import h_mal.appttude.com.driver.model.Insurance
import h_mal.appttude.com.driver.model.Logbook
import h_mal.appttude.com.driver.model.PrivateHireVehicle
import h_mal.appttude.com.driver.model.Mot
import h_mal.appttude.com.driver.model.VehicleProfile
class VehicleProfile {
var insurance_details: Insurance? = null
var log_book: Logbook? = null
var mot_details: Mot? = null
var vehicle_details: VehicleProfile? = null
var privateHireVehicle: PrivateHireVehicle? = null
constructor()
constructor(
insurance_details: Insurance?,
log_book: Logbook?,
mot_details: Mot?,
vehicle_details: VehicleProfile?,
private_hire_vehicle: PrivateHireVehicle?
) {
this.insurance_details = insurance_details
this.log_book = log_book
this.mot_details = mot_details
this.vehicle_details = vehicle_details
this.privateHireVehicle = private_hire_vehicle
}
}

View File

@@ -1,12 +1,12 @@
package h_mal.appttude.com.ui package h_mal.appttude.com.driver.ui
import android.app.Activity import android.app.Activity
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.ArrayAdapter import android.widget.ArrayAdapter
import h_mal.appttude.com.objects.wholeObject.MappedObject import h_mal.appttude.com.driver.admin.objects.wholeObject.MappedObject
import h_mal.appttude.com.R import h_mal.appttude.com.driver.R
class ApprovalListAdapter( class ApprovalListAdapter(

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.ui package h_mal.appttude.com.driver.ui
import android.app.AlertDialog import android.app.AlertDialog
import android.content.Context import android.content.Context

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.ui package h_mal.appttude.com.driver.ui
import android.app.AlertDialog import android.app.AlertDialog
import android.content.DialogInterface import android.content.DialogInterface
@@ -8,14 +8,14 @@ import android.util.Log
import android.view.* import android.view.*
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.firebase.database.DataSnapshot import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError import com.google.firebase.database.DatabaseError
import com.google.firebase.database.DatabaseReference import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.ValueEventListener import com.google.firebase.database.ValueEventListener
import h_mal.appttude.com.objects.WholeDriverObject import h_mal.appttude.com.driver.admin.objects.WholeDriverObject
import h_mal.appttude.com.objects.wholeObject.MappedObject import h_mal.appttude.com.driver.admin.objects.wholeObject.MappedObject
import h_mal.appttude.com.R import h_mal.appttude.com.driver.R
import kotlinx.android.synthetic.admin.fragment_home_super_user.*
import java.io.IOException import java.io.IOException
import java.util.* import java.util.*
@@ -42,7 +42,7 @@ class HomeSuperUserFragment : Fragment() {
// Inflate the layout for this fragment // Inflate the layout for this fragment
val view: View = inflater.inflate(R.layout.fragment_home_super_user, container, false) val view: View = inflater.inflate(R.layout.fragment_home_super_user, container, false)
recycler_view.apply { view.findViewById<RecyclerView>(R.id.recycler_view).apply {
layoutManager = LinearLayoutManager(context) layoutManager = LinearLayoutManager(context)
recyclerViewAdapter = RecyclerViewAdapter(context, mappedObjectList) recyclerViewAdapter = RecyclerViewAdapter(context, mappedObjectList)
adapter = recyclerViewAdapter adapter = recyclerViewAdapter

View File

@@ -0,0 +1,50 @@
package h_mal.appttude.com.driver.ui
import android.os.Bundle
import com.google.firebase.auth.FirebaseUser
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.DrawerActivity
import h_mal.appttude.com.driver.databinding.ActivityMainBinding
import h_mal.appttude.com.driver.databinding.NavHeaderMainBinding
import h_mal.appttude.com.driver.utils.setGlideImage
import h_mal.appttude.com.driver.viewmodels.MainViewModel
class MainActivity : DrawerActivity<MainViewModel, ActivityMainBinding>() {
override val containerId: Int = R.id.container
override val drawerLayoutId: Int = R.id.drawer_layout
override val toolbarId: Int = R.id.toolbar
override val navViewId: Int = R.id.nav_view
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel.getUserDetails()
setupLogoutInDrawer()
}
override fun onSuccess(data: Any?) {
super.onSuccess(data)
when (data) {
is FirebaseUser -> {
setupDrawer(data)
}
}
}
private fun setupDrawer(user: FirebaseUser) {
NavHeaderMainBinding.inflate(layoutInflater).apply {
driverEmail.text = user.email
driverName.text = user.displayName
profileImage.setGlideImage(user.photoUrl)
}
}
private fun setupLogoutInDrawer() {
binding.logout.setOnClickListener {
viewModel.logOut()
}
}
}

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.ui package h_mal.appttude.com.driver.ui
import android.app.AlertDialog import android.app.AlertDialog
import android.content.Context import android.content.Context
@@ -12,9 +12,9 @@ import android.widget.LinearLayout
import android.widget.TextView import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.squareup.picasso.Picasso import com.squareup.picasso.Picasso
import h_mal.appttude.com.objects.UserObject import h_mal.appttude.com.driver.admin.objects.UserObject
import h_mal.appttude.com.objects.wholeObject.MappedObject import h_mal.appttude.com.driver.admin.objects.wholeObject.MappedObject
import h_mal.appttude.com.R import h_mal.appttude.com.driver.R
class RecyclerViewAdapter constructor(var context: Context?, var objects: List<MappedObject>?) : class RecyclerViewAdapter constructor(var context: Context?, var objects: List<MappedObject>?) :

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.ui package h_mal.appttude.com.driver.ui
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
@@ -7,8 +7,8 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.GridView import android.widget.GridView
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import h_mal.appttude.com.objects.wholeObject.MappedObject import h_mal.appttude.com.driver.admin.objects.wholeObject.MappedObject
import h_mal.appttude.com.R import h_mal.appttude.com.driver.R
class UserMainFragment : Fragment() { class UserMainFragment : Fragment() {

View File

@@ -1,33 +0,0 @@
package h_mal.appttude.com.objects
import h_mal.appttude.com.model.*
import java.util.*
class ArchiveObject {
var driver_license: HashMap<String, DriversLicenseObject>? = null
var private_hire: HashMap<String, PrivateHireObject>? = null
var vehicle_details: HashMap<String, VehicleProfileObject>? = null
var insurance_details: HashMap<String, InsuranceObject>? = null
var mot_details: HashMap<String, MotObject>? = null
var log_book: HashMap<String, LogbookObject>? = null
var ph_car: HashMap<String, PrivateHireVehicleObject>? = null
constructor()
constructor(
driver_license: HashMap<String, DriversLicenseObject>?,
private_hire: HashMap<String, PrivateHireObject>?,
vehicle_details: HashMap<String, VehicleProfileObject>?,
insurance_details: HashMap<String, InsuranceObject>?,
mot_details: HashMap<String, MotObject>?,
log_book: HashMap<String, LogbookObject>?,
private_hire_vehicle: HashMap<String, PrivateHireVehicleObject>?
) {
this.driver_license = driver_license
this.private_hire = private_hire
this.vehicle_details = vehicle_details
this.insurance_details = insurance_details
this.mot_details = mot_details
this.log_book = log_book
this.ph_car = private_hire_vehicle
}
}

View File

@@ -1,24 +0,0 @@
package h_mal.appttude.com.objects.wholeObject
import h_mal.appttude.com.model.DriverProfileObject
import h_mal.appttude.com.model.DriversLicenseObject
import h_mal.appttude.com.model.PrivateHireObject
class DriverProfile {
var driver_profile: DriverProfileObject? = null
var driver_license: DriversLicenseObject? = null
var private_hire: PrivateHireObject? = null
constructor(
driver_profile: DriverProfileObject?,
driver_license: DriversLicenseObject?,
private_hire: PrivateHireObject?
) {
this.driver_profile = driver_profile
this.driver_license = driver_license
this.private_hire = private_hire
}
constructor()
}

View File

@@ -1,38 +0,0 @@
package h_mal.appttude.com.objects.wholeObject
import h_mal.appttude.com.model.InsuranceObject
import h_mal.appttude.com.model.LogbookObject
import h_mal.appttude.com.model.PrivateHireVehicleObject
import h_mal.appttude.com.model.MotObject
import h_mal.appttude.com.model.VehicleProfileObject
class VehicleProfile {
var insurance_details: InsuranceObject? = null
var log_book: LogbookObject? = null
var mot_details: MotObject? = null
var vehicle_details: VehicleProfileObject? = null
var privateHireVehicleObject: PrivateHireVehicleObject? = null
constructor()
// public VehicleProfile(InsuranceObject insurance_details, LogbookObject log_book, MotObject mot_details, VehicleProfileObject vehicle_details) {
// this.insurance_details = insurance_details;
// this.log_book = log_book;
// this.mot_details = mot_details;
// this.vehicle_details = vehicle_details;
// }
constructor(
insurance_details: InsuranceObject?,
log_book: LogbookObject?,
mot_details: MotObject?,
vehicle_details: VehicleProfileObject?,
private_hire_vehicle: PrivateHireVehicleObject?
) {
this.insurance_details = insurance_details
this.log_book = log_book
this.mot_details = mot_details
this.vehicle_details = vehicle_details
privateHireVehicleObject = private_hire_vehicle
}
}

View File

@@ -1,101 +0,0 @@
package h_mal.appttude.com.ui
import android.os.Bundle
import android.view.MenuItem
import android.view.View
import androidx.core.view.GravityCompat
import androidx.navigation.NavController
import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.navigateUp
import androidx.navigation.ui.setupActionBarWithNavController
import androidx.navigation.ui.setupWithNavController
import com.google.android.material.navigation.NavigationView
import com.google.firebase.auth.FirebaseUser
import h_mal.appttude.com.R
import h_mal.appttude.com.base.BaseActivity
import h_mal.appttude.com.dialogs.ExitDialog.displayExitDialog
import h_mal.appttude.com.utils.setGlideImage
import h_mal.appttude.com.viewmodels.MainViewModel
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.app_bar_main.*
import kotlinx.android.synthetic.main.nav_header_main.view.*
class MainActivity : BaseActivity<MainViewModel>(),
NavigationView.OnNavigationItemSelectedListener {
private val vm by createLazyViewModel<MainViewModel>()
override fun getViewModel(): MainViewModel = vm
override val layoutId: Int = R.layout.activity_main
lateinit var navController: NavController
lateinit var appBarConfiguration: AppBarConfiguration
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setSupportActionBar(toolbar)
supportActionBar?.setDisplayShowTitleEnabled(false)
navController = findNavController(R.id.container)
appBarConfiguration = AppBarConfiguration(navController.graph, drawer_layout)
nav_view.setupWithNavController(navController)
setupActionBarWithNavController(navController, appBarConfiguration)
getViewModel().getUserDetails()
setupLogoutInDrawer()
}
override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
}
override fun setTitle(title: CharSequence) {
toolbar.title = title
}
override fun onBackPressed() {
if (drawer_layout.isDrawerOpen(GravityCompat.START)) {
drawer_layout.closeDrawer(GravityCompat.START)
} else {
val navHostFragment = supportFragmentManager.findFragmentById(R.id.container)
navHostFragment?.childFragmentManager?.backStackEntryCount?.takeIf { it >= 1 }?.let {
return super.onBackPressed()
}
displayExitDialog()
}
}
override fun onSuccess(data: Any?) {
super.onSuccess(data)
when (data) {
is FirebaseUser -> {
setupDrawer(data)
}
}
}
private fun setupDrawer(user: FirebaseUser) {
val header: View = nav_view.getHeaderView(0)
header.driver_email.text = user.email
header.driver_name.text = user.displayName
header.profileImage.setGlideImage(user.photoUrl)
}
private fun setupLogoutInDrawer() {
logout.setOnClickListener {
getViewModel().logOut()
}
}
override fun onNavigationItemSelected(item: MenuItem): Boolean {
// Handle navigation view item clicks here.
when (item.itemId) {
R.id.nav_user_settings -> {}
}
drawer_layout.closeDrawer(GravityCompat.START)
return true
}
}

View File

@@ -8,7 +8,8 @@
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view" android:id="@+id/recycler_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent"
tools:listitem="@layout/list_item_layout">
</androidx.recyclerview.widget.RecyclerView> </androidx.recyclerview.widget.RecyclerView>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_navigation"
app:startDestination="@id/homeAdminFragment">
<fragment
android:id="@+id/homeAdminFragment"
android:name="h_mal.appttude.com.driver.ui.HomeSuperUserFragment"
android:label="fragment_home"
tools:layout="@layout/fragment_home_super_user">
</fragment>
</navigation>

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com package h_mal.appttude.com.driver
import android.content.res.Resources import android.content.res.Resources
import androidx.annotation.StringRes import androidx.annotation.StringRes

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com package h_mal.appttude.com.driver
import android.view.View import android.view.View
import androidx.annotation.StringRes import androidx.annotation.StringRes
@@ -10,7 +10,7 @@ import androidx.test.espresso.UiController
import androidx.test.espresso.ViewAction import androidx.test.espresso.ViewAction
import androidx.test.espresso.matcher.ViewMatchers.isRoot import androidx.test.espresso.matcher.ViewMatchers.isRoot
import androidx.test.platform.app.InstrumentationRegistry import androidx.test.platform.app.InstrumentationRegistry
import h_mal.appttude.com.base.BaseActivity import h_mal.appttude.com.driver.base.BaseActivity
import org.hamcrest.Matcher import org.hamcrest.Matcher
import org.junit.After import org.junit.After
import org.junit.Before import org.junit.Before

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com package h_mal.appttude.com.driver
private const val apiKey = "test_key" private const val apiKey = "test_key"

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com package h_mal.appttude.com.driver
import android.view.View import android.view.View
import android.widget.EditText import android.widget.EditText

View File

@@ -1,10 +1,10 @@
package h_mal.appttude.com package h_mal.appttude.com.driver
import com.google.firebase.auth.FirebaseAuth import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.database.FirebaseDatabase import com.google.firebase.database.FirebaseDatabase
import com.google.firebase.storage.FirebaseStorage import com.google.firebase.storage.FirebaseStorage
import h_mal.appttude.com.base.BaseActivity import h_mal.appttude.com.driver.base.BaseActivity
import h_mal.appttude.com.data.FirebaseAuthSource import h_mal.appttude.com.driver.data.FirebaseAuthSource
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.tasks.await import kotlinx.coroutines.tasks.await
import org.junit.After import org.junit.After

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com package h_mal.appttude.com.driver
import com.google.gson.Gson import com.google.gson.Gson
import com.google.gson.reflect.TypeToken import com.google.gson.reflect.TypeToken

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.firebase package h_mal.appttude.com.driver.firebase
data class SignUpResponse( data class SignUpResponse(
val expiresIn: String? = null, val expiresIn: String? = null,

View File

@@ -1,7 +1,7 @@
package h_mal.appttude.com.robots package h_mal.appttude.com.driver.robots
import h_mal.appttude.com.BaseTestRobot import h_mal.appttude.com.driver.BaseTestRobot
import h_mal.appttude.com.R import h_mal.appttude.com.driver.R
fun home(func: HomeRobot.() -> Unit) = HomeRobot().apply { func() } fun home(func: HomeRobot.() -> Unit) = HomeRobot().apply { func() }
class HomeRobot : BaseTestRobot() { class HomeRobot : BaseTestRobot() {

View File

@@ -1,7 +1,7 @@
package h_mal.appttude.com.robots package h_mal.appttude.com.driver.robots
import h_mal.appttude.com.BaseTestRobot import h_mal.appttude.com.driver.BaseTestRobot
import h_mal.appttude.com.R import h_mal.appttude.com.driver.R
fun login(func: LoginRobot.() -> Unit) = LoginRobot().apply { func() } fun login(func: LoginRobot.() -> Unit) = LoginRobot().apply { func() }

View File

@@ -1,7 +1,7 @@
package h_mal.appttude.com.robots package h_mal.appttude.com.driver.robots
import h_mal.appttude.com.BaseTestRobot import h_mal.appttude.com.driver.BaseTestRobot
import h_mal.appttude.com.R import h_mal.appttude.com.driver.R
fun register(func: RegisterRobot.() -> Unit) = RegisterRobot().apply { func() } fun register(func: RegisterRobot.() -> Unit) = RegisterRobot().apply { func() }
class RegisterRobot : BaseTestRobot() { class RegisterRobot : BaseTestRobot() {

View File

@@ -1,14 +1,14 @@
package h_mal.appttude.com.tests package h_mal.appttude.com.driver.tests
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest import androidx.test.filters.LargeTest
import h_mal.appttude.com.FirebaseTest import h_mal.appttude.com.driver.FirebaseTest
import h_mal.appttude.com.R import h_mal.appttude.com.driver.R
import h_mal.appttude.com.USER_PASSWORD import h_mal.appttude.com.driver.USER_PASSWORD
import h_mal.appttude.com.robots.home import h_mal.appttude.com.driver.robots.home
import h_mal.appttude.com.robots.login import h_mal.appttude.com.driver.robots.login
import h_mal.appttude.com.ui.user.LoginActivity import h_mal.appttude.com.driver.ui.user.LoginActivity
import org.junit.* import org.junit.*
import org.junit.runner.RunWith import org.junit.runner.RunWith

View File

@@ -1,15 +1,15 @@
package h_mal.appttude.com.tests package h_mal.appttude.com.driver.tests
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest import androidx.test.filters.LargeTest
import h_mal.appttude.com.FirebaseTest import h_mal.appttude.com.driver.FirebaseTest
import h_mal.appttude.com.R import h_mal.appttude.com.driver.R
import h_mal.appttude.com.USER_PASSWORD import h_mal.appttude.com.driver.USER_PASSWORD
import h_mal.appttude.com.robots.home import h_mal.appttude.com.driver.robots.home
import h_mal.appttude.com.robots.login import h_mal.appttude.com.driver.robots.login
import h_mal.appttude.com.robots.register import h_mal.appttude.com.driver.robots.register
import h_mal.appttude.com.ui.user.LoginActivity import h_mal.appttude.com.driver.ui.user.LoginActivity
import org.junit.* import org.junit.*
import org.junit.runner.RunWith import org.junit.runner.RunWith

View File

@@ -1,39 +1,11 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="h_mal.appttude.com.driver">
<application <application
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"> android:roundIcon="@mipmap/ic_launcher_round">
<activity
android:name="h_mal.appttude.com.ui.user.LoginActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar.User"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="h_mal.appttude.com.ui.MainActivity"
android:configChanges="orientation|screenSize"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name="h_mal.appttude.com.ui.update.UpdateActivity"
android:theme="@style/AppTheme.NoActionBar.Update" />
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="h_mal.appttude.com.driver"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
</application> </application>
</manifest> </manifest>

View File

@@ -1,13 +1,13 @@
package h_mal.appttude.com.ui package h_mal.appttude.com.driver.ui
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import h_mal.appttude.com.R import h_mal.appttude.com.driver.R
import h_mal.appttude.com.databinding.FragmentDriverOverallBinding import h_mal.appttude.com.driver.databinding.FragmentDriverOverallBinding
import h_mal.appttude.com.utils.navigateTo import h_mal.appttude.com.driver.utils.navigateTo
class DriverOverallFragment : Fragment() { class DriverOverallFragment : Fragment() {

View File

@@ -1,15 +1,15 @@
package h_mal.appttude.com.ui package h_mal.appttude.com.driver.ui
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import h_mal.appttude.com.R import h_mal.appttude.com.driver.R
import h_mal.appttude.com.base.DataSubmissionBaseFragment import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
import h_mal.appttude.com.data.DRIVER import h_mal.appttude.com.driver.data.DRIVER
import h_mal.appttude.com.databinding.FragmentHomeDriverBinding import h_mal.appttude.com.driver.databinding.FragmentHomeDriverBinding
import h_mal.appttude.com.utils.hide import h_mal.appttude.com.driver.utils.hide
import h_mal.appttude.com.utils.navigateTo import h_mal.appttude.com.driver.utils.navigateTo
import h_mal.appttude.com.utils.show import h_mal.appttude.com.driver.utils.show
import h_mal.appttude.com.viewmodels.RoleViewModel import h_mal.appttude.com.driver.viewmodels.RoleViewModel
class HomeFragment : class HomeFragment :

View File

@@ -0,0 +1,51 @@
package h_mal.appttude.com.driver.ui
import android.os.Bundle
import com.google.firebase.auth.FirebaseUser
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.DrawerActivity
import h_mal.appttude.com.driver.databinding.ActivityMainBinding
import h_mal.appttude.com.driver.databinding.NavHeaderMainBinding
import h_mal.appttude.com.driver.utils.setGlideImage
import h_mal.appttude.com.driver.viewmodels.MainViewModel
class MainActivity : DrawerActivity<MainViewModel, ActivityMainBinding>() {
override val containerId: Int = R.id.container
override val drawerLayoutId: Int = R.id.drawer_layout
override val toolbarId: Int = R.id.toolbar
override val navViewId: Int = R.id.nav_view
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel.getUserDetails()
setupLogoutInDrawer()
}
override fun onSuccess(data: Any?) {
super.onSuccess(data)
when (data) {
is FirebaseUser -> {
setupDrawer(data)
}
}
}
private fun setupDrawer(user: FirebaseUser) {
NavHeaderMainBinding.inflate(layoutInflater).apply {
driverEmail.text = user.email
driverName.text = user.displayName
profileImage.setGlideImage(user.photoUrl)
}
}
private fun setupLogoutInDrawer() {
binding.logout.setOnClickListener {
viewModel.logOut()
}
}
}

View File

@@ -1,13 +1,13 @@
package h_mal.appttude.com.ui package h_mal.appttude.com.driver.ui
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import h_mal.appttude.com.R import h_mal.appttude.com.driver.R
import h_mal.appttude.com.databinding.FragmentVehicleOverallBinding import h_mal.appttude.com.driver.databinding.FragmentVehicleOverallBinding
import h_mal.appttude.com.utils.navigateTo import h_mal.appttude.com.driver.utils.navigateTo
class VehicleOverallFragment : Fragment() { class VehicleOverallFragment : Fragment() {

View File

@@ -1,13 +1,13 @@
package h_mal.appttude.com.ui package h_mal.appttude.com.driver.ui
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import h_mal.appttude.com.R import h_mal.appttude.com.driver.R
import h_mal.appttude.com.databinding.FragmentWelcomeBinding import h_mal.appttude.com.driver.databinding.FragmentWelcomeBinding
import h_mal.appttude.com.utils.navigateTo import h_mal.appttude.com.driver.utils.navigateTo
class WelcomeFragment : Fragment() { class WelcomeFragment : Fragment() {

View File

@@ -1,13 +1,13 @@
package h_mal.appttude.com.ui.driverprofile package h_mal.appttude.com.driver.ui.driverprofile
import android.net.Uri import android.net.Uri
import h_mal.appttude.com.base.DataSubmissionBaseFragment import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
import h_mal.appttude.com.databinding.FragmentDriverLicenseBinding import h_mal.appttude.com.driver.databinding.FragmentDriverLicenseBinding
import h_mal.appttude.com.dialogs.DateDialog import h_mal.appttude.com.driver.dialogs.DateDialog
import h_mal.appttude.com.model.DriversLicense import h_mal.appttude.com.driver.model.DriversLicense
import h_mal.appttude.com.utils.isTrue import h_mal.appttude.com.driver.utils.isTrue
import h_mal.appttude.com.utils.setGlideImage import h_mal.appttude.com.driver.utils.setGlideImage
import h_mal.appttude.com.viewmodels.DriverLicenseViewModel import h_mal.appttude.com.driver.viewmodels.DriverLicenseViewModel
class DriverLicenseFragment : class DriverLicenseFragment :
DataSubmissionBaseFragment<DriverLicenseViewModel, FragmentDriverLicenseBinding, DriversLicense>() { DataSubmissionBaseFragment<DriverLicenseViewModel, FragmentDriverLicenseBinding, DriversLicense>() {

View File

@@ -1,13 +1,13 @@
package h_mal.appttude.com.ui.driverprofile package h_mal.appttude.com.driver.ui.driverprofile
import android.net.Uri import android.net.Uri
import h_mal.appttude.com.base.DataSubmissionBaseFragment import h_mal.appttude.com.driver.databinding.FragmentDriverProfileBinding
import h_mal.appttude.com.databinding.FragmentDriverProfileBinding import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
import h_mal.appttude.com.dialogs.DateDialog import h_mal.appttude.com.driver.dialogs.DateDialog
import h_mal.appttude.com.model.DriverProfile import h_mal.appttude.com.driver.model.DriverProfile
import h_mal.appttude.com.utils.isTrue import h_mal.appttude.com.driver.utils.isTrue
import h_mal.appttude.com.utils.setGlideImage import h_mal.appttude.com.driver.utils.setGlideImage
import h_mal.appttude.com.viewmodels.DriverProfileViewModel import h_mal.appttude.com.driver.viewmodels.DriverProfileViewModel
class DriverProfileFragment : class DriverProfileFragment :

View File

@@ -1,13 +1,13 @@
package h_mal.appttude.com.ui.driverprofile package h_mal.appttude.com.driver.ui.driverprofile
import android.net.Uri import android.net.Uri
import h_mal.appttude.com.base.DataSubmissionBaseFragment import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
import h_mal.appttude.com.databinding.FragmentPrivateHireLicenseBinding import h_mal.appttude.com.driver.databinding.FragmentPrivateHireLicenseBinding
import h_mal.appttude.com.dialogs.DateDialog import h_mal.appttude.com.driver.dialogs.DateDialog
import h_mal.appttude.com.model.PrivateHireLicense import h_mal.appttude.com.driver.model.PrivateHireLicense
import h_mal.appttude.com.utils.isTrue import h_mal.appttude.com.driver.utils.isTrue
import h_mal.appttude.com.utils.setGlideImage import h_mal.appttude.com.driver.utils.setGlideImage
import h_mal.appttude.com.viewmodels.PrivateHireLicenseViewModel import h_mal.appttude.com.driver.viewmodels.PrivateHireLicenseViewModel
class PrivateHireLicenseFragment : DataSubmissionBaseFragment class PrivateHireLicenseFragment : DataSubmissionBaseFragment

View File

@@ -1,16 +1,16 @@
package h_mal.appttude.com.ui.vehicleprofile package h_mal.appttude.com.driver.ui.vehicleprofile
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.widget.ImageView import android.widget.ImageView
import h_mal.appttude.com.base.DataSubmissionBaseFragment import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
import h_mal.appttude.com.databinding.FragmentInsuranceBinding import h_mal.appttude.com.driver.databinding.FragmentInsuranceBinding
import h_mal.appttude.com.dialogs.DateDialog import h_mal.appttude.com.driver.dialogs.DateDialog
import h_mal.appttude.com.model.Insurance import h_mal.appttude.com.driver.model.Insurance
import h_mal.appttude.com.utils.isTrue import h_mal.appttude.com.driver.utils.isTrue
import h_mal.appttude.com.utils.setGlideImage import h_mal.appttude.com.driver.utils.setGlideImage
import h_mal.appttude.com.viewmodels.InsuranceViewModel import h_mal.appttude.com.driver.viewmodels.InsuranceViewModel
class InsuranceFragment : class InsuranceFragment :

View File

@@ -1,12 +1,12 @@
package h_mal.appttude.com.ui.vehicleprofile package h_mal.appttude.com.driver.ui.vehicleprofile
import android.net.Uri import android.net.Uri
import h_mal.appttude.com.base.DataSubmissionBaseFragment import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
import h_mal.appttude.com.databinding.FragmentLogbookBinding import h_mal.appttude.com.driver.databinding.FragmentLogbookBinding
import h_mal.appttude.com.model.Logbook import h_mal.appttude.com.driver.model.Logbook
import h_mal.appttude.com.utils.isTrue import h_mal.appttude.com.driver.utils.isTrue
import h_mal.appttude.com.utils.setGlideImage import h_mal.appttude.com.driver.utils.setGlideImage
import h_mal.appttude.com.viewmodels.LogbookViewModel import h_mal.appttude.com.driver.viewmodels.LogbookViewModel
class LogbookFragment : class LogbookFragment :

View File

@@ -1,13 +1,13 @@
package h_mal.appttude.com.ui.vehicleprofile package h_mal.appttude.com.driver.ui.vehicleprofile
import android.net.Uri import android.net.Uri
import h_mal.appttude.com.base.DataSubmissionBaseFragment import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
import h_mal.appttude.com.databinding.FragmentMotBinding import h_mal.appttude.com.driver.databinding.FragmentMotBinding
import h_mal.appttude.com.dialogs.DateDialog import h_mal.appttude.com.driver.dialogs.DateDialog
import h_mal.appttude.com.model.Mot import h_mal.appttude.com.driver.model.Mot
import h_mal.appttude.com.utils.isTrue import h_mal.appttude.com.driver.utils.isTrue
import h_mal.appttude.com.utils.setGlideImage import h_mal.appttude.com.driver.utils.setGlideImage
import h_mal.appttude.com.viewmodels.MotViewModel import h_mal.appttude.com.driver.viewmodels.MotViewModel
class MotFragment : DataSubmissionBaseFragment<MotViewModel, FragmentMotBinding, Mot>() { class MotFragment : DataSubmissionBaseFragment<MotViewModel, FragmentMotBinding, Mot>() {

View File

@@ -1,13 +1,13 @@
package h_mal.appttude.com.ui.vehicleprofile package h_mal.appttude.com.driver.ui.vehicleprofile
import android.net.Uri import android.net.Uri
import h_mal.appttude.com.base.DataSubmissionBaseFragment import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
import h_mal.appttude.com.databinding.FragmentPrivateHireLicenseBinding import h_mal.appttude.com.driver.databinding.FragmentPrivateHireLicenseBinding
import h_mal.appttude.com.dialogs.DateDialog import h_mal.appttude.com.driver.dialogs.DateDialog
import h_mal.appttude.com.model.PrivateHireVehicle import h_mal.appttude.com.driver.model.PrivateHireVehicle
import h_mal.appttude.com.utils.isTrue import h_mal.appttude.com.driver.utils.isTrue
import h_mal.appttude.com.utils.setGlideImage import h_mal.appttude.com.driver.utils.setGlideImage
import h_mal.appttude.com.viewmodels.PrivateHireVehicleViewModel import h_mal.appttude.com.driver.viewmodels.PrivateHireVehicleViewModel
class PrivateHireVehicleFragment : class PrivateHireVehicleFragment :

View File

@@ -1,11 +1,11 @@
package h_mal.appttude.com.ui.vehicleprofile package h_mal.appttude.com.driver.ui.vehicleprofile
import h_mal.appttude.com.base.DataSubmissionBaseFragment import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
import h_mal.appttude.com.databinding.FragmentVehicleSetupBinding import h_mal.appttude.com.driver.databinding.FragmentVehicleSetupBinding
import h_mal.appttude.com.dialogs.DateDialog import h_mal.appttude.com.driver.dialogs.DateDialog
import h_mal.appttude.com.model.VehicleProfile import h_mal.appttude.com.driver.model.VehicleProfile
import h_mal.appttude.com.utils.isTrue import h_mal.appttude.com.driver.utils.isTrue
import h_mal.appttude.com.viewmodels.VehicleProfileViewModel import h_mal.appttude.com.driver.viewmodels.VehicleProfileViewModel
class VehicleProfileFragment : DataSubmissionBaseFragment class VehicleProfileFragment : DataSubmissionBaseFragment

View File

@@ -6,7 +6,7 @@
<fragment <fragment
android:id="@+id/homeDriverFragment" android:id="@+id/homeDriverFragment"
android:name="h_mal.appttude.com.ui.HomeFragment" android:name="h_mal.appttude.com.driver.ui.HomeFragment"
android:label="fragment_home" android:label="fragment_home"
tools:layout="@layout/fragment_home_driver"> tools:layout="@layout/fragment_home_driver">
<action <action
@@ -26,7 +26,7 @@
</fragment> </fragment>
<fragment <fragment
android:id="@+id/driverOverallFragment" android:id="@+id/driverOverallFragment"
android:name="h_mal.appttude.com.ui.DriverOverallFragment" android:name="h_mal.appttude.com.driver.ui.DriverOverallFragment"
android:label="DriverOverallFragment" android:label="DriverOverallFragment"
tools:layout="@layout/fragment_driver_overall"> tools:layout="@layout/fragment_driver_overall">
<action <action
@@ -54,7 +54,7 @@
</fragment> </fragment>
<fragment <fragment
android:id="@+id/vehicleOverallFragment" android:id="@+id/vehicleOverallFragment"
android:name="h_mal.appttude.com.ui.VehicleOverallFragment" android:name="h_mal.appttude.com.driver.ui.VehicleOverallFragment"
android:label="VehicleOverallFragment" android:label="VehicleOverallFragment"
tools:layout="@layout/fragment_vehicle_overall"> tools:layout="@layout/fragment_vehicle_overall">
<action <action
@@ -96,49 +96,49 @@
</fragment> </fragment>
<fragment <fragment
android:id="@+id/driverProfileFragment" android:id="@+id/driverProfileFragment"
android:name="h_mal.appttude.com.ui.driverprofile.DriverProfileFragment" android:name="h_mal.appttude.com.driver.ui.driverprofile.DriverProfileFragment"
android:label="fragment_driver_profile" android:label="fragment_driver_profile"
tools:layout="@layout/fragment_driver_profile" /> tools:layout="@layout/fragment_driver_profile" />
<fragment <fragment
android:id="@+id/driverLicenseFragment" android:id="@+id/driverLicenseFragment"
android:name="h_mal.appttude.com.ui.driverprofile.DriverLicenseFragment" android:name="h_mal.appttude.com.driver.ui.driverprofile.DriverLicenseFragment"
android:label="fragment_driver_license" android:label="fragment_driver_license"
tools:layout="@layout/fragment_driver_license" /> tools:layout="@layout/fragment_driver_license" />
<fragment <fragment
android:id="@+id/vehicleSetupFragment" android:id="@+id/vehicleSetupFragment"
android:name="h_mal.appttude.com.ui.vehicleprofile.VehicleProfileFragment" android:name="h_mal.appttude.com.driver.ui.vehicleprofile.VehicleProfileFragment"
android:label="VehicleSetupFragment" android:label="VehicleSetupFragment"
tools:layout="@layout/fragment_vehicle_setup" /> tools:layout="@layout/fragment_vehicle_setup" />
<fragment <fragment
android:id="@+id/insuranceFragment" android:id="@+id/insuranceFragment"
android:name="h_mal.appttude.com.ui.vehicleprofile.InsuranceFragment" android:name="h_mal.appttude.com.driver.ui.vehicleprofile.InsuranceFragment"
android:label="InsuranceFragment" android:label="InsuranceFragment"
tools:layout="@layout/fragment_insurance" /> tools:layout="@layout/fragment_insurance" />
<fragment <fragment
android:id="@+id/motFragment" android:id="@+id/motFragment"
android:name="h_mal.appttude.com.ui.vehicleprofile.MotFragment" android:name="h_mal.appttude.com.driver.ui.vehicleprofile.MotFragment"
android:label="MotFragment" android:label="MotFragment"
tools:layout="@layout/fragment_mot" /> tools:layout="@layout/fragment_mot" />
<fragment <fragment
android:id="@+id/logbookFragment" android:id="@+id/logbookFragment"
android:name="h_mal.appttude.com.ui.vehicleprofile.LogbookFragment" android:name="h_mal.appttude.com.driver.ui.vehicleprofile.LogbookFragment"
android:label="fragment_logbook" android:label="fragment_logbook"
tools:layout="@layout/fragment_logbook" /> tools:layout="@layout/fragment_logbook" />
<activity <activity
android:id="@+id/nav_user_settings" android:id="@+id/nav_user_settings"
android:name="h_mal.appttude.com.ui.update.UpdateActivity" android:name="h_mal.appttude.com.driver.ui.update.UpdateActivity"
android:label="fragment_profile" android:label="fragment_profile"
tools:layout="@layout/update_activity" /> tools:layout="@layout/update_activity" />
<fragment <fragment
android:id="@+id/privateHireLicenseFragment2" android:id="@+id/privateHireLicenseFragment2"
android:name="h_mal.appttude.com.ui.driverprofile.PrivateHireLicenseFragment" android:name="h_mal.appttude.com.driver.ui.driverprofile.PrivateHireLicenseFragment"
android:label="fragment_private_hire_license" android:label="fragment_private_hire_license"
tools:layout="@layout/fragment_private_hire_license" /> tools:layout="@layout/fragment_private_hire_license" />
<fragment <fragment
android:id="@+id/privateHireVehicleFragment" android:id="@+id/privateHireVehicleFragment"
android:name="h_mal.appttude.com.ui.vehicleprofile.PrivateHireVehicleFragment" android:name="h_mal.appttude.com.driver.ui.vehicleprofile.PrivateHireVehicleFragment"
android:label="fragment_private_hire_vehicle" android:label="fragment_private_hire_vehicle"
tools:layout="@layout/fragment_private_hire_vehicle" /> tools:layout="@layout/fragment_private_hire_vehicle" />
</navigation> </navigation>

View File

@@ -1,18 +1,47 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="h_mal.appttude.com"> package="h_mal.appttude.com.driver">
<!-- To auto-complete the email text field in the login form with the user's emails --> <!-- To auto-complete the email text field in the login form with the user's emails -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application <application
android:name="h_mal.appttude.com.application.DriverApplication" android:name="h_mal.appttude.com.driver.application.DriverApplication"
android:allowBackup="true" android:allowBackup="true"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/AppTheme"> android:theme="@style/AppTheme">
<activity
android:name="h_mal.appttude.com.driver.ui.user.LoginActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar.User"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="h_mal.appttude.com.driver.ui.MainActivity"
android:configChanges="orientation|screenSize"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name="h_mal.appttude.com.driver.ui.update.UpdateActivity"
android:theme="@style/AppTheme.NoActionBar.Update" />
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="h_mal.appttude.com.driver"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
</application> </application>
</manifest> </manifest>

View File

@@ -1,4 +0,0 @@
package h_mal.appttude.com.data
const val DRIVER = "driver"
const val ADMIN = "super_user"

View File

@@ -1,11 +1,11 @@
package h_mal.appttude.com.application package h_mal.appttude.com.driver.application
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import h_mal.appttude.com.data.FirebaseAuthSource import h_mal.appttude.com.driver.data.FirebaseAuthSource
import h_mal.appttude.com.data.FirebaseDatabaseSource import h_mal.appttude.com.driver.data.FirebaseDatabaseSource
import h_mal.appttude.com.data.FirebaseStorageSource import h_mal.appttude.com.driver.data.FirebaseStorageSource
import h_mal.appttude.com.viewmodels.* import h_mal.appttude.com.driver.viewmodels.*
class ApplicationViewModelFactory( class ApplicationViewModelFactory(
private val auth: FirebaseAuthSource, private val auth: FirebaseAuthSource,

View File

@@ -1,9 +1,9 @@
package h_mal.appttude.com.application package h_mal.appttude.com.driver.application
import android.app.Application import android.app.Application
import h_mal.appttude.com.data.FirebaseAuthSource import h_mal.appttude.com.driver.data.FirebaseAuthSource
import h_mal.appttude.com.data.FirebaseDatabaseSource import h_mal.appttude.com.driver.data.FirebaseDatabaseSource
import h_mal.appttude.com.data.FirebaseStorageSource import h_mal.appttude.com.driver.data.FirebaseStorageSource
import org.kodein.di.Kodein import org.kodein.di.Kodein
import org.kodein.di.KodeinAware import org.kodein.di.KodeinAware
import org.kodein.di.android.x.androidXModule import org.kodein.di.android.x.androidXModule

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.Archive package h_mal.appttude.com.driver.archive
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
@@ -7,7 +7,7 @@ import android.view.ViewGroup
import android.widget.ListView import android.widget.ListView
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import com.google.firebase.database.DatabaseReference import com.google.firebase.database.DatabaseReference
import h_mal.appttude.com.R import h_mal.appttude.com.driver.R
class ArchiveFragment : Fragment() { class ArchiveFragment : Fragment() {
// var archive: ArchiveObject? = null // var archive: ArchiveObject? = null

View File

@@ -1,14 +1,14 @@
package h_mal.appttude.com.Archive package h_mal.appttude.com.driver.archive
//import h_mal.appttude.com.Global.FirebaseClass //import h_mal.appttude.com.driver.Global.FirebaseClass
//import h_mal.appttude.com.Global.ImageSwiperClass //import h_mal.appttude.com.driver.Global.ImageSwiperClass
//import h_mal.appttude.com.Objects.ArchiveObject //import h_mal.appttude.com.driver.Objects.ArchiveObject
import android.content.Context import android.content.Context
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.BaseAdapter import android.widget.BaseAdapter
import android.widget.TextView import android.widget.TextView
import h_mal.appttude.com.utils.DateUtils.convertDateStringDatePattern import h_mal.appttude.com.driver.utils.DateUtils.convertDateStringDatePattern
import java.text.ParseException import java.text.ParseException
class ArchiveObjectListAdapter( class ArchiveObjectListAdapter(

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.base package h_mal.appttude.com.driver.base
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
@@ -12,10 +12,10 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModelLazy import androidx.lifecycle.ViewModelLazy
import androidx.test.espresso.IdlingResource import androidx.test.espresso.IdlingResource
import androidx.viewbinding.ViewBinding import androidx.viewbinding.ViewBinding
import h_mal.appttude.com.R import h_mal.appttude.com.driver.R
import h_mal.appttude.com.application.ApplicationViewModelFactory import h_mal.appttude.com.driver.application.ApplicationViewModelFactory
import h_mal.appttude.com.data.ViewState import h_mal.appttude.com.driver.data.ViewState
import h_mal.appttude.com.utils.* import h_mal.appttude.com.driver.utils.*
import org.kodein.di.KodeinAware import org.kodein.di.KodeinAware
import org.kodein.di.android.kodein import org.kodein.di.android.kodein
import org.kodein.di.generic.instance import org.kodein.di.generic.instance
@@ -29,16 +29,18 @@ abstract class BaseActivity<V : BaseViewModel, VB : ViewBinding> : AppCompatActi
private lateinit var loadingView: View private lateinit var loadingView: View
private var _binding: VB? = null private var _binding: VB? = null
private val binding: VB val binding: VB
get() = _binding ?: error("Must only access binding while fragment is attached.") get() = _binding ?: error("Must only access binding while fragment is attached.")
val viewModel: V by createLazyViewModel() val viewModel: V by createLazyViewModel()
override val kodein by kodein() override val kodein by kodein()
val factory by instance<ApplicationViewModelFactory>() private val factory by instance<ApplicationViewModelFactory>()
fun createLazyViewModel(): Lazy<V> = ViewModelLazy( /**
* Create a lazy viewmodel based on the generic view model [V].
*/
private fun createLazyViewModel(): Lazy<V> = ViewModelLazy(
getGenericClassAt(0), getGenericClassAt(0),
{ viewModelStore }, { viewModelStore },
{ factory }, { factory },
@@ -52,7 +54,10 @@ abstract class BaseActivity<V : BaseViewModel, VB : ViewBinding> : AppCompatActi
?.kotlin ?.kotlin
?: throw IllegalStateException("Can not find class from generic argument") ?: throw IllegalStateException("Can not find class from generic argument")
fun inflateBindingByType( /**
* Create a view binding out of the the generic [VB]
*/
private fun inflateBindingByType(
genericClassAt: KClass<VB> genericClassAt: KClass<VB>
): VB = try { ): VB = try {
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
@@ -74,8 +79,14 @@ abstract class BaseActivity<V : BaseViewModel, VB : ViewBinding> : AppCompatActi
setupView(binding) setupView(binding)
} }
open fun setupView(binding: VB) {} open fun setupView(binding: VB) {}
/**
* Extension function which can be used in our child class for binding.
*
* @sample applyBinding { textView.text = "Hello" }
*/
fun applyBinding(block: VB.() -> Unit) { fun applyBinding(block: VB.() -> Unit) {
block(binding) block(binding)
} }

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.base package h_mal.appttude.com.driver.base
import android.app.Activity import android.app.Activity
import android.content.ClipData import android.content.ClipData
@@ -11,9 +11,9 @@ import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.createViewModelLazy import androidx.fragment.app.createViewModelLazy
import androidx.viewbinding.ViewBinding import androidx.viewbinding.ViewBinding
import h_mal.appttude.com.application.ApplicationViewModelFactory import h_mal.appttude.com.driver.application.ApplicationViewModelFactory
import h_mal.appttude.com.data.ViewState import h_mal.appttude.com.driver.data.ViewState
import h_mal.appttude.com.utils.PermissionsUtils import h_mal.appttude.com.driver.utils.PermissionsUtils
import org.kodein.di.KodeinAware import org.kodein.di.KodeinAware
import org.kodein.di.android.x.kodein import org.kodein.di.android.x.kodein
import org.kodein.di.generic.instance import org.kodein.di.generic.instance

View File

@@ -1,9 +1,9 @@
package h_mal.appttude.com.base package h_mal.appttude.com.driver.base
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import h_mal.appttude.com.data.ViewState import h_mal.appttude.com.driver.data.ViewState
import h_mal.appttude.com.utils.Event import h_mal.appttude.com.driver.utils.Event
abstract class BaseViewModel : ViewModel() { abstract class BaseViewModel : ViewModel() {
open val uiState: MutableLiveData<ViewState> = MutableLiveData() open val uiState: MutableLiveData<ViewState> = MutableLiveData()

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.base package h_mal.appttude.com.driver.base
import android.Manifest import android.Manifest
import android.content.Intent import android.content.Intent
@@ -8,10 +8,10 @@ import android.view.View
import android.widget.EditText import android.widget.EditText
import androidx.core.widget.doAfterTextChanged import androidx.core.widget.doAfterTextChanged
import androidx.viewbinding.ViewBinding import androidx.viewbinding.ViewBinding
import h_mal.appttude.com.data.UserAuthState import h_mal.appttude.com.driver.data.UserAuthState
import h_mal.appttude.com.ui.user.LoginActivity import h_mal.appttude.com.driver.ui.user.LoginActivity
import h_mal.appttude.com.utils.PermissionsUtils.askForPermissions import h_mal.appttude.com.driver.utils.PermissionsUtils.askForPermissions
import h_mal.appttude.com.utils.TextValidationUtils.validateEditText import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEditText
private const val IMAGE_PERMISSION_RESULT = 402 private const val IMAGE_PERMISSION_RESULT = 402

View File

@@ -1,15 +1,15 @@
package h_mal.appttude.com.base package h_mal.appttude.com.driver.base
import android.net.Uri import android.net.Uri
import com.google.firebase.database.DatabaseReference import com.google.firebase.database.DatabaseReference
import com.google.firebase.storage.StorageReference import com.google.firebase.storage.StorageReference
import h_mal.appttude.com.data.FirebaseAuthentication import h_mal.appttude.com.driver.data.FirebaseAuthentication
import h_mal.appttude.com.data.FirebaseCompletion import h_mal.appttude.com.driver.data.FirebaseCompletion
import h_mal.appttude.com.data.FirebaseDatabaseSource import h_mal.appttude.com.driver.data.FirebaseDatabaseSource
import h_mal.appttude.com.data.FirebaseStorageSource import h_mal.appttude.com.driver.data.FirebaseStorageSource
import h_mal.appttude.com.utils.Coroutines.io import h_mal.appttude.com.driver.utils.Coroutines.io
import h_mal.appttude.com.utils.DateUtils.getDateTimeStamp import h_mal.appttude.com.driver.utils.DateUtils.getDateTimeStamp
import h_mal.appttude.com.utils.getDataFromDatabaseRef import h_mal.appttude.com.driver.utils.getDataFromDatabaseRef
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.async import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.coroutineScope

View File

@@ -1,43 +1,54 @@
package h_mal.appttude.com.ui package h_mal.appttude.com.driver.base
import android.os.Bundle
import android.view.MenuItem import android.view.MenuItem
import androidx.appcompat.widget.Toolbar
import androidx.core.view.GravityCompat import androidx.core.view.GravityCompat
import androidx.drawerlayout.widget.DrawerLayout
import androidx.navigation.NavController import androidx.navigation.NavController
import androidx.navigation.findNavController import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.navigateUp import androidx.navigation.ui.navigateUp
import androidx.navigation.ui.setupActionBarWithNavController import androidx.navigation.ui.setupActionBarWithNavController
import androidx.navigation.ui.setupWithNavController import androidx.navigation.ui.setupWithNavController
import androidx.viewbinding.ViewBinding
import com.google.android.material.navigation.NavigationView import com.google.android.material.navigation.NavigationView
import com.google.firebase.auth.FirebaseUser import com.google.firebase.auth.FirebaseUser
import h_mal.appttude.com.R import h_mal.appttude.com.driver.databinding.NavHeaderMainBinding
import h_mal.appttude.com.base.BaseActivity import h_mal.appttude.com.driver.dialogs.ExitDialog.displayExitDialog
import h_mal.appttude.com.databinding.ActivityMainBinding import h_mal.appttude.com.driver.utils.isTrue
import h_mal.appttude.com.databinding.NavHeaderMainBinding import h_mal.appttude.com.driver.utils.setGlideImage
import h_mal.appttude.com.dialogs.ExitDialog.displayExitDialog
import h_mal.appttude.com.utils.isTrue
import h_mal.appttude.com.utils.setGlideImage
import h_mal.appttude.com.viewmodels.MainViewModel
abstract class DrawerActivity<V : BaseViewModel, VB : ViewBinding> : BaseActivity<V, VB>(),
class MainActivity : BaseActivity<MainViewModel, ActivityMainBinding>(),
NavigationView.OnNavigationItemSelectedListener { NavigationView.OnNavigationItemSelectedListener {
abstract val containerId: Int
abstract val drawerLayoutId: Int
abstract val toolbarId: Int
abstract val navViewId:Int
lateinit var navController: NavController lateinit var navController: NavController
lateinit var appBarConfiguration: AppBarConfiguration lateinit var appBarConfiguration: AppBarConfiguration
override fun setupView(binding: ActivityMainBinding) = binding.run { lateinit var toolbar: Toolbar
setSupportActionBar(appBarLayout.toolbar) lateinit var drawerLayout: DrawerLayout
lateinit var navView: NavigationView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
toolbar = findViewById(toolbarId)
drawerLayout = findViewById(drawerLayoutId)
navView = findViewById(navViewId)
setSupportActionBar(toolbar)
supportActionBar?.setDisplayShowTitleEnabled(false) supportActionBar?.setDisplayShowTitleEnabled(false)
navController = findNavController(R.id.container) navController = findNavController(containerId)
appBarConfiguration = AppBarConfiguration(navController.graph, drawerLayout) appBarConfiguration = AppBarConfiguration(navController.graph, drawerLayout)
navView.setupWithNavController(navController) navView.setupWithNavController(navController)
setupActionBarWithNavController(navController, appBarConfiguration) setupActionBarWithNavController(navController, appBarConfiguration)
viewModel.getUserDetails()
setupLogoutInDrawer()
} }
override fun onSupportNavigateUp(): Boolean { override fun onSupportNavigateUp(): Boolean {
@@ -45,10 +56,7 @@ class MainActivity : BaseActivity<MainViewModel, ActivityMainBinding>(),
} }
override fun setTitle(title: CharSequence) { override fun setTitle(title: CharSequence) {
applyBinding { toolbar.title = title
appBarLayout.toolbar.title = title
}
} }
override fun onBackPressed() { override fun onBackPressed() {
@@ -56,9 +64,9 @@ class MainActivity : BaseActivity<MainViewModel, ActivityMainBinding>(),
if (drawerLayout.isDrawerOpen(GravityCompat.START)) { if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
drawerLayout.closeDrawer(GravityCompat.START) drawerLayout.closeDrawer(GravityCompat.START)
} else { } else {
val navHostFragment = supportFragmentManager.findFragmentById(R.id.container) navController.backQueue.size.let { it >= 1 }.isTrue {
navHostFragment?.childFragmentManager?.backStackEntryCount?.let { it >= 1 }?.isTrue {
super.onBackPressed() super.onBackPressed()
return@applyBinding
} }
displayExitDialog() displayExitDialog()
} }
@@ -84,23 +92,8 @@ class MainActivity : BaseActivity<MainViewModel, ActivityMainBinding>(),
} }
} }
private fun setupLogoutInDrawer() {
applyBinding {
logout.setOnClickListener {
viewModel.logOut()
}
}
}
override fun onNavigationItemSelected(item: MenuItem): Boolean { override fun onNavigationItemSelected(item: MenuItem): Boolean {
// Handle navigation view item clicks here. drawerLayout.closeDrawer(GravityCompat.START)
when (item.itemId) {
R.id.nav_user_settings -> {}
}
applyBinding {
drawerLayout.closeDrawer(GravityCompat.START)
}
return true return true
} }
} }

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.data package h_mal.appttude.com.driver.data
import com.google.firebase.database.DataSnapshot import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError import com.google.firebase.database.DatabaseError

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.data package h_mal.appttude.com.driver.data
import android.net.Uri import android.net.Uri
import com.google.android.gms.tasks.Task import com.google.android.gms.tasks.Task

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.data package h_mal.appttude.com.driver.data
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import com.google.firebase.auth.FirebaseAuth import com.google.firebase.auth.FirebaseAuth

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.data package h_mal.appttude.com.driver.data
import android.net.Uri import android.net.Uri
import com.google.android.gms.tasks.Task import com.google.android.gms.tasks.Task

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.data package h_mal.appttude.com.driver.data
sealed class FirebaseCompletion { sealed class FirebaseCompletion {
object Default : FirebaseCompletion() object Default : FirebaseCompletion()

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.data package h_mal.appttude.com.driver.data
import com.google.firebase.database.DatabaseReference import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.FirebaseDatabase import com.google.firebase.database.FirebaseDatabase

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.data package h_mal.appttude.com.driver.data
import android.net.Uri import android.net.Uri
import com.google.firebase.storage.FirebaseStorage import com.google.firebase.storage.FirebaseStorage

View File

@@ -0,0 +1,4 @@
package h_mal.appttude.com.driver.data
const val DRIVER = "driver"
const val ADMIN = "super_user"

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.data package h_mal.appttude.com.driver.data
import com.google.firebase.auth.FirebaseUser import com.google.firebase.auth.FirebaseUser

View File

@@ -1,6 +1,6 @@
package h_mal.appttude.com.data package h_mal.appttude.com.driver.data
import h_mal.appttude.com.utils.Event import h_mal.appttude.com.driver.utils.Event
sealed class ViewState { sealed class ViewState {

View File

@@ -1,12 +1,12 @@
package h_mal.appttude.com.dialogs package h_mal.appttude.com.driver.dialogs
import android.app.DatePickerDialog import android.app.DatePickerDialog
import android.app.DatePickerDialog.OnDateSetListener import android.app.DatePickerDialog.OnDateSetListener
import android.icu.util.Calendar import android.icu.util.Calendar
import android.widget.EditText import android.widget.EditText
import h_mal.appttude.com.R import h_mal.appttude.com.driver.R
import h_mal.appttude.com.utils.DateUtils import h_mal.appttude.com.driver.utils.DateUtils
private const val DATE_FORMAT = "dd/MM/yyyy" private const val DATE_FORMAT = "dd/MM/yyyy"

View File

@@ -1,8 +1,8 @@
package h_mal.appttude.com.dialogs package h_mal.appttude.com.driver.dialogs
import android.app.Activity import android.app.Activity
import android.app.AlertDialog import android.app.AlertDialog
import h_mal.appttude.com.R import h_mal.appttude.com.driver.R
import kotlin.system.exitProcess import kotlin.system.exitProcess
object ExitDialog { object ExitDialog {

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.model package h_mal.appttude.com.driver.model
data class DriverProfile( data class DriverProfile(
var driverPic: String? = null, var driverPic: String? = null,

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.model package h_mal.appttude.com.driver.model
data class DriversLicense( data class DriversLicense(

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.model package h_mal.appttude.com.driver.model
data class Insurance( data class Insurance(
var photoStrings: MutableList<String?>? = null, var photoStrings: MutableList<String?>? = null,

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.model package h_mal.appttude.com.driver.model
data class Logbook( data class Logbook(

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.model package h_mal.appttude.com.driver.model
data class Mot( data class Mot(

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.model package h_mal.appttude.com.driver.model
data class PrivateHireLicense( data class PrivateHireLicense(

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.model package h_mal.appttude.com.driver.model
class PrivateHireVehicle( class PrivateHireVehicle(

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.model package h_mal.appttude.com.driver.model
data class VehicleProfile( data class VehicleProfile(

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectDictionaryState">
<dictionary name="h_mal" />
</component>
</project>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Kotlin2JsCompilerArguments">
<option name="sourceMapEmbedSources" />
</component>
</project>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CMakeSettings">
<configurations>
<configuration PROFILE_NAME="Debug" CONFIG_NAME="Debug" />
</configurations>
</component>
<component name="ProjectRootManager">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/ui.iml" filepath="$PROJECT_DIR$/ui.iml" />
</modules>
</component>
</project>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/../../../../../../../.." vcs="Git" />
</component>
</project>

View File

@@ -1,10 +1,10 @@
package h_mal.appttude.com.ui.update package h_mal.appttude.com.driver.ui.update
import h_mal.appttude.com.base.BaseFragment import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.databinding.FragmentDeleteProfileBinding import h_mal.appttude.com.driver.databinding.FragmentDeleteProfileBinding
import h_mal.appttude.com.utils.TextValidationUtils.validatePasswordEditText import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText
import h_mal.appttude.com.utils.setEnterPressedListener import h_mal.appttude.com.driver.utils.setEnterPressedListener
import h_mal.appttude.com.viewmodels.UpdateUserViewModel import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
class DeleteProfileFragment : class DeleteProfileFragment :

View File

@@ -0,0 +1,17 @@
package h_mal.appttude.com.driver.ui.update
import h_mal.appttude.com.driver.base.BaseActivity
import h_mal.appttude.com.driver.data.FirebaseCompletion
import h_mal.appttude.com.driver.databinding.UpdateActivityBinding
import h_mal.appttude.com.driver.utils.displayToast
import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
class UpdateActivity : BaseActivity<UpdateUserViewModel, UpdateActivityBinding>() {
override fun onSuccess(data: Any?) {
super.onSuccess(data)
when (data) {
is FirebaseCompletion.Changed -> displayToast(data.message)
}
}
}

View File

@@ -1,11 +1,11 @@
package h_mal.appttude.com.ui.update package h_mal.appttude.com.driver.ui.update
import h_mal.appttude.com.base.BaseFragment import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.databinding.FragmentUpdateEmailBinding import h_mal.appttude.com.driver.databinding.FragmentUpdateEmailBinding
import h_mal.appttude.com.utils.TextValidationUtils.validateEmailEditText import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText
import h_mal.appttude.com.utils.TextValidationUtils.validatePasswordEditText import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText
import h_mal.appttude.com.utils.setEnterPressedListener import h_mal.appttude.com.driver.utils.setEnterPressedListener
import h_mal.appttude.com.viewmodels.UpdateUserViewModel import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
class UpdateEmailFragment : BaseFragment<UpdateUserViewModel, FragmentUpdateEmailBinding>() { class UpdateEmailFragment : BaseFragment<UpdateUserViewModel, FragmentUpdateEmailBinding>() {

View File

@@ -1,11 +1,11 @@
package h_mal.appttude.com.ui.update package h_mal.appttude.com.driver.ui.update
import android.view.View import android.view.View
import h_mal.appttude.com.R import h_mal.appttude.com.driver.R
import h_mal.appttude.com.base.BaseFragment import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.databinding.UpdateOverviewFragmentBinding import h_mal.appttude.com.driver.databinding.UpdateOverviewFragmentBinding
import h_mal.appttude.com.utils.navigateTo import h_mal.appttude.com.driver.utils.navigateTo
import h_mal.appttude.com.viewmodels.UpdateUserViewModel import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
class UpdateOverviewFragment : BaseFragment<UpdateUserViewModel, UpdateOverviewFragmentBinding>(), class UpdateOverviewFragment : BaseFragment<UpdateUserViewModel, UpdateOverviewFragmentBinding>(),
View.OnClickListener { View.OnClickListener {

View File

@@ -1,11 +1,11 @@
package h_mal.appttude.com.ui.update package h_mal.appttude.com.driver.ui.update
import h_mal.appttude.com.base.BaseFragment import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.databinding.FragmentUpdatePasswordBinding import h_mal.appttude.com.driver.databinding.FragmentUpdatePasswordBinding
import h_mal.appttude.com.utils.TextValidationUtils.validateEmailEditText import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText
import h_mal.appttude.com.utils.TextValidationUtils.validatePasswordEditText import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText
import h_mal.appttude.com.utils.setEnterPressedListener import h_mal.appttude.com.driver.utils.setEnterPressedListener
import h_mal.appttude.com.viewmodels.UpdateUserViewModel import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
class UpdatePasswordFragment : BaseFragment<UpdateUserViewModel, FragmentUpdatePasswordBinding>() { class UpdatePasswordFragment : BaseFragment<UpdateUserViewModel, FragmentUpdatePasswordBinding>() {

View File

@@ -1,15 +1,15 @@
package h_mal.appttude.com.ui.update package h_mal.appttude.com.driver.ui.update
import android.Manifest.permission.READ_EXTERNAL_STORAGE import android.Manifest.permission.READ_EXTERNAL_STORAGE
import android.net.Uri import android.net.Uri
import androidx.core.widget.doAfterTextChanged import androidx.core.widget.doAfterTextChanged
import com.google.firebase.auth.FirebaseUser import com.google.firebase.auth.FirebaseUser
import h_mal.appttude.com.base.BaseFragment import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.databinding.FragmentUpdateProfileBinding import h_mal.appttude.com.driver.databinding.FragmentUpdateProfileBinding
import h_mal.appttude.com.utils.PermissionsUtils.askForPermissions import h_mal.appttude.com.driver.utils.PermissionsUtils.askForPermissions
import h_mal.appttude.com.utils.setEnterPressedListener import h_mal.appttude.com.driver.utils.setEnterPressedListener
import h_mal.appttude.com.utils.setGlideImage import h_mal.appttude.com.driver.utils.setGlideImage
import h_mal.appttude.com.viewmodels.UpdateUserViewModel import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
const val TAG_CONST = "non-user" const val TAG_CONST = "non-user"
private const val IMAGE_PERMISSION_RESULT = 402 private const val IMAGE_PERMISSION_RESULT = 402

View File

@@ -1,9 +1,9 @@
package h_mal.appttude.com.ui.user package h_mal.appttude.com.driver.ui.user
import h_mal.appttude.com.base.BaseFragment import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.databinding.FragmentForgotPasswordBinding import h_mal.appttude.com.driver.databinding.FragmentForgotPasswordBinding
import h_mal.appttude.com.utils.TextValidationUtils.validateEmailEditText import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText
import h_mal.appttude.com.viewmodels.UserViewModel import h_mal.appttude.com.driver.viewmodels.UserViewModel
class ForgotPasswordFragment : BaseFragment<UserViewModel, FragmentForgotPasswordBinding>() { class ForgotPasswordFragment : BaseFragment<UserViewModel, FragmentForgotPasswordBinding>() {

View File

@@ -1,13 +1,13 @@
package h_mal.appttude.com.ui.user package h_mal.appttude.com.driver.ui.user
import android.content.Intent import android.content.Intent
import com.google.firebase.auth.AuthResult import com.google.firebase.auth.AuthResult
import com.google.firebase.auth.FirebaseUser import com.google.firebase.auth.FirebaseUser
import h_mal.appttude.com.base.BaseActivity import h_mal.appttude.com.driver.base.BaseActivity
import h_mal.appttude.com.databinding.ActivityLoginBinding import h_mal.appttude.com.driver.databinding.ActivityLoginBinding
import h_mal.appttude.com.ui.MainActivity import h_mal.appttude.com.driver.ui.MainActivity
import h_mal.appttude.com.viewmodels.UserViewModel import h_mal.appttude.com.driver.viewmodels.UserViewModel
/** /**

View File

@@ -1,13 +1,13 @@
package h_mal.appttude.com.ui.user package h_mal.appttude.com.driver.ui.user
import h_mal.appttude.com.R import h_mal.appttude.com.driver.R
import h_mal.appttude.com.base.BaseFragment import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.databinding.FragmentLoginBinding import h_mal.appttude.com.driver.databinding.FragmentLoginBinding
import h_mal.appttude.com.utils.TextValidationUtils.validateEmailEditText import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText
import h_mal.appttude.com.utils.TextValidationUtils.validatePasswordEditText import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText
import h_mal.appttude.com.utils.navigateTo import h_mal.appttude.com.driver.utils.navigateTo
import h_mal.appttude.com.utils.setEnterPressedListener import h_mal.appttude.com.driver.utils.setEnterPressedListener
import h_mal.appttude.com.viewmodels.UserViewModel import h_mal.appttude.com.driver.viewmodels.UserViewModel
class LoginFragment : BaseFragment<UserViewModel, FragmentLoginBinding>() { class LoginFragment : BaseFragment<UserViewModel, FragmentLoginBinding>() {

View File

@@ -1,12 +1,12 @@
package h_mal.appttude.com.ui.user package h_mal.appttude.com.driver.ui.user
import h_mal.appttude.com.R import h_mal.appttude.com.driver.R
import h_mal.appttude.com.base.BaseFragment import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.databinding.FragmentRegisterBinding import h_mal.appttude.com.driver.databinding.FragmentRegisterBinding
import h_mal.appttude.com.utils.TextValidationUtils.validateEmailEditText import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText
import h_mal.appttude.com.utils.TextValidationUtils.validatePasswordEditText import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText
import h_mal.appttude.com.utils.setEnterPressedListener import h_mal.appttude.com.driver.utils.setEnterPressedListener
import h_mal.appttude.com.viewmodels.UserViewModel import h_mal.appttude.com.driver.viewmodels.UserViewModel
class RegisterFragment : class RegisterFragment :
BaseFragment<UserViewModel, FragmentRegisterBinding>() { BaseFragment<UserViewModel, FragmentRegisterBinding>() {

View File

@@ -1,13 +1,13 @@
package h_mal.appttude.com.ui.user package h_mal.appttude.com.driver.ui.user
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import h_mal.appttude.com.R import h_mal.appttude.com.driver.R
import h_mal.appttude.com.base.BaseFragment import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.data.FirebaseCompletion import h_mal.appttude.com.driver.data.FirebaseCompletion
import h_mal.appttude.com.databinding.SplashScreenBinding import h_mal.appttude.com.driver.databinding.SplashScreenBinding
import h_mal.appttude.com.utils.navigateTo import h_mal.appttude.com.driver.utils.navigateTo
import h_mal.appttude.com.viewmodels.UserViewModel import h_mal.appttude.com.driver.viewmodels.UserViewModel
class SplashScreenFragment : BaseFragment<UserViewModel, SplashScreenBinding>() { class SplashScreenFragment : BaseFragment<UserViewModel, SplashScreenBinding>() {

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.utils package h_mal.appttude.com.driver.utils
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.utils package h_mal.appttude.com.driver.utils
import android.view.View import android.view.View
import android.view.animation.Animation import android.view.animation.Animation

Some files were not shown because too many files have changed in this diff Show More