Circleci project setup (#7)

This commit is contained in:
2023-02-27 22:33:09 +00:00
committed by GitHub
parent 565c5fe90b
commit 24461b9444
206 changed files with 3145 additions and 4460 deletions

View File

@@ -1,50 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="h_mal.appttude.com.driver">
package="h_mal.appttude.com">
<!-- To auto-complete the email text field in the login form with the user's emails -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<application
android:name=".application.DriverApplication"
android:name="h_mal.appttude.com.application.DriverApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".update.UpdateActivity" />
<activity
android:name=".ui.user.LoginActivity"
android:label="@string/app_name"
android:theme="@style/Theme.Design.NoActionBar">
<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=".ui.driver.MainActivity"
android:configChanges="orientation|screenSize"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar" />
<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>
</manifest>

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.driver.Archive
package h_mal.appttude.com.Archive
import android.os.Bundle
import android.view.LayoutInflater
@@ -10,12 +10,11 @@ import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.ValueEventListener
import h_mal.appttude.com.driver.Global.FirebaseClass
import h_mal.appttude.com.driver.Objects.ArchiveObject
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.R
class ArchiveFragment : Fragment() {
var archive: ArchiveObject? = null
// var archive: ArchiveObject? = null
private var reference: DatabaseReference? = null
private var listView: ListView? = null
var archiveString: String? = null
@@ -27,18 +26,18 @@ class ArchiveFragment : Fragment() {
// )
// .child(FirebaseClass.ARCHIVE_FIREBASE)
archiveString = requireArguments().getString("archive")
var s: String = ""
when (archiveString) {
FirebaseClass.PRIVATE_HIRE_FIREBASE -> s = "Private Hire"
FirebaseClass.DRIVERS_LICENSE_FIREBASE -> s = "License"
FirebaseClass.VEHICLE_DETAILS_FIREBASE -> s = "Vehicle"
FirebaseClass.MOT_FIREBASE -> s = "M.O.T"
FirebaseClass.INSURANCE_FIREBASE -> s = "Insurance"
FirebaseClass.LOG_BOOK_FIREBASE -> s = "Logbook"
FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE -> s = "Private Hire Vehicle"
}
requireActivity().title = s + " Archive"
// archiveString = requireArguments().getString("archive")
// var s: String = ""
// when (archiveString) {
// FirebaseClass.PRIVATE_HIRE_FIREBASE -> s = "Private Hire"
// FirebaseClass.DRIVERS_LICENSE_FIREBASE -> s = "License"
// FirebaseClass.VEHICLE_DETAILS_FIREBASE -> s = "Vehicle"
// FirebaseClass.MOT_FIREBASE -> s = "M.O.T"
// FirebaseClass.INSURANCE_FIREBASE -> s = "Insurance"
// FirebaseClass.LOG_BOOK_FIREBASE -> s = "Logbook"
// FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE -> s = "Private Hire Vehicle"
// }
// requireActivity().title = s + " Archive"
}
override fun onCreateView(
@@ -52,12 +51,12 @@ class ArchiveFragment : Fragment() {
return view
}
var valueEventListener: ValueEventListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
archive = dataSnapshot.getValue(ArchiveObject::class.java)
listView!!.adapter = ArchiveObjectListAdapter(archive, requireContext(), archiveString)
}
override fun onCancelled(databaseError: DatabaseError) {}
}
// var valueEventListener: ValueEventListener = object : ValueEventListener {
// override fun onDataChange(dataSnapshot: DataSnapshot) {
// archive = dataSnapshot.getValue(ArchiveObject::class.java)
// listView!!.adapter = ArchiveObjectListAdapter(archive, requireContext(), archiveString)
// }
//
// override fun onCancelled(databaseError: DatabaseError) {}
// }
}

View File

@@ -0,0 +1,221 @@
package h_mal.appttude.com.Archive
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
//import h_mal.appttude.com.Global.FirebaseClass
//import h_mal.appttude.com.Global.ImageSwiperClass
//import h_mal.appttude.com.Objects.ArchiveObject
import h_mal.appttude.com.model.InsuranceObject
import h_mal.appttude.com.R
import h_mal.appttude.com.model.VehicleProfileObject
import h_mal.appttude.com.utils.DateUtils.convertDateStringDatePattern
import java.text.ParseException
class ArchiveObjectListAdapter(
// var archiveObject: ArchiveObject?,
var context: Context?,
var archiveString: String?
) : BaseAdapter() {
var size: Int = 0
lateinit var mKeys: Array<String>
private var dateArchivedText: TextView? = null
override fun getCount(): Int {
return size
}
override fun getItem(position: Int): Any? {
when (archiveString) {
// FirebaseClass.PRIVATE_HIRE_FIREBASE -> return archiveObject?.private_hire
// ?.get(mKeys[position])
// FirebaseClass.DRIVERS_LICENSE_FIREBASE -> return archiveObject?.driver_license
// ?.get(mKeys[position])
// FirebaseClass.VEHICLE_DETAILS_FIREBASE -> return archiveObject?.vehicle_details
// ?.get(mKeys[position])
// FirebaseClass.MOT_FIREBASE -> return archiveObject?.mot_details?.get(mKeys[position])
// FirebaseClass.INSURANCE_FIREBASE -> return archiveObject?.insurance_details?.get(
// mKeys[position]
// )
// FirebaseClass.LOG_BOOK_FIREBASE -> return archiveObject?.log_book
// ?.get(mKeys.get(position))
// FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE -> return archiveObject?.ph_car?.get(mKeys[position])
else -> return mKeys[position]
}
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getView(position: Int, convertView: View, parent: ViewGroup): View {
var listItemView: View = convertView
//
// if (listItemView == null) {
// if (((archiveString == FirebaseClass.PRIVATE_HIRE_FIREBASE) || (archiveString == FirebaseClass.DRIVERS_LICENSE_FIREBASE) || (archiveString == FirebaseClass.MOT_FIREBASE) || (archiveString == FirebaseClass.LOG_BOOK_FIREBASE) || (archiveString == FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE))) {
// listItemView = LayoutInflater.from(context).inflate(
// R.layout.archive_license_item, parent, false
// )
// val imageView: ImageView = listItemView.findViewById(R.id.image_archive)
// dateArchivedText = listItemView.findViewById(R.id.date_archived)
// val expiryHolder: LinearLayout = listItemView.findViewById(R.id.expiry_view)
// val fieldTwo: LinearLayout = listItemView.findViewById(R.id.field_two_view)
// val expiryText: TextView = listItemView.findViewById(R.id.exp_text)
// val fiewTwoLable: TextView = listItemView.findViewById(R.id.field_two)
// val fieldTwoText: TextView = listItemView.findViewById(R.id.field_two_text)
// when (archiveString) {
//// FirebaseClass.PRIVATE_HIRE_FIREBASE -> {
//// expiryHolder.visibility = View.VISIBLE
//// fieldTwo.visibility = View.VISIBLE
//// val privateHireObject: PrivateHireObject =
//// getItem(position) as PrivateHireObject
//// Picasso.get().load(privateHireObject.phImageString)
//// .placeholder(R.drawable.choice_img)
//// .into(imageView)
//// dateString(position)
//// expiryText.text = privateHireObject.phExpiry
//// fiewTwoLable.text = "Private Hire License No.:"
//// fieldTwoText.text = privateHireObject.phNumber
//// }
//// FirebaseClass.DRIVERS_LICENSE_FIREBASE -> {
//// expiryHolder.visibility = View.VISIBLE
//// fieldTwo.visibility = View.VISIBLE
//// val driversLicenseObject: DriversLicenseObject =
//// getItem(position) as DriversLicenseObject
//// Picasso.get().load(driversLicenseObject.licenseImageString)
//// .placeholder(R.drawable.choice_img)
//// .into(imageView)
//// dateString(position)
//// expiryText.text = driversLicenseObject.licenseExpiry
//// fiewTwoLable.text = "License No.:"
//// fieldTwoText.text = driversLicenseObject.licenseNumber
//// }
//// FirebaseClass.MOT_FIREBASE -> {
//// expiryHolder.visibility = View.VISIBLE
//// fieldTwo.visibility = View.GONE
//// val motObject: MotObject = getItem(position) as MotObject
//// Picasso.get().load(motObject.motImageString)
//// .placeholder(R.drawable.choice_img)
//// .into(imageView)
//// dateString(position)
//// expiryText.text = motObject.motExpiry
//// }
//// FirebaseClass.LOG_BOOK_FIREBASE -> {
//// expiryHolder.visibility = View.GONE
//// fieldTwo.visibility = View.VISIBLE
//// val logbookObject: LogbookObject = getItem(position) as LogbookObject
//// Picasso.get().load(logbookObject.photoString)
//// .into(MainActivity.loadImage(imageView))
//// dateString(position)
//// fiewTwoLable.text = "V5C No.:"
//// fieldTwoText.text = logbookObject.v5cnumber
//// }
//// FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE -> {
//// expiryHolder.visibility = View.VISIBLE
//// fieldTwo.visibility = View.VISIBLE
//// val privateHireVehicleObject: PrivateHireVehicleObject =
//// getItem(position) as PrivateHireVehicleObject
//// Picasso.get().load(privateHireVehicleObject.phCarImageString)
//// .into(MainActivity.loadImage(imageView))
//// dateString(position)
//// expiryText.text = privateHireVehicleObject.phCarExpiry
//// fiewTwoLable.text = "Private Hire Vehicle License No.:"
//// fieldTwoText.text = privateHireVehicleObject.phCarNumber
//// }
//// }
//// } else if ((archiveString == FirebaseClass.INSURANCE_FIREBASE)) {
//// listItemView = LayoutInflater.from(context).inflate(
//// R.layout.archive_insurance_item, parent, false
//// )
//// val holder: View = listItemView.findViewById(R.id.image_pager)
//// val swiperClass: ImageSwiperClass = ImageSwiperClass(context, holder)
//// // swiperClass.hideDelete();
//// listItemView.findViewById<View>(R.id.delete).visibility = View.GONE
//// // holder.findViewById(R.id.delete).setVisibility(View.INVISIBLE);
//// dateArchivedText = listItemView.findViewById(R.id.date_archived)
//// dateString(position)
//// val expiryText: TextView = listItemView.findViewById(R.id.exp_text)
//// val fieldTwoText: TextView = listItemView.findViewById(R.id.archive_insurer)
//// val insuranceObject: InsuranceObject = getItem(position) as InsuranceObject
////// swiperClass.reinstantiateList(insuranceObject.photoStrings)
//// expiryText.text = insuranceObject.expiryDate
//// fieldTwoText.text = insuranceObject.insurerName
//// } else if ((archiveString == FirebaseClass.VEHICLE_DETAILS_FIREBASE)) {
//// listItemView = LayoutInflater.from(context).inflate(
//// R.layout.archive_vehicle_item, parent, false
//// )
//// dateArchivedText = listItemView.findViewById(R.id.date_archived)
//// dateString(position)
//// val numberPlate: TextView = listItemView.findViewById(R.id.number_plate)
//// val keeperName: TextView = listItemView.findViewById(R.id.keeper_name)
//// val keeperAddress: TextView = listItemView.findViewById(R.id.keeper_address)
//// val carText: TextView = listItemView.findViewById(R.id.car_text_arch)
//// val carColour: TextView = listItemView.findViewById(R.id.car_colour)
//// val carSeized: TextView = listItemView.findViewById(R.id.seized_checkbox)
//// val startDate: TextView = listItemView.findViewById(R.id.first_date)
//// val vehicleProfileObject: VehicleProfileObject =
//// getItem(position) as VehicleProfileObject
//// numberPlate.text = vehicleProfileObject.reg
//// keeperName.text = vehicleProfileObject.keeperName
//// keeperAddress.text = vehicleProfileObject.keeperAddress + "\n" + vehicleProfileObject.keeperPostCode
//// carText.text = vehicleProfileObject.make + " " + vehicleProfileObject.model
//// carColour.text = vehicleProfileObject.colour
//// val s: String
//// if (vehicleProfileObject.isSeized) {
//// s = "Yes"
//// } else {
//// s = "No"
//// }
//// carSeized.text = s
//// startDate.text = vehicleProfileObject.startDate
//// }
//// }
return listItemView
}
private fun dateString(position: Int) {
var success: Boolean = true
try {
dateArchivedText!!.text = mKeys[position].convertDateStringDatePattern("yyyyMMdd_HHmmss", "dd/MM/yyyy")
} catch (e: ParseException) {
e.printStackTrace()
success = false
} finally {
if (!success) {
dateArchivedText!!.text = mKeys.get(position).substring(0, 8)
}
}
}
companion object {
private val TAG: String = "ArchiveObjectListAdapte"
}
// init {
// archiveObject?.apply {
// val map = when (archiveString) {
// FirebaseClass.PRIVATE_HIRE_FIREBASE -> private_hire
// FirebaseClass.DRIVERS_LICENSE_FIREBASE -> driver_license
// FirebaseClass.VEHICLE_DETAILS_FIREBASE -> vehicle_details
// FirebaseClass.MOT_FIREBASE -> mot_details
// FirebaseClass.INSURANCE_FIREBASE -> insurance_details
// FirebaseClass.LOG_BOOK_FIREBASE -> log_book
// FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE -> ph_car
// else -> null
// }
// setUp(map)
// }
//
// }
private fun setUp(map: HashMap<String,*>?){
size = map?.size ?: 0
map?.keys?.toTypedArray()?.let{
mKeys = it
}
}
}

View File

@@ -1,11 +1,11 @@
package h_mal.appttude.com.driver.application
package h_mal.appttude.com.application
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import h_mal.appttude.com.driver.data.FirebaseAuthSource
import h_mal.appttude.com.driver.data.FirebaseDatabaseSource
import h_mal.appttude.com.driver.data.FirebaseStorageSource
import h_mal.appttude.com.driver.viewmodels.*
import h_mal.appttude.com.data.FirebaseAuthSource
import h_mal.appttude.com.data.FirebaseDatabaseSource
import h_mal.appttude.com.data.FirebaseStorageSource
import h_mal.appttude.com.viewmodels.*
class ApplicationViewModelFactory(
private val auth: FirebaseAuthSource,
@@ -28,6 +28,7 @@ class ApplicationViewModelFactory(
isAssignableFrom(MotViewModel::class.java) -> MotViewModel(auth, database, storage)
isAssignableFrom(LogbookViewModel::class.java) -> LogbookViewModel(auth, database, storage)
isAssignableFrom(PrivateHireVehicleViewModel::class.java) -> PrivateHireVehicleViewModel(auth, database, storage)
isAssignableFrom(RoleViewModel::class.java) -> RoleViewModel(auth, database, storage)
else -> throw IllegalArgumentException("Unknown ViewModel class")
} as T
}

View File

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

View File

@@ -1,9 +1,8 @@
package h_mal.appttude.com.driver.base
package h_mal.appttude.com.base
import android.content.Intent
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import android.view.ViewGroup.LayoutParams
import android.view.ViewGroup.LayoutParams.*
import androidx.activity.viewModels
@@ -11,13 +10,14 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.application.ApplicationViewModelFactory
import h_mal.appttude.com.driver.data.ViewState
import h_mal.appttude.com.driver.utils.displayToast
import h_mal.appttude.com.driver.utils.hide
import h_mal.appttude.com.driver.utils.show
import h_mal.appttude.com.driver.utils.triggerAnimation
import h_mal.appttude.com.application.ApplicationViewModelFactory
import h_mal.appttude.com.R
import h_mal.appttude.com.data.ViewState
import h_mal.appttude.com.espresso.IdlingResourceClass
import h_mal.appttude.com.utils.displayToast
import h_mal.appttude.com.utils.hide
import h_mal.appttude.com.utils.show
import h_mal.appttude.com.utils.triggerAnimation
import org.kodein.di.KodeinAware
import org.kodein.di.android.kodein
import org.kodein.di.generic.instance
@@ -32,6 +32,7 @@ abstract class BaseActivity<V : BaseViewModel> : AppCompatActivity(), KodeinAwar
override val kodein by kodein()
val factory by instance<ApplicationViewModelFactory>()
private val idlingResource by instance<IdlingResourceClass>()
inline fun <reified VM : ViewModel> createLazyViewModel(): Lazy<VM> = viewModels { factory }
inline fun <reified VM : ViewModel> createViewModel(): VM =
@@ -56,7 +57,6 @@ abstract class BaseActivity<V : BaseViewModel> : AppCompatActivity(), KodeinAwar
loadingView = layoutInflater.inflate(R.layout.progress_layout, null)
loadingView.setOnClickListener(null)
addContentView(loadingView, LayoutParams(MATCH_PARENT, MATCH_PARENT))
loadingView.hide()
}
@@ -76,6 +76,7 @@ abstract class BaseActivity<V : BaseViewModel> : AppCompatActivity(), KodeinAwar
open fun onStarted() {
loadingView.fadeIn()
loading = true
IdlingResourceClass.increment()
}
/**
@@ -84,6 +85,7 @@ abstract class BaseActivity<V : BaseViewModel> : AppCompatActivity(), KodeinAwar
open fun onSuccess(data: Any?) {
loadingView.fadeOut()
loading = false
IdlingResourceClass.decrement()
}
/**
@@ -93,6 +95,7 @@ abstract class BaseActivity<V : BaseViewModel> : AppCompatActivity(), KodeinAwar
error?.let { displayToast(it) }
loadingView.fadeOut()
loading = false
IdlingResourceClass.decrement()
}
private fun configureObserver() {

View File

@@ -1,34 +1,32 @@
package h_mal.appttude.com.driver.base
package h_mal.appttude.com.base
import android.app.Activity
import android.content.ClipData
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.annotation.LayoutRes
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModel
import h_mal.appttude.com.driver.application.ApplicationViewModelFactory
import h_mal.appttude.com.driver.data.ViewState
import h_mal.appttude.com.driver.utils.PermissionsUtils
import h_mal.appttude.com.application.ApplicationViewModelFactory
import h_mal.appttude.com.data.ViewState
import h_mal.appttude.com.utils.PermissionsUtils
import org.kodein.di.KodeinAware
import org.kodein.di.android.x.kodein
import org.kodein.di.generic.instance
const val IMAGE_SELECT_REQUEST_CODE = 401
abstract class BaseFragment<V : BaseViewModel> : Fragment(), KodeinAware {
abstract class BaseFragment<V : BaseViewModel>(@LayoutRes contentLayoutId: Int) :
Fragment(contentLayoutId), KodeinAware {
var mActivity: BaseActivity<V>? = null
abstract fun getViewModel(): V
abstract fun getLayoutId(): Int
private var multipleImage: Boolean = false
fun setImageSelectionAsMultiple(){
fun setImageSelectionAsMultiple() {
multipleImage = true
}
@@ -37,12 +35,6 @@ abstract class BaseFragment<V : BaseViewModel> : Fragment(), KodeinAware {
inline fun <reified VM : ViewModel> getFragmentViewModel(): Lazy<VM> = viewModels { factory }
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? = inflater.inflate(getLayoutId(), container, false)
@Suppress("UNCHECKED_CAST")
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
@@ -72,22 +64,22 @@ abstract class BaseFragment<V : BaseViewModel> : Fragment(), KodeinAware {
}
private fun configureObserver() {
getViewModel().uiState.observe(viewLifecycleOwner, Observer {
getViewModel().uiState.observe(viewLifecycleOwner) {
when (it) {
is ViewState.HasStarted -> onStarted()
is ViewState.HasData<*> -> onSuccess(it.data.getContentIfNotHandled())
is ViewState.HasError -> onFailure(it.error.getContentIfNotHandled())
}
})
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == Activity.RESULT_OK){
when(requestCode){
if (resultCode == Activity.RESULT_OK) {
when (requestCode) {
IMAGE_SELECT_REQUEST_CODE -> {
data?.clipData?.convertToList()?.let { clip ->
val list = clip.takeIf { it.size > 10 }?.let{
val list = clip.takeIf { it.size > 10 }?.let {
clip.subList(0, 9)
} ?: clip
onImageGalleryResult(list)
@@ -100,15 +92,7 @@ abstract class BaseFragment<V : BaseViewModel> : Fragment(), KodeinAware {
}
}
private fun ClipData.convertToList(): List<Uri> {
val list = mutableListOf<Uri>()
for (i in 0 until itemCount) {
val item: ClipData.Item = getItemAt(i)
val uri = item.uri
list.add(uri)
}
return list.toList()
}
private fun ClipData.convertToList(): List<Uri> = 0.rangeTo(itemCount).map { getItemAt(it).uri }
/**
* Pair with {@link #Fragment.onRequestPermissionsResult}
@@ -121,7 +105,7 @@ abstract class BaseFragment<V : BaseViewModel> : Fragment(), KodeinAware {
fun onPermissionRequest(
requestCode: Int, ourRequestCode: Int, grantResults: IntArray,
permissionGranted: () -> Unit
){
) {
when (requestCode) {
ourRequestCode -> {
if (PermissionsUtils.isGranted(grantResults)) {
@@ -132,13 +116,20 @@ abstract class BaseFragment<V : BaseViewModel> : Fragment(), KodeinAware {
}
}
open fun onImageGalleryResult(imageUri: Uri?){ }
open fun onImageGalleryResult(imageUris: List<Uri>?){ }
/**
* Called on the result of image selection
*/
open fun onImageGalleryResult(imageUri: Uri?) {}
/**
* Called on the result of multiple image selection
*/
open fun onImageGalleryResult(imageUris: List<Uri>?) {}
fun openGalleryForImage() {
val intent = Intent(Intent.ACTION_PICK)
intent.type = "image/*"
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, multipleImage);
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, multipleImage)
startActivityForResult(intent, IMAGE_SELECT_REQUEST_CODE)
}

