- mid commit

This commit is contained in:
2023-08-17 14:36:20 +01:00
parent 4d00545fd3
commit d34cbf6f55
72 changed files with 464 additions and 458 deletions

View File

@@ -166,4 +166,8 @@ dependencies {
androidTestImplementation "com.squareup.retrofit2:converter-gson:$retrofit_version" androidTestImplementation "com.squareup.retrofit2:converter-gson:$retrofit_version"
/ * screenshot library */ / * screenshot library */
androidTestImplementation 'tools.fastlane:screengrab:2.1.1' androidTestImplementation 'tools.fastlane:screengrab:2.1.1'
/ * Permissions dispatcher * /
def dispatcher_ver = "4.9.2"
implementation "com.github.permissions-dispatcher:permissionsdispatcher:${dispatcher_ver}"
kapt "com.github.permissions-dispatcher:permissionsdispatcher-processor:${dispatcher_ver}"
} }

View File

@@ -25,7 +25,6 @@ import org.hamcrest.TypeSafeMatcher
import org.hamcrest.core.AllOf import org.hamcrest.core.AllOf
import org.junit.After import org.junit.After
import org.junit.Before import org.junit.Before
import org.junit.ClassRule
import org.junit.Rule import org.junit.Rule
import tools.fastlane.screengrab.Screengrab import tools.fastlane.screengrab.Screengrab
import tools.fastlane.screengrab.UiAutomatorScreenshotStrategy import tools.fastlane.screengrab.UiAutomatorScreenshotStrategy
@@ -89,35 +88,6 @@ open class BaseUiTest<T : BaseActivity<*, *>>(
open fun beforeLaunch() {} open fun beforeLaunch() {}
open fun afterLaunch(context: Context) {} open fun afterLaunch(context: Context) {}
@Suppress("DEPRECATION")
fun checkToastMessage(message: String) {
onView(withText(message)).inRoot(object : TypeSafeMatcher<Root>() {
override fun describeTo(description: Description?) {
description?.appendText("is toast")
}
override fun matchesSafely(root: Root): Boolean {
root.run {
if (windowLayoutParams.get().type == WindowManager.LayoutParams.TYPE_TOAST) {
decorView.run {
if (windowToken === applicationWindowToken) {
// windowToken == appToken means this window isn't contained by any other windows.
// if it was a window for an activity, it would have TYPE_BASE_APPLICATION.
return true
}
}
}
}
return false
}
}
).check(matches(isDisplayed()))
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
waitFor(3500)
}
}
fun checkSnackBarDisplayedByMessage(message: String) { fun checkSnackBarDisplayedByMessage(message: String) {
onView( onView(
CoreMatchers.allOf( CoreMatchers.allOf(

View File

@@ -3,7 +3,7 @@ package h_mal.appttude.com.driver.ui
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import h_mal.appttude.com.driver.R import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.driver.data.DRIVER import h_mal.appttude.com.driver.data.DRIVER
import h_mal.appttude.com.driver.databinding.FragmentHomeDriverBinding import h_mal.appttude.com.driver.databinding.FragmentHomeDriverBinding
import h_mal.appttude.com.driver.utils.hide import h_mal.appttude.com.driver.utils.hide
@@ -13,9 +13,7 @@ import h_mal.appttude.com.driver.viewmodels.RoleViewModel
class HomeFragment : class HomeFragment :
DataSubmissionBaseFragment<RoleViewModel, FragmentHomeDriverBinding, String>() { BaseFragment<RoleViewModel, FragmentHomeDriverBinding>() {
override var model = String()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)

View File

@@ -12,8 +12,6 @@ import h_mal.appttude.com.driver.viewmodels.DriverLicenseViewModel
class DriverLicenseFragment : class DriverLicenseFragment :
DataSubmissionBaseFragment<DriverLicenseViewModel, FragmentDriverLicenseBinding, DriversLicense>() { DataSubmissionBaseFragment<DriverLicenseViewModel, FragmentDriverLicenseBinding, DriversLicense>() {
override var model = DriversLicense()
override fun setupView(binding: FragmentDriverLicenseBinding) { override fun setupView(binding: FragmentDriverLicenseBinding) {
binding.apply { binding.apply {
licExpiry.apply { licExpiry.apply {

View File

@@ -13,8 +13,6 @@ import h_mal.appttude.com.driver.viewmodels.DriverProfileViewModel
class DriverProfileFragment : class DriverProfileFragment :
DataSubmissionBaseFragment<DriverProfileViewModel, FragmentDriverProfileBinding, DriverProfile>() { DataSubmissionBaseFragment<DriverProfileViewModel, FragmentDriverProfileBinding, DriverProfile>() {
override var model = DriverProfile()
override fun setupView(binding: FragmentDriverProfileBinding) = binding.run { override fun setupView(binding: FragmentDriverProfileBinding) = binding.run {
namesInput.setTextOnChange { model.forenames = it } namesInput.setTextOnChange { model.forenames = it }
addressInput.setTextOnChange { model.address = it } addressInput.setTextOnChange { model.address = it }

View File

@@ -13,8 +13,6 @@ import h_mal.appttude.com.driver.viewmodels.PrivateHireLicenseViewModel
class PrivateHireLicenseFragment : DataSubmissionBaseFragment class PrivateHireLicenseFragment : DataSubmissionBaseFragment
<PrivateHireLicenseViewModel, FragmentPrivateHireLicenseBinding, PrivateHireLicense>() { <PrivateHireLicenseViewModel, FragmentPrivateHireLicenseBinding, PrivateHireLicense>() {
override var model = PrivateHireLicense()
override fun setupView(binding: FragmentPrivateHireLicenseBinding) = binding.run { override fun setupView(binding: FragmentPrivateHireLicenseBinding) = binding.run {
phNo.setTextOnChange { model.phNumber = it } phNo.setTextOnChange { model.phNumber = it }
phExpiry.apply { phExpiry.apply {

View File

@@ -18,8 +18,6 @@ class InsuranceFragment :
private var selectedImages: List<Uri>? = listOf() private var selectedImages: List<Uri>? = listOf()
override var model = Insurance()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
setImageSelectionAsMultiple() setImageSelectionAsMultiple()

View File

@@ -12,8 +12,6 @@ import h_mal.appttude.com.driver.viewmodels.LogbookViewModel
class LogbookFragment : class LogbookFragment :
DataSubmissionBaseFragment<LogbookViewModel, FragmentLogbookBinding, Logbook>() { DataSubmissionBaseFragment<LogbookViewModel, FragmentLogbookBinding, Logbook>() {
override var model = Logbook()
override fun setupView(binding: FragmentLogbookBinding) = binding.run { override fun setupView(binding: FragmentLogbookBinding) = binding.run {
v5cNo.setTextOnChange { model.v5cnumber = it } v5cNo.setTextOnChange { model.v5cnumber = it }
uploadLb.setOnClickListener { openGalleryWithPermissionRequest() } uploadLb.setOnClickListener { openGalleryWithPermissionRequest() }

View File

@@ -12,8 +12,6 @@ import h_mal.appttude.com.driver.viewmodels.MotViewModel
class MotFragment : DataSubmissionBaseFragment<MotViewModel, FragmentMotBinding, Mot>() { class MotFragment : DataSubmissionBaseFragment<MotViewModel, FragmentMotBinding, Mot>() {
override var model = Mot()
override fun setupView(binding: FragmentMotBinding) = binding.run { override fun setupView(binding: FragmentMotBinding) = binding.run {
motExpiry.apply { motExpiry.apply {
setOnClickListener { setOnClickListener {

View File

@@ -13,8 +13,6 @@ import h_mal.appttude.com.driver.viewmodels.PrivateHireVehicleViewModel
class PrivateHireVehicleFragment : class PrivateHireVehicleFragment :
DataSubmissionBaseFragment<PrivateHireVehicleViewModel, FragmentPrivateHireLicenseBinding, PrivateHireVehicle>() { DataSubmissionBaseFragment<PrivateHireVehicleViewModel, FragmentPrivateHireLicenseBinding, PrivateHireVehicle>() {
override var model = PrivateHireVehicle()
override fun setupView(binding: FragmentPrivateHireLicenseBinding) = binding.run { override fun setupView(binding: FragmentPrivateHireLicenseBinding) = binding.run {
phNo.setTextOnChange { model.phCarNumber = it } phNo.setTextOnChange { model.phCarNumber = it }
phExpiry.apply { phExpiry.apply {

View File

@@ -11,8 +11,6 @@ import h_mal.appttude.com.driver.viewmodels.VehicleProfileViewModel
class VehicleProfileFragment : DataSubmissionBaseFragment class VehicleProfileFragment : DataSubmissionBaseFragment
<VehicleProfileViewModel, FragmentVehicleSetupBinding, VehicleProfile>() { <VehicleProfileViewModel, FragmentVehicleSetupBinding, VehicleProfile>() {
override var model = VehicleProfile()
override fun setupView(binding: FragmentVehicleSetupBinding) = binding.run { override fun setupView(binding: FragmentVehicleSetupBinding) = binding.run {
reg.setTextOnChange { model.reg = it } reg.setTextOnChange { model.reg = it }
make.setTextOnChange { model.make = it } make.setTextOnChange { model.make = it }

View File

@@ -14,8 +14,8 @@
android:theme="@style/AppTheme"> android:theme="@style/AppTheme">
<activity <activity
android:name=".ui.user.LoginActivity" android:name=".ui.user.LoginActivity"
android:theme="@style/AppTheme.NoActionBar.User" android:exported="true"
android:exported="true"> android:theme="@style/AppTheme.NoActionBar.User">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.VIEW" />

View File

@@ -4,7 +4,6 @@ import android.content.Intent
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.view.View.OnAttachStateChangeListener
import android.view.ViewGroup.LayoutParams import android.view.ViewGroup.LayoutParams
import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.view.ViewGroup.LayoutParams.MATCH_PARENT
import android.view.ViewGroup.inflate import android.view.ViewGroup.inflate
@@ -156,6 +155,7 @@ abstract class BaseActivity<V : BaseViewModel, VB : ViewBinding> : AppCompatActi
super.onToastHidden() super.onToastHidden()
mIdlingResource?.setIdleState(true) mIdlingResource?.setIdleState(true)
} }
override fun onToastShown() { override fun onToastShown() {
super.onToastShown() super.onToastShown()
mIdlingResource?.setIdleState(false) mIdlingResource?.setIdleState(false)
@@ -178,6 +178,7 @@ abstract class BaseActivity<V : BaseViewModel, VB : ViewBinding> : AppCompatActi
super.onShown(transientBottomBar) super.onShown(transientBottomBar)
mIdlingResource?.setIdleState(false) mIdlingResource?.setIdleState(false)
} }
override fun onDismissed(transientBottomBar: Snackbar?, event: Int) { override fun onDismissed(transientBottomBar: Snackbar?, event: Int) {
super.onDismissed(transientBottomBar, event) super.onDismissed(transientBottomBar, event)
mIdlingResource?.setIdleState(true) mIdlingResource?.setIdleState(true)

View File

@@ -59,6 +59,7 @@ open class BaseFirebaseAdapter<T : Any, VB : ViewBinding>(
super.onDataChanged() super.onDataChanged()
if (itemCount == 0) emptyList() if (itemCount == 0) emptyList()
} }
override fun onError(error: DatabaseError) { override fun onError(error: DatabaseError) {
super.onError(error) super.onError(error)
when (error.code) { when (error.code) {

View File

@@ -1,14 +1,9 @@
package h_mal.appttude.com.driver.base package h_mal.appttude.com.driver.base
import android.content.ClipData
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.activity.result.contract.ActivityResultContract
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.createViewModelLazy import androidx.fragment.app.createViewModelLazy
import androidx.viewbinding.ViewBinding import androidx.viewbinding.ViewBinding
@@ -16,7 +11,6 @@ import h_mal.appttude.com.driver.application.ApplicationViewModelFactory
import h_mal.appttude.com.driver.data.ViewState import h_mal.appttude.com.driver.data.ViewState
import h_mal.appttude.com.driver.utils.GenericsHelper.getGenericClassAt import h_mal.appttude.com.driver.utils.GenericsHelper.getGenericClassAt
import h_mal.appttude.com.driver.utils.GenericsHelper.inflateBindingByType import h_mal.appttude.com.driver.utils.GenericsHelper.inflateBindingByType
import h_mal.appttude.com.driver.utils.PermissionsUtils
import org.kodein.di.KodeinAware import org.kodein.di.KodeinAware
import org.kodein.di.android.x.kodein import org.kodein.di.android.x.kodein
import org.kodein.di.generic.instance import org.kodein.di.generic.instance
@@ -36,12 +30,6 @@ abstract class BaseFragment<V : BaseViewModel, VB : ViewBinding> : Fragment(), K
private fun getFragmentViewModel(): Lazy<V> = private fun getFragmentViewModel(): Lazy<V> =
createViewModelLazy(getGenericClassAt(0), { viewModelStore }, factoryProducer = { factory }) createViewModelLazy(getGenericClassAt(0), { viewModelStore }, factoryProducer = { factory })
private var multipleImage: Boolean = false
fun setImageSelectionAsMultiple() {
multipleImage = true
}
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, inflater: LayoutInflater,
container: ViewGroup?, container: ViewGroup?,
@@ -101,73 +89,6 @@ abstract class BaseFragment<V : BaseViewModel, VB : ViewBinding> : Fragment(), K
} }
} }
private fun ClipData.convertToList(): List<Uri> = 0.rangeTo(itemCount).map { getItemAt(it).uri }
/**
* Pair with {@link #Fragment.onRequestPermissionsResult}
* @param ourRequestCode
* @param requestCode
* checks that ourRequestCode was granted
* sends callback with
* @param permissionGranted
*/
fun onPermissionRequest(
requestCode: Int, ourRequestCode: Int, grantResults: IntArray,
permissionGranted: () -> Unit
) {
when (requestCode) {
ourRequestCode -> {
if (PermissionsUtils.isGranted(grantResults)) {
permissionGranted.invoke()
}
return
}
}
}
/**
* 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() {
permissionRequest.launch(multipleImage)
}
private val permissionRequest = registerForActivityResult(getResultsContract()) { result ->
@Suppress("UNCHECKED_CAST")
when (result) {
is Uri -> onImageGalleryResult(result)
is List<*> -> onImageGalleryResult(result as List<Uri>)
}
}
private fun getResultsContract(): ActivityResultContract<Boolean, Any?> {
return object : ActivityResultContract<Boolean, Any?>() {
override fun createIntent(context: Context, input: Boolean): Intent {
return Intent(Intent.ACTION_GET_CONTENT)
.addCategory(Intent.CATEGORY_OPENABLE)
.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, input)
.setType("image/*")
}
override fun parseResult(resultCode: Int, intent: Intent?): Any? {
intent?.clipData?.takeIf { it.itemCount > 1 }?.convertToList()?.let { clip ->
val list = clip.takeIf { it.size > 10 }?.let {
clip.subList(0, 9)
} ?: clip
return list
}
return intent?.data
}
}
}
fun showToast(message: String) = (activity as BaseActivity<*, *>).showToast(message) fun showToast(message: String) = (activity as BaseActivity<*, *>).showToast(message)
fun showSnackBar(message: String) = (activity as BaseActivity<*, *>).showSnackBar(message) fun showSnackBar(message: String) = (activity as BaseActivity<*, *>).showSnackBar(message)
} }

View File

@@ -1,26 +1,22 @@
package h_mal.appttude.com.driver.base package h_mal.appttude.com.driver.base
import android.Manifest
import android.content.Intent import android.content.Intent
import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.widget.EditText import android.widget.EditText
import androidx.core.widget.doAfterTextChanged import androidx.core.widget.doAfterTextChanged
import androidx.viewbinding.ViewBinding import androidx.viewbinding.ViewBinding
import h_mal.appttude.com.driver.data.UserAuthState import h_mal.appttude.com.driver.data.UserAuthState
import h_mal.appttude.com.driver.model.Model
import h_mal.appttude.com.driver.ui.user.LoginActivity import h_mal.appttude.com.driver.ui.user.LoginActivity
import h_mal.appttude.com.driver.utils.PermissionsUtils.askForPermissions import h_mal.appttude.com.driver.utils.GenericsHelper.getGenericClassAt
import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEditText import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEditText
import kotlin.reflect.full.createInstance
private const val IMAGE_PERMISSION_RESULT = 402 abstract class DataSubmissionBaseFragment<V : DataSubmissionBaseViewModel<T>, VB : ViewBinding, T : Model> :
ImageSelectorFragment<V, VB>() {
abstract class DataSubmissionBaseFragment<V : DataSubmissionBaseViewModel<T>, VB : ViewBinding, T : Any> : var model: T = getGenericClassAt<T>(2).createInstance()
BaseFragment<V, VB>() {
var picUri: Uri? = null
abstract var model: T
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
@@ -52,17 +48,7 @@ abstract class DataSubmissionBaseFragment<V : DataSubmissionBaseViewModel<T>, VB
open fun submit() {} open fun submit() {}
fun openGalleryWithPermissionRequest() { fun openGalleryWithPermissionRequest() {
if (askForPermissions(Manifest.permission.READ_EXTERNAL_STORAGE, IMAGE_PERMISSION_RESULT)) { showStorageWithPermissionCheck()
openGalleryForImage()
}
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<String>,
grantResults: IntArray
) = onPermissionRequest(requestCode, IMAGE_PERMISSION_RESULT, grantResults) {
openGalleryForImage()
} }
fun validateEditTexts(vararg editTexts: EditText): Boolean { fun validateEditTexts(vararg editTexts: EditText): Boolean {
@@ -81,8 +67,4 @@ abstract class DataSubmissionBaseFragment<V : DataSubmissionBaseViewModel<T>, VB
} }
} }
override fun onImageGalleryResult(imageUri: Uri?) {
super.onImageGalleryResult(imageUri)
picUri = imageUri
}
} }

View File

@@ -25,7 +25,7 @@ abstract class DrawerActivity<V : BaseViewModel, VB : ViewBinding> : BaseActivit
abstract val containerId: Int abstract val containerId: Int
abstract val drawerLayoutId: Int abstract val drawerLayoutId: Int
abstract val toolbarId: Int abstract val toolbarId: Int
abstract val navViewId:Int abstract val navViewId: Int
lateinit var navController: NavController lateinit var navController: NavController
lateinit var appBarConfiguration: AppBarConfiguration lateinit var appBarConfiguration: AppBarConfiguration

View File

@@ -0,0 +1,107 @@
package h_mal.appttude.com.driver.base
import android.Manifest
import android.content.ClipData
import android.content.Context
import android.content.Intent
import android.net.Uri
import androidx.activity.result.contract.ActivityResultContract
import androidx.viewbinding.ViewBinding
import h_mal.appttude.com.driver.ui.permission.PermissionsDeclarationDialog
import permissions.dispatcher.NeedsPermission
import permissions.dispatcher.OnNeverAskAgain
import permissions.dispatcher.OnPermissionDenied
import permissions.dispatcher.OnShowRationale
import permissions.dispatcher.PermissionRequest
import permissions.dispatcher.RuntimePermissions
@RuntimePermissions
open class ImageSelectorFragment<V : BaseViewModel, VB : ViewBinding> : BaseFragment<V, VB>() {
private var multipleImage: Boolean = false
var picUri: Uri? = null
fun setImageSelectionAsMultiple() {
multipleImage = true
}
fun openGalleryForImage() {
permissionRequest.launch(multipleImage)
}
private val permissionRequest = registerForActivityResult(getResultsContract()) { result ->
@Suppress("UNCHECKED_CAST")
when (result) {
is Uri -> onImageGalleryResult(result)
is List<*> -> onImageGalleryResult(result as List<Uri>)
}
}
private fun getResultsContract(): ActivityResultContract<Boolean, Any?> {
return object : ActivityResultContract<Boolean, Any?>() {
override fun createIntent(context: Context, input: Boolean): Intent {
return Intent(Intent.ACTION_GET_CONTENT)
.addCategory(Intent.CATEGORY_OPENABLE)
.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, input)
.setType("image/*")
}
override fun parseResult(resultCode: Int, intent: Intent?): Any? {
intent?.clipData?.takeIf { it.itemCount > 1 }?.convertToList()?.let { clip ->
val list = clip.takeIf { it.size > 10 }?.let {
clip.subList(0, 9)
} ?: clip
return list
}
return intent?.data
}
}
}
private fun ClipData.convertToList(): List<Uri> = 0.rangeTo(itemCount).map { getItemAt(it).uri }
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
// NOTE: delegate the permission handling to generated method
onRequestPermissionsResult(requestCode, grantResults)
}
@NeedsPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
fun showStorage() {
openGalleryForImage()
}
@OnShowRationale(Manifest.permission.READ_EXTERNAL_STORAGE)
fun showRationaleForStorage(request: PermissionRequest) {
PermissionsDeclarationDialog(requireContext()).showDialog({
request.proceed()
}, {
request.cancel()
})
}
@OnPermissionDenied(Manifest.permission.READ_EXTERNAL_STORAGE)
fun onStorageDenied() {
showToast("Storage permissions have been denied")
}
@OnNeverAskAgain(Manifest.permission.READ_EXTERNAL_STORAGE)
fun onStorageNeverAskAgain() {
showToast("Storage permissions have been to never ask again")
}
/**
* Called on the result of image selection
*/
open fun onImageGalleryResult(imageUri: Uri?) {
picUri = imageUri
}
/**
* Called on the result of multiple image selection
*/
open fun onImageGalleryResult(imageUris: List<Uri>?) {}
}

View File

@@ -10,7 +10,8 @@ import androidx.preference.PreferenceManager
* *
*/ */
const val SORT_OPTION = "SORT_OPTION" const val SORT_OPTION = "SORT_OPTION"
class PreferenceProvider (context: Context) {
class PreferenceProvider(context: Context) {
private val appContext = context.applicationContext private val appContext = context.applicationContext

View File

@@ -8,4 +8,4 @@ data class DriverProfile(
var dob: String? = null, var dob: String? = null,
var ni: String? = null, var ni: String? = null,
var dateFirst: String? = null var dateFirst: String? = null
) ) : Model

View File

@@ -5,4 +5,4 @@ data class DriversLicense(
var licenseImageString: String? = null, var licenseImageString: String? = null,
var licenseNumber: String? = null, var licenseNumber: String? = null,
var licenseExpiry: String? = null var licenseExpiry: String? = null
) ) : Model

View File

@@ -4,4 +4,4 @@ data class Insurance(
var photoStrings: MutableList<String?>? = null, var photoStrings: MutableList<String?>? = null,
var insurerName: String? = null, var insurerName: String? = null,
var expiryDate: String? = null var expiryDate: String? = null
) ) : Model

View File

@@ -4,4 +4,4 @@ package h_mal.appttude.com.driver.model
data class Logbook( data class Logbook(
var photoString: String? = null, var photoString: String? = null,
var v5cnumber: String? = null var v5cnumber: String? = null
) ) : Model

View File

@@ -0,0 +1,3 @@
package h_mal.appttude.com.driver.model
interface Model

View File

@@ -4,4 +4,4 @@ package h_mal.appttude.com.driver.model
data class Mot( data class Mot(
var motImageString: String? = null, var motImageString: String? = null,
var motExpiry: String? = null var motExpiry: String? = null
) ) : Model

View File

@@ -5,4 +5,4 @@ data class PrivateHireLicense(
var phImageString: String? = null, var phImageString: String? = null,
var phNumber: String? = null, var phNumber: String? = null,
var phExpiry: String? = null var phExpiry: String? = null
) ) : Model

View File

@@ -1,8 +1,8 @@
package h_mal.appttude.com.driver.model package h_mal.appttude.com.driver.model
class PrivateHireVehicle( data class PrivateHireVehicle(
var phCarImageString: String? = null, var phCarImageString: String? = null,
var phCarNumber: String? = null, var phCarNumber: String? = null,
var phCarExpiry: String? = null var phCarExpiry: String? = null
) ) : Model

View File

@@ -11,4 +11,4 @@ data class VehicleProfile(
var keeperPostCode: String? = null, var keeperPostCode: String? = null,
var startDate: String? = null, var startDate: String? = null,
var isSeized: Boolean = false var isSeized: Boolean = false
) ) : Model

View File

@@ -1,3 +0,0 @@
# Default ignored files
/shelf/
/workspace.xml

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,18 @@
package h_mal.appttude.com.driver.ui.permission
import android.content.Context
import android.text.Html
import androidx.annotation.StringRes
interface DeclarationBuilder {
val link: String
val message: String
fun Context.readFromResources(@StringRes id: Int) = resources.getString(id)
fun buildMessage(): CharSequence? {
val link1 = "<font color='blue'><a href=\"$link\">here</a></font>"
val message = "$message See my privacy policy: $link1"
return Html.fromHtml(message, Html.FROM_HTML_MODE_LEGACY)
}
}

View File

@@ -0,0 +1,46 @@
package h_mal.appttude.com.driver.ui.permission
import android.content.Context
import android.text.method.LinkMovementMethod
import android.view.View
import android.widget.TextView
import androidx.appcompat.app.AlertDialog
class PermissionsDeclarationDialog(context: Context) : BaseDeclarationDialog(context) {
override val link: String = "https://sites.google.com/view/hmaldev/home/choice-cars"
override val message: String =
"Storage is required to access images on the devices"
}
abstract class BaseDeclarationDialog(val context: Context) : DeclarationBuilder {
abstract override val link: String
abstract override val message: String
lateinit var dialog: AlertDialog
fun showDialog(agreeCallback: () -> Unit = { }, disagreeCallback: () -> Unit = { }) {
val myMessage = buildMessage()
val builder = AlertDialog.Builder(context)
.setPositiveButton("agree") { _, _ ->
agreeCallback()
}
.setNegativeButton("disagree") { _, _ ->
disagreeCallback()
}
.setMessage(myMessage)
.setCancelable(false)
dialog = builder.create()
dialog.show()
// Make the textview clickable. Must be called after show()
val msgTxt = dialog.findViewById<View>(android.R.id.message) as TextView?
msgTxt?.movementMethod = LinkMovementMethod.getInstance()
}
fun dismiss() = dialog.dismiss()
}

View File

@@ -1,20 +1,18 @@
package h_mal.appttude.com.driver.ui.update package h_mal.appttude.com.driver.ui.update
import android.Manifest.permission.READ_EXTERNAL_STORAGE
import android.net.Uri import android.net.Uri
import androidx.core.widget.doAfterTextChanged import androidx.core.widget.doAfterTextChanged
import com.google.firebase.auth.FirebaseUser import com.google.firebase.auth.FirebaseUser
import h_mal.appttude.com.driver.base.BaseFragment import h_mal.appttude.com.driver.base.ImageSelectorFragment
import h_mal.appttude.com.driver.databinding.FragmentUpdateProfileBinding import h_mal.appttude.com.driver.databinding.FragmentUpdateProfileBinding
import h_mal.appttude.com.driver.utils.PermissionsUtils.askForPermissions
import h_mal.appttude.com.driver.utils.setEnterPressedListener import h_mal.appttude.com.driver.utils.setEnterPressedListener
import h_mal.appttude.com.driver.utils.setGlideImage import h_mal.appttude.com.driver.utils.setGlideImage
import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
const val TAG_CONST = "non-user" const val TAG_CONST = "non-user"
private const val IMAGE_PERMISSION_RESULT = 402
class UpdateProfileFragment : BaseFragment<UpdateUserViewModel, FragmentUpdateProfileBinding>() { class UpdateProfileFragment :
ImageSelectorFragment<UpdateUserViewModel, FragmentUpdateProfileBinding>() {
private var imageChangeListener: Boolean = false private var imageChangeListener: Boolean = false
private var nameChangeListener: Boolean = false private var nameChangeListener: Boolean = false
@@ -35,11 +33,7 @@ class UpdateProfileFragment : BaseFragment<UpdateUserViewModel, FragmentUpdatePr
setEnterPressedListener { submitProfileUpdate() } setEnterPressedListener { submitProfileUpdate() }
} }
profileImg.setOnClickListener { profileImg.setOnClickListener { openGalleryForImage() }
if (askForPermissions(READ_EXTERNAL_STORAGE, IMAGE_PERMISSION_RESULT)) {
openGalleryForImage()
}
}
submit.setOnClickListener { submitProfileUpdate() } submit.setOnClickListener { submitProfileUpdate() }
} }
@@ -53,15 +47,6 @@ class UpdateProfileFragment : BaseFragment<UpdateUserViewModel, FragmentUpdatePr
} }
} }
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) = onPermissionRequest(requestCode, IMAGE_PERMISSION_RESULT, grantResults) {
openGalleryForImage()
}
override fun onSuccess(data: Any?) { override fun onSuccess(data: Any?) {
super.onSuccess(data) super.onSuccess(data)
if (data is FirebaseUser) setFields(data) if (data is FirebaseUser) setFields(data)

View File

@@ -5,7 +5,7 @@ package h_mal.appttude.com.driver.utils
* *
* @sample #boolean.isTrue{ #Do something when its true } * @sample #boolean.isTrue{ #Do something when its true }
*/ */
inline fun Boolean.isTrue(block: () -> Unit){ inline fun Boolean.isTrue(block: () -> Unit) {
if (this) { if (this) {
block() block()
} }
@@ -16,7 +16,7 @@ inline fun Boolean.isTrue(block: () -> Unit){
* *
* @sample #nullable.isNotNull{i -> i.doSomethingSinceItsNotNull() } * @sample #nullable.isNotNull{i -> i.doSomethingSinceItsNotNull() }
*/ */
inline fun <T, R> T?.isNotNull(block: (T) -> R): R?{ inline fun <T, R> T?.isNotNull(block: (T) -> R): R? {
return if (this != null) { return if (this != null) {
block(this) block(this)
} else { } else {

View File

@@ -15,31 +15,43 @@ class FirebaseException(
enum class Status(private val code: Int) { enum class Status(private val code: Int) {
DATA_STALE(-1), DATA_STALE(-1),
/** The server indicated that this operation failed */ /** The server indicated that this operation failed */
OPERATION_FAILED(-2), OPERATION_FAILED(-2),
/** This client does not have permission to perform this operation */ /** This client does not have permission to perform this operation */
PERMISSION_DENIED(-3), PERMISSION_DENIED(-3),
/** The operation had to be aborted due to a network disconnect */ /** The operation had to be aborted due to a network disconnect */
DISCONNECTED(-4), DISCONNECTED(-4),
/** The supplied auth token has expired */ /** The supplied auth token has expired */
EXPIRED_TOKEN (-6), EXPIRED_TOKEN(-6),
/** /**
* The specified authentication token is invalid. This can occur when the token is malformed, * The specified authentication token is invalid. This can occur when the token is malformed,
* expired, or the secret that was used to generate it has been revoked. * expired, or the secret that was used to generate it has been revoked.
*/ */
INVALID_TOKEN(-7), INVALID_TOKEN(-7),
/** The transaction had too many retries */ /** The transaction had too many retries */
MAX_RETRIES(-8), MAX_RETRIES(-8),
/** The transaction was overridden by a subsequent set */ /** The transaction was overridden by a subsequent set */
OVERRIDDEN_BY_SET(-9), OVERRIDDEN_BY_SET(-9),
/** The service is unavailable */ /** The service is unavailable */
UNAVAILABLE(-10), UNAVAILABLE(-10),
/** An exception occurred in user code */ /** An exception occurred in user code */
USER_CODE_EXCEPTION(-11), USER_CODE_EXCEPTION(-11),
/** The operation could not be performed due to a network error. */ /** The operation could not be performed due to a network error. */
NETWORK_ERROR(-24), NETWORK_ERROR(-24),
/** The write was canceled locally */ /** The write was canceled locally */
WRITE_CANCELED(-25), WRITE_CANCELED(-25),
/** /**
* An unknown error occurred. Please refer to the error message and error details for more * An unknown error occurred. Please refer to the error message and error details for more
* information. * information.

View File

@@ -37,6 +37,7 @@ suspend inline fun <reified T : Any> DatabaseReference.getDataFromDatabaseRef():
is EventResponse.Changed -> { is EventResponse.Changed -> {
response.snapshot.getValue(T::class.java) response.snapshot.getValue(T::class.java)
} }
is EventResponse.Cancelled -> { is EventResponse.Cancelled -> {
throw FirebaseException(response.error) throw FirebaseException(response.error)
} }
@@ -53,17 +54,19 @@ suspend inline fun <reified T : Any> DatabaseReference.getListDataFromDatabaseRe
is EventResponse.Changed -> { is EventResponse.Changed -> {
response.snapshot.children.map { it.getValue(T::class.java) } response.snapshot.children.map { it.getValue(T::class.java) }
} }
is EventResponse.Cancelled -> { is EventResponse.Cancelled -> {
throw FirebaseException(response.error) throw FirebaseException(response.error)
} }
} }
} }
suspend fun <T: Any> DatabaseReference.getDataFromDatabaseRef(clazz : Class<T>): T? { suspend fun <T : Any> DatabaseReference.getDataFromDatabaseRef(clazz: Class<T>): T? {
return when (val response: EventResponse = singleValueEvent()) { return when (val response: EventResponse = singleValueEvent()) {
is EventResponse.Changed -> { is EventResponse.Changed -> {
response.snapshot.getValue(clazz) response.snapshot.getValue(clazz)
} }
is EventResponse.Cancelled -> { is EventResponse.Cancelled -> {
throw FirebaseException(response.error) throw FirebaseException(response.error)
} }

View File

@@ -19,7 +19,7 @@ object GenericsHelper {
* *
* @sample inflateBindingByType(getGenericClassAt(0), layoutInflater) * @sample inflateBindingByType(getGenericClassAt(0), layoutInflater)
*/ */
fun <VB: ViewBinding> inflateBindingByType( fun <VB : ViewBinding> inflateBindingByType(
genericClassAt: KClass<VB>, genericClassAt: KClass<VB>,
layoutInflater: LayoutInflater layoutInflater: LayoutInflater
): VB = try { ): VB = try {
@@ -30,12 +30,12 @@ object GenericsHelper {
&& viewBinding.parameterTypes.getOrNull(0) == LayoutInflater::class.java && viewBinding.parameterTypes.getOrNull(0) == LayoutInflater::class.java
}.invoke(null, layoutInflater) as VB }.invoke(null, layoutInflater) as VB
} catch (exception: Exception) { } catch (exception: Exception) {
println ("generic class failed at = $genericClassAt") println("generic class failed at = $genericClassAt")
exception.printStackTrace() exception.printStackTrace()
throw IllegalStateException("Can not inflate binding from generic") throw IllegalStateException("Can not inflate binding from generic")
} }
fun <VB: ViewBinding> LayoutInflater.inflateBindingByType( fun <VB : ViewBinding> LayoutInflater.inflateBindingByType(
container: ViewGroup?, container: ViewGroup?,
genericClassAt: KClass<VB> genericClassAt: KClass<VB>
): VB = try { ): VB = try {

View File

@@ -9,7 +9,6 @@ import android.provider.Settings
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.app.ActivityCompat import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
object PermissionsUtils { object PermissionsUtils {
@@ -39,12 +38,6 @@ object PermissionsUtils {
return true return true
} }
fun Fragment.askForPermissions(permission: String, requestCode: Int): Boolean =
requireActivity().askForPermissions(permission, requestCode)
fun isGranted(grantResults: IntArray): Boolean =
grantResults.getOrNull(0)?.equals(PERMISSION_GRANTED) ?: false
private fun Context.showPermissionDeniedDialog() { private fun Context.showPermissionDeniedDialog() {
AlertDialog.Builder(this) AlertDialog.Builder(this)
.setTitle("Permission Denied") .setTitle("Permission Denied")

View File

@@ -1,5 +1,10 @@
<vector android:height="24dp" android:tint="#FFFFFF" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:viewportHeight="24" android:viewportWidth="24" android:width="24dp"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> android:height="24dp"
<path android:fillColor="@android:color/white" android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/> android:tint="#FFFFFF"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z" />
</vector> </vector>

View File

@@ -1,5 +1,10 @@
<vector android:height="24dp" android:tint="#FFFFFF" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:viewportHeight="24" android:viewportWidth="24" android:width="24dp"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> android:height="24dp"
<path android:fillColor="@android:color/white" android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/> android:tint="#FFFFFF"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z" />
</vector> </vector>

View File

@@ -1,5 +1,10 @@
<vector android:height="72dp" android:tint="#FFFFFF" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:viewportHeight="24" android:viewportWidth="24" android:width="72dp"
android:width="72dp" xmlns:android="http://schemas.android.com/apk/res/android"> android:height="72dp"
<path android:fillColor="@android:color/white" android:pathData="M19,3L4.99,3c-1.11,0 -1.98,0.89 -1.98,2L3,19c0,1.1 0.88,2 1.99,2L19,21c1.1,0 2,-0.9 2,-2L21,5c0,-1.11 -0.9,-2 -2,-2zM19,15h-4c0,1.66 -1.35,3 -3,3s-3,-1.34 -3,-3L4.99,15L4.99,5L19,5v10z"/> android:tint="#FFFFFF"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M19,3L4.99,3c-1.11,0 -1.98,0.89 -1.98,2L3,19c0,1.1 0.88,2 1.99,2L19,21c1.1,0 2,-0.9 2,-2L21,5c0,-1.11 -0.9,-2 -2,-2zM19,15h-4c0,1.66 -1.35,3 -3,3s-3,-1.34 -3,-3L4.99,15L4.99,5L19,5v10z" />
</vector> </vector>

View File

@@ -1,9 +1,9 @@
<vector android:height="24dp" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:tint="#FFFFFF"
android:viewportHeight="24"
android:viewportWidth="24"
android:width="24dp" android:width="24dp"
xmlns:android="http://schemas.android.com/apk/res/android"> android:height="24dp"
android:tint="#FFFFFF"
android:viewportWidth="24"
android:viewportHeight="24">
<path <path
android:fillColor="@android:color/white" android:fillColor="@android:color/white"
android:pathData="M12,4l-1.41,1.41L16.17,11H4v2h12.17l-5.58,5.59L12,20l8,-8z" /> android:pathData="M12,4l-1.41,1.41L16.17,11H4v2h12.17l-5.58,5.59L12,20l8,-8z" />

View File

@@ -1,9 +1,9 @@
<vector android:height="24dp" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:tint="#FFFFFF"
android:viewportHeight="24"
android:viewportWidth="24"
android:width="24dp" android:width="24dp"
xmlns:android="http://schemas.android.com/apk/res/android"> android:height="24dp"
android:tint="#FFFFFF"
android:viewportWidth="24"
android:viewportHeight="24">
<path <path
android:fillColor="@android:color/white" android:fillColor="@android:color/white"
android:pathData="M19,3h-4.18C14.4,1.84 13.3,1 12,1c-1.3,0 -2.4,0.84 -2.82,2L5,3c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2zM12,3c0.55,0 1,0.45 1,1s-0.45,1 -1,1 -1,-0.45 -1,-1 0.45,-1 1,-1zM12,7c1.66,0 3,1.34 3,3s-1.34,3 -3,3 -3,-1.34 -3,-3 1.34,-3 3,-3zM18,19L6,19v-1.4c0,-2 4,-3.1 6,-3.1s6,1.1 6,3.1L18,19z" /> android:pathData="M19,3h-4.18C14.4,1.84 13.3,1 12,1c-1.3,0 -2.4,0.84 -2.82,2L5,3c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2zM12,3c0.55,0 1,0.45 1,1s-0.45,1 -1,1 -1,-0.45 -1,-1 0.45,-1 1,-1zM12,7c1.66,0 3,1.34 3,3s-1.34,3 -3,3 -3,-1.34 -3,-3 1.34,-3 3,-3zM18,19L6,19v-1.4c0,-2 4,-3.1 6,-3.1s6,1.1 6,3.1L18,19z" />

View File

@@ -1,9 +1,9 @@
<vector android:height="24dp" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:tint="#FFFFFF"
android:viewportHeight="24"
android:viewportWidth="24"
android:width="24dp" android:width="24dp"
xmlns:android="http://schemas.android.com/apk/res/android"> android:height="24dp"
android:tint="#FFFFFF"
android:viewportWidth="24"
android:viewportHeight="24">
<path <path
android:fillColor="@android:color/white" android:fillColor="@android:color/white"
android:pathData="M22,16L22,4c0,-1.1 -0.9,-2 -2,-2L8,2c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2zM11,12l2.03,2.71L16,11l4,5L8,16l3,-4zM2,6v14c0,1.1 0.9,2 2,2h14v-2L4,20L4,6L2,6z" /> android:pathData="M22,16L22,4c0,-1.1 -0.9,-2 -2,-2L8,2c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2zM11,12l2.03,2.71L16,11l4,5L8,16l3,-4zM2,6v14c0,1.1 0.9,2 2,2h14v-2L4,20L4,6L2,6z" />

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@drawable/background_with_curve" android:background="@drawable/background_with_curve"

View File

@@ -11,9 +11,9 @@
android:id="@+id/appbar" android:id="@+id/appbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:elevation="0dp"
android:background="@android:color/transparent" android:background="@android:color/transparent"
android:theme="@style/AppTheme.AppBarOverlay"> android:theme="@style/AppTheme.AppBarOverlay"
app:elevation="0dp">
<androidx.appcompat.widget.Toolbar <androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar" android:id="@+id/toolbar"

View File

@@ -37,9 +37,9 @@
<EditText <EditText
android:id="@+id/email_update" android:id="@+id/email_update"
style="@style/EditTextStyle" style="@style/EditTextStyle"
android:autofillHints="emailAddress"
android:hint="@string/prompt_email" android:hint="@string/prompt_email"
android:inputType="textEmailAddress" android:inputType="textEmailAddress" />
android:autofillHints="emailAddress" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
@@ -52,9 +52,9 @@
<EditText <EditText
android:id="@+id/password_top" android:id="@+id/password_top"
style="@style/EditTextStyle" style="@style/EditTextStyle"
android:autofillHints="password"
android:hint="@string/prompt_password" android:hint="@string/prompt_password"
android:inputType="textPassword" android:inputType="textPassword" />
android:autofillHints="password" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton

View File

@@ -11,9 +11,9 @@
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"
app:cardCornerRadius="28dp" app:cardCornerRadius="28dp"
app:cardElevation="0dp" app:cardElevation="0dp"
app:layout_constraintBottom_toTopOf="@id/til_lic_no"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent">
app:layout_constraintBottom_toTopOf="@id/til_lic_no">
<ImageView <ImageView
android:id="@+id/driversli_img" android:id="@+id/driversli_img"
@@ -21,23 +21,23 @@
android:layout_height="200dp" android:layout_height="200dp"
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
android:adjustViewBounds="true" android:adjustViewBounds="true"
android:contentDescription="@string/image_description"
android:scaleType="centerCrop" android:scaleType="centerCrop"
tools:src="@drawable/choice_img_round" tools:src="@drawable/choice_img_round" />
android:contentDescription="@string/image_description" />
<com.mikhaellopez.circularimageview.CircularImageView <com.mikhaellopez.circularimageview.CircularImageView
android:id="@+id/search_image" android:id="@+id/search_image"
android:layout_width="40dp" android:layout_width="40dp"
android:layout_height="40dp" android:layout_height="40dp"
android:src="@drawable/ic_baseline_photo_library_24" android:layout_gravity="bottom|end"
android:scaleType="centerInside"
android:elevation="1dp"
app:civ_border_width="1dp"
app:civ_shadow_radius="0.5dp"
android:alpha="1"
app:civ_circle_color="@color/colour_one"
android:layout_margin="18dp" android:layout_margin="18dp"
android:layout_gravity="bottom|end" /> android:alpha="1"
android:elevation="1dp"
android:scaleType="centerInside"
android:src="@drawable/ic_baseline_photo_library_24"
app:civ_border_width="1dp"
app:civ_circle_color="@color/colour_one"
app:civ_shadow_radius="0.5dp" />
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>
@@ -53,24 +53,24 @@
android:id="@+id/lic_no" android:id="@+id/lic_no"
style="@style/EditTextStyle.Date" style="@style/EditTextStyle.Date"
android:hint="@string/drivers_license_no" android:hint="@string/drivers_license_no"
android:importantForAutofill="no"
android:inputType="none" android:inputType="none"
android:maxLines="1" android:maxLines="1" />
android:importantForAutofill="no" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_submission" android:id="@+id/til_submission"
style="@style/text_input_layout" style="@style/text_input_layout"
app:layout_constraintTop_toBottomOf="@id/til_lic_no"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"> app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/til_lic_no">
<EditText <EditText
android:hint="@string/license_expiry_date"
android:id="@+id/lic_expiry" android:id="@+id/lic_expiry"
style="@style/EditTextStyle.Date" style="@style/EditTextStyle.Date"
android:autofillHints="date" /> android:autofillHints="date"
android:hint="@string/license_expiry_date" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@@ -78,10 +78,10 @@
android:id="@+id/submit" android:id="@+id/submit"
style="@style/TextButton.WithIcon" style="@style/TextButton.WithIcon"
android:text="@string/submit" android:text="@string/submit"
app:layout_constraintTop_toBottomOf="@+id/til_submission"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/til_submission"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.8" /> app:layout_constraintVertical_bias="0.8" />

View File

@@ -46,18 +46,17 @@
tools:src="@drawable/choice_img_round" /> tools:src="@drawable/choice_img_round" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout style="@style/text_input_layout">
style="@style/text_input_layout">
<EditText <EditText
android:id="@+id/names_input" android:id="@+id/names_input"
style="@style/EditTextStyle" style="@style/EditTextStyle"
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"
android:autofillHints="name"
android:ems="10" android:ems="10"
android:hint="@string/full_name" android:hint="@string/full_name"
android:inputType="textPersonName" android:inputType="textPersonName"
android:maxLines="1" android:maxLines="1" />
android:autofillHints="name" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@@ -67,6 +66,7 @@
android:id="@+id/address_input" android:id="@+id/address_input"
style="@style/EditTextStyle" style="@style/EditTextStyle"
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"
android:autofillHints="postalAddress"
android:ems="10" android:ems="10"
android:gravity="top|start" android:gravity="top|start"
android:hint="@string/address" android:hint="@string/address"
@@ -75,8 +75,7 @@
android:maxLines="7" android:maxLines="7"
android:minLines="4" android:minLines="4"
android:selectAllOnFocus="true" android:selectAllOnFocus="true"
android:singleLine="true" android:singleLine="true" />
android:autofillHints="postalAddress" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@@ -86,12 +85,12 @@
android:id="@+id/postcode_input" android:id="@+id/postcode_input"
style="@style/EditTextStyle" style="@style/EditTextStyle"
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"
android:autofillHints="postalCode"
android:hint="@string/postcode" android:hint="@string/postcode"
android:inputType="none" android:inputType="none"
android:maxLines="1" android:maxLines="1"
android:selectAllOnFocus="true" android:selectAllOnFocus="true"
android:singleLine="true" android:singleLine="true" />
android:autofillHints="postalCode" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@@ -101,8 +100,8 @@
android:id="@+id/dob_input" android:id="@+id/dob_input"
style="@style/EditTextStyle.Date" style="@style/EditTextStyle.Date"
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"
android:hint="@string/date_of_birth" android:autofillHints="date"
android:autofillHints="date" /> android:hint="@string/date_of_birth" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@@ -113,9 +112,9 @@
style="@style/EditTextStyle" style="@style/EditTextStyle"
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"
android:hint="@string/ni_number" android:hint="@string/ni_number"
android:maxLines="1"
android:importantForAutofill="no" android:importantForAutofill="no"
android:inputType="none" android:inputType="none"
android:maxLines="1"
tools:ignore="TextFields" /> tools:ignore="TextFields" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@@ -126,8 +125,8 @@
android:id="@+id/date_first" android:id="@+id/date_first"
style="@style/EditTextStyle.Date" style="@style/EditTextStyle.Date"
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"
android:hint="@string/date_first_available" android:autofillHints="date"
android:autofillHints="date" /> android:hint="@string/date_first_available" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>

View File

@@ -37,9 +37,9 @@
<EditText <EditText
android:id="@+id/submission_et" android:id="@+id/submission_et"
style="@style/EditTextStyle" style="@style/EditTextStyle"
android:autofillHints="emailAddress"
android:hint="@string/prompt_email" android:hint="@string/prompt_email"
android:inputType="textEmailAddress" android:inputType="textEmailAddress" />
android:autofillHints="emailAddress" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton

View File

@@ -22,7 +22,7 @@
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:layout_marginEnd="16dp" android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp" android:layout_marginBottom="16dp"
android:src="@drawable/ic_file_download_black_24dp" android:contentDescription="@string/floating_action_button"
android:contentDescription="@string/floating_action_button" /> android:src="@drawable/ic_file_download_black_24dp" />
</RelativeLayout> </RelativeLayout>

View File

@@ -10,12 +10,12 @@
android:id="@+id/carouselView" android:id="@+id/carouselView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="200dp" android:layout_height="200dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toTopOf="@id/uploadInsurance"
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"
app:autoPlay="false" app:autoPlay="false"
app:fillColor="#FFFFFFFF" app:fillColor="#FFFFFFFF"
app:layout_constraintBottom_toTopOf="@id/uploadInsurance"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:pageColor="#00000000" app:pageColor="#00000000"
app:radius="6dp" app:radius="6dp"
app:strokeColor="#FF777777" app:strokeColor="#FF777777"
@@ -41,11 +41,11 @@
android:id="@+id/insurer" android:id="@+id/insurer"
style="@style/EditTextStyle" style="@style/EditTextStyle"
android:hint="@string/insurer" android:hint="@string/insurer"
android:importantForAutofill="no"
android:inputType="none" android:inputType="none"
android:maxLines="1" android:maxLines="1"
android:selectAllOnFocus="true" android:selectAllOnFocus="true"
android:singleLine="true" android:singleLine="true" />
android:importantForAutofill="no" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@@ -61,9 +61,9 @@
style="@style/EditTextStyle.Date" style="@style/EditTextStyle.Date"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:inputType="date"
android:hint="@string/insurance_expiry" android:hint="@string/insurance_expiry"
android:importantForAutofill="no" /> android:importantForAutofill="no"
android:inputType="date" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton

View File

@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
style="@style/parent_constraint_layout" style="@style/parent_constraint_layout"
xmlns:app="http://schemas.android.com/apk/res-auto"> android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.cardview.widget.CardView <androidx.cardview.widget.CardView
android:layout_width="wrap_content" android:layout_width="wrap_content"
@@ -13,9 +13,9 @@
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"
app:cardCornerRadius="28dp" app:cardCornerRadius="28dp"
app:cardElevation="0dp" app:cardElevation="0dp"
app:layout_constraintBottom_toTopOf="@id/upload_lb"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent">
app:layout_constraintBottom_toTopOf="@id/upload_lb">
<ImageView <ImageView
android:id="@+id/log_book_img" android:id="@+id/log_book_img"
@@ -23,47 +23,47 @@
android:layout_height="200dp" android:layout_height="200dp"
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
android:adjustViewBounds="true" android:adjustViewBounds="true"
android:contentDescription="@string/image_description"
android:scaleType="centerCrop" android:scaleType="centerCrop"
tools:src="@drawable/choice_img_round" tools:src="@drawable/choice_img_round" />
android:contentDescription="@string/image_description" />
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/upload_lb" android:id="@+id/upload_lb"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/til_v5c"
style="@style/TextButton.Rounded" style="@style/TextButton.Rounded"
android:selectAllOnFocus="true" android:selectAllOnFocus="true"
android:singleLine="true" android:singleLine="true"
android:text="@string/upload_logbook" /> android:text="@string/upload_logbook"
app:layout_constraintBottom_toTopOf="@id/til_v5c"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_v5c" android:id="@+id/til_v5c"
style="@style/text_input_layout" style="@style/text_input_layout"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent">
app:layout_constraintBottom_toBottomOf="parent">
<EditText <EditText
android:id="@+id/v5c_no" android:id="@+id/v5c_no"
style="@style/EditTextStyle" style="@style/EditTextStyle"
android:hint="@string/v5c_number" android:hint="@string/v5c_number"
android:inputType="none" android:importantForAutofill="no"
android:importantForAutofill="no" /> android:inputType="none" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/submit" android:id="@+id/submit"
style="@style/TextButton.WithIcon" style="@style/TextButton.WithIcon"
android:text="@string/submit" android:text="@string/submit"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_bias="0.8"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/til_v5c"> app:layout_constraintTop_toBottomOf="@+id/til_v5c"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.8">
</com.google.android.material.button.MaterialButton> </com.google.android.material.button.MaterialButton>

View File

@@ -45,9 +45,9 @@
style="@style/EditTextStyle" style="@style/EditTextStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:autofillHints="emailAddress"
android:hint="@string/prompt_email" android:hint="@string/prompt_email"
android:inputType="textEmailAddress" android:inputType="textEmailAddress" />
android:autofillHints="emailAddress" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
@@ -63,9 +63,9 @@
style="@style/EditTextStyle" style="@style/EditTextStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:autofillHints="password"
android:hint="@string/prompt_password" android:hint="@string/prompt_password"
android:inputType="textPassword" android:inputType="textPassword" />
android:autofillHints="password" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<TextView <TextView

View File

@@ -14,9 +14,9 @@
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"
app:cardCornerRadius="28dp" app:cardCornerRadius="28dp"
app:cardElevation="0dp" app:cardElevation="0dp"
app:layout_constraintBottom_toTopOf="@id/uploadmot"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent">
app:layout_constraintBottom_toTopOf="@id/uploadmot">
<ImageView <ImageView
android:id="@+id/mot_img" android:id="@+id/mot_img"
@@ -24,32 +24,32 @@
android:layout_height="200dp" android:layout_height="200dp"
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
android:adjustViewBounds="true" android:adjustViewBounds="true"
android:contentDescription="@string/image_description"
android:scaleType="centerCrop" android:scaleType="centerCrop"
tools:src="@drawable/choice_img_round" tools:src="@drawable/choice_img_round" />
android:contentDescription="@string/image_description" />
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/uploadmot" android:id="@+id/uploadmot"
style="@style/TextButton.Rounded" style="@style/TextButton.Rounded"
android:text="@string/upload_mot" android:text="@string/upload_mot"
app:layout_constraintBottom_toTopOf="@+id/til_submission"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent" />
app:layout_constraintBottom_toTopOf="@+id/til_submission" />
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_submission" android:id="@+id/til_submission"
style="@style/text_input_layout" style="@style/text_input_layout"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent"> app:layout_constraintTop_toTopOf="parent">
<EditText <EditText
android:id="@+id/mot_expiry" android:id="@+id/mot_expiry"
style="@style/EditTextStyle.Date" style="@style/EditTextStyle.Date"
android:hint="@string/mot_expiry_date" android:autofillHints=""
android:autofillHints="" /> android:hint="@string/mot_expiry_date" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>

View File

@@ -9,8 +9,8 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:maxWidth="350dp"
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"
android:maxWidth="350dp"
app:cardCornerRadius="28dp" app:cardCornerRadius="28dp"
app:cardElevation="0dp" app:cardElevation="0dp"
app:layout_constraintBottom_toTopOf="@id/uploadphlic" app:layout_constraintBottom_toTopOf="@id/uploadphlic"
@@ -22,9 +22,9 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="200dp" android:layout_height="200dp"
android:adjustViewBounds="true" android:adjustViewBounds="true"
android:contentDescription="@string/image_description"
android:scaleType="centerCrop" android:scaleType="centerCrop"
tools:src="@drawable/choice_img" tools:src="@drawable/choice_img" />
android:contentDescription="@string/image_description" />
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
@@ -50,7 +50,7 @@
android:hint="@string/private_hire_license_no" android:hint="@string/private_hire_license_no"
android:importantForAutofill="no" android:importantForAutofill="no"
tools:ignore="TextFields" tools:ignore="TextFields"
tools:text="987651"/> tools:text="987651" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@@ -64,9 +64,9 @@
<EditText <EditText
android:id="@+id/ph_expiry" android:id="@+id/ph_expiry"
style="@style/EditTextStyle.Date" style="@style/EditTextStyle.Date"
android:hint="@string/private_hire_license_expiry"
android:autofillHints="date" android:autofillHints="date"
tools:text="30/12/2018"/> android:hint="@string/private_hire_license_expiry"
tools:text="30/12/2018" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@@ -79,6 +79,6 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/til_submission" app:layout_constraintTop_toBottomOf="@+id/til_submission"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.8"/> app:layout_constraintVertical_bias="0.8" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -20,9 +20,9 @@
android:layout_width="200dp" android:layout_width="200dp"
android:layout_height="200dp" android:layout_height="200dp"
android:adjustViewBounds="true" android:adjustViewBounds="true"
android:contentDescription="@string/image_description"
android:scaleType="centerCrop" android:scaleType="centerCrop"
tools:src="@drawable/choice_img_round" tools:src="@drawable/choice_img_round" />
android:contentDescription="@string/image_description" />
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
@@ -61,8 +61,8 @@
<EditText <EditText
android:id="@+id/ph_expiry" android:id="@+id/ph_expiry"
style="@style/EditTextStyle.Date" style="@style/EditTextStyle.Date"
android:hint="@string/private_hire_certificate_expiry" android:autofillHints="date"
android:autofillHints="date" /> android:hint="@string/private_hire_certificate_expiry" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>

View File

@@ -46,34 +46,35 @@
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_name" android:id="@+id/til_name"
style="@style/text_input_layout" style="@style/text_input_layout"
app:layout_constraintBottom_toTopOf="@id/til_email"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent">
app:layout_constraintBottom_toTopOf="@id/til_email">
<EditText <EditText
android:id="@+id/name_register" android:id="@+id/name_register"
style="@style/EditTextStyle" style="@style/EditTextStyle"
android:autofillHints="name"
android:hint="@string/promt_name" android:hint="@string/promt_name"
android:inputType="textPersonName" android:inputType="textPersonName" />
android:autofillHints="name"/>
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_email" android:id="@+id/til_email"
style="@style/text_input_layout" style="@style/text_input_layout"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toBottomOf="@+id/til_name"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toTopOf="parent">
app:layout_constraintTop_toBottomOf="@+id/til_name">
<EditText <EditText
android:id="@+id/email" android:id="@+id/email"
style="@style/EditTextStyle" style="@style/EditTextStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:autofillHints="emailAddress"
android:hint="@string/prompt_email" android:hint="@string/prompt_email"
android:inputType="textEmailAddress" android:inputType="textEmailAddress" />
android:autofillHints="emailAddress" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
@@ -82,12 +83,13 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/til_email"> app:layout_constraintTop_toBottomOf="@+id/til_email">
<EditText <EditText
android:id="@+id/password_top" android:id="@+id/password_top"
style="@style/EditTextStyle" style="@style/EditTextStyle"
android:autofillHints="password"
android:hint="@string/prompt_password" android:hint="@string/prompt_password"
android:inputType="textPassword" android:inputType="textPassword" />
android:autofillHints="password" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
@@ -96,12 +98,13 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/til_new_password"> app:layout_constraintTop_toBottomOf="@+id/til_new_password">
<EditText <EditText
android:id="@+id/password_bottom" android:id="@+id/password_bottom"
style="@style/EditTextStyle" style="@style/EditTextStyle"
android:autofillHints="password"
android:hint="@string/prompt_password" android:hint="@string/prompt_password"
android:inputType="textPassword" android:inputType="textPassword" />
android:autofillHints="password" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -8,10 +8,10 @@
<TextView <TextView
android:id="@+id/login_title_tv" android:id="@+id/login_title_tv"
android:layout_marginTop="96dp"
android:text="@string/update_email"
style="@style/headerStyle" style="@style/headerStyle"
android:layout_marginTop="96dp"
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"
android:text="@string/update_email"
app:layout_constraintBottom_toTopOf="@id/login_subtitle_tv" app:layout_constraintBottom_toTopOf="@id/login_subtitle_tv"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
@@ -20,9 +20,9 @@
<TextView <TextView
android:id="@+id/login_subtitle_tv" android:id="@+id/login_subtitle_tv"
android:text="@string/update_email_subtitle"
style="@style/subheader" style="@style/subheader"
android:layout_marginBottom="24dp" android:layout_marginBottom="24dp"
android:text="@string/update_email_subtitle"
app:layout_constraintBottom_toTopOf="@id/til_name" app:layout_constraintBottom_toTopOf="@id/til_name"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
@@ -33,32 +33,32 @@
android:id="@+id/til_name" android:id="@+id/til_name"
style="@style/text_input_layout" style="@style/text_input_layout"
android:layout_marginTop="48dp" android:layout_marginTop="48dp"
app:layout_constraintBottom_toTopOf="@+id/til_password_top"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent">
app:layout_constraintBottom_toTopOf="@+id/til_password_top">
<EditText <EditText
android:id="@+id/email_update" android:id="@+id/email_update"
android:hint="@string/prompt_email"
android:inputType="textEmailAddress"
style="@style/EditTextStyle" style="@style/EditTextStyle"
android:autofillHints="emailAddress" /> android:autofillHints="emailAddress"
android:hint="@string/prompt_email"
android:inputType="textEmailAddress" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_password_top" android:id="@+id/til_password_top"
style="@style/text_input_layout" style="@style/text_input_layout"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent">
app:layout_constraintBottom_toBottomOf="parent">
<EditText <EditText
android:id="@+id/password_top" android:id="@+id/password_top"
style="@style/EditTextStyle" style="@style/EditTextStyle"
android:autofillHints="password"
android:hint="@string/prompt_password" android:hint="@string/prompt_password"
android:inputType="textPassword" android:inputType="textPassword" />
android:autofillHints="password" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
@@ -70,21 +70,21 @@
<EditText <EditText
android:id="@+id/new_email" android:id="@+id/new_email"
android:hint="@string/prompt_new_email"
style="@style/EditTextStyle" style="@style/EditTextStyle"
android:autofillHints="emailAddress" android:autofillHints="emailAddress"
android:hint="@string/prompt_new_email"
android:inputType="textEmailAddress" /> android:inputType="textEmailAddress" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/submit"
style="@style/TextButton.WithIcon" style="@style/TextButton.WithIcon"
android:text="@string/submit" android:text="@string/submit"
android:id="@+id/submit"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_bias="0.8"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/til_password_top" /> app:layout_constraintTop_toBottomOf="@+id/til_password_top"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.8" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -31,33 +31,33 @@
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_name" android:id="@+id/til_name"
style="@style/text_input_layout" style="@style/text_input_layout"
app:layout_constraintBottom_toTopOf="@id/til_password_top"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent">
app:layout_constraintBottom_toTopOf="@id/til_password_top">
<EditText <EditText
android:id="@+id/email_update" android:id="@+id/email_update"
style="@style/EditTextStyle" style="@style/EditTextStyle"
android:autofillHints="emailAddress"
android:hint="@string/prompt_email" android:hint="@string/prompt_email"
android:inputType="textEmailAddress" android:inputType="textEmailAddress" />
android:autofillHints="emailAddress" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_password_top" android:id="@+id/til_password_top"
style="@style/text_input_layout" style="@style/text_input_layout"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toBottomOf="@+id/til_name"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toTopOf="parent">
app:layout_constraintTop_toBottomOf="@+id/til_name">
<EditText <EditText
android:id="@+id/password_top" android:id="@+id/password_top"
style="@style/EditTextStyle" style="@style/EditTextStyle"
android:autofillHints="password"
android:hint="@string/prompt_password" android:hint="@string/prompt_password"
android:inputType="textPassword" android:inputType="textPassword" />
android:autofillHints="password" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
@@ -70,21 +70,21 @@
<EditText <EditText
android:id="@+id/password_bottom" android:id="@+id/password_bottom"
style="@style/EditTextStyle" style="@style/EditTextStyle"
android:autofillHints="password"
android:hint="@string/prompt_new_password" android:hint="@string/prompt_new_password"
android:inputType="textPassword" android:inputType="textPassword" />
android:autofillHints="password" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/submit" android:id="@+id/submit"
style="@style/TextButton.WithIcon" style="@style/TextButton.WithIcon"
android:text="@string/submit" android:text="@string/submit"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_bias="0.8"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/til_new_password"> app:layout_constraintTop_toBottomOf="@+id/til_new_password"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.8">
</com.google.android.material.button.MaterialButton> </com.google.android.material.button.MaterialButton>

View File

@@ -9,8 +9,8 @@
<TextView <TextView
android:id="@+id/login_title_tv" android:id="@+id/login_title_tv"
style="@style/headerStyle" style="@style/headerStyle"
android:text="@string/update_profile"
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"
android:text="@string/update_profile"
app:layout_constraintBottom_toTopOf="@id/login_subtitle_tv" app:layout_constraintBottom_toTopOf="@id/login_subtitle_tv"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
@@ -45,25 +45,25 @@
android:layout_height="120dp" android:layout_height="120dp"
app:civ_border_width="3dp" app:civ_border_width="3dp"
app:civ_shadow_radius="1dp" app:civ_shadow_radius="1dp"
app:layout_constraintBottom_toTopOf="@id/til_new_email"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/til_new_email"
tools:src="@drawable/choice_img_round" /> tools:src="@drawable/choice_img_round" />
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_new_email" android:id="@+id/til_new_email"
style="@style/text_input_layout" style="@style/text_input_layout"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent">
app:layout_constraintBottom_toBottomOf="parent">
<EditText <EditText
android:id="@+id/update_name" android:id="@+id/update_name"
style="@style/EditTextStyle" style="@style/EditTextStyle"
android:autofillHints="name"
android:hint="@string/prompt_insert_name" android:hint="@string/prompt_insert_name"
android:inputType="textPersonName" android:inputType="textPersonName" />
android:autofillHints="name" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton

View File

@@ -14,11 +14,11 @@
<EditText <EditText
android:id="@+id/reg" android:id="@+id/reg"
android:layout_marginBottom="12dp"
android:hint="@string/car_reg"
android:inputType="textCapCharacters"
style="@style/EditTextStyle" style="@style/EditTextStyle"
android:autofillHints="none" /> android:layout_marginBottom="12dp"
android:autofillHints="none"
android:hint="@string/car_reg"
android:inputType="textCapCharacters" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@@ -26,12 +26,12 @@
<EditText <EditText
android:id="@+id/make" android:id="@+id/make"
style="@style/EditTextStyle"
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"
android:hint="@string/car_make" android:hint="@string/car_make"
android:importantForAutofill="no"
android:inputType="none" android:inputType="none"
android:maxLines="1" android:maxLines="1" />
style="@style/EditTextStyle"
android:importantForAutofill="no" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@@ -39,12 +39,12 @@
<EditText <EditText
android:id="@+id/car_model" android:id="@+id/car_model"
style="@style/EditTextStyle"
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"
android:hint="@string/car_model" android:hint="@string/car_model"
android:importantForAutofill="no"
android:inputType="none" android:inputType="none"
android:maxLines="1" android:maxLines="1" />
style="@style/EditTextStyle"
android:importantForAutofill="no" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@@ -52,12 +52,12 @@
<EditText <EditText
android:id="@+id/colour" android:id="@+id/colour"
style="@style/EditTextStyle"
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"
android:autofillHints="color"
android:hint="@string/car_colour" android:hint="@string/car_colour"
android:inputType="none" android:inputType="none"
android:maxLines="1" android:maxLines="1" />
style="@style/EditTextStyle"
android:autofillHints="color" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@@ -65,15 +65,15 @@
<EditText <EditText
android:id="@+id/keeper_name" android:id="@+id/keeper_name"
style="@style/EditTextStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"
android:autofillHints="name"
android:ems="10" android:ems="10"
android:hint="@string/name_of_keeper" android:hint="@string/name_of_keeper"
android:inputType="textPersonName" android:inputType="textPersonName"
android:maxLines="1" android:maxLines="1" />
style="@style/EditTextStyle"
android:autofillHints="name" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@@ -81,7 +81,9 @@
<EditText <EditText
android:id="@+id/address" android:id="@+id/address"
style="@style/EditTextStyle"
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"
android:autofillHints="postalAddress"
android:gravity="top|start" android:gravity="top|start"
android:hint="@string/address_of_keeper" android:hint="@string/address_of_keeper"
android:inputType="textMultiLine" android:inputType="textMultiLine"
@@ -89,9 +91,7 @@
android:maxLines="7" android:maxLines="7"
android:minLines="4" android:minLines="4"
android:selectAllOnFocus="true" android:selectAllOnFocus="true"
android:singleLine="true" android:singleLine="true" />
style="@style/EditTextStyle"
android:autofillHints="postalAddress" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@@ -100,16 +100,16 @@
<EditText <EditText
android:id="@+id/postcode" android:id="@+id/postcode"
style="@style/EditTextStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"
android:autofillHints="postalCode"
android:hint="@string/postcode_of_keeper" android:hint="@string/postcode_of_keeper"
android:inputType="none|textCapCharacters" android:inputType="none|textCapCharacters"
android:maxLines="1" android:maxLines="1"
android:selectAllOnFocus="true" android:selectAllOnFocus="true"
android:singleLine="true" android:singleLine="true" />
style="@style/EditTextStyle"
android:autofillHints="postalCode" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@@ -117,10 +117,10 @@
<EditText <EditText
android:id="@+id/start_date" android:id="@+id/start_date"
android:layout_marginBottom="12dp"
android:hint="@string/car_start_date"
style="@style/EditTextStyle.Date" style="@style/EditTextStyle.Date"
android:autofillHints="date" /> android:layout_marginBottom="12dp"
android:autofillHints="date"
android:hint="@string/car_start_date" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@@ -129,17 +129,17 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"
android:hint="@string/vehicle_seized"
android:buttonTint="@color/colour_eight" android:buttonTint="@color/colour_eight"
android:hint="@string/vehicle_seized"
android:padding="12dp" android:padding="12dp"
android:textSize="18sp" /> android:textSize="18sp" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/submit" android:id="@+id/submit"
style="@style/TextButton.WithIcon" style="@style/TextButton.WithIcon"
android:text="@string/submit" android:layout_gravity="end"
android:layout_marginBottom="48dp" android:layout_marginBottom="48dp"
android:layout_gravity="end" /> android:text="@string/submit" />
</LinearLayout> </LinearLayout>
</ScrollView> </ScrollView>

View File

@@ -3,8 +3,8 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginBottom="64dp" android:layout_marginBottom="64dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"> app:layout_constraintStart_toStartOf="parent">
@@ -12,8 +12,8 @@
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/driver" android:id="@+id/driver"
style="@style/TextButton.WithIcon" style="@style/TextButton.WithIcon"
android:text="@string/driver_profile" android:layout_marginBottom="12dp"
android:layout_marginBottom="12dp" /> android:text="@string/driver_profile" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/car" android:id="@+id/car"

View File

@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/nav_header_height" android:layout_height="@dimen/nav_header_height"
xmlns:tools="http://schemas.android.com/tools"
android:background="@color/colour_nine" android:background="@color/colour_nine"
android:gravity="bottom" android:gravity="bottom"
android:orientation="vertical" android:orientation="vertical"
@@ -46,8 +46,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingTop="@dimen/nav_header_vertical_spacing" android:paddingTop="@dimen/nav_header_vertical_spacing"
android:text="@string/nav_header_title" android:text="@string/nav_header_title"
android:textSize="18sp" android:textAppearance="@style/TextAppearance.AppCompat.Body1"
android:textAppearance="@style/TextAppearance.AppCompat.Body1" /> android:textSize="18sp" />
<TextView <TextView
android:id="@+id/driver_email" android:id="@+id/driver_email"

View File

@@ -6,12 +6,12 @@
<ImageView <ImageView
android:id="@+id/background_img" android:id="@+id/background_img"
style="@style/imageBackground"
android:contentDescription="@string/image_description"
android:src="@drawable/welcome_background" android:src="@drawable/welcome_background"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent" />
style="@style/imageBackground"
android:contentDescription="@string/image_description" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".ui.update.UpdateActivity"> tools:context=".ui.update.UpdateActivity">

View File

@@ -26,22 +26,22 @@
app:layout_constraintTop_toBottomOf="@+id/login_title_tv" /> app:layout_constraintTop_toBottomOf="@+id/login_title_tv" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
style="@style/TextButton.WithIcon"
android:id="@+id/update_email_button" android:id="@+id/update_email_button"
style="@style/TextButton.WithIcon"
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"
android:text="@string/update_email"
app:layout_constraintBottom_toTopOf="@id/update_password_button" app:layout_constraintBottom_toTopOf="@id/update_password_button"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent" />
android:text="@string/update_email" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
style="@style/TextButton.WithIcon"
android:id="@+id/update_password_button" android:id="@+id/update_password_button"
style="@style/TextButton.WithIcon"
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"
android:text="@string/update_password"
app:layout_constraintBottom_toTopOf="@id/update_profile_button" app:layout_constraintBottom_toTopOf="@id/update_profile_button"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent" />
android:text="@string/update_password" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/update_profile_button" android:id="@+id/update_profile_button"
@@ -53,11 +53,11 @@
app:layout_constraintStart_toStartOf="parent" /> app:layout_constraintStart_toStartOf="parent" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
style="@style/TextButton.WithIcon"
android:id="@+id/delete_profile" android:id="@+id/delete_profile"
style="@style/TextButton.WithIcon"
android:layout_marginBottom="64dp" android:layout_marginBottom="64dp"
android:text="@string/delete_profile"
android:backgroundTint="@color/colour_nine" android:backgroundTint="@color/colour_nine"
android:text="@string/delete_profile"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" /> app:layout_constraintStart_toStartOf="parent" />

View File

@@ -45,9 +45,9 @@
app:destination="@id/loginFragment" app:destination="@id/loginFragment"
app:enterAnim="@anim/nav_default_pop_enter_anim" app:enterAnim="@anim/nav_default_pop_enter_anim"
app:exitAnim="@anim/nav_default_pop_exit_anim" app:exitAnim="@anim/nav_default_pop_exit_anim"
app:launchSingleTop="true"
app:popEnterAnim="@anim/nav_default_pop_enter_anim" app:popEnterAnim="@anim/nav_default_pop_enter_anim"
app:popExitAnim="@anim/nav_default_pop_exit_anim" app:popExitAnim="@anim/nav_default_pop_exit_anim"
app:launchSingleTop="true"
app:popUpTo="@id/auth_navigation" app:popUpTo="@id/auth_navigation"
app:popUpToInclusive="true" /> app:popUpToInclusive="true" />
</fragment> </fragment>