mirror of
https://github.com/hmalik144/Driver.git
synced 2026-01-31 02:41:46 +00:00
- mid commit
This commit is contained in:
@@ -166,4 +166,8 @@ dependencies {
|
||||
androidTestImplementation "com.squareup.retrofit2:converter-gson:$retrofit_version"
|
||||
/ * screenshot library */
|
||||
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}"
|
||||
}
|
||||
|
||||
@@ -25,7 +25,6 @@ import org.hamcrest.TypeSafeMatcher
|
||||
import org.hamcrest.core.AllOf
|
||||
import org.junit.After
|
||||
import org.junit.Before
|
||||
import org.junit.ClassRule
|
||||
import org.junit.Rule
|
||||
import tools.fastlane.screengrab.Screengrab
|
||||
import tools.fastlane.screengrab.UiAutomatorScreenshotStrategy
|
||||
@@ -89,35 +88,6 @@ open class BaseUiTest<T : BaseActivity<*, *>>(
|
||||
open fun beforeLaunch() {}
|
||||
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) {
|
||||
onView(
|
||||
CoreMatchers.allOf(
|
||||
|
||||
@@ -3,7 +3,7 @@ package h_mal.appttude.com.driver.ui
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
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.databinding.FragmentHomeDriverBinding
|
||||
import h_mal.appttude.com.driver.utils.hide
|
||||
@@ -13,9 +13,7 @@ import h_mal.appttude.com.driver.viewmodels.RoleViewModel
|
||||
|
||||
|
||||
class HomeFragment :
|
||||
DataSubmissionBaseFragment<RoleViewModel, FragmentHomeDriverBinding, String>() {
|
||||
|
||||
override var model = String()
|
||||
BaseFragment<RoleViewModel, FragmentHomeDriverBinding>() {
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
@@ -12,8 +12,6 @@ import h_mal.appttude.com.driver.viewmodels.DriverLicenseViewModel
|
||||
class DriverLicenseFragment :
|
||||
DataSubmissionBaseFragment<DriverLicenseViewModel, FragmentDriverLicenseBinding, DriversLicense>() {
|
||||
|
||||
override var model = DriversLicense()
|
||||
|
||||
override fun setupView(binding: FragmentDriverLicenseBinding) {
|
||||
binding.apply {
|
||||
licExpiry.apply {
|
||||
|
||||
@@ -13,8 +13,6 @@ import h_mal.appttude.com.driver.viewmodels.DriverProfileViewModel
|
||||
class DriverProfileFragment :
|
||||
DataSubmissionBaseFragment<DriverProfileViewModel, FragmentDriverProfileBinding, DriverProfile>() {
|
||||
|
||||
override var model = DriverProfile()
|
||||
|
||||
override fun setupView(binding: FragmentDriverProfileBinding) = binding.run {
|
||||
namesInput.setTextOnChange { model.forenames = it }
|
||||
addressInput.setTextOnChange { model.address = it }
|
||||
|
||||
@@ -13,8 +13,6 @@ import h_mal.appttude.com.driver.viewmodels.PrivateHireLicenseViewModel
|
||||
class PrivateHireLicenseFragment : DataSubmissionBaseFragment
|
||||
<PrivateHireLicenseViewModel, FragmentPrivateHireLicenseBinding, PrivateHireLicense>() {
|
||||
|
||||
override var model = PrivateHireLicense()
|
||||
|
||||
override fun setupView(binding: FragmentPrivateHireLicenseBinding) = binding.run {
|
||||
phNo.setTextOnChange { model.phNumber = it }
|
||||
phExpiry.apply {
|
||||
|
||||
@@ -18,8 +18,6 @@ class InsuranceFragment :
|
||||
|
||||
private var selectedImages: List<Uri>? = listOf()
|
||||
|
||||
override var model = Insurance()
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
setImageSelectionAsMultiple()
|
||||
|
||||
@@ -12,8 +12,6 @@ import h_mal.appttude.com.driver.viewmodels.LogbookViewModel
|
||||
class LogbookFragment :
|
||||
DataSubmissionBaseFragment<LogbookViewModel, FragmentLogbookBinding, Logbook>() {
|
||||
|
||||
override var model = Logbook()
|
||||
|
||||
override fun setupView(binding: FragmentLogbookBinding) = binding.run {
|
||||
v5cNo.setTextOnChange { model.v5cnumber = it }
|
||||
uploadLb.setOnClickListener { openGalleryWithPermissionRequest() }
|
||||
|
||||
@@ -12,8 +12,6 @@ import h_mal.appttude.com.driver.viewmodels.MotViewModel
|
||||
|
||||
class MotFragment : DataSubmissionBaseFragment<MotViewModel, FragmentMotBinding, Mot>() {
|
||||
|
||||
override var model = Mot()
|
||||
|
||||
override fun setupView(binding: FragmentMotBinding) = binding.run {
|
||||
motExpiry.apply {
|
||||
setOnClickListener {
|
||||
|
||||
@@ -13,8 +13,6 @@ import h_mal.appttude.com.driver.viewmodels.PrivateHireVehicleViewModel
|
||||
class PrivateHireVehicleFragment :
|
||||
DataSubmissionBaseFragment<PrivateHireVehicleViewModel, FragmentPrivateHireLicenseBinding, PrivateHireVehicle>() {
|
||||
|
||||
override var model = PrivateHireVehicle()
|
||||
|
||||
override fun setupView(binding: FragmentPrivateHireLicenseBinding) = binding.run {
|
||||
phNo.setTextOnChange { model.phCarNumber = it }
|
||||
phExpiry.apply {
|
||||
|
||||
@@ -11,8 +11,6 @@ import h_mal.appttude.com.driver.viewmodels.VehicleProfileViewModel
|
||||
class VehicleProfileFragment : DataSubmissionBaseFragment
|
||||
<VehicleProfileViewModel, FragmentVehicleSetupBinding, VehicleProfile>() {
|
||||
|
||||
override var model = VehicleProfile()
|
||||
|
||||
override fun setupView(binding: FragmentVehicleSetupBinding) = binding.run {
|
||||
reg.setTextOnChange { model.reg = it }
|
||||
make.setTextOnChange { model.make = it }
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
android:theme="@style/AppTheme">
|
||||
<activity
|
||||
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>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
|
||||
@@ -4,7 +4,6 @@ import android.content.Intent
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.view.View.OnAttachStateChangeListener
|
||||
import android.view.ViewGroup.LayoutParams
|
||||
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
|
||||
import android.view.ViewGroup.inflate
|
||||
@@ -156,6 +155,7 @@ abstract class BaseActivity<V : BaseViewModel, VB : ViewBinding> : AppCompatActi
|
||||
super.onToastHidden()
|
||||
mIdlingResource?.setIdleState(true)
|
||||
}
|
||||
|
||||
override fun onToastShown() {
|
||||
super.onToastShown()
|
||||
mIdlingResource?.setIdleState(false)
|
||||
@@ -178,6 +178,7 @@ abstract class BaseActivity<V : BaseViewModel, VB : ViewBinding> : AppCompatActi
|
||||
super.onShown(transientBottomBar)
|
||||
mIdlingResource?.setIdleState(false)
|
||||
}
|
||||
|
||||
override fun onDismissed(transientBottomBar: Snackbar?, event: Int) {
|
||||
super.onDismissed(transientBottomBar, event)
|
||||
mIdlingResource?.setIdleState(true)
|
||||
|
||||
@@ -59,6 +59,7 @@ open class BaseFirebaseAdapter<T : Any, VB : ViewBinding>(
|
||||
super.onDataChanged()
|
||||
if (itemCount == 0) emptyList()
|
||||
}
|
||||
|
||||
override fun onError(error: DatabaseError) {
|
||||
super.onError(error)
|
||||
when (error.code) {
|
||||
|
||||
@@ -1,14 +1,9 @@
|
||||
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.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.activity.result.contract.ActivityResultContract
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.createViewModelLazy
|
||||
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.utils.GenericsHelper.getGenericClassAt
|
||||
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.android.x.kodein
|
||||
import org.kodein.di.generic.instance
|
||||
@@ -36,12 +30,6 @@ abstract class BaseFragment<V : BaseViewModel, VB : ViewBinding> : Fragment(), K
|
||||
private fun getFragmentViewModel(): Lazy<V> =
|
||||
createViewModelLazy(getGenericClassAt(0), { viewModelStore }, factoryProducer = { factory })
|
||||
|
||||
private var multipleImage: Boolean = false
|
||||
|
||||
fun setImageSelectionAsMultiple() {
|
||||
multipleImage = true
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
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 showSnackBar(message: String) = (activity as BaseActivity<*, *>).showSnackBar(message)
|
||||
}
|
||||
@@ -1,26 +1,22 @@
|
||||
package h_mal.appttude.com.driver.base
|
||||
|
||||
import android.Manifest
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.widget.EditText
|
||||
import androidx.core.widget.doAfterTextChanged
|
||||
import androidx.viewbinding.ViewBinding
|
||||
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.utils.PermissionsUtils.askForPermissions
|
||||
import h_mal.appttude.com.driver.utils.GenericsHelper.getGenericClassAt
|
||||
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> :
|
||||
BaseFragment<V, VB>() {
|
||||
|
||||
var picUri: Uri? = null
|
||||
|
||||
abstract var model: T
|
||||
var model: T = getGenericClassAt<T>(2).createInstance()
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
@@ -52,17 +48,7 @@ abstract class DataSubmissionBaseFragment<V : DataSubmissionBaseViewModel<T>, VB
|
||||
open fun submit() {}
|
||||
|
||||
fun openGalleryWithPermissionRequest() {
|
||||
if (askForPermissions(Manifest.permission.READ_EXTERNAL_STORAGE, IMAGE_PERMISSION_RESULT)) {
|
||||
openGalleryForImage()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onRequestPermissionsResult(
|
||||
requestCode: Int,
|
||||
permissions: Array<String>,
|
||||
grantResults: IntArray
|
||||
) = onPermissionRequest(requestCode, IMAGE_PERMISSION_RESULT, grantResults) {
|
||||
openGalleryForImage()
|
||||
showStorageWithPermissionCheck()
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
@@ -25,7 +25,7 @@ abstract class DrawerActivity<V : BaseViewModel, VB : ViewBinding> : BaseActivit
|
||||
abstract val containerId: Int
|
||||
abstract val drawerLayoutId: Int
|
||||
abstract val toolbarId: Int
|
||||
abstract val navViewId:Int
|
||||
abstract val navViewId: Int
|
||||
|
||||
lateinit var navController: NavController
|
||||
lateinit var appBarConfiguration: AppBarConfiguration
|
||||
|
||||
@@ -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>?) {}
|
||||
}
|
||||
@@ -10,7 +10,8 @@ import androidx.preference.PreferenceManager
|
||||
*
|
||||
*/
|
||||
const val SORT_OPTION = "SORT_OPTION"
|
||||
class PreferenceProvider (context: Context) {
|
||||
|
||||
class PreferenceProvider(context: Context) {
|
||||
|
||||
private val appContext = context.applicationContext
|
||||
|
||||
|
||||
@@ -8,4 +8,4 @@ data class DriverProfile(
|
||||
var dob: String? = null,
|
||||
var ni: String? = null,
|
||||
var dateFirst: String? = null
|
||||
)
|
||||
) : Model
|
||||
@@ -5,4 +5,4 @@ data class DriversLicense(
|
||||
var licenseImageString: String? = null,
|
||||
var licenseNumber: String? = null,
|
||||
var licenseExpiry: String? = null
|
||||
)
|
||||
) : Model
|
||||
@@ -4,4 +4,4 @@ data class Insurance(
|
||||
var photoStrings: MutableList<String?>? = null,
|
||||
var insurerName: String? = null,
|
||||
var expiryDate: String? = null
|
||||
)
|
||||
) : Model
|
||||
@@ -4,4 +4,4 @@ package h_mal.appttude.com.driver.model
|
||||
data class Logbook(
|
||||
var photoString: String? = null,
|
||||
var v5cnumber: String? = null
|
||||
)
|
||||
) : Model
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
package h_mal.appttude.com.driver.model
|
||||
|
||||
interface Model
|
||||
@@ -4,4 +4,4 @@ package h_mal.appttude.com.driver.model
|
||||
data class Mot(
|
||||
var motImageString: String? = null,
|
||||
var motExpiry: String? = null
|
||||
)
|
||||
) : Model
|
||||
@@ -5,4 +5,4 @@ data class PrivateHireLicense(
|
||||
var phImageString: String? = null,
|
||||
var phNumber: String? = null,
|
||||
var phExpiry: String? = null
|
||||
)
|
||||
) : Model
|
||||
@@ -1,8 +1,8 @@
|
||||
package h_mal.appttude.com.driver.model
|
||||
|
||||
|
||||
class PrivateHireVehicle(
|
||||
data class PrivateHireVehicle(
|
||||
var phCarImageString: String? = null,
|
||||
var phCarNumber: String? = null,
|
||||
var phCarExpiry: String? = null
|
||||
)
|
||||
) : Model
|
||||
@@ -11,4 +11,4 @@ data class VehicleProfile(
|
||||
var keeperPostCode: String? = null,
|
||||
var startDate: String? = null,
|
||||
var isSeized: Boolean = false
|
||||
)
|
||||
) : Model
|
||||
3
app/src/main/java/h_mal/appttude/com/driver/ui/.idea/.gitignore
generated
vendored
3
app/src/main/java/h_mal/appttude/com/driver/ui/.idea/.gitignore
generated
vendored
@@ -1,3 +0,0 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectDictionaryState">
|
||||
<dictionary name="h_mal" />
|
||||
</component>
|
||||
</project>
|
||||
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Kotlin2JsCompilerArguments">
|
||||
<option name="sourceMapEmbedSources" />
|
||||
</component>
|
||||
</project>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
@@ -1,20 +1,18 @@
|
||||
package h_mal.appttude.com.driver.ui.update
|
||||
|
||||
import android.Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
import android.net.Uri
|
||||
import androidx.core.widget.doAfterTextChanged
|
||||
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.utils.PermissionsUtils.askForPermissions
|
||||
import h_mal.appttude.com.driver.utils.setEnterPressedListener
|
||||
import h_mal.appttude.com.driver.utils.setGlideImage
|
||||
import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
|
||||
|
||||
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 nameChangeListener: Boolean = false
|
||||
@@ -35,11 +33,7 @@ class UpdateProfileFragment : BaseFragment<UpdateUserViewModel, FragmentUpdatePr
|
||||
setEnterPressedListener { submitProfileUpdate() }
|
||||
}
|
||||
|
||||
profileImg.setOnClickListener {
|
||||
if (askForPermissions(READ_EXTERNAL_STORAGE, IMAGE_PERMISSION_RESULT)) {
|
||||
openGalleryForImage()
|
||||
}
|
||||
}
|
||||
profileImg.setOnClickListener { openGalleryForImage() }
|
||||
|
||||
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?) {
|
||||
super.onSuccess(data)
|
||||
if (data is FirebaseUser) setFields(data)
|
||||
|
||||
@@ -5,7 +5,7 @@ package h_mal.appttude.com.driver.utils
|
||||
*
|
||||
* @sample #boolean.isTrue{ #Do something when its true }
|
||||
*/
|
||||
inline fun Boolean.isTrue(block: () -> Unit){
|
||||
inline fun Boolean.isTrue(block: () -> Unit) {
|
||||
if (this) {
|
||||
block()
|
||||
}
|
||||
@@ -16,7 +16,7 @@ inline fun Boolean.isTrue(block: () -> Unit){
|
||||
*
|
||||
* @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) {
|
||||
block(this)
|
||||
} else {
|
||||
|
||||
@@ -15,31 +15,43 @@ class FirebaseException(
|
||||
|
||||
enum class Status(private val code: Int) {
|
||||
DATA_STALE(-1),
|
||||
|
||||
/** The server indicated that this operation failed */
|
||||
OPERATION_FAILED(-2),
|
||||
|
||||
/** This client does not have permission to perform this operation */
|
||||
PERMISSION_DENIED(-3),
|
||||
|
||||
/** The operation had to be aborted due to a network disconnect */
|
||||
DISCONNECTED(-4),
|
||||
|
||||
/** 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,
|
||||
* expired, or the secret that was used to generate it has been revoked.
|
||||
*/
|
||||
INVALID_TOKEN(-7),
|
||||
|
||||
/** The transaction had too many retries */
|
||||
MAX_RETRIES(-8),
|
||||
|
||||
/** The transaction was overridden by a subsequent set */
|
||||
OVERRIDDEN_BY_SET(-9),
|
||||
|
||||
/** The service is unavailable */
|
||||
UNAVAILABLE(-10),
|
||||
|
||||
/** An exception occurred in user code */
|
||||
USER_CODE_EXCEPTION(-11),
|
||||
|
||||
/** The operation could not be performed due to a network error. */
|
||||
NETWORK_ERROR(-24),
|
||||
|
||||
/** The write was canceled locally */
|
||||
WRITE_CANCELED(-25),
|
||||
|
||||
/**
|
||||
* An unknown error occurred. Please refer to the error message and error details for more
|
||||
* information.
|
||||
|
||||
@@ -37,6 +37,7 @@ suspend inline fun <reified T : Any> DatabaseReference.getDataFromDatabaseRef():
|
||||
is EventResponse.Changed -> {
|
||||
response.snapshot.getValue(T::class.java)
|
||||
}
|
||||
|
||||
is EventResponse.Cancelled -> {
|
||||
throw FirebaseException(response.error)
|
||||
}
|
||||
@@ -53,17 +54,19 @@ suspend inline fun <reified T : Any> DatabaseReference.getListDataFromDatabaseRe
|
||||
is EventResponse.Changed -> {
|
||||
response.snapshot.children.map { it.getValue(T::class.java) }
|
||||
}
|
||||
|
||||
is EventResponse.Cancelled -> {
|
||||
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()) {
|
||||
is EventResponse.Changed -> {
|
||||
response.snapshot.getValue(clazz)
|
||||
}
|
||||
|
||||
is EventResponse.Cancelled -> {
|
||||
throw FirebaseException(response.error)
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ object GenericsHelper {
|
||||
*
|
||||
* @sample inflateBindingByType(getGenericClassAt(0), layoutInflater)
|
||||
*/
|
||||
fun <VB: ViewBinding> inflateBindingByType(
|
||||
fun <VB : ViewBinding> inflateBindingByType(
|
||||
genericClassAt: KClass<VB>,
|
||||
layoutInflater: LayoutInflater
|
||||
): VB = try {
|
||||
@@ -30,12 +30,12 @@ object GenericsHelper {
|
||||
&& viewBinding.parameterTypes.getOrNull(0) == LayoutInflater::class.java
|
||||
}.invoke(null, layoutInflater) as VB
|
||||
} catch (exception: Exception) {
|
||||
println ("generic class failed at = $genericClassAt")
|
||||
println("generic class failed at = $genericClassAt")
|
||||
exception.printStackTrace()
|
||||
throw IllegalStateException("Can not inflate binding from generic")
|
||||
}
|
||||
|
||||
fun <VB: ViewBinding> LayoutInflater.inflateBindingByType(
|
||||
fun <VB : ViewBinding> LayoutInflater.inflateBindingByType(
|
||||
container: ViewGroup?,
|
||||
genericClassAt: KClass<VB>
|
||||
): VB = try {
|
||||
|
||||
@@ -9,7 +9,6 @@ import android.provider.Settings
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.core.app.ActivityCompat
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.fragment.app.Fragment
|
||||
|
||||
|
||||
object PermissionsUtils {
|
||||
@@ -39,12 +38,6 @@ object PermissionsUtils {
|
||||
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() {
|
||||
AlertDialog.Builder(this)
|
||||
.setTitle("Permission Denied")
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<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 xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
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>
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<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 xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
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>
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
<vector android:height="72dp" android:tint="#FFFFFF"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="72dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<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 xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="72dp"
|
||||
android:height="72dp"
|
||||
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>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<vector android:height="24dp"
|
||||
android:tint="#FFFFFF"
|
||||
android:viewportHeight="24"
|
||||
android:viewportWidth="24"
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
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
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M12,4l-1.41,1.41L16.17,11H4v2h12.17l-5.58,5.59L12,20l8,-8z" />
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<vector android:height="24dp"
|
||||
android:tint="#FFFFFF"
|
||||
android:viewportHeight="24"
|
||||
android:viewportWidth="24"
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
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
|
||||
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" />
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<vector android:height="24dp"
|
||||
android:tint="#FFFFFF"
|
||||
android:viewportHeight="24"
|
||||
android:viewportWidth="24"
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
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
|
||||
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" />
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<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:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@drawable/background_with_curve"
|
||||
|
||||
@@ -11,9 +11,9 @@
|
||||
android:id="@+id/appbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:elevation="0dp"
|
||||
android:background="@android:color/transparent"
|
||||
android:theme="@style/AppTheme.AppBarOverlay">
|
||||
android:theme="@style/AppTheme.AppBarOverlay"
|
||||
app:elevation="0dp">
|
||||
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
android:id="@+id/toolbar"
|
||||
|
||||
@@ -37,9 +37,9 @@
|
||||
<EditText
|
||||
android:id="@+id/email_update"
|
||||
style="@style/EditTextStyle"
|
||||
android:autofillHints="emailAddress"
|
||||
android:hint="@string/prompt_email"
|
||||
android:inputType="textEmailAddress"
|
||||
android:autofillHints="emailAddress" />
|
||||
android:inputType="textEmailAddress" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
@@ -52,9 +52,9 @@
|
||||
<EditText
|
||||
android:id="@+id/password_top"
|
||||
style="@style/EditTextStyle"
|
||||
android:autofillHints="password"
|
||||
android:hint="@string/prompt_password"
|
||||
android:inputType="textPassword"
|
||||
android:autofillHints="password" />
|
||||
android:inputType="textPassword" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
|
||||
@@ -11,9 +11,9 @@
|
||||
android:layout_marginBottom="12dp"
|
||||
app:cardCornerRadius="28dp"
|
||||
app:cardElevation="0dp"
|
||||
app:layout_constraintBottom_toTopOf="@id/til_lic_no"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintBottom_toTopOf="@id/til_lic_no">
|
||||
app:layout_constraintRight_toRightOf="parent">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/driversli_img"
|
||||
@@ -21,23 +21,23 @@
|
||||
android:layout_height="200dp"
|
||||
android:layout_alignParentStart="true"
|
||||
android:adjustViewBounds="true"
|
||||
android:contentDescription="@string/image_description"
|
||||
android:scaleType="centerCrop"
|
||||
tools:src="@drawable/choice_img_round"
|
||||
android:contentDescription="@string/image_description" />
|
||||
tools:src="@drawable/choice_img_round" />
|
||||
|
||||
<com.mikhaellopez.circularimageview.CircularImageView
|
||||
android:id="@+id/search_image"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:src="@drawable/ic_baseline_photo_library_24"
|
||||
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_gravity="bottom|end"
|
||||
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>
|
||||
|
||||
@@ -53,24 +53,24 @@
|
||||
android:id="@+id/lic_no"
|
||||
style="@style/EditTextStyle.Date"
|
||||
android:hint="@string/drivers_license_no"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="none"
|
||||
android:maxLines="1"
|
||||
android:importantForAutofill="no" />
|
||||
android:maxLines="1" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/til_submission"
|
||||
style="@style/text_input_layout"
|
||||
app:layout_constraintTop_toBottomOf="@id/til_lic_no"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent">
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/til_lic_no">
|
||||
|
||||
<EditText
|
||||
android:hint="@string/license_expiry_date"
|
||||
android:id="@+id/lic_expiry"
|
||||
style="@style/EditTextStyle.Date"
|
||||
android:autofillHints="date" />
|
||||
android:autofillHints="date"
|
||||
android:hint="@string/license_expiry_date" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
@@ -78,10 +78,10 @@
|
||||
android:id="@+id/submit"
|
||||
style="@style/TextButton.WithIcon"
|
||||
android:text="@string/submit"
|
||||
app:layout_constraintTop_toBottomOf="@+id/til_submission"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/til_submission"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintVertical_bias="0.8" />
|
||||
|
||||
|
||||
@@ -46,18 +46,17 @@
|
||||
tools:src="@drawable/choice_img_round" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
style="@style/text_input_layout">
|
||||
<com.google.android.material.textfield.TextInputLayout style="@style/text_input_layout">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/names_input"
|
||||
style="@style/EditTextStyle"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:autofillHints="name"
|
||||
android:ems="10"
|
||||
android:hint="@string/full_name"
|
||||
android:inputType="textPersonName"
|
||||
android:maxLines="1"
|
||||
android:autofillHints="name" />
|
||||
android:maxLines="1" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
@@ -67,6 +66,7 @@
|
||||
android:id="@+id/address_input"
|
||||
style="@style/EditTextStyle"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:autofillHints="postalAddress"
|
||||
android:ems="10"
|
||||
android:gravity="top|start"
|
||||
android:hint="@string/address"
|
||||
@@ -75,8 +75,7 @@
|
||||
android:maxLines="7"
|
||||
android:minLines="4"
|
||||
android:selectAllOnFocus="true"
|
||||
android:singleLine="true"
|
||||
android:autofillHints="postalAddress" />
|
||||
android:singleLine="true" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
@@ -86,12 +85,12 @@
|
||||
android:id="@+id/postcode_input"
|
||||
style="@style/EditTextStyle"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:autofillHints="postalCode"
|
||||
android:hint="@string/postcode"
|
||||
android:inputType="none"
|
||||
android:maxLines="1"
|
||||
android:selectAllOnFocus="true"
|
||||
android:singleLine="true"
|
||||
android:autofillHints="postalCode" />
|
||||
android:singleLine="true" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
@@ -101,8 +100,8 @@
|
||||
android:id="@+id/dob_input"
|
||||
style="@style/EditTextStyle.Date"
|
||||
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>
|
||||
|
||||
@@ -113,9 +112,9 @@
|
||||
style="@style/EditTextStyle"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:hint="@string/ni_number"
|
||||
android:maxLines="1"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="none"
|
||||
android:maxLines="1"
|
||||
tools:ignore="TextFields" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
@@ -126,8 +125,8 @@
|
||||
android:id="@+id/date_first"
|
||||
style="@style/EditTextStyle.Date"
|
||||
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>
|
||||
|
||||
|
||||
@@ -37,9 +37,9 @@
|
||||
<EditText
|
||||
android:id="@+id/submission_et"
|
||||
style="@style/EditTextStyle"
|
||||
android:autofillHints="emailAddress"
|
||||
android:hint="@string/prompt_email"
|
||||
android:inputType="textEmailAddress"
|
||||
android:autofillHints="emailAddress" />
|
||||
android:inputType="textEmailAddress" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginEnd="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>
|
||||
@@ -10,12 +10,12 @@
|
||||
android:id="@+id/carouselView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="200dp"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintBottom_toTopOf="@id/uploadInsurance"
|
||||
android:layout_marginBottom="12dp"
|
||||
app:autoPlay="false"
|
||||
app:fillColor="#FFFFFFFF"
|
||||
app:layout_constraintBottom_toTopOf="@id/uploadInsurance"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:pageColor="#00000000"
|
||||
app:radius="6dp"
|
||||
app:strokeColor="#FF777777"
|
||||
@@ -41,11 +41,11 @@
|
||||
android:id="@+id/insurer"
|
||||
style="@style/EditTextStyle"
|
||||
android:hint="@string/insurer"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="none"
|
||||
android:maxLines="1"
|
||||
android:selectAllOnFocus="true"
|
||||
android:singleLine="true"
|
||||
android:importantForAutofill="no" />
|
||||
android:singleLine="true" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
@@ -61,9 +61,9 @@
|
||||
style="@style/EditTextStyle.Date"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:inputType="date"
|
||||
android:hint="@string/insurance_expiry"
|
||||
android:importantForAutofill="no" />
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="date" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<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"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
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
|
||||
android:layout_width="wrap_content"
|
||||
@@ -13,9 +13,9 @@
|
||||
android:layout_marginBottom="12dp"
|
||||
app:cardCornerRadius="28dp"
|
||||
app:cardElevation="0dp"
|
||||
app:layout_constraintBottom_toTopOf="@id/upload_lb"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintBottom_toTopOf="@id/upload_lb">
|
||||
app:layout_constraintRight_toRightOf="parent">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/log_book_img"
|
||||
@@ -23,47 +23,47 @@
|
||||
android:layout_height="200dp"
|
||||
android:layout_alignParentStart="true"
|
||||
android:adjustViewBounds="true"
|
||||
android:contentDescription="@string/image_description"
|
||||
android:scaleType="centerCrop"
|
||||
tools:src="@drawable/choice_img_round"
|
||||
android:contentDescription="@string/image_description" />
|
||||
tools:src="@drawable/choice_img_round" />
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
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"
|
||||
android:selectAllOnFocus="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
|
||||
android:id="@+id/til_v5c"
|
||||
style="@style/text_input_layout"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent">
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/v5c_no"
|
||||
style="@style/EditTextStyle"
|
||||
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.button.MaterialButton
|
||||
android:id="@+id/submit"
|
||||
style="@style/TextButton.WithIcon"
|
||||
android:text="@string/submit"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintVertical_bias="0.8"
|
||||
app:layout_constraintEnd_toEndOf="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>
|
||||
|
||||
|
||||
@@ -45,9 +45,9 @@
|
||||
style="@style/EditTextStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:autofillHints="emailAddress"
|
||||
android:hint="@string/prompt_email"
|
||||
android:inputType="textEmailAddress"
|
||||
android:autofillHints="emailAddress" />
|
||||
android:inputType="textEmailAddress" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
@@ -63,9 +63,9 @@
|
||||
style="@style/EditTextStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:autofillHints="password"
|
||||
android:hint="@string/prompt_password"
|
||||
android:inputType="textPassword"
|
||||
android:autofillHints="password" />
|
||||
android:inputType="textPassword" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<TextView
|
||||
|
||||
@@ -14,9 +14,9 @@
|
||||
android:layout_marginBottom="12dp"
|
||||
app:cardCornerRadius="28dp"
|
||||
app:cardElevation="0dp"
|
||||
app:layout_constraintBottom_toTopOf="@id/uploadmot"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintBottom_toTopOf="@id/uploadmot">
|
||||
app:layout_constraintRight_toRightOf="parent">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/mot_img"
|
||||
@@ -24,32 +24,32 @@
|
||||
android:layout_height="200dp"
|
||||
android:layout_alignParentStart="true"
|
||||
android:adjustViewBounds="true"
|
||||
android:contentDescription="@string/image_description"
|
||||
android:scaleType="centerCrop"
|
||||
tools:src="@drawable/choice_img_round"
|
||||
android:contentDescription="@string/image_description" />
|
||||
tools:src="@drawable/choice_img_round" />
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/uploadmot"
|
||||
style="@style/TextButton.Rounded"
|
||||
android:text="@string/upload_mot"
|
||||
app:layout_constraintBottom_toTopOf="@+id/til_submission"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintBottom_toTopOf="@+id/til_submission" />
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/til_submission"
|
||||
style="@style/text_input_layout"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent">
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/mot_expiry"
|
||||
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>
|
||||
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:maxWidth="350dp"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:maxWidth="350dp"
|
||||
app:cardCornerRadius="28dp"
|
||||
app:cardElevation="0dp"
|
||||
app:layout_constraintBottom_toTopOf="@id/uploadphlic"
|
||||
@@ -22,9 +22,9 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="200dp"
|
||||
android:adjustViewBounds="true"
|
||||
android:contentDescription="@string/image_description"
|
||||
android:scaleType="centerCrop"
|
||||
tools:src="@drawable/choice_img"
|
||||
android:contentDescription="@string/image_description" />
|
||||
tools:src="@drawable/choice_img" />
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
@@ -50,7 +50,7 @@
|
||||
android:hint="@string/private_hire_license_no"
|
||||
android:importantForAutofill="no"
|
||||
tools:ignore="TextFields"
|
||||
tools:text="987651"/>
|
||||
tools:text="987651" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
@@ -64,9 +64,9 @@
|
||||
<EditText
|
||||
android:id="@+id/ph_expiry"
|
||||
style="@style/EditTextStyle.Date"
|
||||
android:hint="@string/private_hire_license_expiry"
|
||||
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>
|
||||
|
||||
@@ -79,6 +79,6 @@
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/til_submission"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintVertical_bias="0.8"/>
|
||||
app:layout_constraintVertical_bias="0.8" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -20,9 +20,9 @@
|
||||
android:layout_width="200dp"
|
||||
android:layout_height="200dp"
|
||||
android:adjustViewBounds="true"
|
||||
android:contentDescription="@string/image_description"
|
||||
android:scaleType="centerCrop"
|
||||
tools:src="@drawable/choice_img_round"
|
||||
android:contentDescription="@string/image_description" />
|
||||
tools:src="@drawable/choice_img_round" />
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
@@ -61,8 +61,8 @@
|
||||
<EditText
|
||||
android:id="@+id/ph_expiry"
|
||||
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>
|
||||
|
||||
|
||||
@@ -46,34 +46,35 @@
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/til_name"
|
||||
style="@style/text_input_layout"
|
||||
app:layout_constraintBottom_toTopOf="@id/til_email"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintBottom_toTopOf="@id/til_email">
|
||||
app:layout_constraintStart_toStartOf="parent">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/name_register"
|
||||
style="@style/EditTextStyle"
|
||||
android:autofillHints="name"
|
||||
android:hint="@string/promt_name"
|
||||
android:inputType="textPersonName"
|
||||
android:autofillHints="name"/>
|
||||
android:inputType="textPersonName" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/til_email"
|
||||
style="@style/text_input_layout"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/til_name">
|
||||
app:layout_constraintTop_toBottomOf="@+id/til_name"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/email"
|
||||
style="@style/EditTextStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:autofillHints="emailAddress"
|
||||
android:hint="@string/prompt_email"
|
||||
android:inputType="textEmailAddress"
|
||||
android:autofillHints="emailAddress" />
|
||||
android:inputType="textEmailAddress" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
@@ -82,12 +83,13 @@
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/til_email">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/password_top"
|
||||
style="@style/EditTextStyle"
|
||||
android:autofillHints="password"
|
||||
android:hint="@string/prompt_password"
|
||||
android:inputType="textPassword"
|
||||
android:autofillHints="password" />
|
||||
android:inputType="textPassword" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
@@ -96,12 +98,13 @@
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/til_new_password">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/password_bottom"
|
||||
style="@style/EditTextStyle"
|
||||
android:autofillHints="password"
|
||||
android:hint="@string/prompt_password"
|
||||
android:inputType="textPassword"
|
||||
android:autofillHints="password" />
|
||||
android:inputType="textPassword" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
@@ -8,10 +8,10 @@
|
||||
|
||||
<TextView
|
||||
android:id="@+id/login_title_tv"
|
||||
android:layout_marginTop="96dp"
|
||||
android:text="@string/update_email"
|
||||
style="@style/headerStyle"
|
||||
android:layout_marginTop="96dp"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:text="@string/update_email"
|
||||
app:layout_constraintBottom_toTopOf="@id/login_subtitle_tv"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
@@ -20,9 +20,9 @@
|
||||
|
||||
<TextView
|
||||
android:id="@+id/login_subtitle_tv"
|
||||
android:text="@string/update_email_subtitle"
|
||||
style="@style/subheader"
|
||||
android:layout_marginBottom="24dp"
|
||||
android:text="@string/update_email_subtitle"
|
||||
app:layout_constraintBottom_toTopOf="@id/til_name"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
@@ -33,32 +33,32 @@
|
||||
android:id="@+id/til_name"
|
||||
style="@style/text_input_layout"
|
||||
android:layout_marginTop="48dp"
|
||||
app:layout_constraintBottom_toTopOf="@+id/til_password_top"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintBottom_toTopOf="@+id/til_password_top">
|
||||
app:layout_constraintStart_toStartOf="parent">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/email_update"
|
||||
android:hint="@string/prompt_email"
|
||||
android:inputType="textEmailAddress"
|
||||
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
|
||||
android:id="@+id/til_password_top"
|
||||
style="@style/text_input_layout"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent">
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/password_top"
|
||||
style="@style/EditTextStyle"
|
||||
android:autofillHints="password"
|
||||
android:hint="@string/prompt_password"
|
||||
android:inputType="textPassword"
|
||||
android:autofillHints="password" />
|
||||
android:inputType="textPassword" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
@@ -70,21 +70,21 @@
|
||||
|
||||
<EditText
|
||||
android:id="@+id/new_email"
|
||||
android:hint="@string/prompt_new_email"
|
||||
style="@style/EditTextStyle"
|
||||
android:autofillHints="emailAddress"
|
||||
android:hint="@string/prompt_new_email"
|
||||
android:inputType="textEmailAddress" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/submit"
|
||||
style="@style/TextButton.WithIcon"
|
||||
android:text="@string/submit"
|
||||
android:id="@+id/submit"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintVertical_bias="0.8"
|
||||
app:layout_constraintEnd_toEndOf="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>
|
||||
|
||||
@@ -31,33 +31,33 @@
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/til_name"
|
||||
style="@style/text_input_layout"
|
||||
app:layout_constraintBottom_toTopOf="@id/til_password_top"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintBottom_toTopOf="@id/til_password_top">
|
||||
app:layout_constraintStart_toStartOf="parent">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/email_update"
|
||||
style="@style/EditTextStyle"
|
||||
android:autofillHints="emailAddress"
|
||||
android:hint="@string/prompt_email"
|
||||
android:inputType="textEmailAddress"
|
||||
android:autofillHints="emailAddress" />
|
||||
android:inputType="textEmailAddress" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/til_password_top"
|
||||
style="@style/text_input_layout"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/til_name">
|
||||
app:layout_constraintTop_toBottomOf="@+id/til_name"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/password_top"
|
||||
style="@style/EditTextStyle"
|
||||
android:autofillHints="password"
|
||||
android:hint="@string/prompt_password"
|
||||
android:inputType="textPassword"
|
||||
android:autofillHints="password" />
|
||||
android:inputType="textPassword" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
@@ -70,21 +70,21 @@
|
||||
<EditText
|
||||
android:id="@+id/password_bottom"
|
||||
style="@style/EditTextStyle"
|
||||
android:autofillHints="password"
|
||||
android:hint="@string/prompt_new_password"
|
||||
android:inputType="textPassword"
|
||||
android:autofillHints="password" />
|
||||
android:inputType="textPassword" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/submit"
|
||||
style="@style/TextButton.WithIcon"
|
||||
android:text="@string/submit"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintVertical_bias="0.8"
|
||||
app:layout_constraintEnd_toEndOf="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>
|
||||
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
<TextView
|
||||
android:id="@+id/login_title_tv"
|
||||
style="@style/headerStyle"
|
||||
android:text="@string/update_profile"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:text="@string/update_profile"
|
||||
app:layout_constraintBottom_toTopOf="@id/login_subtitle_tv"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
@@ -45,25 +45,25 @@
|
||||
android:layout_height="120dp"
|
||||
app:civ_border_width="3dp"
|
||||
app:civ_shadow_radius="1dp"
|
||||
app:layout_constraintBottom_toTopOf="@id/til_new_email"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintBottom_toTopOf="@id/til_new_email"
|
||||
tools:src="@drawable/choice_img_round" />
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/til_new_email"
|
||||
style="@style/text_input_layout"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent">
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/update_name"
|
||||
style="@style/EditTextStyle"
|
||||
android:autofillHints="name"
|
||||
android:hint="@string/prompt_insert_name"
|
||||
android:inputType="textPersonName"
|
||||
android:autofillHints="name" />
|
||||
android:inputType="textPersonName" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
|
||||
@@ -14,11 +14,11 @@
|
||||
|
||||
<EditText
|
||||
android:id="@+id/reg"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:hint="@string/car_reg"
|
||||
android:inputType="textCapCharacters"
|
||||
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>
|
||||
|
||||
@@ -26,12 +26,12 @@
|
||||
|
||||
<EditText
|
||||
android:id="@+id/make"
|
||||
style="@style/EditTextStyle"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:hint="@string/car_make"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="none"
|
||||
android:maxLines="1"
|
||||
style="@style/EditTextStyle"
|
||||
android:importantForAutofill="no" />
|
||||
android:maxLines="1" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
@@ -39,12 +39,12 @@
|
||||
|
||||
<EditText
|
||||
android:id="@+id/car_model"
|
||||
style="@style/EditTextStyle"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:hint="@string/car_model"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="none"
|
||||
android:maxLines="1"
|
||||
style="@style/EditTextStyle"
|
||||
android:importantForAutofill="no" />
|
||||
android:maxLines="1" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
@@ -52,12 +52,12 @@
|
||||
|
||||
<EditText
|
||||
android:id="@+id/colour"
|
||||
style="@style/EditTextStyle"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:autofillHints="color"
|
||||
android:hint="@string/car_colour"
|
||||
android:inputType="none"
|
||||
android:maxLines="1"
|
||||
style="@style/EditTextStyle"
|
||||
android:autofillHints="color" />
|
||||
android:maxLines="1" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
@@ -65,15 +65,15 @@
|
||||
|
||||
<EditText
|
||||
android:id="@+id/keeper_name"
|
||||
style="@style/EditTextStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:autofillHints="name"
|
||||
android:ems="10"
|
||||
android:hint="@string/name_of_keeper"
|
||||
android:inputType="textPersonName"
|
||||
android:maxLines="1"
|
||||
style="@style/EditTextStyle"
|
||||
android:autofillHints="name" />
|
||||
android:maxLines="1" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
@@ -81,7 +81,9 @@
|
||||
|
||||
<EditText
|
||||
android:id="@+id/address"
|
||||
style="@style/EditTextStyle"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:autofillHints="postalAddress"
|
||||
android:gravity="top|start"
|
||||
android:hint="@string/address_of_keeper"
|
||||
android:inputType="textMultiLine"
|
||||
@@ -89,9 +91,7 @@
|
||||
android:maxLines="7"
|
||||
android:minLines="4"
|
||||
android:selectAllOnFocus="true"
|
||||
android:singleLine="true"
|
||||
style="@style/EditTextStyle"
|
||||
android:autofillHints="postalAddress" />
|
||||
android:singleLine="true" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
@@ -100,16 +100,16 @@
|
||||
|
||||
<EditText
|
||||
android:id="@+id/postcode"
|
||||
style="@style/EditTextStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:autofillHints="postalCode"
|
||||
android:hint="@string/postcode_of_keeper"
|
||||
android:inputType="none|textCapCharacters"
|
||||
android:maxLines="1"
|
||||
android:selectAllOnFocus="true"
|
||||
android:singleLine="true"
|
||||
style="@style/EditTextStyle"
|
||||
android:autofillHints="postalCode" />
|
||||
android:singleLine="true" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
@@ -117,10 +117,10 @@
|
||||
|
||||
<EditText
|
||||
android:id="@+id/start_date"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:hint="@string/car_start_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>
|
||||
|
||||
@@ -129,17 +129,17 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:hint="@string/vehicle_seized"
|
||||
android:buttonTint="@color/colour_eight"
|
||||
android:hint="@string/vehicle_seized"
|
||||
android:padding="12dp"
|
||||
android:textSize="18sp" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/submit"
|
||||
style="@style/TextButton.WithIcon"
|
||||
android:text="@string/submit"
|
||||
android:layout_gravity="end"
|
||||
android:layout_marginBottom="48dp"
|
||||
android:layout_gravity="end" />
|
||||
android:text="@string/submit" />
|
||||
</LinearLayout>
|
||||
|
||||
</ScrollView>
|
||||
@@ -3,8 +3,8 @@
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:layout_marginBottom="64dp"
|
||||
android:orientation="vertical"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent">
|
||||
@@ -12,8 +12,8 @@
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/driver"
|
||||
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
|
||||
android:id="@+id/car"
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/nav_header_height"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:background="@color/colour_nine"
|
||||
android:gravity="bottom"
|
||||
android:orientation="vertical"
|
||||
@@ -46,8 +46,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="@dimen/nav_header_vertical_spacing"
|
||||
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
|
||||
android:id="@+id/driver_email"
|
||||
|
||||
@@ -6,12 +6,12 @@
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/background_img"
|
||||
style="@style/imageBackground"
|
||||
android:contentDescription="@string/image_description"
|
||||
android:src="@drawable/welcome_background"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
style="@style/imageBackground"
|
||||
android:contentDescription="@string/image_description" />
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<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:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".ui.update.UpdateActivity">
|
||||
|
||||
@@ -26,22 +26,22 @@
|
||||
app:layout_constraintTop_toBottomOf="@+id/login_title_tv" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
style="@style/TextButton.WithIcon"
|
||||
android:id="@+id/update_email_button"
|
||||
style="@style/TextButton.WithIcon"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:text="@string/update_email"
|
||||
app:layout_constraintBottom_toTopOf="@id/update_password_button"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
android:text="@string/update_email" />
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
style="@style/TextButton.WithIcon"
|
||||
android:id="@+id/update_password_button"
|
||||
style="@style/TextButton.WithIcon"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:text="@string/update_password"
|
||||
app:layout_constraintBottom_toTopOf="@id/update_profile_button"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
android:text="@string/update_password" />
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/update_profile_button"
|
||||
@@ -53,11 +53,11 @@
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
style="@style/TextButton.WithIcon"
|
||||
android:id="@+id/delete_profile"
|
||||
style="@style/TextButton.WithIcon"
|
||||
android:layout_marginBottom="64dp"
|
||||
android:text="@string/delete_profile"
|
||||
android:backgroundTint="@color/colour_nine"
|
||||
android:text="@string/delete_profile"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
@@ -45,9 +45,9 @@
|
||||
app:destination="@id/loginFragment"
|
||||
app:enterAnim="@anim/nav_default_pop_enter_anim"
|
||||
app:exitAnim="@anim/nav_default_pop_exit_anim"
|
||||
app:launchSingleTop="true"
|
||||
app:popEnterAnim="@anim/nav_default_pop_enter_anim"
|
||||
app:popExitAnim="@anim/nav_default_pop_exit_anim"
|
||||
app:launchSingleTop="true"
|
||||
app:popUpTo="@id/auth_navigation"
|
||||
app:popUpToInclusive="true" />
|
||||
</fragment>
|
||||
|
||||
Reference in New Issue
Block a user