View File

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

View File

@@ -1,16 +1,21 @@
package h_mal.appttude.com.driver.base
package h_mal.appttude.com.base
import android.Manifest
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.View
import android.widget.EditText
import androidx.annotation.LayoutRes
import androidx.core.widget.doAfterTextChanged
import h_mal.appttude.com.driver.utils.PermissionsUtils.askForPermissions
import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEditText
import h_mal.appttude.com.data.UserAuthState
import h_mal.appttude.com.ui.user.LoginActivity
import h_mal.appttude.com.utils.PermissionsUtils.askForPermissions
import h_mal.appttude.com.utils.TextValidationUtils.validateEditText
private const val IMAGE_PERMISSION_RESULT = 402
abstract class DataSubmissionBaseFragment<V : DataSubmissionBaseViewModel<T>, T: Any> : BaseFragment<BaseViewModel>(){
abstract class DataSubmissionBaseFragment<V : DataSubmissionBaseViewModel<T>, T: Any>
(@LayoutRes contentLayoutId: Int) : BaseFragment<BaseViewModel>(contentLayoutId){
var picUri: Uri? = null
@@ -19,10 +24,17 @@ abstract class DataSubmissionBaseFragment<V : DataSubmissionBaseViewModel<T>, T:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
getViewModel().stateLiveData.observe(viewLifecycleOwner) {
if (it is UserAuthState.LoggedOut) {
val intent = Intent(requireContext(), LoginActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
requireActivity().finish()
}
}
getViewModel().getDataFromDatabase()
}
@Suppress("UNCHECKED_CAST")
override fun onSuccess(data: Any?) {
super.onSuccess(data)
@@ -37,9 +49,7 @@ abstract class DataSubmissionBaseFragment<V : DataSubmissionBaseViewModel<T>, T:
model = data
}
open fun submit(){
}
open fun submit(){}
fun openGalleryWithPermissionRequest(){
if (askForPermissions(Manifest.permission.READ_EXTERNAL_STORAGE, IMAGE_PERMISSION_RESULT)) {

View File

@@ -1,23 +1,25 @@
package h_mal.appttude.com.driver.base
package h_mal.appttude.com.base
import android.net.Uri
import androidx.lifecycle.MutableLiveData
import com.google.firebase.database.DatabaseReference
import com.google.firebase.storage.StorageReference
import h_mal.appttude.com.driver.data.FirebaseCompletion
import h_mal.appttude.com.driver.data.FirebaseDatabaseSource
import h_mal.appttude.com.driver.data.FirebaseStorageSource
import h_mal.appttude.com.driver.utils.Coroutines.io
import h_mal.appttude.com.driver.utils.DateUtils.getDateTimeStamp
import h_mal.appttude.com.driver.utils.getDataFromDatabaseRef
import h_mal.appttude.com.data.*
import h_mal.appttude.com.utils.Coroutines.io
import h_mal.appttude.com.utils.DateUtils.getDateTimeStamp
import h_mal.appttude.com.utils.getDataFromDatabaseRef
import kotlinx.coroutines.Job
import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope
import java.io.IOException
abstract class DataSubmissionBaseViewModel<T : Any>(
auth: FirebaseAuthentication,
private val database: FirebaseDatabaseSource,
private val storage: FirebaseStorageSource?
) : BaseViewModel() {
val stateLiveData = auth.userStateListener()
val uid: String = auth.getUid() ?: ""
abstract val databaseRef: DatabaseReference
abstract val storageRef: StorageReference?

View File

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

View File

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

View File

@@ -1,8 +1,9 @@
package h_mal.appttude.com.driver.data
package h_mal.appttude.com.data
import android.net.Uri
import com.google.android.gms.tasks.Task
import com.google.firebase.auth.*
import java.io.IOException
class FirebaseAuthSource: FirebaseAuthentication{
private val auth = FirebaseAuth.getInstance()
@@ -24,25 +25,32 @@ class FirebaseAuthSource: FirebaseAuthentication{
override fun updateProfile(
name: String?,
profilePic: Uri?
): Task<Void>? {
): Task<Void> {
val profileUpdates = UserProfileChangeRequest.Builder().apply {
name?.let { setDisplayName(it) }
profilePic?.let { setPhotoUri(it) }
}.build()
return getUser()?.updateProfile(profileUpdates)
return getCurrentUser().updateProfile(profileUpdates)
}
override fun reauthenticate(
email: String,
password: String
): Task<Void>? {
): Task<Void> {
val credential = EmailAuthProvider.getCredential(email, password)
return getUser()?.reauthenticate(credential)
return getCurrentUser().reauthenticate(credential)
}
override fun updateEmail(email: String): Task<Void>? = getUser()?.updateEmail(email)
override fun updatePassword(password: String): Task<Void>? = getUser()?.updatePassword(password)
override fun deleteProfile() = getUser()?.delete()
override fun updateEmail(email: String): Task<Void> = getCurrentUser().updateEmail(email)
override fun updatePassword(password: String): Task<Void> = getCurrentUser().updatePassword(password)
override fun deleteProfile(): Task<Void> = getCurrentUser().delete()
override fun userStateListener() : FirebaseLiveData {
return FirebaseLiveData(auth)
}
private fun getCurrentUser(): FirebaseUser{
return getUser() ?: throw IOException("User not signed in")
}
}

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.driver.data
package h_mal.appttude.com.data
import android.net.Uri
import com.google.android.gms.tasks.Task
@@ -15,12 +15,13 @@ interface FirebaseAuthentication{
fun updateProfile(
name: String?,
profilePic: Uri?
): Task<Void>?
): Task<Void>
fun reauthenticate(
email: String,
password: String
): Task<Void>?
fun updateEmail(email: String): Task<Void>?
fun updatePassword(password: String): Task<Void>?
fun deleteProfile(): Task<Void>?
): Task<Void>
fun updateEmail(email: String): Task<Void>
fun updatePassword(password: String): Task<Void>
fun deleteProfile(): Task<Void>
fun userStateListener() : FirebaseLiveData
}

View File

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

View File

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

View File

@@ -0,0 +1,28 @@
package h_mal.appttude.com.data
import androidx.lifecycle.LiveData
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.FirebaseUser
class FirebaseLiveData(
private val firebaseAuth: FirebaseAuth
): LiveData<UserAuthState>(){
override fun onActive() {
super.onActive()
firebaseAuth.addAuthStateListener(stateListener)
}
override fun onInactive() {
super.onInactive()
firebaseAuth.removeAuthStateListener(stateListener)
}
private val stateListener = FirebaseAuth.AuthStateListener { p0 ->
if (p0.currentUser == null) {
postValue(UserAuthState.LoggedOut)
} else {
postValue(UserAuthState.LoggedIn(p0.currentUser!!))
}
}
}

View File

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

View File

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

View File

@@ -0,0 +1,9 @@
package h_mal.appttude.com.data
import com.google.firebase.auth.FirebaseUser
import h_mal.appttude.com.utils.Event
sealed class UserAuthState {
object LoggedOut : UserAuthState()
class LoggedIn(val data: FirebaseUser) : UserAuthState()
}

View File

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

View File

@@ -1,30 +1,34 @@
package h_mal.appttude.com.driver.Global
package h_mal.appttude.com.dialogs
import android.app.AlertDialog
import android.app.DatePickerDialog
import android.app.DatePickerDialog.OnDateSetListener
import android.content.Context
import android.icu.util.Calendar
import android.os.Build
import android.view.View
import android.widget.EditText
import androidx.annotation.RequiresApi
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.utils.DateUtils
import h_mal.appttude.com.R
import h_mal.appttude.com.utils.DateUtils
private const val DATE_FORMAT = "dd/MM/yyyy"
@RequiresApi(api = Build.VERSION_CODES.N)
class DateDialog(
private val editText: EditText
private val editText: EditText,
dateSelected:(String?) -> Unit
) : DatePickerDialog(editText.context, AlertDialog.THEME_HOLO_LIGHT) {
var dateSetListener: OnDateSetListener =
private val dateSetListener: OnDateSetListener =
OnDateSetListener { _, year, month, dayOfMonth ->
val cal = Calendar.getInstance()
cal.set(year, month + 1, dayOfMonth)
editText.setText(DateUtils.parseCalenderIntoDateString(cal, DATE_FORMAT))
val date = DateUtils.parseCalenderIntoDateString(cal, DATE_FORMAT)
dateSelected(date)
editText.setText(date)
editText.error = null
}
init {

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.driver.dialogs
package h_mal.appttude.com.dialogs
import android.app.Activity
import android.app.AlertDialog
@@ -10,11 +10,11 @@ object ExitDialog{
fun Activity.displayExitDialog() = AlertDialog.Builder(this)
.setTitle("Leave?")
.setMessage("Are you sure you want to exit?")
.setNegativeButton(android.R.string.no, null)
.setNegativeButton(android.R.string.cancel, null)
.setPositiveButton(
android.R.string.yes
android.R.string.ok
) { _, _ ->
this.finish()
finish()
exitProcess(0)
}
.create()

View File

@@ -1,227 +0,0 @@
package h_mal.appttude.com.driver.Archive
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import com.squareup.picasso.Picasso
import h_mal.appttude.com.driver.Global.FirebaseClass
import h_mal.appttude.com.driver.Global.ImageSwiperClass
import h_mal.appttude.com.driver.ui.driver.MainActivity
import h_mal.appttude.com.driver.Objects.ArchiveObject
import h_mal.appttude.com.driver.Objects.InsuranceObject
import h_mal.appttude.com.driver.Objects.LogbookObject
import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.model.DriversLicenseObject
import h_mal.appttude.com.driver.model.MotObject
import h_mal.appttude.com.driver.model.PrivateHireObject
import h_mal.appttude.com.driver.model.VehicleProfileObject
import h_mal.appttude.com.driver.utils.DateUtils.convertDateStringDatePattern
import java.text.ParseException
class ArchiveObjectListAdapter(
var archiveObject: ArchiveObject?,
var context: Context?,
var archiveString: String?
) : BaseAdapter() {
var size: Int = 0
lateinit var mKeys: Array<String>
private var dateArchivedText: TextView? = null
override fun getCount(): Int {
return size
}
override fun getItem(position: Int): Any? {
when (archiveString) {
FirebaseClass.PRIVATE_HIRE_FIREBASE -> return archiveObject?.private_hire
?.get(mKeys[position])
FirebaseClass.DRIVERS_LICENSE_FIREBASE -> return archiveObject?.driver_license
?.get(mKeys[position])
FirebaseClass.VEHICLE_DETAILS_FIREBASE -> return archiveObject?.vehicle_details
?.get(mKeys[position])
FirebaseClass.MOT_FIREBASE -> return archiveObject?.mot_details?.get(mKeys[position])
FirebaseClass.INSURANCE_FIREBASE -> return archiveObject?.insurance_details?.get(
mKeys[position]
)
FirebaseClass.LOG_BOOK_FIREBASE -> return archiveObject?.log_book
?.get(mKeys.get(position))
FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE -> return archiveObject?.ph_car?.get(mKeys[position])
else -> return mKeys[position]
}
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getView(position: Int, convertView: View, parent: ViewGroup): View {
var listItemView: View = convertView
if (listItemView == null) {
if (((archiveString == FirebaseClass.PRIVATE_HIRE_FIREBASE) || (archiveString == FirebaseClass.DRIVERS_LICENSE_FIREBASE) || (archiveString == FirebaseClass.MOT_FIREBASE) || (archiveString == FirebaseClass.LOG_BOOK_FIREBASE) || (archiveString == FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE))) {
listItemView = LayoutInflater.from(context).inflate(
R.layout.archive_license_item, parent, false
)
val imageView: ImageView = listItemView.findViewById(R.id.image_archive)
dateArchivedText = listItemView.findViewById(R.id.date_archived)
val expiryHolder: LinearLayout = listItemView.findViewById(R.id.expiry_view)
val fieldTwo: LinearLayout = listItemView.findViewById(R.id.field_two_view)
val expiryText: TextView = listItemView.findViewById(R.id.exp_text)
val fiewTwoLable: TextView = listItemView.findViewById(R.id.field_two)
val fieldTwoText: TextView = listItemView.findViewById(R.id.field_two_text)
when (archiveString) {
// FirebaseClass.PRIVATE_HIRE_FIREBASE -> {
// expiryHolder.visibility = View.VISIBLE
// fieldTwo.visibility = View.VISIBLE
// val privateHireObject: PrivateHireObject =
// getItem(position) as PrivateHireObject
// Picasso.get().load(privateHireObject.phImageString)
// .placeholder(R.drawable.choice_img)
// .into(imageView)
// dateString(position)
// expiryText.text = privateHireObject.phExpiry
// fiewTwoLable.text = "Private Hire License No.:"
// fieldTwoText.text = privateHireObject.phNumber
// }
// FirebaseClass.DRIVERS_LICENSE_FIREBASE -> {
// expiryHolder.visibility = View.VISIBLE
// fieldTwo.visibility = View.VISIBLE
// val driversLicenseObject: DriversLicenseObject =
// getItem(position) as DriversLicenseObject
// Picasso.get().load(driversLicenseObject.licenseImageString)
// .placeholder(R.drawable.choice_img)
// .into(imageView)
// dateString(position)
// expiryText.text = driversLicenseObject.licenseExpiry
// fiewTwoLable.text = "License No.:"
// fieldTwoText.text = driversLicenseObject.licenseNumber
// }
// FirebaseClass.MOT_FIREBASE -> {
// expiryHolder.visibility = View.VISIBLE
// fieldTwo.visibility = View.GONE
// val motObject: MotObject = getItem(position) as MotObject
// Picasso.get().load(motObject.motImageString)
// .placeholder(R.drawable.choice_img)
// .into(imageView)
// dateString(position)
// expiryText.text = motObject.motExpiry
// }
// FirebaseClass.LOG_BOOK_FIREBASE -> {
// expiryHolder.visibility = View.GONE
// fieldTwo.visibility = View.VISIBLE
// val logbookObject: LogbookObject = getItem(position) as LogbookObject
// Picasso.get().load(logbookObject.photoString)
// .into(MainActivity.loadImage(imageView))
// dateString(position)
// fiewTwoLable.text = "V5C No.:"
// fieldTwoText.text = logbookObject.v5cnumber
// }
// FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE -> {
// expiryHolder.visibility = View.VISIBLE
// fieldTwo.visibility = View.VISIBLE
// val privateHireVehicleObject: PrivateHireVehicleObject =
// getItem(position) as PrivateHireVehicleObject
// Picasso.get().load(privateHireVehicleObject.phCarImageString)
// .into(MainActivity.loadImage(imageView))
// dateString(position)
// expiryText.text = privateHireVehicleObject.phCarExpiry
// fiewTwoLable.text = "Private Hire Vehicle License No.:"
// fieldTwoText.text = privateHireVehicleObject.phCarNumber
// }
}
} else if ((archiveString == FirebaseClass.INSURANCE_FIREBASE)) {
listItemView = LayoutInflater.from(context).inflate(
R.layout.archive_insurance_item, parent, false
)
val holder: View = listItemView.findViewById(R.id.image_pager)
val swiperClass: ImageSwiperClass = ImageSwiperClass(context, holder)
// swiperClass.hideDelete();
listItemView.findViewById<View>(R.id.delete).visibility = View.GONE
// holder.findViewById(R.id.delete).setVisibility(View.INVISIBLE);
dateArchivedText = listItemView.findViewById(R.id.date_archived)
dateString(position)
val expiryText: TextView = listItemView.findViewById(R.id.exp_text)
val fieldTwoText: TextView = listItemView.findViewById(R.id.archive_insurer)
val insuranceObject: InsuranceObject = getItem(position) as InsuranceObject
// swiperClass.reinstantiateList(insuranceObject.photoStrings)
expiryText.text = insuranceObject.expiryDate
fieldTwoText.text = insuranceObject.insurerName
} else if ((archiveString == FirebaseClass.VEHICLE_DETAILS_FIREBASE)) {
listItemView = LayoutInflater.from(context).inflate(
R.layout.archive_vehicle_item, parent, false
)
dateArchivedText = listItemView.findViewById(R.id.date_archived)
dateString(position)
val numberPlate: TextView = listItemView.findViewById(R.id.number_plate)
val keeperName: TextView = listItemView.findViewById(R.id.keeper_name)
val keeperAddress: TextView = listItemView.findViewById(R.id.keeper_address)
val carText: TextView = listItemView.findViewById(R.id.car_text_arch)
val carColour: TextView = listItemView.findViewById(R.id.car_colour)
val carSeized: TextView = listItemView.findViewById(R.id.seized_checkbox)
val startDate: TextView = listItemView.findViewById(R.id.first_date)
val vehicleProfileObject: VehicleProfileObject =
getItem(position) as VehicleProfileObject
numberPlate.text = vehicleProfileObject.reg
keeperName.text = vehicleProfileObject.keeperName
keeperAddress.text = vehicleProfileObject.keeperAddress + "\n" + vehicleProfileObject.keeperPostCode
carText.text = vehicleProfileObject.make + " " + vehicleProfileObject.model
carColour.text = vehicleProfileObject.colour
val s: String
if (vehicleProfileObject.isSeized) {
s = "Yes"
} else {
s = "No"
}
carSeized.text = s
startDate.text = vehicleProfileObject.startDate
}
}
return listItemView
}
private fun dateString(position: Int) {
var success: Boolean = true
try {
dateArchivedText!!.text = mKeys[position].convertDateStringDatePattern("yyyyMMdd_HHmmss", "dd/MM/yyyy")
} catch (e: ParseException) {
e.printStackTrace()
success = false
} finally {
if (!success) {
dateArchivedText!!.text = mKeys.get(position).substring(0, 8)
}
}
}
companion object {
private val TAG: String = "ArchiveObjectListAdapte"
}
init {
archiveObject?.apply {
val map = when (archiveString) {
FirebaseClass.PRIVATE_HIRE_FIREBASE -> private_hire
FirebaseClass.DRIVERS_LICENSE_FIREBASE -> driver_license
FirebaseClass.VEHICLE_DETAILS_FIREBASE -> vehicle_details
FirebaseClass.MOT_FIREBASE -> mot_details
FirebaseClass.INSURANCE_FIREBASE -> insurance_details
FirebaseClass.LOG_BOOK_FIREBASE -> log_book
FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE -> ph_car
else -> null
}
setUp(map)
}
}
private fun setUp(map: HashMap<String,*>?){
size = map?.size ?: 0
map?.keys?.toTypedArray()?.let{
mKeys = it
}
}
}

View File

@@ -1,87 +0,0 @@
package h_mal.appttude.com.driver.Global
import h_mal.appttude.com.driver.Objects.ApprovalsObject
import h_mal.appttude.com.driver.Objects.WholeDriverObject
import h_mal.appttude.com.driver.R
class ApprovalsClass {
fun getOverApprovalStatusCode(wholeDriverObject: WholeDriverObject?): Int {
if (wholeDriverObject!!.approvalsObject != null) {
val approvalsObject: ApprovalsObject = wholeDriverObject!!.approvalsObject!!
val ints: IntArray = intArrayOf(
approvalsObject.driver_details_approval,
approvalsObject.driver_license_approval,
approvalsObject.private_hire_approval,
approvalsObject.vehicle_details_approval,
approvalsObject.insurance_details_approval,
approvalsObject.mot_details_approval,
approvalsObject.log_book_approval,
approvalsObject.ph_car_approval
)
return setImageResource(mode(ints))
}
return setImageResource(FirebaseClass.NO_DATE_PRESENT)
}
fun setStatusCode(userId: String?, approvalNameString: String, status: Int) {
// if (!(approvalNameString == "")) {
// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE)
// .child((userId)!!).child(FirebaseClass.USER_APPROVALS)
// .child(approvalNameString)
// .setValue(status).addOnCompleteListener { task ->
// if (task.isSuccessful) {
// } else {
// }
// }
// }
}
fun setImageResource(statusCode: Int): Int {
val imageResource: Int
when (statusCode) {
FirebaseClass.APPROVAL_PENDING -> imageResource = R.drawable.pending
FirebaseClass.APPROVAL_DENIED -> imageResource = R.drawable.denied
FirebaseClass.APPROVED -> imageResource = R.drawable.approved
else -> imageResource = R.drawable.zero
}
return imageResource
}
companion object {
fun mode(array: IntArray): Int {
var mode: Int = array.get(0)
var maxCount: Int = 0
if (matchedArray(array, 3)) {
return 3
} else if (matchedArray(array, 0)) {
return 0
} else {
for (i in array.indices) {
val value: Int = array.get(i)
var count: Int = 1
for (j in array.indices) {
if (array.get(j) == value) count++
if (count > maxCount) {
mode = value
maxCount = count
}
}
}
if (mode == 3) {
return 1
}
}
return mode
}
private fun matchedArray(array: IntArray, match: Int): Boolean {
for (i: Int in array) {
if (i != match) {
return false
}
}
return true
}
}
}

View File

@@ -1,70 +0,0 @@
package h_mal.appttude.com.driver.Global
import android.app.AlertDialog
import android.content.Context
import android.os.Bundle
import androidx.fragment.app.Fragment
import h_mal.appttude.com.driver.utils.UPLOAD_NEW
class ArchiveClass {
fun archiveRecord(UID: String?, item: String?, `object`: Any?) {
// val toPath: DatabaseReference =
// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
// (UID)!!
// )
// .child(FirebaseClass.ARCHIVE_FIREBASE).child((item)!!)
// toPath.child(MainActivity.dateTimeStamp).setValue(`object`)
// .addOnCompleteListener { task ->
// if (task.isSuccessful) {
// Log.i(TAG, "onComplete: archive successful")
// } else {
// Log.i(TAG, "onComplete: archive unsuccessful")
// }
// }
}
fun openDialogArchive(context: Context?, `object`: Any?, fragment: Fragment) {
if (`object` == null) {
// executeFragment(fragment)
} else {
val builder: AlertDialog.Builder = AlertDialog.Builder(context)
builder.setMessage("Do you want to View/Edit or Upload new?")
.setPositiveButton("View/Edit"
) { _, _ ->
// executeFragment(fragment)
}
.setNegativeButton("Upload New"
) { _, _ ->
val bundle = Bundle()
bundle.putString(UPLOAD_NEW, "Yes")
fragment.arguments = bundle
// executeFragment(fragment)
}
.create().show()
}
}
fun openDialogArchive(context: Context?, `object`: Any?, user: String?, fragment: Fragment?) {
val bundle: Bundle = Bundle()
bundle.putString("user_id", user)
fragment!!.arguments = bundle
if (`object` == null) {
// executeFragment(fragment)
} else {
val builder: AlertDialog.Builder = AlertDialog.Builder(context)
builder.setMessage("Do you want to View/Edit or Upload new?")
.setPositiveButton("View/Edit"
) { _, _ ->
// executeFragment(fragment)
}
.setNegativeButton("Upload New"
) { _, _ ->
bundle.putString(UPLOAD_NEW, "Yes")
// executeFragment(fragment)
}
.create().show()
}
}
}

View File

@@ -1,71 +0,0 @@
package h_mal.appttude.com.driver.Global
import android.content.Context
import android.net.Uri
class FirebaseClass constructor(var context: Context?, var filePath: Uri?, var delegate: Response) {
open interface Response {
fun processFinish(output: Uri?)
}
fun uploadImage(path: String, name: String) {
// if (filePath != null) {
// val progressDialog: ProgressDialog = ProgressDialog(context)
// progressDialog.setTitle("Uploading...")
// progressDialog.show()
// val ref: StorageReference = MainActivity.storageReference!!.child(
// ("images/" + MainActivity.auth!!.currentUser!!
// .uid + "/" + path
// + "/" + name)
// )
// val uploadTask: UploadTask = ref.putFile(filePath!!)
// uploadTask.addOnProgressListener { taskSnapshot ->
// val progress: Double =
// (100.0 * taskSnapshot.bytesTransferred / taskSnapshot
// .totalByteCount)
// progressDialog.setMessage("Uploaded " + progress.toInt() + "%")
// }.continueWithTask { task ->
// if (!task.isSuccessful) {
// throw (task.exception)!!
// }
//
// // Continue with the task to get the download URL
// ref.downloadUrl
// }.addOnCompleteListener { task ->
// if (task.isSuccessful) {
// delegate.processFinish(task.result)
// progressDialog.dismiss()
// context?.displayToast("Uploaded Successfully")
// println("onComplete: uploaded Successful uri: " + task.result)
// } else {
// delegate.processFinish(null)
// progressDialog.dismiss()
// context?.displayToast("Uploaded Successfully")
// }
// }
// }
}
companion object {
val USER_FIREBASE: String = "user"
val DRIVER_FIREBASE: String = "driver_profile"
val DRIVER_DETAILS_FIREBASE: String = "driver_details"
val PRIVATE_HIRE_FIREBASE: String = "private_hire"
val DRIVERS_LICENSE_FIREBASE: String = "driver_license"
val DRIVER_STATUS: String = "driver_status"
val USER_APPROVALS: String = "approvalsObject"
val APPROVAL_CONSTANT: String = "_approval"
val ARCHIVE_FIREBASE: String = "archive"
val DRIVER_NUMBER: String = "driver_number"
val VEHICLE_FIREBASE: String = "vehicle_profile"
val MOT_FIREBASE: String = "mot_details"
val VEHICLE_DETAILS_FIREBASE: String = "vehicle_details"
val INSURANCE_FIREBASE: String = "insurance_details"
val LOG_BOOK_FIREBASE: String = "log_book"
val PRIVATE_HIRE_VEHICLE_LICENSE: String = "private_hire_vehicle"
val NO_DATE_PRESENT: Int = 0
val APPROVAL_PENDING: Int = 1
val APPROVAL_DENIED: Int = 2
val APPROVED: Int = 3
}
}

View File

@@ -1,129 +0,0 @@
package h_mal.appttude.com.driver.Global
import android.Manifest
import android.app.Dialog
import android.content.Context
import android.content.DialogInterface
import android.content.Intent
import android.content.pm.PackageManager
import android.icu.text.SimpleDateFormat
import android.net.Uri
import android.os.Bundle
import android.os.Environment
import android.provider.MediaStore
import android.widget.Button
import android.widget.Toast
import androidx.core.app.ActivityCompat
import androidx.core.content.FileProvider
import androidx.fragment.app.Fragment
import h_mal.appttude.com.driver.R
import java.io.File
import java.util.*
class ImageSelectorDialog : Dialog {
private val TAG: String = this.javaClass.simpleName
private var saveFileName: String
var fragment: Fragment? = null
constructor(context: Context) : super(context) {
saveFileName = "default_name"
}
constructor(context: Context, themeResId: Int) : super(context, themeResId) {
saveFileName = "default_name"
}
protected constructor(
context: Context,
cancelable: Boolean,
cancelListener: DialogInterface.OnCancelListener?
) : super(context, cancelable, cancelListener) {
saveFileName = "default_name"
}
override fun onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
setContentView(R.layout.address_dialog)
//check if we have we have storage rights
val permissionPic: Int = ActivityCompat.checkSelfPermission(
context,
Manifest.permission.WRITE_EXTERNAL_STORAGE
)
val permissionCam: Int =
ActivityCompat.checkSelfPermission(context, Manifest.permission.CAMERA)
// fragment = MainActivity.mainFragmentManager.fragments[0]
val upload: Button = findViewById(R.id.upload)
val takePic: Button = findViewById(R.id.take_pic)
upload.setOnClickListener {
if (permissionPic == PackageManager.PERMISSION_GRANTED) {
chooseImage()
} else {
Toast.makeText(context, "Storage permissions required", Toast.LENGTH_SHORT)
.show()
ActivityCompat.requestPermissions(
(fragment!!.requireActivity()),
arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),
STORAGE_PERMISSION_CODE
)
}
dismiss()
}
takePic.setOnClickListener {
if (permissionCam == PackageManager.PERMISSION_GRANTED) {
val cameraIntent: Intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
val file: File = createFile()
photoURI = Uri.fromFile(file)
val imageUri: Uri = FileProvider.getUriForFile(
context,
"h_mal.appttude.com.driver",
file
)
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri)
fragment!!.startActivityForResult(cameraIntent, CAMERA_REQUEST)
} else {
Toast.makeText(context, "Camera Permissions required", Toast.LENGTH_SHORT)
.show()
ActivityCompat.requestPermissions(
(fragment!!.requireActivity()), arrayOf(Manifest.permission.CAMERA),
MY_CAMERA_PERMISSION_CODE
)
}
dismiss()
}
}
fun setImageName(saveFileName: String) {
this.saveFileName = saveFileName
}
private fun createFile(): File {
//create directory
val root: File = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)
//create file
val sdf: SimpleDateFormat = SimpleDateFormat("yyyyMMdd_HHmm")
val currentDateandTime: String = sdf.format(Date())
val fname: String = saveFileName + currentDateandTime
val image: File = File(root, fname)
return image
}
private fun chooseImage() {
val intent: Intent = Intent()
intent.type = "image/*"
intent.action = Intent.ACTION_GET_CONTENT
fragment!!.startActivityForResult(
Intent.createChooser(intent, "Select Picture"),
PICK_IMAGE_REQUEST
)
}
companion object {
val PICK_IMAGE_REQUEST: Int = 71
val CAMERA_REQUEST: Int = 1888
val MY_CAMERA_PERMISSION_CODE: Int = 100
val STORAGE_PERMISSION_CODE: Int = 101
var photoURI: Uri? = null
}
}

View File

@@ -1,159 +0,0 @@
package h_mal.appttude.com.driver.Global
import android.Manifest
import android.app.Activity
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Bitmap
import android.net.Uri
import android.os.Environment
import android.provider.MediaStore
import android.view.View
import android.widget.ImageView
import android.widget.Toast
import androidx.core.app.ActivityCompat
import h_mal.appttude.com.driver.utils.DateUtils.getDateStamp
import h_mal.appttude.com.driver.utils.DateUtils.getDateTimeStamp
import java.io.File
import java.io.FileOutputStream
import java.io.IOException
class ImageSelectorResults // public FilepathResponse delegate;
{
lateinit var activity: Activity
interface FilepathResponse {
fun processFinish(output: Uri?)
}
fun Results(
activity: Activity, requestCode: Int, resultCode: Int, data: Intent?, filePath: Uri?,
imageView: ImageView?, delegate: FilepathResponse
) {
var filePath: Uri? = filePath
this.activity = activity
if ((requestCode == ImageSelectorDialog.PICK_IMAGE_REQUEST) && (resultCode == Activity.RESULT_OK
) && (data != null) && (data.data != null)
) {
val uri = data.data
var bitmap: Bitmap? = null
try {
bitmap =
MediaStore.Images.Media.getBitmap(activity.contentResolver, uri)
if (imageView!!.visibility != View.VISIBLE) {
imageView.visibility = View.VISIBLE
}
imageView.setImageBitmap(bitmap)
} catch (e: IOException) {
e.printStackTrace()
} finally {
if (bitmap != null) {
delegate.processFinish(uri)
}
}
}
if (requestCode == ImageSelectorDialog.CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {
//check if we have we have storage rights
val permission: Int = ActivityCompat.checkSelfPermission(
(activity)!!,
Manifest.permission.WRITE_EXTERNAL_STORAGE
)
if (permission != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(activity, "Storage permissions not granted", Toast.LENGTH_SHORT)
.show()
return
} else {
try {
val f: File =
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
val fname: String = "driver" + getDateStamp() + ".jpg"
val image = File(f, fname)
val fileOutputStream = FileOutputStream(image)
filePath = ImageSelectorDialog.photoURI
val bitmap: Bitmap = MediaStore.Images.Media
.getBitmap(
activity.contentResolver,
ImageSelectorDialog.photoURI
)
imageView!!.setImageBitmap(bitmap)
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fileOutputStream)
fileOutputStream.flush()
fileOutputStream.close()
galleryAddPic()
} catch (e: Exception) {
e.printStackTrace()
}
}
delegate.processFinish(filePath)
}
}
fun Results(
activity: Activity,
requestCode: Int,
resultCode: Int,
data: Intent?,
filePath: Uri?,
delegate: FilepathResponse
) {
var filePath: Uri? = filePath
this.activity = activity
if ((requestCode == ImageSelectorDialog.PICK_IMAGE_REQUEST) && (resultCode == Activity.RESULT_OK
) && (data != null) && (data.data != null)
) {
filePath = data.data
var bitmap: Bitmap? = null
try {
bitmap =
MediaStore.Images.Media.getBitmap(activity.contentResolver, filePath)
} catch (e: IOException) {
e.printStackTrace()
} finally {
if (bitmap != null) {
delegate.processFinish(filePath)
}
}
}
if (requestCode == ImageSelectorDialog.CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {
//check if we have we have storage rights
val permission: Int = ActivityCompat.checkSelfPermission(
(activity),
Manifest.permission.WRITE_EXTERNAL_STORAGE
)
if (permission != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(activity, "Storage permissions not granted", Toast.LENGTH_SHORT)
.show()
return
} else {
try {
val f: File =
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
val fname: String = "driver" + getDateTimeStamp() + ".jpg"
val image: File = File(f, fname)
val fileOutputStream: FileOutputStream = FileOutputStream(image)
filePath = ImageSelectorDialog.photoURI
val bitmap: Bitmap = MediaStore.Images.Media
.getBitmap(
activity.contentResolver,
ImageSelectorDialog.photoURI
)
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fileOutputStream)
fileOutputStream.flush()
fileOutputStream.close()
galleryAddPic()
} catch (e: Exception) {
e.printStackTrace()
}
}
delegate.processFinish(filePath)
}
}
private fun galleryAddPic() {
val mediaScanIntent: Intent = Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE)
val f: File = File(ImageSelectorDialog.photoURI!!.path)
val contentUri: Uri = Uri.fromFile(f)
mediaScanIntent.data = contentUri
activity.sendBroadcast(mediaScanIntent)
}
}

View File

@@ -1,159 +0,0 @@
package h_mal.appttude.com.driver.Global
import android.content.Context
import android.content.ContextWrapper
import android.view.View
import android.widget.ImageView
import h_mal.appttude.com.driver.R
class ImageSwiperClass(
private val context: Context?,
wholeView: View
) : ContextWrapper(context) {
private var left: ImageView = wholeView.findViewById(R.id.left)
private var right: ImageView = wholeView.findViewById(R.id.right)
var list: List<Any>? = null
// fun addLocalString(uris: List<Uri>) {
// list = uris
// }
//
// fun addFirebaseStrings(uris: List<String>) {
// list = uris
// }
//
// private var adapter: SlidingImageViewAdapter? = null
// lateinit var viewPager: ViewPager
//
//
// fun reinstantiateList(imageStrings: MutableList<String?>?) {
// this.imageStrings = imageStrings
// adapter = SlidingImageViewAdapter()
// viewPager.adapter = adapter
// setArrows()
// }
//
// fun hideDelete() {
// delete.hide()
// }
//
// private val leftClick: View.OnClickListener = View.OnClickListener {
// viewPager.currentItem = viewPager.currentItem - 1
// setArrows()
// }
// private val rightClick: View.OnClickListener = View.OnClickListener {
// viewPager.currentItem = viewPager.currentItem + 1
// setArrows()
// }
//
// private fun deleteDialog(position: Int) {
// val builder: AlertDialog.Builder = AlertDialog.Builder(context)
// builder.setMessage("Are you sure you want to delete?")
// .setPositiveButton(
// android.R.string.ok
// ) { _, _ ->
// imageStrings!!.removeAt(position)
// viewPager.adapter = adapter
// // adapter.notifyDataSetChanged();
// }
// .setNegativeButton(android.R.string.cancel, null)
// .create()
// .show()
// }
//
// private fun setArrows() {
// with(list) {
// when (list) {
// isNullOrEmpty() -> { }
// isNotEmpty() -> { }
//
// }
// }
//
// if (list?.isNotEmpty()) {
// //left arrow
// if (viewPager.currentItem > 0) {
// setAnimation(left, true)
// } else {
// setAnimation(left, false)
// }
//
// //right
// if (viewPager.currentItem == imageStrings!!.size - 1) {
// setAnimation(right, false)
// } else {
// setAnimation(right, true)
// }
// }
// if (imageStrings == null) {
// setAnimation(left, false)
// setAnimation(right, false)
// }
// }
//
// private fun setAnimation(view: ImageView, up: Boolean) {
// val start: Float
// val finish: Float
// if (up) {
// start = 0.2f
// finish = 1.0f
// } else {
// start = 1.0f
// finish = 0.2f
// }
// val animation1 = AlphaAnimation(start, finish)
// animation1.duration = 500
// animation1.fillAfter = true
// view.alpha = finish
// }
//
// internal inner class SlidingImageViewAdapter : PagerAdapter() {
//
// override fun getCount(): Int = list?.size ?: 0
//
// override fun destroyItem(container: ViewGroup, position: Int, item: Any) {
// container.removeView(item as View?)
// }
//
// override fun isViewFromObject(view: View, o: Any): Boolean = view == o
//
// override fun instantiateItem(container: ViewGroup, position: Int): Any {
// val pagerPic: View =
// LayoutInflater.from(context).inflate(R.layout.insurance_item, container, false)
// setArrows()
// if (imageStrings != null && imageStrings!!.size > 0) {
// mainImage = pagerPic.rootView.findViewById(R.id.main_image)
// Picasso.get().load(imageStrings!!.get(position))
// .placeholder(R.drawable.choice_img)
// .into(MainActivity.loadImage(mainImage))
// }
// container.addView(pagerPic, 0)
// return pagerPic
// }
// }
//
//
// init {
// left.setOnClickListener(leftClick)
// right.setOnClickListener(rightClick)
// viewPager = wholeView.findViewById(R.id.view_pager)
// delete = wholeView.findViewById(R.id.delete)
// viewPager.addOnPageChangeListener(object : OnPageChangeListener {
// override fun onPageScrolled(i: Int, v: Float, i1: Int) {
// val animation1: AlphaAnimation = AlphaAnimation(0.2f, 1.0f)
// animation1.duration = 200
// animation1.fillAfter = true
// delete.startAnimation(animation1)
// }
//
// override fun onPageSelected(i: Int) {
// setArrows()
// delete.setOnClickListener { deleteDialog(i) }
// }
//
// override fun onPageScrollStateChanged(i: Int) {}
// })
// }
}

View File

@@ -1,97 +0,0 @@
package h_mal.appttude.com.driver.Global
import android.content.Intent
import android.graphics.Bitmap
import android.net.Uri
import android.os.Bundle
import android.os.Environment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import com.github.chrisbanes.photoview.PhotoView
import com.google.android.material.floatingactionbutton.FloatingActionButton
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.utils.DateUtils
import java.io.File
import java.io.FileNotFoundException
import java.io.FileOutputStream
import java.io.IOException
class ImageViewClass {
fun open(bitmap: Bitmap?) {
Companion.bitmap = bitmap
// executeFragment(ImageViewerFragment())
}
class ImageViewerFragment : Fragment() {
private lateinit var viewer: View
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
viewer = inflater.inflate(R.layout.fragment_image_viewer, container, false)
val fab: FloatingActionButton = viewer.findViewById(R.id.download_pic)
if (bitmap != null) {
val photoView: PhotoView = viewer.findViewById(R.id.photo_view)
photoView.setImageBitmap(bitmap)
fab.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
try {
downloadPic()
} catch (e: FileNotFoundException) {
e.printStackTrace()
}
}
})
}
return viewer
}
override fun onResume() {
super.onResume()
(activity as AppCompatActivity?)!!.supportActionBar!!.hide()
requireActivity().window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
}
override fun onStop() {
super.onStop()
(activity as AppCompatActivity?)!!.supportActionBar!!.show()
requireActivity().window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
}
@Throws(FileNotFoundException::class)
private fun downloadPic() {
val f: File =
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
val fname: String = "driver" + DateUtils.getDateTimeStamp() + ".jpg"
val image: File = File(f, fname)
val fileOutputStream: FileOutputStream = FileOutputStream(image)
bitmap!!.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream)
try {
fileOutputStream.flush()
fileOutputStream.close()
val mediaScanIntent: Intent = Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE)
val contentUri: Uri = Uri.fromFile(image)
mediaScanIntent.data = contentUri
requireActivity().sendBroadcast(mediaScanIntent)
} catch (e: IOException) {
e.printStackTrace()
}
}
}
companion object {
val IMAGE_VALUE: String = "image"
private var bitmap: Bitmap? = null
}
}

