Circleci project setup (#7)

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

View File

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

View File

@@ -0,0 +1,28 @@
package h_mal.appttude.com.ui
import android.os.Bundle
import android.view.View
import androidx.fragment.app.Fragment
import h_mal.appttude.com.R
import h_mal.appttude.com.base.BaseFragment
import h_mal.appttude.com.utils.navigateTo
import h_mal.appttude.com.viewmodels.DriverLicenseViewModel
import kotlinx.android.synthetic.main.fragment_driver_overall.*
class DriverOverallFragment : Fragment(R.layout.fragment_driver_overall) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
driver_prof.setOnClickListener {
it.navigateTo(R.id.to_driverProfileFragment)
}
private_hire.setOnClickListener {
it.navigateTo(R.id.to_privateHireLicenseFragment2)
}
drivers_license.setOnClickListener {
it.navigateTo(R.id.to_driverLicenseFragment)
}
}
}

View File

@@ -0,0 +1,61 @@
package h_mal.appttude.com.ui
import android.os.Bundle
import android.view.View
import h_mal.appttude.com.R
import h_mal.appttude.com.base.DataSubmissionBaseFragment
import h_mal.appttude.com.data.DRIVER
import h_mal.appttude.com.utils.hide
import h_mal.appttude.com.utils.navigateTo
import h_mal.appttude.com.utils.show
import h_mal.appttude.com.viewmodels.RoleViewModel
import kotlinx.android.synthetic.main.driver_profile_request.*
import kotlinx.android.synthetic.main.fragment_home_driver.*
import kotlinx.android.synthetic.main.home_buttons_container.*
import kotlinx.android.synthetic.main.home_buttons_container.driver
class HomeFragment : DataSubmissionBaseFragment<RoleViewModel, String>(R.layout.fragment_home_driver) {
private val viewmodel: RoleViewModel by getFragmentViewModel()
override fun getViewModel(): RoleViewModel = viewmodel
override var model = String()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewmodel.getDataFromDatabase()
}
override fun onSuccess(data: Any?) {
super.onSuccess(data)
if (data == DRIVER){
loadDriver()
return
}
loadNonDriver()
}
private fun loadNonDriver(){
home_buttons_container.hide()
profile_request_container.show()
request_driver_button.setOnClickListener {
viewmodel.setDataInDatabase(DRIVER)
}
}
private fun loadDriver(){
home_buttons_container.show()
profile_request_container.hide()
driver.setOnClickListener {
view?.navigateTo(R.id.to_driverOverallFragment)
}
car.setOnClickListener {
view?.navigateTo(R.id.to_vehicleOverallFragment)
}
}
}

View File

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

View File

@@ -0,0 +1,25 @@
package h_mal.appttude.com.ui
import android.os.Bundle
import android.view.View
import androidx.fragment.app.Fragment
import h_mal.appttude.com.R
import h_mal.appttude.com.base.BaseFragment
import h_mal.appttude.com.utils.navigateTo
import h_mal.appttude.com.viewmodels.DriverLicenseViewModel
import kotlinx.android.synthetic.main.fragment_vehicle_overall.*
class VehicleOverallFragment : Fragment(R.layout.fragment_vehicle_overall) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
vehicle_prof.setOnClickListener { it.navigateTo(R.id.to_vehicleSetupFragment) }
insurance.setOnClickListener { it.navigateTo(R.id.to_insuranceFragment) }
mot.setOnClickListener { it.navigateTo(R.id.to_motFragment) }
logbook.setOnClickListener { it.navigateTo(R.id.to_logbookFragment) }
private_hire_vehicle_license.setOnClickListener { it.navigateTo(R.id.to_privateHireVehicleFragment) }
}
}

View File

@@ -0,0 +1,20 @@
package h_mal.appttude.com.ui
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.View
import h_mal.appttude.com.R
import h_mal.appttude.com.utils.navigateTo
import kotlinx.android.synthetic.driver.fragment_welcome.*
class WelcomeFragment : Fragment(R.layout.fragment_welcome) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
email_sign_in_button.setOnClickListener {
view.navigateTo(R.id.to_driverOverallFragment)
}
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,74 @@
<?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"
android:background="@drawable/background_with_curve"
tools:context=".ui.user.LoginFragment">
<ImageView
android:id="@+id/background_img"
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" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/activity_horizontal_margin"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.button.MaterialButton
android:id="@+id/email_sign_in_button"
style="@style/TextButton.WithIcon"
android:text="@string/login"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.9" />
<TextView
android:id="@+id/register_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/or_create_my_account"
android:textColor="@android:color/white"
android:layout_marginTop="@dimen/activity_horizontal_margin"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/email_sign_in_button" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_nice_to_meet_you"
android:textColor="@android:color/white"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginTop="32dp"/>
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/get_a_new_experience"
android:layout_marginTop="6dp"
android:textStyle="bold"
android:textSize="24sp"
app:layout_constraintLeft_toLeftOf="parent"
android:textColor="@android:color/white"
app:layout_constraintTop_toBottomOf="@id/textView3"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,4 @@
<resources>
<!-- TODO: Remove or change this placeholder text -->
<string name="hello_blank_fragment">Hello blank fragment</string>
</resources>