View File

@@ -1,115 +0,0 @@
package h_mal.appttude.com.driver.Global
import android.app.Activity
import android.app.AlertDialog
import android.content.DialogInterface
import android.widget.ImageView
class SetApprovalDialog constructor(
var statusCode: Int,
private val activity: Activity,
private val userId: String?,
position: Int,
private val imageView: ImageView
) {
private val groupNames: Array<String> = arrayOf("Pending", "Denied", "Approved")
private val approvalNameString: String
fun init() {
val checkedItem: Int
when (statusCode) {
FirebaseClass.APPROVAL_PENDING -> checkedItem = 0
FirebaseClass.APPROVAL_DENIED -> checkedItem = 1
FirebaseClass.APPROVED -> checkedItem = 2
else -> checkedItem = -1
}
val alertBuilder: AlertDialog.Builder = AlertDialog.Builder(
activity
)
alertBuilder.setSingleChoiceItems(groupNames, checkedItem, singleChoiceListener)
// .setPositiveButton(android.R.string.ok, submit);
alertBuilder.create().ownerActivity
alertBuilder.show()
}
var singleChoiceListener: DialogInterface.OnClickListener =
object : DialogInterface.OnClickListener {
override fun onClick(dialog: DialogInterface, which: Int) {
when (which) {
0 -> {
statusCode = FirebaseClass.APPROVAL_PENDING
publishStatuscode(statusCode, dialog)
return
}
1 -> {
statusCode = FirebaseClass.APPROVAL_DENIED
publishStatuscode(statusCode, dialog)
return
}
2 -> {
statusCode = FirebaseClass.APPROVED
publishStatuscode(statusCode, dialog)
return
}
}
}
}
private fun publishStatuscode(status: Int, dialog: DialogInterface) {
// if (!(approvalNameString == "")) {
// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
// (userId)!!
// ).child(FirebaseClass.USER_APPROVALS).child(approvalNameString)
// .setValue(status).addOnCompleteListener { task ->
// if (task.isSuccessful) {
// Toast.makeText(activity, "Status change successful", Toast.LENGTH_SHORT)
// .show()
// imageView.setImageResource(
// MainActivity.approvalsClass!!.setImageResource(
// status
// )
// )
// dialog.dismiss()
// } else {
// Toast.makeText(
// activity,
// "Status change unsuccessful",
// Toast.LENGTH_SHORT
// ).show()
// }
//
// }
// } else {
// Toast.makeText(activity, "Could not push status", Toast.LENGTH_SHORT).show()
// }
}
private fun getElement(i: Int): String {
var element: String = ""
when (i) {
0 -> element =
FirebaseClass.DRIVER_DETAILS_FIREBASE + FirebaseClass.APPROVAL_CONSTANT
1 -> element =
FirebaseClass.DRIVERS_LICENSE_FIREBASE + FirebaseClass.APPROVAL_CONSTANT
2 -> element =
FirebaseClass.PRIVATE_HIRE_FIREBASE + FirebaseClass.APPROVAL_CONSTANT
3 -> element =
FirebaseClass.VEHICLE_DETAILS_FIREBASE + FirebaseClass.APPROVAL_CONSTANT
4 -> element =
FirebaseClass.INSURANCE_FIREBASE + FirebaseClass.APPROVAL_CONSTANT
5 -> element =
FirebaseClass.MOT_FIREBASE + FirebaseClass.APPROVAL_CONSTANT
6 -> element =
FirebaseClass.LOG_BOOK_FIREBASE + FirebaseClass.APPROVAL_CONSTANT
7 -> element =
FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE + FirebaseClass.APPROVAL_CONSTANT
}
return element
}
init {
approvalNameString = getElement(position)
init()
}
}

View File

@@ -1,35 +0,0 @@
package h_mal.appttude.com.driver.Objects
class ApprovalsObject {
var driver_details_approval: Int = 0
var driver_license_approval: Int = 0
var private_hire_approval: Int = 0
var vehicle_details_approval: Int = 0
var mot_details_approval: Int = 0
var insurance_details_approval: Int = 0
var log_book_approval: Int = 0
var ph_car_approval: Int = 0
constructor()
constructor(
driver_details_approval: Int,
driver_license_approval: Int,
private_hire_approval: Int,
vehicle_details_approval: Int,
mot_details_approval: Int,
insurance_details_approval: Int,
log_book_approval: Int,
private_hire_vehicle_approval: Int
) {
this.driver_details_approval = driver_details_approval
this.driver_license_approval = driver_license_approval
this.private_hire_approval = private_hire_approval
this.vehicle_details_approval = vehicle_details_approval
this.mot_details_approval = mot_details_approval
this.insurance_details_approval = insurance_details_approval
this.log_book_approval = log_book_approval
ph_car_approval = private_hire_vehicle_approval
}
}

View File

@@ -1,36 +0,0 @@
package h_mal.appttude.com.driver.Objects
import h_mal.appttude.com.driver.model.DriversLicenseObject
import h_mal.appttude.com.driver.model.MotObject
import h_mal.appttude.com.driver.model.PrivateHireObject
import h_mal.appttude.com.driver.model.VehicleProfileObject
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,15 +0,0 @@
package h_mal.appttude.com.driver.Objects
class LogbookObject {
var photoString: String? = null
var v5cnumber: String? = null
constructor(photoString: String?, v5cnumber: String?) {
this.photoString = photoString
this.v5cnumber = v5cnumber
}
constructor()
}

View File

@@ -1,16 +0,0 @@
package h_mal.appttude.com.driver.Objects
class UserObject {
var profileName: String? = null
var profileEmail: String? = null
var profilePicString: String? = null
constructor()
constructor(profileName: String?, profileEmail: String?, profilePicString: String?) {
this.profileName = profileName
this.profileEmail = profileEmail
this.profilePicString = profilePicString
}
}

View File

@@ -1,35 +0,0 @@
package h_mal.appttude.com.driver.Objects
import h_mal.appttude.com.driver.Objects.WholeObject.DriverProfile
import h_mal.appttude.com.driver.Objects.WholeObject.VehicleProfile
class WholeDriverObject {
var driver_profile: DriverProfile? = null
var role: String? = null
var archive: ArchiveObject? = null
var user_details: UserObject? = null
var vehicle_profile: VehicleProfile? = null
var approvalsObject: ApprovalsObject? = null
var driver_number: String? = null
constructor(
driver_profile: DriverProfile?,
role: String?,
archive: ArchiveObject?,
user_details: UserObject?,
vehicle_profile: VehicleProfile?,
approvalsObject: ApprovalsObject?,
driver_number: String?
) {
this.driver_profile = driver_profile
this.role = role
this.archive = archive
this.user_details = user_details
this.vehicle_profile = vehicle_profile
this.approvalsObject = approvalsObject
this.driver_number = driver_number
}
constructor()
}

View File

@@ -1,24 +0,0 @@
package h_mal.appttude.com.driver.Objects.WholeObject
import h_mal.appttude.com.driver.model.DriverProfileObject
import h_mal.appttude.com.driver.model.DriversLicenseObject
import h_mal.appttude.com.driver.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,41 +0,0 @@
package h_mal.appttude.com.driver.Objects.WholeObject
import android.os.Parcel
import android.os.Parcelable
import h_mal.appttude.com.driver.Objects.WholeDriverObject
class MappedObject : Parcelable {
var userId: String? = null
var wholeDriverObject: WholeDriverObject? = null
constructor(userId: String?, wholeDriverObject: WholeDriverObject?) {
this.userId = userId
this.wholeDriverObject = wholeDriverObject
}
constructor()
protected constructor(`in`: Parcel) {
userId = `in`.readString()
}
override fun describeContents(): Int {
return 0
}
override fun writeToParcel(dest: Parcel, flags: Int) {
dest.writeString(userId)
}
companion object {
val CREATOR: Parcelable.Creator<MappedObject?> = object : Parcelable.Creator<MappedObject?> {
override fun createFromParcel(`in`: Parcel): MappedObject? {
return MappedObject(`in`)
}
override fun newArray(size: Int): Array<MappedObject?> {
return arrayOfNulls(size)
}
}
}
}

View File

@@ -1,38 +0,0 @@
package h_mal.appttude.com.driver.Objects.WholeObject
import h_mal.appttude.com.driver.Objects.InsuranceObject
import h_mal.appttude.com.driver.Objects.LogbookObject
import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject
import h_mal.appttude.com.driver.model.MotObject
import h_mal.appttude.com.driver.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,205 +0,0 @@
package h_mal.appttude.com.driver.SuperUser
import android.app.Activity
import android.content.Context
import android.util.DisplayMetrics
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.ImageView
import android.widget.TextView
import androidx.fragment.app.Fragment
import h_mal.appttude.com.driver.Global.FirebaseClass
import h_mal.appttude.com.driver.Global.SetApprovalDialog
import h_mal.appttude.com.driver.ui.driver.MainActivity
import h_mal.appttude.com.driver.Objects.ArchiveObject
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.ui.driver.vehicleprofile.InsuranceFragment
import h_mal.appttude.com.driver.ui.driver.driverprofile.DriverLicenseFragment
import h_mal.appttude.com.driver.ui.driver.driverprofile.DriverProfileFragment
import h_mal.appttude.com.driver.ui.driver.driverprofile.PrivateHireLicenseFragment
import h_mal.appttude.com.driver.ui.driver.vehicleprofile.LogbookFragment
import h_mal.appttude.com.driver.ui.driver.vehicleprofile.MotFragment
import h_mal.appttude.com.driver.ui.driver.vehicleprofile.PrivateHireVehicleFragment
import h_mal.appttude.com.driver.ui.driver.vehicleprofile.VehicleProfileFragment
class ApprovalListAdapter(
val activity: Activity,
objects: Array<MappedObject>
): ArrayAdapter<MappedObject?>(activity, 0, objects) {
var mappedObject: MappedObject = objects[0]
var names: Array<String> = arrayOf(
"Driver Profile",
"Driver License",
"Private Hire",
"Vehicle Profile",
"Insurance",
"MOT",
"Logbook",
"P/H Vehicle"
)
var approvalCode: Int = 0
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
var listItemView: View? = convertView
if (listItemView == null) {
listItemView = LayoutInflater.from(activity).inflate(
R.layout.approval_list_grid_item, parent, false
)
}
// approvalCode = getApprovalStatusCode(position)
// val textView: TextView = listItemView!!.findViewById(R.id.approval_text)
// textView.text = names.get(position)
// val imageView: ImageView = listItemView.findViewById(R.id.approval_iv)
// imageView.setImageResource(
// MainActivity.approvalsClass!!.setImageResource(
// approvalCode
// )
// )
// imageView.setOnClickListener {
// SetApprovalDialog(
// approvalCode,
// activity,
// mappedObject.userId,
// position,
// imageView
// )
// }
// val archiveImage: ImageView = listItemView.findViewById(R.id.archive_icon)
// mappedObject.wholeDriverObject?.archive?.let {
//
//
// archiveImage.visibility = getArchive(
// position,
// it
// )
// archiveImage.setOnClickListener {
// var s: String? = null
// when (position) {
// 1 -> s = FirebaseClass.DRIVERS_LICENSE_FIREBASE
// 2 -> s = FirebaseClass.PRIVATE_HIRE_FIREBASE
// 3 -> s = FirebaseClass.VEHICLE_DETAILS_FIREBASE
// 4 -> s = FirebaseClass.INSURANCE_FIREBASE
// 5 -> s = FirebaseClass.MOT_FIREBASE
// 6 -> s = FirebaseClass.LOG_BOOK_FIREBASE
// 7 -> s = FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE
// }
//// executeFragment(ArchiveFragment(), mappedObject.userId, s)
// }
// }
// listItemView.setOnClickListener(View.OnClickListener { getFragment(position) })
// listItemView.minimumHeight = parent.height / 4
// listItemView.setPadding(
// convertDpToPixel(9f, context).toInt(),
// convertDpToPixel(9f, context).toInt(),
// convertDpToPixel(9f, context).toInt(),
// convertDpToPixel(9f, context).toInt()
// )
return (listItemView)!!
}
// override fun getCount(): Int {
// return 8
// }
//
// private fun getArchive(i: Int, archiveObject: ArchiveObject?): Int {
// var o: Any? = null
// val visible: Int
// when (i) {
// 0 -> { }
// 1 -> o = archiveObject!!.driver_license
// 2 -> o = archiveObject!!.private_hire
// 3 -> o = archiveObject!!.vehicle_details
// 4 -> o = archiveObject!!.insurance_details
// 5 -> o = archiveObject!!.mot_details
// 6 -> o = archiveObject!!.log_book
// 7 -> o = archiveObject!!.ph_car
// }
// if (o != null) {
// visible = View.VISIBLE
// } else {
// visible = View.GONE
// }
// return visible
// }
//
// private fun getFragment(i: Int) {
// lateinit var f: Fragment
// val driverProfile by lazy { mappedObject.wholeDriverObject?.driver_profile }
// val vehicleProfile by lazy { mappedObject.wholeDriverObject?.vehicle_profile }
// val o: Any? = when (i) {
// 0 -> {
// f = DriverProfileFragment()
// driverProfile?.driver_profile
// }
// 1 -> {
// f = DriverLicenseFragment()
// driverProfile?.driver_license
// }
// 2 -> {
// f = PrivateHireLicenseFragment()
// driverProfile?.private_hire
// }
// 3 -> {
// f = VehicleProfileFragment()
// vehicleProfile?.vehicle_details
// }
// 4 -> {
// f = InsuranceFragment()
// vehicleProfile?.insurance_details
// }
// 5 -> {
// f = MotFragment()
// vehicleProfile?.insurance_details
// }
// 6 -> {
// f = LogbookFragment()
// vehicleProfile?.log_book
// }
// 7 -> {
// f = PrivateHireVehicleFragment()
// vehicleProfile?.privateHireVehicleObject
// }
// else -> null
// }
// if (o == null) {
//// executeFragment(f, mappedObject.userId)
// } else {
// MainActivity.archiveClass.openDialogArchive(
// context, o, mappedObject.userId, f
// )
// }
// }
//
// private fun getApprovalStatusCode(i: Int): Int {
// val statusCode = mappedObject.wholeDriverObject?.approvalsObject?.let{
// when (i) {
// 0 -> it.driver_details_approval
// 1 -> it.driver_license_approval
// 2 -> it.private_hire_approval
// 3 -> it.vehicle_details_approval
// 4 -> it.insurance_details_approval
// 5 -> it.mot_details_approval
// 6 -> it.log_book_approval
// 7 -> it.ph_car_approval
// else -> FirebaseClass.NO_DATE_PRESENT
// }
// }
// return statusCode ?: FirebaseClass.NO_DATE_PRESENT
// }
//
// companion object {
// fun convertDpToPixel(dp: Float, context: Context): Float {
// return dp * (context.resources
// .displayMetrics.densityDpi.toFloat() / DisplayMetrics.DENSITY_DEFAULT)
// }
// }
}

View File

@@ -1,107 +0,0 @@
package h_mal.appttude.com.driver.SuperUser
import android.app.AlertDialog
import android.content.Context
import android.view.View
import androidx.cardview.widget.CardView
class DriverStatusClass : View.OnClickListener {
var userId: String? = null
var cardView: CardView? = null
var context: Context? = null
var currentSelection: Boolean = false
override fun onClick(v: View) {
val choices: Array<String> = arrayOf("Active", "Inactive")
val alertDialog: AlertDialog.Builder = AlertDialog.Builder(context)
var selection: Int = -1
if (currentSelection) {
selection = 0
} else if (!currentSelection) {
selection = 1
}
alertDialog.setSingleChoiceItems(
choices,
selection
) { dialog, which -> }
alertDialog.create().show()
}
private fun SetStatus(status: Boolean) {
// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE)
// .child((userId)!!).child(FirebaseClass.DRIVER_STATUS).setValue(status)
// .addOnCompleteListener { task ->
// if (task.isSuccessful) {
// cardView!!.setBackgroundColor(setStatusColour(status))
// } else {
// }
// }
}
private fun setStatusColour(b: Boolean): Int {
if (b) {
return android.R.color.holo_green_dark
} else {
return android.R.color.holo_red_dark
}
} // public int getOverApprovalStatusCode(WholeDriverObject wholeDriverObject){
//
// if (wholeDriverObject.approvalsObject != null){
// ApprovalsObject approvalsObject = wholeDriverObject.approvalsObject;
//
// int[] ints = new int[]{approvalsObject.getDriver_details_approval(),
// approvalsObject.driver_license_approval,
// approvalsObject.private_hire_approval,
// approvalsObject.vehicle_details_approval,
// approvalsObject.insurance_details_approval,
// approvalsObject.mot_details_approval,
// approvalsObject.log_book_approval,
// approvalsObject.ph_car_approval};
//
//
// return setImageResource(mode(ints));
// }
//
// return setImageResource(NO_DATE_PRESENT);
// }
//
// public void setStatusCode(String userId,String approvalNameString,int status){
//
// if (!approvalNameString.equals("")) {
// mDatabase.child(USER_FIREBASE).child(userId).child(USER_APPROVALS).child(approvalNameString)
// .setValue(status).addOnCompleteListener(new OnCompleteListener<Void>() {
// @Override
// public void onComplete(@NonNull Task<Void> task) {
// if (task.isSuccessful()) {
//
// } else {
//
// }
// }
// });
// }
//
//
// }
//
// public int setImageResource(int statusCode){
// int imageResource;
//
// switch (statusCode){
// case APPROVAL_PENDING:
// imageResource = R.drawable.pending;
// break;
// case APPROVAL_DENIED:
// imageResource = R.drawable.denied;
// break;
// case APPROVED:
// imageResource = R.drawable.approved;
// break;
// default:
// imageResource = R.drawable.zero;
// break;
// }
//
// return imageResource;
// }
}

View File

@@ -1,103 +0,0 @@
package h_mal.appttude.com.driver.SuperUser
import android.app.AlertDialog
import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.EditText
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.squareup.picasso.Picasso
import h_mal.appttude.com.driver.ui.driver.MainActivity
import h_mal.appttude.com.driver.Objects.UserObject
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject
import h_mal.appttude.com.driver.R
class RecyclerViewAdapter constructor(var context: Context?, var objects: List<MappedObject>?) :
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun onCreateViewHolder(viewGroup: ViewGroup, i: Int): RecyclerView.ViewHolder {
val viewCurrent: View =
LayoutInflater.from(context).inflate(R.layout.list_item_layout, viewGroup, false)
return ViewHolderMain(viewCurrent)
}
override fun onBindViewHolder(viewHolder: RecyclerView.ViewHolder, i: Int) {
val viewHolderCurrent: ViewHolderMain = viewHolder as ViewHolderMain
val mappedObject: MappedObject = objects!!.get(i)
val `object`: UserObject? = mappedObject.wholeDriverObject?.user_details
if (`object`!!.profilePicString != null) {
Picasso.get()
.load(`object`.profilePicString)
.resize(128, 128)
.placeholder(R.drawable.choice_img_round)
.into(viewHolderCurrent.profilePicImage)
} else {
viewHolderCurrent.profilePicImage.setImageResource(R.drawable.choice_img_round)
}
viewHolderCurrent.userNameTextView.setText(`object`.profileName)
viewHolderCurrent.userEmailTextView.setText(`object`.profileEmail)
if (mappedObject.wholeDriverObject?.driver_number == null) {
viewHolderCurrent.driverNo.text = "0"
} else {
val s: String = mappedObject.wholeDriverObject?.driver_number.toString()
viewHolderCurrent.driverNo.text = s
}
viewHolderCurrent.driverNo.setOnClickListener {
val builder: AlertDialog.Builder = AlertDialog.Builder(
context
)
val input: EditText = EditText(context)
val layout: LinearLayout = LinearLayout(context)
layout.orientation = LinearLayout.VERTICAL
layout.setPadding(28, 0, 56, 0)
input.setText(viewHolderCurrent.driverNo.text.toString())
input.setSelectAllOnFocus(true)
layout.addView(input)
builder.setTitle("Change Driver Number")
.setView(layout)
.setPositiveButton(
"Submit"
) { dialog, which ->
}.create()
.show()
}
// viewHolderCurrent.profileApprovalImage.setImageResource(
// MainActivity.approvalsClass!!.getOverApprovalStatusCode(mappedObject.wholeDriverObject)
// )
viewHolderCurrent.itemView.setOnClickListener {
val bundle: Bundle = Bundle()
bundle.putParcelable("mapped", mappedObject)
// executeFragment(UserMainFragment(), bundle)
}
}
override fun getItemCount(): Int {
return objects!!.size
}
internal inner class ViewHolderMain constructor(listItemView: View) :
RecyclerView.ViewHolder(listItemView) {
var profilePicImage: ImageView
var userNameTextView: TextView
var userEmailTextView: TextView
// CardView statusCard;
var profileApprovalImage: ImageView
var driverNo: TextView
init {
profilePicImage = listItemView.findViewById(R.id.driverPic)
userNameTextView = listItemView.findViewById(R.id.username_text)
// statusCard = listItemView.findViewById(R.id.status_icon);
userEmailTextView = listItemView.findViewById(R.id.emailaddress_text)
profileApprovalImage = listItemView.findViewById(R.id.approval_iv)
driverNo = listItemView.findViewById(R.id.driver_no)
}
}
}

View File

@@ -1,30 +0,0 @@
package h_mal.appttude.com.driver.SuperUser
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.GridView
import androidx.fragment.app.Fragment
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject
import h_mal.appttude.com.driver.R
class UserMainFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view: View = inflater.inflate(R.layout.fragment_user_main, container, false)
Log.i("UserMain", "onCreateView: height = " + view.height)
val mappedObject: MappedObject = requireArguments().getParcelable<MappedObject>("mapped")
activity?.title = mappedObject.wholeDriverObject?.user_details?.profileName
val listView: GridView = view.findViewById(R.id.approvals_list)
listView.adapter = ApprovalListAdapter(requireActivity(), arrayOf(mappedObject))
return view
}
}

View File

@@ -1,152 +0,0 @@
package h_mal.appttude.com.driver.SuperUser
import android.app.AlertDialog
import android.content.DialogInterface
import android.content.SharedPreferences
import android.os.Bundle
import android.util.Log
import android.view.*
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.ValueEventListener
import h_mal.appttude.com.driver.ui.driver.MainActivity
import h_mal.appttude.com.driver.Objects.WholeDriverObject
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject
import h_mal.appttude.com.driver.R
import kotlinx.android.synthetic.main.fragment_home_super_user.*
import java.io.IOException
import java.util.*
class homeSuperUserFragment : Fragment() {
var users: DatabaseReference? = null
var mappedObjectList: MutableList<MappedObject>? = null
private var sharedPreferences: SharedPreferences? = null
private var sortOrder: Int = 0
private val sortDesc: Boolean = false
private var recyclerViewAdapter: RecyclerViewAdapter? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
mappedObjectList = ArrayList()
users!!.addValueEventListener(valueEventListener)
sharedPreferences = requireActivity().getSharedPreferences("PREFS", 0)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view: View = inflater.inflate(R.layout.fragment_home_super_user, container, false)
recycler_view.apply {
layoutManager = LinearLayoutManager(context)
recyclerViewAdapter = RecyclerViewAdapter(context, mappedObjectList)
adapter = recyclerViewAdapter
}
return view
}
var valueEventListener: ValueEventListener = object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
mappedObjectList!!.clear()
Log.i("Count ", "" + snapshot.childrenCount)
for (postSnapshot: DataSnapshot in snapshot.children) {
if ((postSnapshot.child("role").value.toString() == "driver")) {
mappedObjectList!!.add(
MappedObject(
postSnapshot.key, postSnapshot.getValue(
WholeDriverObject::class.java
)
)
)
}
}
sortDate(sortOrder, sortDesc)
}
override fun onCancelled(databaseError: DatabaseError) {
}
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.menu_calls_fragment, menu)
super.onCreateOptionsMenu(menu, inflater)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == R.id.archive) {
val grpname: Array<String> = arrayOf("Driver Name", "Driver Number", "Approval")
sortOrder = sharedPreferences!!.getInt(SORT, 0)
val checkedItem: Int = sortOrder
var compareInt = 0
val click = DialogInterface.OnClickListener { dialog, _ ->
sortDate(compareInt, false)
dialog.dismiss()
}
val builder: AlertDialog.Builder = AlertDialog.Builder(context)
builder.setTitle("Sort by:")
.setSingleChoiceItems(
grpname,
checkedItem
) { _, pos -> compareInt = pos }
.setPositiveButton("Ascending", click)
.setNegativeButton("Descending", click)
.create().show()
}
return super.onOptionsItemSelected(item)
}
private fun sortDate(compareInt: Int, reversed: Boolean) {
val comparator: Comparator<MappedObject> = object : Comparator<MappedObject> {
override fun compare(o1: MappedObject, o2: MappedObject): Int {
when (compareInt) {
0 -> return o1.wholeDriverObject?.user_details?.profileName!!.compareTo(
o2.wholeDriverObject?.user_details?.profileName!!
)
1 -> {
var s1: String? = o1.wholeDriverObject?.driver_number
var s2: String? = o2.wholeDriverObject?.driver_number
if (o1.wholeDriverObject?.driver_number == null || (o1.wholeDriverObject!!
.driver_number == "0")
) {
s1 = ";"
}
if (o2.wholeDriverObject?.driver_number == null || (o2.wholeDriverObject!!
.driver_number == "0")
) {
s2 = ";"
}
return s1!!.compareTo((s2)!!)
}
else -> { throw IOException("dfdfs") }
// 2 -> return MainActivity.approvalsClass.getOverApprovalStatusCode(o1.wholeDriverObject) -
// MainActivity.approvalsClass.getOverApprovalStatusCode(o2.wholeDriverObject)
// else -> return MainActivity.approvalsClass.getOverApprovalStatusCode(
// o1.wholeDriverObject
// ) - MainActivity.approvalsClass.getOverApprovalStatusCode(o2.wholeDriverObject)
}
}
}
sharedPreferences!!.edit().putInt(SORT, compareInt).apply()
sharedPreferences!!.edit().putBoolean(REVERSED, reversed).apply()
if (reversed) {
Collections.sort(mappedObjectList, comparator.reversed())
} else {
Collections.sort(mappedObjectList, comparator)
}
recyclerViewAdapter!!.notifyDataSetChanged()
}
companion object {
private val SORT: String = "SORT"
private val REVERSED: String = "REVERSED"
}
}

View File

@@ -1,6 +0,0 @@
package h_mal.appttude.com.driver.data
enum class Roles(name: String) {
Driver("driver"),
SuperUser("super_user")
}

View File

@@ -1,31 +0,0 @@
package h_mal.appttude.com.driver.ui.driver
import android.os.Bundle
import android.view.View
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.driver.utils.navigateTo
import h_mal.appttude.com.driver.viewmodels.DriverLicenseViewModel
import kotlinx.android.synthetic.main.fragment_driver_overall.*
class DriverOverallFragment : BaseFragment<DriverLicenseViewModel>() {
private val viewmodel: DriverLicenseViewModel by getFragmentViewModel()
override fun getViewModel(): DriverLicenseViewModel = viewmodel
override fun getLayoutId(): Int = R.layout.fragment_driver_overall
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
driver_prof.setOnClickListener {
it.navigateTo(R.id.to_driverProfileFragment)
}
private_hire.setOnClickListener {
it.navigateTo(R.id.to_privateHireLicenseFragment2)
}
drivers_license.setOnClickListener {
it.navigateTo(R.id.to_driverLicenseFragment)
}
}
}

View File

@@ -1,31 +0,0 @@
package h_mal.appttude.com.driver.ui.driver
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.utils.navigateTo
import kotlinx.android.synthetic.main.fragment_home_driver.*
class HomeFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? = inflater.inflate(R.layout.fragment_home_driver, container, false)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
driver.setOnClickListener {
view.navigateTo(R.id.to_driverOverallFragment)
}
car.setOnClickListener {
view.navigateTo(R.id.to_vehicleOverallFragment)
}
}
}

View File

@@ -1,112 +0,0 @@
package h_mal.appttude.com.driver.ui.driver
import android.Manifest
import android.graphics.Bitmap
import android.graphics.drawable.Drawable
import android.os.Bundle
import android.view.MenuItem
import android.view.View
import android.widget.ImageView
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 com.squareup.picasso.Picasso.LoadedFrom
import com.squareup.picasso.Target
import h_mal.appttude.com.driver.Global.ApprovalsClass
import h_mal.appttude.com.driver.Global.ArchiveClass
import h_mal.appttude.com.driver.Global.ImageViewClass
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.BaseActivity
import h_mal.appttude.com.driver.dialogs.ExitDialog.displayExitDialog
import h_mal.appttude.com.driver.ui.user.LoginActivity
import h_mal.appttude.com.driver.utils.ActivityIntentBuilder.createIntent
import h_mal.appttude.com.driver.utils.setPicassoImage
import h_mal.appttude.com.driver.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)
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.setPicassoImage(user.photoUrl)
}
private fun setupLogoutInDrawer(){
logout.setOnClickListener {
getViewModel().logOut()
startActivity(createIntent<LoginActivity>())
finish()
}
}
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

@@ -1,28 +0,0 @@
package h_mal.appttude.com.driver.ui.driver
import android.os.Bundle
import android.view.View
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.driver.utils.navigateTo
import h_mal.appttude.com.driver.viewmodels.DriverLicenseViewModel
import kotlinx.android.synthetic.main.fragment_vehicle_overall.*
class VehicleOverallFragment : BaseFragment<DriverLicenseViewModel>() {
private val viewmodel: DriverLicenseViewModel by getFragmentViewModel()
override fun getViewModel(): DriverLicenseViewModel = viewmodel
override fun getLayoutId(): Int = R.layout.fragment_vehicle_overall
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
vehicle_prof.setOnClickListener { it.navigateTo(R.id.to_vehicleSetupFragment) }
insurance.setOnClickListener { it.navigateTo(R.id.to_insuranceFragment) }
mot.setOnClickListener { it.navigateTo(R.id.to_motFragment) }
logbook.setOnClickListener { it.navigateTo(R.id.to_logbookFragment) }
private_hire_vehicle_license.setOnClickListener { it.navigateTo(R.id.to_privateHireVehicleFragment) }
}
}

View File

@@ -1,57 +0,0 @@
package h_mal.appttude.com.driver.ui.driver.driverprofile
import android.net.Uri
import android.os.Bundle
import android.view.View
import h_mal.appttude.com.driver.Global.DateDialog
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
import h_mal.appttude.com.driver.model.DriversLicenseObject
import h_mal.appttude.com.driver.utils.setPicassoImage
import h_mal.appttude.com.driver.viewmodels.DriverLicenseViewModel
import kotlinx.android.synthetic.main.fragment_driver_license.*
class DriverLicenseFragment : DataSubmissionBaseFragment<DriverLicenseViewModel, DriversLicenseObject>() {
private val viewmodel: DriverLicenseViewModel by getFragmentViewModel()
override fun getViewModel(): DriverLicenseViewModel = viewmodel
override fun getLayoutId(): Int = R.layout.fragment_driver_license
override var model = DriversLicenseObject()
private var imageUri: Uri? = null
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
lic_expiry.apply {
setTextOnChange{ model.licenseExpiry = it }
setOnClickListener {
DateDialog(this)
}
}
lic_no.setTextOnChange{ model.licenseNumber = it }
upload_lic.setOnClickListener { openGalleryWithPermissionRequest() }
submit.setOnClickListener{ submit() }
}
override fun submit(){
validateEditTexts(lic_expiry,lic_no).takeIf { !it }?.let { return }
viewmodel.setDataInDatabase(model, imageUri)
}
override fun setFields(data: DriversLicenseObject) {
super.setFields(data)
driversli_img.setPicassoImage(data.licenseImageString)
lic_no.setText(data.licenseNumber)
lic_expiry.setText(data.licenseExpiry)
}
override fun onImageGalleryResult(imageUri: Uri?) {
super.onImageGalleryResult(imageUri)
this.imageUri = imageUri
driversli_img.setPicassoImage(imageUri)
}
}

View File

@@ -1,73 +0,0 @@
package h_mal.appttude.com.driver.ui.driver.driverprofile
import android.net.Uri
import android.os.Bundle
import android.view.View
import h_mal.appttude.com.driver.Global.DateDialog
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
import h_mal.appttude.com.driver.model.DriverProfileObject
import h_mal.appttude.com.driver.utils.setPicassoImage
import h_mal.appttude.com.driver.viewmodels.DriverProfileViewModel
import kotlinx.android.synthetic.main.fragment_driver_profile.*
class DriverProfileFragment: DataSubmissionBaseFragment<DriverProfileViewModel, DriverProfileObject>() {
var localUri: Uri? = null
private val viewmodel by getFragmentViewModel<DriverProfileViewModel>()
override fun getViewModel(): DriverProfileViewModel = viewmodel
override fun getLayoutId(): Int = R.layout.fragment_driver_profile
override var model = DriverProfileObject()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
names_input.setTextOnChange{ model.forenames = it }
address_input.setTextOnChange{ model.address = it }
postcode_input.setTextOnChange{ model.postcode = it }
dob_input.apply {
setTextOnChange{ model.dob = it }
setOnClickListener {
DateDialog(this)
}
}
ni_number.setTextOnChange{ model.ni = it }
date_first.apply {
setTextOnChange{ model.dateFirst = it }
setOnClickListener {
DateDialog(this)
}
}
add_driver_pic.setOnClickListener { openGalleryWithPermissionRequest() }
submit_driver.setOnClickListener{ submit() }
}
override fun submit(){
validateEditTexts(names_input, address_input, postcode_input,
dob_input, ni_number, date_first)
.takeIf { !it }
?.let { return }
viewmodel.setDataInDatabase(model, localUri)
}
override fun setFields(data: DriverProfileObject) {
super.setFields(data)
driver_pic.setPicassoImage(data.driverPic)
names_input.setText(data.forenames)
address_input.setText(data.address)
postcode_input.setText(data.postcode)
dob_input.setText(data.dob)
ni_number.setText(data.ni)
date_first.setText(data.dateFirst)
}
override fun onImageGalleryResult(imageUri: Uri?) {
super.onImageGalleryResult(imageUri)
localUri = imageUri
driver_pic.setPicassoImage(imageUri)
}
}

View File

@@ -1,55 +0,0 @@
package h_mal.appttude.com.driver.ui.driver.driverprofile
import android.net.Uri
import android.os.Bundle
import android.view.View
import h_mal.appttude.com.driver.Global.DateDialog
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
import h_mal.appttude.com.driver.model.PrivateHireObject
import h_mal.appttude.com.driver.utils.setPicassoImage
import h_mal.appttude.com.driver.viewmodels.PrivateHireLicenseViewModel
import kotlinx.android.synthetic.main.fragment_private_hire_license.*
class PrivateHireLicenseFragment : DataSubmissionBaseFragment<PrivateHireLicenseViewModel, PrivateHireObject>() {
val viewmodel by getFragmentViewModel<PrivateHireLicenseViewModel>()
override fun getViewModel(): PrivateHireLicenseViewModel = viewmodel
override var model = PrivateHireObject()
override fun getLayoutId(): Int = R.layout.fragment_private_hire_license
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
ph_no.setTextOnChange{ model.phNumber = it }
ph_expiry.apply {
setTextOnChange{ model.phExpiry = it }
setOnClickListener {
DateDialog(this)
}
}
uploadphlic.setOnClickListener { openGalleryWithPermissionRequest() }
submit.setOnClickListener{ submit() }
}
override fun submit(){
validateEditTexts(ph_no,ph_expiry).takeIf { !it }?.let { return }
viewmodel.setDataInDatabase(model, picUri)
}
override fun setFields(data: PrivateHireObject) {
super.setFields(data)
imageView2.setPicassoImage(data.phImageString)
ph_no.setText(data.phNumber)
ph_expiry.setText(data.phExpiry)
}
override fun onImageGalleryResult(imageUri: Uri?) {
super.onImageGalleryResult(imageUri)
imageView2.setPicassoImage(imageUri)
}
}

View File

@@ -1,70 +0,0 @@
package h_mal.appttude.com.driver.ui.driver.vehicleprofile
import android.net.Uri
import android.os.Bundle
import android.view.View
import android.widget.ImageView
import h_mal.appttude.com.driver.Global.DateDialog
import h_mal.appttude.com.driver.Objects.InsuranceObject
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
import h_mal.appttude.com.driver.utils.setPicassoImage
import h_mal.appttude.com.driver.viewmodels.InsuranceViewModel
import kotlinx.android.synthetic.main.fragment_insurance.*
class InsuranceFragment : DataSubmissionBaseFragment<InsuranceViewModel, InsuranceObject>() {
private var selectedImages: List<Uri>? = listOf()
private val viewmodel: InsuranceViewModel by getFragmentViewModel()
override fun getViewModel(): InsuranceViewModel = viewmodel
override fun getLayoutId(): Int = R.layout.fragment_insurance
override var model = InsuranceObject()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setImageSelectionAsMultiple()
insurer.setTextOnChange { model.insurerName = it }
insurance_exp.apply {
setOnClickListener { DateDialog(this) }
setTextOnChange { model.expiryDate = it }
}
uploadInsurance.setOnClickListener { openGalleryWithPermissionRequest() }
submit_ins.setOnClickListener { submit() }
}
private fun updateImageCarousal(list: List<Any?>) {
carouselView.setImageClickListener(null)
carouselView.setImageListener { i: Int, imageView: ImageView ->
when (list[i]) {
is Uri -> { imageView.setPicassoImage(list[i] as Uri) }
is String -> imageView.setPicassoImage(list[i] as String)
}
}
carouselView.pageCount = list.size
}
override fun submit() {
super.submit()
validateEditTexts(insurer, insurance_exp).takeIf { !it }?.let { return }
viewmodel.setDataInDatabase(model, selectedImages)
}
override fun setFields(data: InsuranceObject) {
super.setFields(data)
insurer.setText(model.insurerName)
insurance_exp.setText(model.expiryDate)
model.photoStrings?.let { updateImageCarousal(it) }
}
override fun onImageGalleryResult(imageUris: List<Uri>?) {
selectedImages = imageUris
selectedImages?.let { updateImageCarousal(it) }
}
}

View File

@@ -1,51 +0,0 @@
package h_mal.appttude.com.driver.ui.driver.vehicleprofile
import android.net.Uri
import android.os.Bundle
import android.view.View
import h_mal.appttude.com.driver.Objects.LogbookObject
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
import h_mal.appttude.com.driver.utils.setPicassoImage
import h_mal.appttude.com.driver.viewmodels.LogbookViewModel
import kotlinx.android.synthetic.main.fragment_logbook.*
class LogbookFragment : DataSubmissionBaseFragment<LogbookViewModel, LogbookObject>() {
private val viewmodel by getFragmentViewModel<LogbookViewModel>()
override fun getViewModel(): LogbookViewModel = viewmodel
override var model = LogbookObject()
override fun getLayoutId(): Int = R.layout.fragment_logbook
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
v5c_no.setTextOnChange{ model.v5cnumber = it }
upload_lb.setOnClickListener { openGalleryWithPermissionRequest() }
submit_lb.setOnClickListener { submit() }
}
override fun submit() {
super.submit()
validateEditTexts(v5c_no)
.takeIf { !it }
?.let { return }
viewmodel.setDataInDatabase(model, picUri)
}
override fun setFields(data: LogbookObject) {
super.setFields(data)
log_book_img.setPicassoImage(data.photoString)
v5c_no.setText(data.v5cnumber)
}
override fun onImageGalleryResult(imageUri: Uri?) {
super.onImageGalleryResult(imageUri)
picUri = imageUri
log_book_img.setPicassoImage(picUri)
}
}

View File

@@ -1,53 +0,0 @@
package h_mal.appttude.com.driver.ui.driver.vehicleprofile
import android.net.Uri
import android.os.Bundle
import android.view.View
import h_mal.appttude.com.driver.Global.DateDialog
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
import h_mal.appttude.com.driver.model.MotObject
import h_mal.appttude.com.driver.utils.setPicassoImage
import h_mal.appttude.com.driver.viewmodels.MotViewModel
import kotlinx.android.synthetic.main.fragment_mot.*
class MotFragment: DataSubmissionBaseFragment<MotViewModel, MotObject>(){
private val viewmodel by getFragmentViewModel<MotViewModel>()
override fun getViewModel(): MotViewModel = viewmodel
override var model = MotObject()
override fun getLayoutId(): Int = R.layout.fragment_mot
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
mot_expiry.apply {
setTextOnChange{ model.motExpiry = it }
setOnClickListener {
DateDialog(this)
}
}
uploadmot.setOnClickListener { openGalleryWithPermissionRequest() }
submit_mot.setOnClickListener { submit() }
}
override fun submit() {
super.submit()
validateEditTexts(mot_expiry).takeIf { !it }?.let { return }
viewmodel.setDataInDatabase(model, picUri)
}
override fun setFields(data: MotObject) {
super.setFields(data)
mot_img.setPicassoImage(data.motImageString)
mot_expiry.setText(data.motExpiry)
}
override fun onImageGalleryResult(imageUri: Uri?) {
super.onImageGalleryResult(imageUri)
mot_img.setPicassoImage(imageUri)
}
}

View File

@@ -1,55 +0,0 @@
package h_mal.appttude.com.driver.ui.driver.vehicleprofile
import android.net.Uri
import android.os.Bundle
import android.view.View
import h_mal.appttude.com.driver.Global.DateDialog
import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
import h_mal.appttude.com.driver.utils.setPicassoImage
import h_mal.appttude.com.driver.viewmodels.PrivateHireVehicleViewModel
import kotlinx.android.synthetic.main.fragment_private_hire_vehicle.*
class PrivateHireVehicleFragment: DataSubmissionBaseFragment<PrivateHireVehicleViewModel, PrivateHireVehicleObject>(){
private val viewmodel by getFragmentViewModel<PrivateHireVehicleViewModel>()
override fun getViewModel(): PrivateHireVehicleViewModel = viewmodel
override var model = PrivateHireVehicleObject()
override fun getLayoutId(): Int = R.layout.fragment_private_hire_vehicle
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
ph_no.setTextOnChange{ model.phCarNumber = it }
ph_expiry.apply {
setTextOnChange{ model.phCarExpiry = it }
setOnClickListener {
DateDialog(this)
}
}
uploadphlic.setOnClickListener { openGalleryWithPermissionRequest() }
submit.setOnClickListener { submit() }
}
override fun submit() {
super.submit()
validateEditTexts(ph_no, ph_expiry).takeIf { !it }?.let { return }
viewmodel.setDataInDatabase(model, picUri)
}
override fun setFields(data: PrivateHireVehicleObject) {
super.setFields(data)
imageView2.setPicassoImage(data.phCarImageString)
ph_no.setText(data.phCarNumber)
ph_expiry.setText(data.phCarExpiry)
}
override fun onImageGalleryResult(imageUri: Uri?) {
super.onImageGalleryResult(imageUri)
imageView2.setPicassoImage(imageUri)
}
}

View File

@@ -1,62 +0,0 @@
package h_mal.appttude.com.driver.ui.driver.vehicleprofile
import android.os.Bundle
import android.view.View
import h_mal.appttude.com.driver.Global.DateDialog
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
import h_mal.appttude.com.driver.model.VehicleProfileObject
import h_mal.appttude.com.driver.viewmodels.VehicleProfileViewModel
import kotlinx.android.synthetic.main.fragment_vehicle_setup.*
class VehicleProfileFragment: DataSubmissionBaseFragment<VehicleProfileViewModel, VehicleProfileObject>(){
private val viewmodel by getFragmentViewModel<VehicleProfileViewModel>()
override fun getViewModel(): VehicleProfileViewModel = viewmodel
override var model = VehicleProfileObject()
override fun getLayoutId(): Int = R.layout.fragment_vehicle_setup
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
reg.setTextOnChange { model.reg = it }
make.setTextOnChange { model.make = it }
car_model.setTextOnChange { model.model = it }
colour.setTextOnChange { model.colour = it }
keeper_name.setTextOnChange { model.keeperName = it }
address.setTextOnChange { model.keeperAddress = it }
postcode.setTextOnChange { model.keeperPostCode = it }
start_date.apply {
setTextOnChange{ model.startDate = it }
setOnClickListener {
DateDialog(this)
}
}
seized_checkbox.setOnCheckedChangeListener { _, res -> model.isSeized = res}
submit_vehicle.setOnClickListener { submit() }
}
override fun submit() {
validateEditTexts(reg, make, car_model, colour, keeper_name, address, postcode, start_date)
.takeIf { !it }
?.let { return }
viewmodel.setDataInDatabase(model)
}
override fun setFields(data: VehicleProfileObject) {
super.setFields(data)
reg.setText(data.reg)
make.setText(data.make)
car_model.setText(data.model)
colour.setText(data.colour)
keeper_name.setText(data.keeperName)
address.setText(data.keeperAddress)
postcode.setText(data.keeperPostCode)
start_date.setText(data.startDate)
seized_checkbox.isChecked = data.isSeized
}
}

View File

@@ -1,17 +0,0 @@
package h_mal.appttude.com.driver.update
import android.os.Bundle
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.BaseActivity
import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
class UpdateActivity : BaseActivity<UpdateUserViewModel>() {
override val layoutId: Int = R.layout.update_activity
override fun getViewModel(): UpdateUserViewModel? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
createViewModel<UpdateUserViewModel>()
}
}

View File

@@ -1,35 +0,0 @@
package h_mal.appttude.com.driver.ui.user
import android.os.Bundle
import android.view.View
import androidx.fragment.app.activityViewModels
import com.google.firebase.auth.FirebaseUser
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.driver.data.FirebaseCompletion
import h_mal.appttude.com.driver.utils.Coroutines.main
import h_mal.appttude.com.driver.utils.navigateTo
import h_mal.appttude.com.driver.viewmodels.UserViewModel
import kotlinx.coroutines.delay
class SplashScreenFragment : BaseFragment<UserViewModel>() {
private val userViewModel by activityViewModels<UserViewModel>()
override fun getViewModel(): UserViewModel = userViewModel
override fun getLayoutId(): Int = R.layout.fragment_splash_screen
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
userViewModel.splashscreenCheckUserIsLoggedIn()
}
override fun onSuccess(data: Any?) {
super.onSuccess(data)
when(data){
is FirebaseCompletion.Default -> view?.navigateTo(R.id.to_loginFragment)
}
}
}

View File

@@ -1,104 +0,0 @@
package h_mal.appttude.com.driver.utils
import android.app.Activity
import android.content.Context
import android.content.res.Resources
import android.net.Uri
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.inputmethod.EditorInfo
import android.view.inputmethod.InputMethodManager
import android.widget.EditText
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.annotation.DrawableRes
import androidx.appcompat.widget.SearchView
import androidx.fragment.app.Fragment
import com.squareup.picasso.Picasso
import h_mal.appttude.com.driver.R
fun View.show() {
this.visibility = View.VISIBLE
}
fun View.hide() {
this.visibility = View.GONE
}
fun Context.displayToast(message: String) {
Toast.makeText(this, message, Toast.LENGTH_LONG).show()
}
fun Fragment.displayToast(message: String) {
requireContext().displayToast(message)
}
fun EditText.setEnterPressedListener(action: () -> Unit) {
setOnEditorActionListener(TextView.OnEditorActionListener { _, id, _ ->
if (id == EditorInfo.IME_ACTION_DONE || id == EditorInfo.IME_NULL) {
action()
return@OnEditorActionListener true
}
false
})
}
fun ImageView.setPicassoImage(
url: String?,
@DrawableRes placeholderRes: Int = R.drawable.choice_img_round
) {
val creator = Picasso.get()
.load(url)
viewTreeObserver.addOnPreDrawListener {
creator.resize(width, height)
true
}
creator
.placeholder(placeholderRes)
.into(this)
}
fun ImageView.setPicassoImage(
url: Uri?,
@DrawableRes placeholderRes: Int = R.drawable.choice_img_round
) {
val creator = Picasso.get()
.load(url)
viewTreeObserver.addOnPreDrawListener {
creator.resize(width, height)
true
}
creator
.placeholder(placeholderRes)
.into(this)
}
fun ViewGroup.generateView(layoutId: Int): View = LayoutInflater
.from(context)
.inflate(layoutId, this, false)
fun Int.dpToPx(): Int = (this * Resources.getSystem().displayMetrics.density).toInt()
fun SearchView.onSubmitListener(searchSubmit: (String) -> Unit) {
this.setOnQueryTextListener(object :
SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(s: String): Boolean {
searchSubmit.invoke(s)
return true
}
override fun onQueryTextChange(s: String): Boolean {
return true
}
})
}
fun Fragment.hideKeyboard() {
val imm = context?.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager?
imm?.hideSoftInputFromWindow(view?.windowToken, 0)
}
fun EditText.extractString(): String = text.toString().trim()

View File

@@ -1,75 +0,0 @@
package h_mal.appttude.com.driver.viewmodels
import android.net.Uri
import h_mal.appttude.com.driver.base.BaseViewModel
import h_mal.appttude.com.driver.data.FirebaseAuthentication
import h_mal.appttude.com.driver.data.FirebaseCompletion
import h_mal.appttude.com.driver.data.FirebaseStorageSource
import h_mal.appttude.com.driver.utils.Coroutines.io
import kotlinx.coroutines.tasks.await
import java.io.IOException
class UpdateUserViewModel(
private val auth: FirebaseAuthentication,
private val storage: FirebaseStorageSource
) : BaseViewModel() {
fun updateEmail(oldEmail: String, password: String, newEmail: String) = io {
doTryOperation("Failed to update email"){
auth.reauthenticate(oldEmail, password)?.await()
val complete = auth.updateEmail(newEmail)?.await()
complete?.postResult("Email address")
}
}
fun updatePassword(oldEmail: String, password: String, newPassword: String) = io {
doTryOperation("Failed to update password"){
auth.reauthenticate(oldEmail, password)?.await()
val complete = auth.updatePassword(newPassword)?.await()
complete?.postResult("Password")
}
}
fun updateProfile(name: String?, localImageUri: Uri?) = io {
if (name.isNullOrBlank() && localImageUri == null) return@io
doTryOperation("Failed to update User"){
val profilePicUrl = localImageUri?.let {
val storageRef = storage.profileImageStorageRef(auth.getUid()!!)
storage.uploadImage(it, storageRef, "profile_pic")
}
val complete = auth.updateProfile(name, profilePicUrl)?.await()
complete.postResult("Profile updated")
}
}
fun deleteProfile(oldEmail: String, password: String) = io {
doTryOperation("Failed to delete profile"){
auth.reauthenticate(oldEmail, password)?.await()
val complete = auth.deleteProfile()?.await()
complete?.let {
onSuccess(FirebaseCompletion.ProfileDeleted("Profile deleted"))
return@doTryOperation
}
throw IOException("Failed to complete")
}
}
fun getUser(): Boolean {
return auth.getUser()?.let {
onSuccess(it)
true
} ?: false
}
private fun Void?.postResult(section: String){
this?.let {
onSuccess(FirebaseCompletion.Changed("$section has been updated"))
return
}
throw IOException("Failed to complete")
}
}

View File

@@ -0,0 +1,24 @@
package h_mal.appttude.com.espresso
import androidx.test.espresso.idling.CountingIdlingResource
object IdlingResourceClass {
private val CLASS_NAME = "IdlingResourceClass"
private const val RESOURCE = "GLOBAL"
@JvmField val countingIdlingResource = CountingIdlingResource(RESOURCE)
fun increment() {
if (!countingIdlingResource.isIdleNow) {
countingIdlingResource.increment()
}
}
fun decrement() {
if (countingIdlingResource.isIdleNow) {
countingIdlingResource.decrement()
}
}
}

View File

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

View File

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

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.driver.Objects
package h_mal.appttude.com.model

View File

@@ -0,0 +1,8 @@
package h_mal.appttude.com.model
data class LogbookObject(
var photoString: String? = null,
var v5cnumber: String? = null
)

View File

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

View File

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

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.driver.Objects
package h_mal.appttude.com.model

View File

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

View File

@@ -1,21 +1,20 @@
package h_mal.appttude.com.driver.update
package h_mal.appttude.com.ui.update
import android.os.Bundle
import android.view.View
import androidx.fragment.app.activityViewModels
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText
import h_mal.appttude.com.driver.utils.setEnterPressedListener
import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
import kotlinx.android.synthetic.main.fragment_update_email.*
import h_mal.appttude.com.R
import h_mal.appttude.com.base.BaseFragment
import h_mal.appttude.com.utils.TextValidationUtils.validatePasswordEditText
import h_mal.appttude.com.utils.setEnterPressedListener
import h_mal.appttude.com.viewmodels.UpdateUserViewModel
import kotlinx.android.synthetic.main.fragment_delete_profile.*
class DeleteProfileFragment : BaseFragment<UpdateUserViewModel>() {
class DeleteProfileFragment : BaseFragment<UpdateUserViewModel>(R.layout.fragment_delete_profile) {
private val viewmodel: UpdateUserViewModel by activityViewModels()
override fun getViewModel(): UpdateUserViewModel = viewmodel
override fun getLayoutId(): Int = R.layout.fragment_delete_profile
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

View File

@@ -0,0 +1,26 @@
package h_mal.appttude.com.ui.update
import android.os.Bundle
import h_mal.appttude.com.R
import h_mal.appttude.com.base.BaseActivity
import h_mal.appttude.com.data.FirebaseCompletion
import h_mal.appttude.com.utils.displayToast
import h_mal.appttude.com.viewmodels.UpdateUserViewModel
class UpdateActivity : BaseActivity<UpdateUserViewModel>() {
override val layoutId: Int = R.layout.update_activity
override fun getViewModel(): UpdateUserViewModel? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
createViewModel<UpdateUserViewModel>()
}
override fun onSuccess(data: Any?) {
super.onSuccess(data)
when(data){
is FirebaseCompletion.Changed -> displayToast(data.message)
}
}
}

View File

@@ -1,22 +1,21 @@
package h_mal.appttude.com.driver.update
package h_mal.appttude.com.ui.update
import android.os.Bundle
import android.view.View
import androidx.fragment.app.activityViewModels
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText
import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText
import h_mal.appttude.com.driver.utils.setEnterPressedListener
import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
import h_mal.appttude.com.R
import h_mal.appttude.com.base.BaseFragment
import h_mal.appttude.com.utils.TextValidationUtils.validateEmailEditText
import h_mal.appttude.com.utils.TextValidationUtils.validatePasswordEditText
import h_mal.appttude.com.utils.setEnterPressedListener
import h_mal.appttude.com.viewmodels.UpdateUserViewModel
import kotlinx.android.synthetic.main.fragment_update_email.*
class UpdateEmailFragment : BaseFragment<UpdateUserViewModel>() {
class UpdateEmailFragment : BaseFragment<UpdateUserViewModel>(R.layout.fragment_update_email) {
private val viewmodel: UpdateUserViewModel by activityViewModels()
override fun getViewModel(): UpdateUserViewModel = viewmodel
override fun getLayoutId(): Int = R.layout.fragment_update_email
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

View File

@@ -1,19 +1,18 @@
package h_mal.appttude.com.driver.update
package h_mal.appttude.com.ui.update
import android.os.Bundle
import android.view.View
import androidx.fragment.app.activityViewModels
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.driver.utils.navigateTo
import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
import h_mal.appttude.com.R
import h_mal.appttude.com.base.BaseFragment
import h_mal.appttude.com.utils.navigateTo
import h_mal.appttude.com.viewmodels.UpdateUserViewModel
import kotlinx.android.synthetic.main.update_overview_fragment.*
class UpdateOverviewFragment : BaseFragment<UpdateUserViewModel>(), View.OnClickListener {
class UpdateOverviewFragment : BaseFragment<UpdateUserViewModel>(R.layout.update_overview_fragment), View.OnClickListener {
private val vm by activityViewModels<UpdateUserViewModel>()
override fun getViewModel(): UpdateUserViewModel = vm
override fun getLayoutId(): Int = R.layout.update_overview_fragment
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
@@ -21,6 +20,7 @@ class UpdateOverviewFragment : BaseFragment<UpdateUserViewModel>(), View.OnClick
update_email_button.setOnClickListener(this)
update_password_button.setOnClickListener(this)
update_profile_button.setOnClickListener(this)
delete_profile.setOnClickListener(this)
}
private fun View.submit(){

View File

@@ -1,23 +1,22 @@
package h_mal.appttude.com.driver.update
package h_mal.appttude.com.ui.update
import android.os.Bundle
import android.view.View
import androidx.fragment.app.activityViewModels
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText
import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText
import h_mal.appttude.com.driver.utils.setEnterPressedListener
import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
import h_mal.appttude.com.R
import h_mal.appttude.com.base.BaseFragment
import h_mal.appttude.com.utils.TextValidationUtils.validateEmailEditText
import h_mal.appttude.com.utils.TextValidationUtils.validatePasswordEditText
import h_mal.appttude.com.utils.setEnterPressedListener
import h_mal.appttude.com.viewmodels.UpdateUserViewModel
import kotlinx.android.synthetic.main.fragment_update_password.*
class UpdatePasswordFragment : BaseFragment<UpdateUserViewModel>() {
class UpdatePasswordFragment :
BaseFragment<UpdateUserViewModel>(R.layout.fragment_update_password) {
private val viewmodel: UpdateUserViewModel by activityViewModels()
override fun getViewModel(): UpdateUserViewModel = viewmodel
override fun getLayoutId(): Int = R.layout.fragment_update_password
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
@@ -26,7 +25,7 @@ class UpdatePasswordFragment : BaseFragment<UpdateUserViewModel>() {
email_sign_up.setOnClickListener { registerUser() }
}
private fun registerUser(){
private fun registerUser() {
val emailString = email_update.validatePasswordEditText() ?: return
val passwordText = password_top.validatePasswordEditText() ?: return
val newPassword = password_bottom.validateEmailEditText() ?: return

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.driver.update
package h_mal.appttude.com.ui.update
import android.Manifest.permission.READ_EXTERNAL_STORAGE
import android.net.Uri
@@ -7,21 +7,22 @@ import android.view.View
import androidx.core.widget.doAfterTextChanged
import androidx.fragment.app.activityViewModels
import com.google.firebase.auth.FirebaseUser
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.driver.utils.PermissionsUtils.askForPermissions
import h_mal.appttude.com.driver.utils.setEnterPressedListener
import h_mal.appttude.com.driver.utils.setPicassoImage
import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
import h_mal.appttude.com.R
import h_mal.appttude.com.base.BaseFragment
import h_mal.appttude.com.utils.PermissionsUtils.askForPermissions
import h_mal.appttude.com.utils.setEnterPressedListener
import h_mal.appttude.com.utils.setGlideImage
import h_mal.appttude.com.viewmodels.UpdateUserViewModel
import kotlinx.android.synthetic.main.fragment_update_profile.*
const val TAG_CONST = "non-user"
private const val IMAGE_PERMISSION_RESULT = 402
class UpdateProfileFragment : BaseFragment<UpdateUserViewModel>() {
class UpdateProfileFragment : BaseFragment<UpdateUserViewModel>(R.layout.fragment_update_profile) {
private val viewmodel: UpdateUserViewModel by activityViewModels()
override fun getViewModel(): UpdateUserViewModel = viewmodel
override fun getLayoutId(): Int = R.layout.fragment_update_profile
private var imageChangeListener: Boolean = false
private var nameChangeListener: Boolean = false
@@ -75,7 +76,7 @@ class UpdateProfileFragment : BaseFragment<UpdateUserViewModel>() {
}
private fun setFields(firebaseUser: FirebaseUser) {
profile_img.setPicassoImage(firebaseUser.photoUrl)
profile_img.setGlideImage(firebaseUser.photoUrl)
update_name.apply {
setText(firebaseUser.displayName)
tag = TAG_CONST
@@ -85,7 +86,7 @@ class UpdateProfileFragment : BaseFragment<UpdateUserViewModel>() {
override fun onImageGalleryResult(imageUri: Uri?) {
super.onImageGalleryResult(imageUri)
this.imageUri = imageUri
profile_img.setPicassoImage(imageUri)
profile_img.setGlideImage(imageUri)
imageChangeListener = true
}

View File

@@ -1,21 +1,19 @@
package h_mal.appttude.com.driver.user
package h_mal.appttude.com.ui.user
import android.os.Bundle
import android.view.View
import androidx.fragment.app.activityViewModels
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText
import h_mal.appttude.com.driver.viewmodels.UserViewModel
import h_mal.appttude.com.R
import h_mal.appttude.com.base.BaseFragment
import h_mal.appttude.com.utils.TextValidationUtils.validateEmailEditText
import h_mal.appttude.com.viewmodels.UserViewModel
import kotlinx.android.synthetic.main.fragment_forgot_password.*
class ForgotPasswordFragment : BaseFragment<UserViewModel>() {
class ForgotPasswordFragment : BaseFragment<UserViewModel>(R.layout.fragment_forgot_password) {
private val userViewModel: UserViewModel by activityViewModels()
override fun getViewModel(): UserViewModel = userViewModel
override fun getLayoutId(): Int = R.layout.fragment_forgot_password
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

View File

@@ -1,14 +1,14 @@
package h_mal.appttude.com.driver.ui.user
package h_mal.appttude.com.ui.user
import android.content.Intent
import android.os.Bundle
import com.google.firebase.auth.AuthResult
import com.google.firebase.auth.FirebaseUser
import h_mal.appttude.com.driver.ui.driver.MainActivity
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.BaseActivity
import h_mal.appttude.com.driver.viewmodels.UserViewModel
import h_mal.appttude.com.ui.MainActivity
import h_mal.appttude.com.R
import h_mal.appttude.com.base.BaseActivity
import h_mal.appttude.com.viewmodels.UserViewModel
/**
@@ -20,8 +20,8 @@ class LoginActivity : BaseActivity<UserViewModel>() {
override val layoutId: Int = R.layout.activity_login
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
createViewModel<UserViewModel>()
super.onCreate(savedInstanceState)
}
override fun onSuccess(data: Any?) {

View File

@@ -1,22 +1,21 @@
package h_mal.appttude.com.driver.ui.user
package h_mal.appttude.com.ui.user
import android.os.Bundle
import android.view.View
import androidx.fragment.app.activityViewModels
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText
import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText
import h_mal.appttude.com.driver.utils.navigateTo
import h_mal.appttude.com.driver.utils.setEnterPressedListener
import h_mal.appttude.com.driver.viewmodels.UserViewModel
import h_mal.appttude.com.R
import h_mal.appttude.com.base.BaseFragment
import h_mal.appttude.com.utils.TextValidationUtils.validateEmailEditText
import h_mal.appttude.com.utils.TextValidationUtils.validatePasswordEditText
import h_mal.appttude.com.utils.navigateTo
import h_mal.appttude.com.utils.setEnterPressedListener
import h_mal.appttude.com.viewmodels.UserViewModel
import kotlinx.android.synthetic.main.fragment_login.*
class LoginFragment : BaseFragment<UserViewModel>() {
class LoginFragment : BaseFragment<UserViewModel>(R.layout.fragment_login) {
private val userViewModel: UserViewModel by activityViewModels()
override fun getViewModel(): UserViewModel = userViewModel
override fun getLayoutId(): Int = R.layout.fragment_login
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

View File

@@ -1,19 +1,18 @@
package h_mal.appttude.com.driver.ui.user
package h_mal.appttude.com.ui.user
import android.os.Bundle
import android.view.View
import androidx.fragment.app.activityViewModels
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText
import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText
import h_mal.appttude.com.driver.utils.setEnterPressedListener
import h_mal.appttude.com.driver.viewmodels.UserViewModel
import h_mal.appttude.com.R
import h_mal.appttude.com.base.BaseFragment
import h_mal.appttude.com.utils.TextValidationUtils.validateEmailEditText
import h_mal.appttude.com.utils.TextValidationUtils.validatePasswordEditText
import h_mal.appttude.com.utils.setEnterPressedListener
import h_mal.appttude.com.viewmodels.UserViewModel
import kotlinx.android.synthetic.main.fragment_register.*
class RegisterFragment : BaseFragment<UserViewModel>() {
class RegisterFragment : BaseFragment<UserViewModel>(R.layout.fragment_register) {
override fun getLayoutId(): Int = R.layout.fragment_register
override fun getViewModel(): UserViewModel {
val userViewModel: UserViewModel by activityViewModels()
return userViewModel

View File

@@ -0,0 +1,29 @@
package h_mal.appttude.com.ui.user
import android.os.Bundle
import android.view.View
import androidx.fragment.app.activityViewModels
import h_mal.appttude.com.R
import h_mal.appttude.com.base.BaseFragment
import h_mal.appttude.com.data.FirebaseCompletion
import h_mal.appttude.com.utils.navigateTo
import h_mal.appttude.com.viewmodels.UserViewModel
class SplashScreenFragment : BaseFragment<UserViewModel>(R.layout.fragment_splash_screen) {
private val userViewModel by activityViewModels<UserViewModel>()
override fun getViewModel(): UserViewModel = userViewModel
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
userViewModel.splashscreenCheckUserIsLoggedIn()
}
override fun onSuccess(data: Any?) {
super.onSuccess(data)
if (data is FirebaseCompletion.Default) view?.navigateTo(R.id.to_loginFragment)
}
}

View File

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

View File

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

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.driver.utils
package h_mal.appttude.com.utils
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.driver.utils
package h_mal.appttude.com.utils
import android.icu.util.Calendar
import java.text.ParseException

View File

@@ -1,10 +1,10 @@
package h_mal.appttude.com.driver.utils
package h_mal.appttude.com.utils
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.ValueEventListener
import h_mal.appttude.com.driver.data.EventResponse
import h_mal.appttude.com.data.EventResponse
import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.driver.utils
package h_mal.appttude.com.utils
open class Event<out T>(private val content: T) {

View File

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

View File

@@ -1,4 +1,4 @@
package h_mal.appttude.com.driver.utils
package h_mal.appttude.com.utils
enum class Navigations(val value: String) {
Main("MainActivity");

View File

@@ -1,9 +1,10 @@
package h_mal.appttude.com.driver.utils
package h_mal.appttude.com.utils
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.content.pm.PackageManager.*
import android.net.Uri
import android.provider.Settings
import androidx.appcompat.app.AlertDialog
@@ -23,7 +24,7 @@ object PermissionsUtils {
fun Context.isPermissionsAllowed(permission: String): Boolean {
return ContextCompat.checkSelfPermission(
this, permission
) == PackageManager.PERMISSION_GRANTED
) == PERMISSION_GRANTED
}
@@ -43,8 +44,7 @@ object PermissionsUtils {
requireActivity().askForPermissions(permission, requestCode)
fun isGranted(grantResults: IntArray): Boolean =
grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED
grantResults.getOrNull(0)?.equals(PERMISSION_GRANTED) ?: false
private fun Context.showPermissionDeniedDialog() {
AlertDialog.Builder(this)

View File

@@ -1,7 +1,7 @@
package h_mal.appttude.com.driver.utils
package h_mal.appttude.com.utils
import android.widget.EditText
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.R
object TextValidationUtils {

View File

@@ -0,0 +1,152 @@
package h_mal.appttude.com.utils
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.content.res.Resources
import android.graphics.Bitmap
import android.graphics.drawable.Drawable
import android.net.Uri
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.inputmethod.EditorInfo
import android.view.inputmethod.InputMethodManager
import android.widget.EditText
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.annotation.DrawableRes
import androidx.appcompat.widget.SearchView
import androidx.fragment.app.Fragment
import com.bumptech.glide.Glide
import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.engine.GlideException
import com.bumptech.glide.request.RequestListener
import com.squareup.picasso.Picasso
import com.squareup.picasso.Target
import h_mal.appttude.com.R
import com.bumptech.glide.request.target.Target as GlideRequestTarget
fun View.show() {
this.visibility = View.VISIBLE
}
fun View.hide() {
this.visibility = View.GONE
}
fun Context.displayToast(message: String) {
Toast.makeText(this, message, Toast.LENGTH_LONG).show()
}
fun Fragment.displayToast(message: String) {
requireContext().displayToast(message)
}
fun EditText.setEnterPressedListener(action: () -> Unit) {
setOnEditorActionListener(TextView.OnEditorActionListener { _, id, _ ->
if (id == EditorInfo.IME_ACTION_DONE || id == EditorInfo.IME_NULL) {
action()
return@OnEditorActionListener true
}
false
})
}
fun ImageView.setGlideImage(
url: String?,
@DrawableRes placeholderRes: Int = R.drawable.choice_img_round
) {
val c = Glide.with(this)
.load(url)
viewTreeObserver.addOnPreDrawListener {
c.override(width, height)
true
}
c.placeholder(placeholderRes)
.fitCenter()
.into(this)
}
fun ImageView.setGlideImage(
url: Uri?,
@DrawableRes placeholderRes: Int = R.drawable.choice_img_round
) {
val c = Glide.with(this)
.load(url)
viewTreeObserver.addOnPreDrawListener {
c.override(width, height)
true
}
c.placeholder(placeholderRes)
.into(this)
}
fun ImageView.setPicassoImage(
url: String?,
@DrawableRes placeholderRes: Int = R.drawable.choice_img_round
) {
val creator = Picasso.get()
.load(url)
viewTreeObserver.addOnPreDrawListener {
creator.resize(width, height)
true
}
creator
.placeholder(placeholderRes)
.into(object : Target {
override fun onBitmapLoaded(bitmap: Bitmap?, from: Picasso.LoadedFrom?) {
setImageBitmap(bitmap)
setOnClickListener {
context?.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
}
}
override fun onBitmapFailed(e: Exception?, errorDrawable: Drawable?) {}
override fun onPrepareLoad(placeHolderDrawable: Drawable?) {}
})
}
fun ImageView.setPicassoImage(
url: Uri?,
@DrawableRes placeholderRes: Int = R.drawable.choice_img_round
) {
val creator = Picasso.get()
.load(url)
viewTreeObserver.addOnPreDrawListener {
creator.resize(width, height)
true
}
creator
.placeholder(placeholderRes)
.into(this)
}
fun ViewGroup.generateView(layoutId: Int): View = LayoutInflater
.from(context)
.inflate(layoutId, this, false)
fun Int.dpToPx(): Int = (this * Resources.getSystem().displayMetrics.density).toInt()
fun SearchView.onSubmitListener(searchSubmit: (String) -> Unit) {
this.setOnQueryTextListener(object :
SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(s: String): Boolean {
searchSubmit.invoke(s)
return true
}
override fun onQueryTextChange(s: String): Boolean {
return true
}
})
}
fun Fragment.hideKeyboard() {
val imm = context?.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager?
imm?.hideSoftInputFromWindow(view?.windowToken, 0)
}
fun EditText.extractString(): String = text.toString().trim()

View File

@@ -1,21 +1,20 @@
package h_mal.appttude.com.driver.viewmodels
package h_mal.appttude.com.viewmodels
import android.net.Uri
import com.google.firebase.database.DatabaseReference
import com.google.firebase.storage.StorageReference
import h_mal.appttude.com.driver.base.DataSubmissionBaseViewModel
import h_mal.appttude.com.driver.data.FirebaseAuthentication
import h_mal.appttude.com.driver.data.FirebaseDatabaseSource
import h_mal.appttude.com.driver.data.FirebaseStorageSource
import h_mal.appttude.com.driver.model.DriversLicenseObject
import h_mal.appttude.com.driver.utils.Coroutines.io
import h_mal.appttude.com.base.DataSubmissionBaseViewModel
import h_mal.appttude.com.data.FirebaseAuthentication
import h_mal.appttude.com.data.FirebaseDatabaseSource
import h_mal.appttude.com.data.FirebaseStorageSource
import h_mal.appttude.com.model.DriversLicenseObject
import h_mal.appttude.com.utils.Coroutines.io
class DriverLicenseViewModel(
auth: FirebaseAuthentication,
database: FirebaseDatabaseSource,
storage: FirebaseStorageSource
) : DataSubmissionBaseViewModel<DriversLicenseObject>(database, storage) {
val uid = auth.getUid()!!
) : DataSubmissionBaseViewModel<DriversLicenseObject>(auth, database, storage) {
override val databaseRef: DatabaseReference = database.getDriverLicenseRef(uid)
override val storageRef: StorageReference = storage.driversLicenseStorageRef(uid)

View File

@@ -1,21 +1,20 @@
package h_mal.appttude.com.driver.viewmodels
package h_mal.appttude.com.viewmodels
import android.net.Uri
import com.google.firebase.database.DatabaseReference
import com.google.firebase.storage.StorageReference
import h_mal.appttude.com.driver.base.DataSubmissionBaseViewModel
import h_mal.appttude.com.driver.data.FirebaseAuthentication
import h_mal.appttude.com.driver.data.FirebaseDatabaseSource
import h_mal.appttude.com.driver.data.FirebaseStorageSource
import h_mal.appttude.com.driver.model.DriverProfileObject
import h_mal.appttude.com.driver.utils.Coroutines.io
import h_mal.appttude.com.base.DataSubmissionBaseViewModel
import h_mal.appttude.com.data.FirebaseAuthentication
import h_mal.appttude.com.data.FirebaseDatabaseSource
import h_mal.appttude.com.data.FirebaseStorageSource
import h_mal.appttude.com.model.DriverProfileObject
import h_mal.appttude.com.utils.Coroutines.io
class DriverProfileViewModel(
auth: FirebaseAuthentication,
database: FirebaseDatabaseSource,
storage: FirebaseStorageSource
) : DataSubmissionBaseViewModel<DriverProfileObject>(database, storage) {
val uid = auth.getUid()!!
) : DataSubmissionBaseViewModel<DriverProfileObject>(auth, database, storage) {
override val databaseRef: DatabaseReference = database.getDriverDetailsRef(uid)
override val storageRef: StorageReference = storage.profileImageStorageRef(uid)

View File

@@ -1,21 +1,20 @@
package h_mal.appttude.com.driver.viewmodels
package h_mal.appttude.com.viewmodels
import android.net.Uri
import com.google.firebase.database.DatabaseReference
import com.google.firebase.storage.StorageReference
import h_mal.appttude.com.driver.Objects.InsuranceObject
import h_mal.appttude.com.driver.base.DataSubmissionBaseViewModel
import h_mal.appttude.com.driver.data.FirebaseAuthentication
import h_mal.appttude.com.driver.data.FirebaseDatabaseSource
import h_mal.appttude.com.driver.data.FirebaseStorageSource
import h_mal.appttude.com.driver.utils.Coroutines.io
import h_mal.appttude.com.model.InsuranceObject
import h_mal.appttude.com.base.DataSubmissionBaseViewModel
import h_mal.appttude.com.data.FirebaseAuthentication
import h_mal.appttude.com.data.FirebaseDatabaseSource
import h_mal.appttude.com.data.FirebaseStorageSource
import h_mal.appttude.com.utils.Coroutines.io
class InsuranceViewModel (
auth: FirebaseAuthentication,
database: FirebaseDatabaseSource,
storage: FirebaseStorageSource
) : DataSubmissionBaseViewModel<InsuranceObject>(database, storage) {
val uid = auth.getUid()!!
) : DataSubmissionBaseViewModel<InsuranceObject>(auth, database, storage) {
override val databaseRef: DatabaseReference = database.getInsuranceDetailsRef(uid)
override val storageRef: StorageReference? = storage.insuranceStorageRef(uid)

View File

@@ -1,21 +1,21 @@
package h_mal.appttude.com.driver.viewmodels
package h_mal.appttude.com.viewmodels
import android.net.Uri
import com.google.firebase.database.DatabaseReference
import com.google.firebase.storage.StorageReference
import h_mal.appttude.com.driver.Objects.LogbookObject
import h_mal.appttude.com.driver.base.DataSubmissionBaseViewModel
import h_mal.appttude.com.driver.data.FirebaseAuthentication
import h_mal.appttude.com.driver.data.FirebaseDatabaseSource
import h_mal.appttude.com.driver.data.FirebaseStorageSource
import h_mal.appttude.com.driver.utils.Coroutines.io
import h_mal.appttude.com.model.LogbookObject
import h_mal.appttude.com.base.DataSubmissionBaseViewModel
import h_mal.appttude.com.data.FirebaseAuthentication
import h_mal.appttude.com.data.FirebaseDatabaseSource
import h_mal.appttude.com.data.FirebaseStorageSource
import h_mal.appttude.com.utils.Coroutines.io
class LogbookViewModel (
auth: FirebaseAuthentication,
database: FirebaseDatabaseSource,
storage: FirebaseStorageSource
) : DataSubmissionBaseViewModel<LogbookObject>(database, storage) {
val uid = auth.getUid()!!
) : DataSubmissionBaseViewModel<LogbookObject>(auth, database, storage) {
override val databaseRef: DatabaseReference = database.getLogbookRef(uid)
override val storageRef: StorageReference = storage.logBookStorageRef(uid)
override val objectName: String = "Log book"

View File

@@ -1,24 +1,22 @@
package h_mal.appttude.com.driver.viewmodels
package h_mal.appttude.com.viewmodels
import h_mal.appttude.com.driver.base.BaseViewModel
import h_mal.appttude.com.driver.data.FirebaseAuthentication
import h_mal.appttude.com.driver.data.FirebaseDatabaseSource
import h_mal.appttude.com.driver.utils.Coroutines.io
import h_mal.appttude.com.driver.utils.getDataFromDatabaseRef
import h_mal.appttude.com.base.BaseViewModel
import h_mal.appttude.com.data.FirebaseAuthentication
import h_mal.appttude.com.data.FirebaseDatabaseSource
import h_mal.appttude.com.utils.Coroutines.io
import h_mal.appttude.com.utils.getDataFromDatabaseRef
class MainViewModel(
private val firebaseAuth: FirebaseAuthentication,
private val firebaseDatabase: FirebaseDatabaseSource
) : BaseViewModel(){
val uid = firebaseAuth.getUid()!!
fun getRole() = io {
doTryOperation("failed to retrieve data") {
val uid = firebaseAuth.getUid() ?: return@doTryOperation
val ref = firebaseDatabase.getUserRoleRef(uid)
val role = ref.getDataFromDatabaseRef<String>()
role?.apply { onSuccess(this) } ?: onError("No role found")
//
}
}

View File

@@ -1,21 +1,20 @@
package h_mal.appttude.com.driver.viewmodels
package h_mal.appttude.com.viewmodels
import android.net.Uri
import com.google.firebase.database.DatabaseReference
import com.google.firebase.storage.StorageReference
import h_mal.appttude.com.driver.base.DataSubmissionBaseViewModel
import h_mal.appttude.com.driver.data.FirebaseAuthentication
import h_mal.appttude.com.driver.data.FirebaseDatabaseSource
import h_mal.appttude.com.driver.data.FirebaseStorageSource
import h_mal.appttude.com.driver.model.MotObject
import h_mal.appttude.com.driver.utils.Coroutines.io
import h_mal.appttude.com.base.DataSubmissionBaseViewModel
import h_mal.appttude.com.data.FirebaseAuthentication
import h_mal.appttude.com.data.FirebaseDatabaseSource
import h_mal.appttude.com.data.FirebaseStorageSource
import h_mal.appttude.com.model.MotObject
import h_mal.appttude.com.utils.Coroutines.io
class MotViewModel (
auth: FirebaseAuthentication,
database: FirebaseDatabaseSource,
storage: FirebaseStorageSource
) : DataSubmissionBaseViewModel<MotObject>(database, storage) {
val uid = auth.getUid()!!
) : DataSubmissionBaseViewModel<MotObject>(auth, database, storage) {
override val databaseRef: DatabaseReference = database.getMotDetailsRef(uid)
override val storageRef: StorageReference? = storage.motStorageRef(uid)

View File

@@ -1,21 +1,20 @@
package h_mal.appttude.com.driver.viewmodels
package h_mal.appttude.com.viewmodels
import android.net.Uri
import com.google.firebase.database.DatabaseReference
import com.google.firebase.storage.StorageReference
import h_mal.appttude.com.driver.base.DataSubmissionBaseViewModel
import h_mal.appttude.com.driver.data.FirebaseAuthentication
import h_mal.appttude.com.driver.data.FirebaseDatabaseSource
import h_mal.appttude.com.driver.data.FirebaseStorageSource
import h_mal.appttude.com.driver.model.PrivateHireObject
import h_mal.appttude.com.driver.utils.Coroutines.io
import h_mal.appttude.com.base.DataSubmissionBaseViewModel
import h_mal.appttude.com.data.FirebaseAuthentication
import h_mal.appttude.com.data.FirebaseDatabaseSource
import h_mal.appttude.com.data.FirebaseStorageSource
import h_mal.appttude.com.model.PrivateHireObject
import h_mal.appttude.com.utils.Coroutines.io
class PrivateHireLicenseViewModel(
auth: FirebaseAuthentication,
database: FirebaseDatabaseSource,
storage: FirebaseStorageSource
) : DataSubmissionBaseViewModel<PrivateHireObject>(database, storage) {
val uid = auth.getUid()!!
) : DataSubmissionBaseViewModel<PrivateHireObject>(auth, database, storage) {
override val databaseRef: DatabaseReference = database.getPrivateHireRef(uid)
override val storageRef: StorageReference = storage.privateHireStorageRef(uid)

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