Kotlin migration Successful

This commit is contained in:
2021-03-05 20:46:23 +00:00
parent 3ac640d5ca
commit 1ba40b2f38
170 changed files with 6276 additions and 4809 deletions

View File

@@ -40,28 +40,52 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.0'
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.exifinterface:exifinterface:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation "androidx.appcompat:appcompat:1.0.0"
implementation "com.google.android.material:material:1.0.0"
implementation "androidx.cardview:cardview:1.0.0"
implementation "androidx.legacy:legacy-support-v4:1.0.0"
implementation "androidx.exifinterface:exifinterface:1.0.0"
implementation "androidx.constraintlayout:constraintlayout:1.1.3"
implementation "androidx.fragment:fragment-ktx:1.2.5"
implementation "androidx.activity:activity-ktx:1.2.0"
implementation "androidx.recyclerview:recyclerview:1.1.0"
implementation "androidx.navigation:navigation-fragment-ktx:2.3.3"
implementation "androidx.navigation:navigation-ui-ktx:2.3.3"
implementation "androidx.drawerlayout:drawerlayout:1.1.1"
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.0"
implementation 'androidx.viewpager:viewpager:1.0.0'
testImplementation "junit:junit:4.12"
androidTestImplementation "androidx.test.ext:junit:1.1.1"
androidTestImplementation "androidx.test.espresso:espresso-core:3.1.0"
androidTestImplementation "androidx.test:rules:1.1.1"
implementation "androidx.legacy:legacy-support-v4:1.0.0"
// Google play services
implementation 'com.google.android.gms:play-services-auth:15.0.1'
implementation "com.google.android.gms:play-services-auth:15.0.1"
// Google firebase
implementation 'com.google.firebase:firebase-core:16.0.1'
implementation 'com.google.firebase:firebase-auth:16.0.1'
implementation 'com.google.firebase:firebase-storage:16.0.1'
implementation 'com.google.firebase:firebase-database:16.0.1'
def firebaseVer = "16.0.1"
implementation "com.google.firebase:firebase-core:$firebaseVer"
implementation "com.google.firebase:firebase-auth:$firebaseVer"
implementation "com.google.firebase:firebase-storage:$firebaseVer"
implementation "com.google.firebase:firebase-database:$firebaseVer"
// Photoviewer
implementation 'com.github.chrisbanes:PhotoView:2.1.0'
// Picasso photo loader
implementation 'com.squareup.picasso:picasso:2.71828'
// Gson
implementation 'com.google.code.gson:gson:2.3.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
androidTestImplementation 'androidx.test:rules:1.1.1'
implementation "com.github.chrisbanes:PhotoView:2.1.0"
/* Picasso photo loader */
implementation "com.squareup.picasso:picasso:2.71828"
/* Gson */
implementation "com.google.code.gson:gson:2.3.1"
/* coroutines support for firebase operations */
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.1.1"
// Circle Image View
implementation "com.mikhaellopez:circularimageview:4.2.0"
//Kodein Dependency Injection
def kodein_version = "6.2.1"
implementation "org.kodein.di:kodein-di-generic-jvm:$kodein_version"
implementation "org.kodein.di:kodein-di-framework-android-x:$kodein_version"
/* Image Carousal */
implementation 'io.github.vejei.carouselview:carouselview:1.0.0-alpha'
}

BIN
app/release/app-release.apk Normal file

Binary file not shown.

BIN
app/release/choice_cars.apk Normal file

Binary file not shown.

Binary file not shown.

1
app/release/output.json Normal file
View File

@@ -0,0 +1 @@
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":6,"versionName":"1.6","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]

BIN
app/release/release/app.aab Normal file

Binary file not shown.

View File

@@ -0,0 +1,53 @@
package h_mal.appttude.com.driver;
import android.view.View;
import androidx.test.rule.ActivityTestRule;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import h_mal.appttude.com.driver.ui.HomeFragment;
import static org.junit.Assert.assertNotNull;
public class MainActivityTest {
@Rule
public ActivityTestRule<MainActivity> activityActivityTestRule = new ActivityTestRule<MainActivity>(MainActivity.class);
private MainActivity mainActivity = null;
private HomeFragment hdf;
@Before
public void setUp() throws Exception {
mainActivity = activityActivityTestRule.getActivity();
hdf = new HomeFragment();
mainActivity.getSupportFragmentManager().beginTransaction().replace(R.id.container, hdf).commit();
}
@Test
public void testViews(){
View view = hdf.getView().findViewById(R.id.driver);
assertNotNull(view);
// Bundle bundle = new Bundle();
// bundle.putInt("selectedListItem", 0);
// FragmentFactory factory = new FragmentFactory();
// homeDriverFragment hdf = new homeDriverFragment();
//
// launchInContainer(hdf.getClass(), bundle, factory);
// Espresso.onView(ViewMatchers.withId(2131231038)).check(ViewAssertions.matches(ViewMatchers.withText("Hello World!")));
}
@After
public void TearDown() throws Exception{
mainActivity = null;
}
}

View File

@@ -0,0 +1,198 @@
package h_mal.appttude.com.driver.user;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import androidx.test.espresso.ViewInteraction;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.LargeTest;
import androidx.test.rule.ActivityTestRule;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import h_mal.appttude.com.driver.R;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.action.ViewActions.*;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static androidx.test.espresso.matcher.ViewMatchers.*;
import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.is;
@LargeTest
@RunWith(AndroidJUnit4.class)
public class EspressoTestTwo {
@Rule
public ActivityTestRule<LoginActivity> mActivityTestRule = new ActivityTestRule<>(LoginActivity.class);
@Test
public void espressoTestTwo() {
// Added a sleep statement to match the app's execution delay.
// The recommended way to handle such scenarios is to use Espresso idling resources:
// https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html
try {
Thread.sleep(7000);
} catch (InterruptedException e) {
e.printStackTrace();
}
ViewInteraction appCompatEditText = onView(
allOf(withId(R.id.email),
childAtPosition(
childAtPosition(
withId(R.id.fields_holder),
0),
0),
isDisplayed()));
appCompatEditText.perform(replaceText("h.malik144.au@gmail.com"), closeSoftKeyboard());
ViewInteraction appCompatEditText2 = onView(
allOf(withId(R.id.password),
childAtPosition(
childAtPosition(
withId(R.id.fields_holder),
1),
0),
isDisplayed()));
appCompatEditText2.perform(replaceText("crack167"), closeSoftKeyboard());
ViewInteraction appCompatEditText3 = onView(
allOf(withId(R.id.password), withText("crack167"),
childAtPosition(
childAtPosition(
withId(R.id.fields_holder),
1),
0),
isDisplayed()));
appCompatEditText3.perform(pressImeActionButton());
// Added a sleep statement to match the app's execution delay.
// The recommended way to handle such scenarios is to use Espresso idling resources:
// https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html
try {
Thread.sleep(7000);
} catch (InterruptedException e) {
e.printStackTrace();
}
ViewInteraction button = onView(
allOf(withId(R.id.driver),
childAtPosition(
childAtPosition(
withId(R.id.container),
0),
0),
isDisplayed()));
button.check(matches(isDisplayed()));
// Added a sleep statement to match the app's execution delay.
// The recommended way to handle such scenarios is to use Espresso idling resources:
// https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html
try {
Thread.sleep(7000);
} catch (InterruptedException e) {
e.printStackTrace();
}
ViewInteraction appCompatImageButton = onView(
allOf(withContentDescription("Open navigation drawer"),
childAtPosition(
allOf(withId(R.id.toolbar),
childAtPosition(
withClassName(is("android.support.design.widget.AppBarLayout")),
0)),
1),
isDisplayed()));
appCompatImageButton.perform(click());
ViewInteraction cardView = onView(
allOf(withId(R.id.car),
childAtPosition(
childAtPosition(
withId(R.id.container),
1),
1),
isDisplayed()));
cardView.perform(click());
ViewInteraction cardView2 = onView(
allOf(withId(R.id.vehicle_prof),
childAtPosition(
childAtPosition(
withId(R.id.container),
1),
0),
isDisplayed()));
cardView2.perform(click());
pressBack();
ViewInteraction appCompatButton = onView(
allOf(withId(R.id.driver), withText("Driver Profile"),
childAtPosition(
childAtPosition(
withId(R.id.container),
1),
0),
isDisplayed()));
appCompatButton.perform(click());
ViewInteraction cardView3 = onView(
allOf(withId(R.id.driver_prof),
childAtPosition(
childAtPosition(
withId(R.id.container),
1),
0),
isDisplayed()));
cardView3.perform(click());
pressBack();
ViewInteraction cardView4 = onView(
allOf(withId(R.id.private_hire),
childAtPosition(
childAtPosition(
withId(R.id.container),
1),
1),
isDisplayed()));
cardView4.perform(click());
ViewInteraction appCompatButton2 = onView(
allOf(withId(android.R.id.button1), withText("View/Edit"),
childAtPosition(
childAtPosition(
withClassName(is("android.widget.ScrollView")),
0),
3)));
appCompatButton2.perform(scrollTo(), click());
}
private static Matcher<View> childAtPosition(
final Matcher<View> parentMatcher, final int position) {
return new TypeSafeMatcher<View>() {
@Override
public void describeTo(Description description) {
description.appendText("Child at position " + position + " in parent ");
parentMatcher.describeTo(description);
}
@Override
public boolean matchesSafely(View view) {
ViewParent parent = view.getParent();
return parent instanceof ViewGroup && parentMatcher.matches(parent)
&& view.equals(((ViewGroup) parent).getChildAt(position));
}
};
}
}

View File

@@ -0,0 +1,146 @@
package h_mal.appttude.com.driver.user;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import androidx.test.espresso.ViewInteraction;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.LargeTest;
import androidx.test.rule.ActivityTestRule;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import h_mal.appttude.com.driver.R;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.action.ViewActions.*;
import static androidx.test.espresso.matcher.ViewMatchers.*;
import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.is;
@LargeTest
@RunWith(AndroidJUnit4.class)
public class LoginActivityTest {
@Rule
public ActivityTestRule<LoginActivity> mActivityTestRule = new ActivityTestRule<>(LoginActivity.class);
@Test
public void loginActivityTest() {
// Added a sleep statement to match the app's execution delay.
// The recommended way to handle such scenarios is to use Espresso idling resources:
// https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html
try {
Thread.sleep(7000);
} catch (InterruptedException e) {
e.printStackTrace();
}
ViewInteraction appCompatEditText = onView(
allOf(withId(R.id.email),
childAtPosition(
childAtPosition(
withId(R.id.fields_holder),
0),
0),
isDisplayed()));
appCompatEditText.perform(replaceText("h.malik144.au@gmail.com"), closeSoftKeyboard());
// Added a sleep statement to match the app's execution delay.
// The recommended way to handle such scenarios is to use Espresso idling resources:
// https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html
try {
Thread.sleep(7000);
} catch (InterruptedException e) {
e.printStackTrace();
}
ViewInteraction appCompatEditText2 = onView(
allOf(withId(R.id.password),
childAtPosition(
childAtPosition(
withId(R.id.fields_holder),
1),
0),
isDisplayed()));
appCompatEditText2.perform(replaceText("crack167"), closeSoftKeyboard());
// ViewInteraction appCompatButton = onView(
// allOf(withId(R.id.email_sign_in_button), withText("Sign in"),
// childAtPosition(
// allOf(withId(R.id.email_login_form),
// childAtPosition(
// withClassName(is("android.widget.RelativeLayout")),
// 0)),
// 1),
// isDisplayed()));
// appCompatButton.perform(click());
// Added a sleep statement to match the app's execution delay.
// The recommended way to handle such scenarios is to use Espresso idling resources:
// https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html
try {
Thread.sleep(7000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// ViewInteraction textView = onView(
// allOf(withText("Choice Minicabs"),
// childAtPosition(
// allOf(withId(R.id.toolbar),
// childAtPosition(
// IsInstanceOf.<View>instanceOf(android.widget.LinearLayout.class),
// 0)),
// 1),
// isDisplayed()));
// textView.check(matches(isDisplayed()));
// Added a sleep statement to match the app's execution delay.
// The recommended way to handle such scenarios is to use Espresso idling resources:
// https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html
try {
Thread.sleep(7000);
} catch (InterruptedException e) {
e.printStackTrace();
}
ViewInteraction appCompatButton2 = onView(
allOf(withId(R.id.driver), withText("Driver Profile"),
childAtPosition(
childAtPosition(
withId(R.id.container),
1),
0),
isDisplayed()));
appCompatButton2.perform(click());
}
private static Matcher<View> childAtPosition(
final Matcher<View> parentMatcher, final int position) {
return new TypeSafeMatcher<View>() {
@Override
public void describeTo(Description description) {
description.appendText("Child at position " + position + " in parent ");
parentMatcher.describeTo(description);
}
@Override
public boolean matchesSafely(View view) {
ViewParent parent = view.getParent();
return parent instanceof ViewGroup && parentMatcher.matches(parent)
&& view.equals(((ViewGroup) parent).getChildAt(position));
}
};
}
}

View File

@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="h_mal.appttude.com.driver">
<!-- To auto-complete the email text field in the login form with the user's emails -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
@@ -12,12 +11,14 @@
<uses-permission android:name="android.permission.CAMERA" />
<application
android:name=".application.DriverApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".update.UpdateActivity" />
<activity
android:name=".user.LoginActivity"
android:label="@string/app_name"
@@ -25,6 +26,7 @@
<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>
@@ -32,12 +34,7 @@
android:name=".MainActivity"
android:configChanges="orientation|screenSize"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity android:name=".user.RegisterActivity">
</activity>
android:theme="@style/AppTheme.NoActionBar" />
<provider
android:name="androidx.core.content.FileProvider"
@@ -48,8 +45,6 @@
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
<activity android:name=".user.forgotPasswordActivity"></activity>
</application>
</manifest>

View File

@@ -0,0 +1,63 @@
package h_mal.appttude.com.driver.Archive
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ListView
import androidx.fragment.app.Fragment
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.ValueEventListener
import h_mal.appttude.com.driver.Global.FirebaseClass
import h_mal.appttude.com.driver.Objects.ArchiveObject
import h_mal.appttude.com.driver.R
class ArchiveFragment : Fragment() {
var archive: ArchiveObject? = null
private var reference: DatabaseReference? = null
private var listView: ListView? = null
var archiveString: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// reference =
// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
// requireArguments().getString("user_id")
// )
// .child(FirebaseClass.ARCHIVE_FIREBASE)
archiveString = requireArguments().getString("archive")
var s: String = ""
when (archiveString) {
FirebaseClass.PRIVATE_HIRE_FIREBASE -> s = "Private Hire"
FirebaseClass.DRIVERS_LICENSE_FIREBASE -> s = "License"
FirebaseClass.VEHICLE_DETAILS_FIREBASE -> s = "Vehicle"
FirebaseClass.MOT_FIREBASE -> s = "M.O.T"
FirebaseClass.INSURANCE_FIREBASE -> s = "Insurance"
FirebaseClass.LOG_BOOK_FIREBASE -> s = "Logbook"
FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE -> s = "Private Hire Vehicle"
}
requireActivity().title = s + " Archive"
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view: View = inflater.inflate(R.layout.fragment_archive, container, false)
listView = view.findViewById(R.id.archive_listview)
// reference!!.addListenerForSingleValueEvent(valueEventListener)
return view
}
var valueEventListener: ValueEventListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
archive = dataSnapshot.getValue(ArchiveObject::class.java)
listView!!.adapter = ArchiveObjectListAdapter(archive, requireContext(), archiveString)
}
override fun onCancelled(databaseError: DatabaseError) {}
}
}

View File

@@ -1,7 +1,6 @@
package h_mal.appttude.com.driver.Archive
import android.content.Context
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -13,8 +12,16 @@ import com.squareup.picasso.Picasso
import h_mal.appttude.com.driver.Global.FirebaseClass
import h_mal.appttude.com.driver.Global.ImageSwiperClass
import h_mal.appttude.com.driver.MainActivity
import h_mal.appttude.com.driver.Objects.*
import h_mal.appttude.com.driver.Objects.ArchiveObject
import h_mal.appttude.com.driver.Objects.InsuranceObject
import h_mal.appttude.com.driver.Objects.LogbookObject
import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.model.DriversLicenseObject
import h_mal.appttude.com.driver.model.MotObject
import h_mal.appttude.com.driver.model.PrivateHireObject
import h_mal.appttude.com.driver.model.VehicleProfileObject
import h_mal.appttude.com.driver.utils.DateUtils.convertDateStringDatePattern
import java.text.ParseException
class ArchiveObjectListAdapter(
@@ -94,7 +101,6 @@ class ArchiveObjectListAdapter(
fieldTwoText.text = driversLicenseObject.licenseNumber
}
FirebaseClass.MOT_FIREBASE -> {
Log.i(TAG, "getView: MOT OBJECT")
expiryHolder.visibility = View.VISIBLE
fieldTwo.visibility = View.GONE
val motObject: MotObject = getItem(position) as MotObject
@@ -141,7 +147,7 @@ class ArchiveObjectListAdapter(
val expiryText: TextView = listItemView.findViewById(R.id.exp_text)
val fieldTwoText: TextView = listItemView.findViewById(R.id.archive_insurer)
val insuranceObject: InsuranceObject = getItem(position) as InsuranceObject
swiperClass.reinstantiateList(insuranceObject.photoStrings)
// swiperClass.reinstantiateList(insuranceObject.photoStrings)
expiryText.text = insuranceObject.expiryDate
fieldTwoText.text = insuranceObject.insurerName
} else if ((archiveString == FirebaseClass.VEHICLE_DETAILS_FIREBASE)) {
@@ -155,7 +161,7 @@ class ArchiveObjectListAdapter(
val keeperAddress: TextView = listItemView.findViewById(R.id.keeper_address)
val carText: TextView = listItemView.findViewById(R.id.car_text_arch)
val carColour: TextView = listItemView.findViewById(R.id.car_colour)
val carSeized: TextView = listItemView.findViewById(R.id.seized)
val carSeized: TextView = listItemView.findViewById(R.id.seized_checkbox)
val startDate: TextView = listItemView.findViewById(R.id.first_date)
val vehicleProfileObject: VehicleProfileObject =
getItem(position) as VehicleProfileObject
@@ -180,7 +186,7 @@ class ArchiveObjectListAdapter(
private fun dateString(position: Int) {
var success: Boolean = true
try {
dateArchivedText!!.text = MainActivity.setAsDateTime(mKeys.get(position))
dateArchivedText!!.text = mKeys[position].convertDateStringDatePattern("yyyyMMdd_HHmmss", "dd/MM/yyyy")
} catch (e: ParseException) {
e.printStackTrace()
success = false

View File

@@ -0,0 +1,35 @@
package h_mal.appttude.com.driver
import android.net.Uri
import android.widget.EditText
import android.widget.ImageView
import androidx.core.widget.doAfterTextChanged
import h_mal.appttude.com.driver.data.DataFieldState
import h_mal.appttude.com.driver.utils.setPicassoImage
interface DataFieldsInterface {
fun EditText.setFieldFromDataFetch(data: String?) = apply {
setText(data)
tag = DataFieldState.NonUserSateUpdated
}
fun EditText.applyChangeListener() = doAfterTextChanged {
if (tag == DataFieldState.NonUserSateUpdated) {
tag = DataFieldState.DefaultState
return@doAfterTextChanged
}
tag = DataFieldState.UserUpdateState
}
fun ImageView.setFieldFromFetchData(data: String?)= apply {
setPicassoImage(data)
tag = DataFieldState.NonUserSateUpdated
}
fun EditText.getTextAfterFieldValidation(): String? =
takeIf { it.tag is DataFieldState.UserUpdateState }?.let { it.text?.toString() }
fun ImageView.getTextAfterFieldValidation(imageUri: Uri?): Uri? =
takeIf { it.tag is DataFieldState.UserUpdateState }?.let { imageUri }
}

View File

@@ -1,241 +0,0 @@
package h_mal.appttude.com.driver.Driver
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Bundle
import android.provider.MediaStore
import android.text.TextUtils
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.*
import androidx.fragment.app.Fragment
import com.google.android.gms.tasks.OnCompleteListener
import com.google.android.gms.tasks.Task
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.ValueEventListener
import com.squareup.picasso.Picasso
import h_mal.appttude.com.driver.Global.*
import h_mal.appttude.com.driver.Global.ImageSelectorResults.FilepathResponse
import h_mal.appttude.com.driver.MainActivity
import h_mal.appttude.com.driver.Objects.DriversLicenseObject
import h_mal.appttude.com.driver.R
import kotlinx.android.synthetic.main.fragment_driver_license.*
class DriverLicenseFragment : Fragment() {
private val TAG: String = this.javaClass.simpleName
private var imageView: ImageView? = null
var licenseNo: EditText? = null
var expiry: EditText? = null
var filePath: Uri? = null
var picUri: Uri? = null
var li_numberString: String? = null
var li_exprString: String? = null
var reference: DatabaseReference? = null
var driversLicenseObject: DriversLicenseObject? = null
var uploadNew: Boolean? = null
var UID: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
uploadNew = false
if (arguments != null) {
Log.i(TAG, "onCreate: args = args exist")
if (arguments!!.containsKey("user_id")) {
UID = arguments!!.getString("user_id")
} else {
UID = MainActivity.auth!!.currentUser!!.uid
}
if (arguments!!.containsKey(ExecuteFragment.UPLOAD_NEW)) {
uploadNew = true
}
} else {
UID = MainActivity.auth!!.currentUser!!.uid
}
reference =
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
(UID)!!
)
.child(FirebaseClass.DRIVER_FIREBASE)
.child(FirebaseClass.DRIVERS_LICENSE_FIREBASE)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view: View = inflater.inflate(R.layout.fragment_driver_license, container, false)
imageView = view.findViewById(R.id.driversli_img)
MainActivity.viewController!!.progress(View.VISIBLE)
reference!!.addListenerForSingleValueEvent(valueEventListener)
val uploadLic: TextView = view.findViewById(R.id.upload_lic)
licenseNo = view.findViewById(R.id.lic_no)
lic_expiry.setOnClickListener {
val dateDialog = DateDialog((context)!!)
dateDialog.init(lic_expiry)
}
val submit: Button = view.findViewById(R.id.submit)
submit.setOnClickListener(submitOnClickListener)
uploadLic.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
val imageSelectorDialog: ImageSelectorDialog = ImageSelectorDialog((context)!!)
imageSelectorDialog.setImageName("drivers_license")
imageSelectorDialog.show()
}
})
return view
}
var submitOnClickListener: View.OnClickListener = View.OnClickListener {
li_numberString = licenseNo!!.text.toString().trim { it <= ' ' }
li_exprString = lic_expiry!!.text.toString().trim { it <= ' ' }
if (!TextUtils.isEmpty(li_numberString) &&
!TextUtils.isEmpty(li_exprString)
) {
MainActivity.viewController!!.progress(View.VISIBLE)
if (filePath == null && picUri == null) {
Toast.makeText(context, "No Driver image", Toast.LENGTH_SHORT).show()
MainActivity.viewController!!.progress(View.GONE)
} else {
if (filePath != null) {
Log.i(TAG, "onClick: new Image uploaded")
FirebaseClass(context, filePath, object : FirebaseClass.Response {
override fun processFinish(output: Uri?) {
Log.i(TAG, "processFinish: ")
if (output != null) {
picUri = output
publishObject()
} else {
Toast.makeText(
context,
getString(R.string.failed_upload),
Toast.LENGTH_SHORT
).show()
MainActivity.viewController!!.progress(View.GONE)
}
}
}).uploadImage(
FirebaseClass.DRIVERS_LICENSE_FIREBASE,
FirebaseClass.DRIVERS_LICENSE_FIREBASE + MainActivity.dateStamp
)
} else {
Log.i(TAG, "onClick: pushing with same image")
publishObject()
}
}
} else {
if (TextUtils.isEmpty(li_numberString)) {
licenseNo!!.error = "Field required"
}
if (TextUtils.isEmpty(li_exprString)) {
lic_expiry!!.error = "Field required"
}
if (picUri == null && filePath == null) {
Toast.makeText(
context,
getString(R.string.image_required),
Toast.LENGTH_SHORT
).show()
}
}
}
var valueEventListener: ValueEventListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
MainActivity.viewController!!.progress(View.GONE)
try {
driversLicenseObject = dataSnapshot.getValue(
DriversLicenseObject::class.java
)
} catch (e: Exception) {
Log.e(TAG, "onDataChange: ", e)
} finally {
if (driversLicenseObject != null) {
picUri = Uri.parse(driversLicenseObject!!.licenseImageString)
li_numberString = driversLicenseObject!!.licenseNumber
li_exprString = driversLicenseObject!!.licenseExpiry
if (!uploadNew!!) {
licenseNo!!.setText(li_numberString)
lic_expiry!!.setText(li_exprString)
Picasso.get()
.load(picUri)
.into(MainActivity.loadImage(imageView))
}
} else {
Toast.makeText(
context,
getString(R.string.failed_retrieve),
Toast.LENGTH_SHORT
).show()
}
}
}
override fun onCancelled(databaseError: DatabaseError) {
MainActivity.viewController!!.progress(View.GONE)
Toast.makeText(context, databaseError.message, Toast.LENGTH_SHORT).show()
Log.e(TAG, "onCancelled: " + databaseError.message)
}
}
private fun publishObject() {
if ((uploadNew)!!) {
MainActivity.archiveClass!!.archiveRecord(
UID,
FirebaseClass.DRIVERS_LICENSE_FIREBASE,
driversLicenseObject
)
}
val driversLicenseObjectNew: DriversLicenseObject =
DriversLicenseObject(picUri.toString(), li_numberString, li_exprString)
reference!!.setValue(driversLicenseObjectNew)
.addOnCompleteListener(object : OnCompleteListener<Void?> {
override fun onComplete(task: Task<Void?>) {
if (task.isSuccessful) {
Log.i(TAG, "onComplete: publish = " + task.isSuccessful)
MainActivity.approvalsClass!!.setStatusCode(
UID,
FirebaseClass.DRIVERS_LICENSE_FIREBASE + FirebaseClass.APPROVAL_CONSTANT,
FirebaseClass.APPROVAL_PENDING
)
MainActivity.fragmentManager!!.popBackStack()
} else {
Toast.makeText(context, R.string.unsuccessful, Toast.LENGTH_SHORT)
.show()
}
MainActivity.viewController!!.progress(View.GONE)
}
})
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE) {
if (grantResults.get(0) == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(context, "camera permission granted", Toast.LENGTH_LONG).show()
val cameraIntent: Intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivityForResult(cameraIntent, ImageSelectorDialog.CAMERA_REQUEST)
} else {
Toast.makeText(context, "camera permission denied", Toast.LENGTH_LONG).show()
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
super.onActivityResult(requestCode, resultCode, data)
ImageSelectorResults().Results(
activity, requestCode, resultCode, data,
filePath, imageView, object : FilepathResponse {
override fun processFinish(output: Uri?) {
filePath = output
}
})
}
}

View File

@@ -1,110 +0,0 @@
package h_mal.appttude.com.driver.Driver
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.ValueEventListener
import h_mal.appttude.com.driver.Global.ExecuteFragment
import h_mal.appttude.com.driver.Global.FirebaseClass
import h_mal.appttude.com.driver.MainActivity
import h_mal.appttude.com.driver.Objects.ApprovalsObject
import h_mal.appttude.com.driver.Objects.WholeDriverObject
import h_mal.appttude.com.driver.R
import kotlinx.android.synthetic.main.fragment_driver_overall.*
class DriverOverallFragment : Fragment() {
var reference: DatabaseReference? = null
var driver_profObject: WholeDriverObject? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
reference =
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
MainActivity.auth!!.currentUser!!.uid
)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view: View = inflater.inflate(R.layout.fragment_driver_overall, container, false)
ph_button_exp.visibility = View.GONE
dl_button_exp.visibility = View.GONE
MainActivity.viewController!!.progress(View.VISIBLE)
reference!!.addListenerForSingleValueEvent(valueEventListener)
return view
}
var valueEventListener: ValueEventListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
driver_profObject = dataSnapshot.getValue(WholeDriverObject::class.java)
if (driver_profObject!!.approvalsObject != null) {
val approvalsObject: ApprovalsObject? = driver_profObject!!.approvalsObject
approval_dp.setImageResource(
MainActivity.approvalsClass!!.setImageResource(
approvalsObject!!.driver_details_approval
)
)
approval_dp!!.setImageResource(
MainActivity.approvalsClass!!.setImageResource(
approvalsObject.private_hire_approval
)
)
approval_dl!!.setImageResource(
MainActivity.approvalsClass!!.setImageResource(
approvalsObject.driver_license_approval
)
)
}
if (driver_profObject!!.driver_profile != null) {
if (driver_profObject!!.driver_profile?.private_hire != null) {
ph_button_exp!!.visibility = View.VISIBLE
ph_button_exp!!.text = "Expiry: " + driver_profObject!!.driver_profile?.private_hire!!.phExpiry
}
if (driver_profObject!!.driver_profile!!.driver_license != null) {
dl_button_exp!!.visibility = View.VISIBLE
dl_button_exp!!.text = "Expiry: " + driver_profObject!!.driver_profile!!.driver_license!!.licenseExpiry
}
}
driver_prof.setOnClickListener {
ExecuteFragment.executeFragment(
DriverProfileFragment()
)
}
private_hire.setOnClickListener {
if (driver_profObject!!.driver_profile == null) {
ExecuteFragment.executeFragment(PrivateHireLicenseFragment())
} else {
MainActivity.archiveClass!!.openDialogArchive(
context,
driver_profObject!!.driver_profile?.private_hire,
PrivateHireLicenseFragment()
)
}
}
drivers_license!!.setOnClickListener {
if (driver_profObject!!.driver_profile == null) {
ExecuteFragment.executeFragment(DriverLicenseFragment())
} else {
MainActivity.archiveClass!!.openDialogArchive(
context,
driver_profObject!!.driver_profile?.driver_license,
DriverLicenseFragment()
)
}
}
MainActivity.viewController!!.progress(View.GONE)
}
override fun onCancelled(databaseError: DatabaseError) {
MainActivity.viewController!!.progress(View.GONE)
}
}
}

View File

@@ -1,263 +0,0 @@
package h_mal.appttude.com.driver.Driver
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.text.TextUtils
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.*
import androidx.fragment.app.Fragment
import com.google.android.gms.tasks.OnCompleteListener
import com.google.android.gms.tasks.OnFailureListener
import com.google.android.gms.tasks.Task
import com.google.firebase.auth.UserProfileChangeRequest
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.ValueEventListener
import com.squareup.picasso.Picasso
import h_mal.appttude.com.driver.Global.DateDialog
import h_mal.appttude.com.driver.Global.FirebaseClass
import h_mal.appttude.com.driver.Global.ImageSelectorDialog
import h_mal.appttude.com.driver.Global.ImageSelectorResults
import h_mal.appttude.com.driver.Global.ImageSelectorResults.FilepathResponse
import h_mal.appttude.com.driver.MainActivity
import h_mal.appttude.com.driver.Objects.DriverProfileObject
import h_mal.appttude.com.driver.Objects.UserObject
import h_mal.appttude.com.driver.R
class DriverProfileFragment : Fragment() {
private val TAG: String = this.javaClass.simpleName
var driverPic: ImageView? = null
var addPic: TextView? = null
var forenames: EditText? = null
var address: EditText? = null
var postcode: EditText? = null
var dob: EditText? = null
var ni: EditText? = null
var dateFirst: EditText? = null
var submit_driver: Button? = null
var filePath: Uri? = null
var picUri: Uri? = null
var driverProfileReference: DatabaseReference? = null
var UID: String? = null
var driverProfileObject: DriverProfileObject? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (arguments != null) {
UID = arguments!!.getString("user_id")
} else {
UID = MainActivity.auth!!.currentUser!!.uid
}
driverProfileReference =
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
(UID)!!
)
.child(FirebaseClass.DRIVER_FIREBASE)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view: View = inflater.inflate(R.layout.fragment_driver_profile, container, false)
driverPic = view.findViewById(R.id.driver_pic)
addPic = view.findViewById(R.id.add_driver_pic)
forenames = view.findViewById(R.id.names)
address = view.findViewById(R.id.address)
postcode = view.findViewById(R.id.postcode)
dob = view.findViewById(R.id.dob)
ni = view.findViewById(R.id.ni_number)
dateFirst = view.findViewById(R.id.date_first)
submit_driver = view.findViewById(R.id.submit_driver)
MainActivity.viewController!!.progress(View.VISIBLE)
driverProfileReference!!.addListenerForSingleValueEvent(valueEventListener)
addPic.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
val imageSelectorDialog: ImageSelectorDialog = ImageSelectorDialog((context)!!)
imageSelectorDialog.setImageName("driver_pic" + MainActivity.Companion.dateStamp)
imageSelectorDialog.show()
}
})
dob.setOnClickListener(View.OnClickListener {
val dateDialog: DateDialog = DateDialog((context)!!)
dateDialog.init(dob)
})
dateFirst.setOnClickListener(View.OnClickListener {
val dateDialog: DateDialog = DateDialog((context)!!)
dateDialog.init(dateFirst)
})
submit_driver.setOnClickListener(submitOnClickListener)
return view
}
var valueEventListener: ValueEventListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
MainActivity.viewController!!.progress(View.GONE)
try {
driverProfileObject =
dataSnapshot.child(FirebaseClass.DRIVER_DETAILS_FIREBASE).getValue(
DriverProfileObject::class.java
)
} catch (e: Exception) {
Log.e(TAG, "onDataChange: ", e)
} finally {
if (driverProfileObject != null) {
driverProfileObject?.apply {
forenames.setText(forenames)
address.setText(address)
postcode.setText(postcode)
dob.setText(dob)
dateFirst.setText(dateFirst)
ni.setText(ni)
Picasso.get().load(driverPic)
.into(MainActivity.loadImage(driverPic))
picUri = Uri.parse(driverPic)
}
}
}
}
override fun onCancelled(databaseError: DatabaseError) {
MainActivity.viewController!!.progress(View.GONE)
}
}
var submitOnClickListener: View.OnClickListener = View.OnClickListener {
val driverForename: String = forenames!!.text.toString().trim { it <= ' ' }
val AddressString: String = address!!.text.toString().trim { it <= ' ' }
val postCodeString: String = postcode!!.text.toString().trim { it <= ' ' }
val dobString: String = dob!!.text.toString().trim { it <= ' ' }
val niString: String = ni!!.text.toString().trim { it <= ' ' }
val dateFirstString: String = dateFirst!!.text.toString().trim { it <= ' ' }
if ((!TextUtils.isEmpty(driverForename) &&
!TextUtils.isEmpty(AddressString) &&
!TextUtils.isEmpty(postCodeString) &&
!TextUtils.isEmpty(dobString) &&
!TextUtils.isEmpty(niString) &&
!TextUtils.isEmpty(dateFirstString))
) {
if (filePath == null && picUri == null) {
Toast.makeText(context, "No Driver image", Toast.LENGTH_SHORT).show()
MainActivity.viewController!!.progress(View.GONE)
} else {
MainActivity.viewController!!.progress(View.VISIBLE)
if (filePath != null) {
FirebaseClass(context, filePath, object : FirebaseClass.Response {
override fun processFinish(output: Uri?) {
Log.i(TAG, "processFinish: ")
if (output != null) {
picUri = output
writeDriverToDb()
} else {
MainActivity.viewController!!.progress(View.GONE)
}
}
}).uploadImage(
FirebaseClass.DRIVERS_LICENSE_FIREBASE,
FirebaseClass.DRIVERS_LICENSE_FIREBASE + MainActivity.Companion.dateStamp
)
} else {
Log.i(TAG, "onClick: pushing with same image")
writeDriverToDb()
}
}
} else {
if (TextUtils.isEmpty(driverForename)) {
forenames!!.error = "Field required"
}
if (TextUtils.isEmpty(AddressString)) {
address!!.error = "Field required"
}
if (TextUtils.isEmpty(postCodeString)) {
postcode!!.error = "Field required"
}
if (TextUtils.isEmpty(dobString)) {
dob!!.error = "Field required"
}
if (TextUtils.isEmpty(niString)) {
ni!!.error = "Field required"
}
if (TextUtils.isEmpty(dateFirstString)) {
dateFirst!!.error = "Field required"
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
super.onActivityResult(requestCode, resultCode, data)
ImageSelectorResults().Results(
activity, requestCode, resultCode, data,
filePath, driverPic, object : FilepathResponse {
override fun processFinish(output: Uri?) {
filePath = output
}
})
}
private fun writeDriverToDb() {
val forenameText: String = forenames!!.text.toString().trim({ it <= ' ' })
val addressText: String = address!!.text.toString().trim({ it <= ' ' })
val postcodeText: String = postcode!!.text.toString().trim({ it <= ' ' })
val dobText: String = dob!!.text.toString().trim({ it <= ' ' })
val niText: String = ni!!.text.toString().trim({ it <= ' ' })
val datefirstText: String = dateFirst!!.text.toString().trim({ it <= ' ' })
val driverProfileObject: DriverProfileObject = DriverProfileObject(
picUri.toString(), forenameText,
addressText, postcodeText, dobText, niText, datefirstText
)
if ((UID == MainActivity.auth!!.currentUser!!.uid)) {
val profileUpdatesBuilder: UserProfileChangeRequest.Builder =
UserProfileChangeRequest.Builder()
profileUpdatesBuilder.setPhotoUri(picUri)
val profileUpdates: UserProfileChangeRequest = profileUpdatesBuilder.build()
MainActivity.auth!!.currentUser!!.updateProfile(profileUpdates)
.addOnCompleteListener(object : OnCompleteListener<Void?> {
override fun onComplete(task: Task<Void?>) {
if (task.isSuccessful) {
Log.d(TAG, "User profile updated.")
MainActivity.viewController!!.reloadDrawer()
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE)
.child(
MainActivity.auth!!.currentUser!!.uid
).child("user_details")
.setValue(
UserObject(
MainActivity.auth!!.currentUser!!
.displayName,
MainActivity.auth!!.currentUser!!
.email,
picUri.toString()
)
)
}
}
})
.addOnFailureListener(object : OnFailureListener {
override fun onFailure(e: Exception) {
Log.e(TAG, "onFailure: ", e)
}
})
}
driverProfileReference!!.child(FirebaseClass.DRIVER_DETAILS_FIREBASE)
.setValue(driverProfileObject)
.addOnCompleteListener(object : OnCompleteListener<Void?> {
override fun onComplete(task: Task<Void?>) {
if (task.isSuccessful) {
MainActivity.approvalsClass!!.setStatusCode(
UID,
FirebaseClass.DRIVER_DETAILS_FIREBASE + FirebaseClass.APPROVAL_CONSTANT,
FirebaseClass.APPROVAL_PENDING
)
}
MainActivity.viewController!!.progress(View.GONE)
MainActivity.fragmentManager!!.popBackStack()
}
})
}
}

View File

@@ -1,263 +0,0 @@
package h_mal.appttude.com.driver.Driver
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Bundle
import android.provider.MediaStore
import android.text.TextUtils
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import android.widget.Toast
import androidx.fragment.app.Fragment
import com.google.android.gms.tasks.OnCompleteListener
import com.google.android.gms.tasks.Task
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.ValueEventListener
import h_mal.appttude.com.driver.Global.*
import h_mal.appttude.com.driver.Global.ImageSelectorResults.FilepathResponse
import h_mal.appttude.com.driver.MainActivity
import h_mal.appttude.com.driver.Objects.InsuranceObject
import h_mal.appttude.com.driver.R
import java.util.*
class InsuranceFragment : Fragment() {
private val TAG: String = this.javaClass.simpleName
var reference: DatabaseReference? = null
var uploadIns: TextView? = null
var insName: EditText? = null
var insExpiry: EditText? = null
var holder: View? = null
var filePath: Uri? = null
var picUri: Uri? = null
var photoStrings: MutableList<String?>? = null
var insNameString: String? = null
var insExpiryString: String? = null
var insuranceObject: InsuranceObject? = null
var swiperClass: ImageSwiperClass? = null
var uploadNew: Boolean? = null
var UID: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
uploadNew = false
photoStrings = ArrayList()
if (arguments != null) {
Log.i(TAG, "onCreate: args = args exist")
if (arguments!!.containsKey("user_id")) {
UID = arguments!!.getString("user_id")
} else {
UID = MainActivity.auth!!.currentUser!!.uid
}
if (arguments!!.containsKey(ExecuteFragment.UPLOAD_NEW)) {
uploadNew = true
}
} else {
UID = MainActivity.auth!!.currentUser!!.uid
}
reference =
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
(UID)!!
).child(FirebaseClass.VEHICLE_FIREBASE)
.child(FirebaseClass.INSURANCE_FIREBASE)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view: View = inflater.inflate(R.layout.fragment_insurance, container, false)
uploadIns = view.findViewById(R.id.uploadInsurance)
insName = view.findViewById(R.id.insurer)
insExpiry = view.findViewById(R.id.insurance_exp)
val submit: Button = view.findViewById(R.id.submit_ins)
holder = view.findViewById(R.id.image_pager)
swiperClass = ImageSwiperClass(context, holder)
MainActivity.viewController!!.progress(View.VISIBLE)
reference!!.addListenerForSingleValueEvent(valueEventListener)
uploadIns.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
val imageSelectorDialog: ImageSelectorDialog = ImageSelectorDialog((context)!!)
imageSelectorDialog.setImageName("insurance" + MainActivity.Companion.dateStamp)
imageSelectorDialog.show()
}
})
insExpiry.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
val dateDialog: DateDialog = DateDialog((context)!!)
dateDialog.init(insExpiry)
}
})
submit.setOnClickListener(submitOnClickListener)
return view
}
var valueEventListener: ValueEventListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
MainActivity.viewController!!.progress(View.GONE)
try {
insuranceObject = dataSnapshot.getValue(InsuranceObject::class.java)
} catch (e: Exception) {
Log.e(TAG, "onDataChange: ", e)
} finally {
if (insuranceObject != null) {
if (!uploadNew!!) {
photoStrings = insuranceObject.getPhotoStrings()
swiperClass!!.reinstantiateList(photoStrings)
if (insuranceObject!!.insurerName != null) {
insNameString = insuranceObject.getInsurerName()
insName!!.setText(insNameString)
}
if (insuranceObject!!.expiryDate != null) {
insExpiryString = insuranceObject.getExpiryDate()
insExpiry!!.setText(insExpiryString)
}
}
}
}
}
override fun onCancelled(databaseError: DatabaseError) {
MainActivity.viewController!!.progress(View.GONE)
}
}
var submitOnClickListener: View.OnClickListener = object : View.OnClickListener {
override fun onClick(v: View) {
insNameString = insName!!.text.toString().trim({ it <= ' ' })
insExpiryString = insExpiry!!.text.toString().trim({ it <= ' ' })
if ((!TextUtils.isEmpty(insNameString)
&& !TextUtils.isEmpty(insExpiryString))
) {
MainActivity.viewController!!.progress(View.VISIBLE)
if (filePath == null && picUri == null) {
Toast.makeText(context, "No Driver image", Toast.LENGTH_SHORT).show()
MainActivity.viewController!!.progress(View.GONE)
} else {
if (filePath != null) {
Log.i(TAG, "onClick: new Image uploaded")
FirebaseClass(context, filePath, object : FirebaseClass.Response {
override fun processFinish(output: Uri?) {
Log.i(TAG, "processFinish: ")
if (output != null) {
picUri = output
publishObject()
} else {
Toast.makeText(
context,
"Could not upload",
Toast.LENGTH_SHORT
).show()
MainActivity.viewController!!.progress(View.GONE)
}
}
}).uploadImage(
FirebaseClass.INSURANCE_FIREBASE,
FirebaseClass.INSURANCE_FIREBASE + MainActivity.Companion.dateStamp
)
} else {
Log.i(TAG, "onClick: pushing with same image")
publishObject()
}
}
} else {
if (TextUtils.isEmpty(insNameString)) {
insName!!.error = "Field required"
}
if (TextUtils.isEmpty(insExpiryString)) {
insExpiry!!.error = "Field required"
}
if (picUri == null) {
Toast.makeText(
context,
getString(R.string.image_required),
Toast.LENGTH_SHORT
).show()
}
}
}
}
private fun publishObject() {
if ((uploadNew)!!) {
MainActivity.archiveClass!!.archiveRecord(
UID,
FirebaseClass.INSURANCE_FIREBASE,
insuranceObject
)
}
photoStrings = swiperClass.getImageStrings()
val insuranceObject: InsuranceObject =
InsuranceObject(photoStrings, insNameString, insExpiryString)
reference!!.setValue(insuranceObject)
.addOnCompleteListener(object : OnCompleteListener<Void?> {
override fun onComplete(task: Task<Void?>) {
if (task.isSuccessful) {
MainActivity.approvalsClass!!.setStatusCode(
UID,
FirebaseClass.INSURANCE_FIREBASE + FirebaseClass.APPROVAL_CONSTANT,
FirebaseClass.APPROVAL_PENDING
)
MainActivity.fragmentManager!!.popBackStack()
} else {
Toast.makeText(context, "Upload Unsuccessful", Toast.LENGTH_SHORT)
.show()
}
MainActivity.viewController!!.progress(View.GONE)
}
})
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE) {
if (grantResults.get(0) == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(context, "camera permission granted", Toast.LENGTH_LONG).show()
val cameraIntent: Intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivityForResult(cameraIntent, ImageSelectorDialog.CAMERA_REQUEST)
} else {
Toast.makeText(context, "camera permission denied", Toast.LENGTH_LONG).show()
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
super.onActivityResult(requestCode, resultCode, data)
ImageSelectorResults().Results(
activity, requestCode, resultCode, data,
filePath, object : FilepathResponse {
override fun processFinish(output: Uri?) {
filePath = output
FirebaseClass(context, output, object : FirebaseClass.Response {
override fun processFinish(output: Uri?) {
if (output != null) {
photoStrings!!.add(output.toString())
swiperClass!!.addPhotoString(output.toString())
//notify data change
reference!!.setValue(InsuranceObject(photoStrings, null, null))
}
}
}).uploadImage(
FirebaseClass.INSURANCE_FIREBASE,
FirebaseClass.INSURANCE_FIREBASE + MainActivity.Companion.dateStamp
)
}
})
}
override fun onResume() {
super.onResume()
MainActivity.printObjectAsJson(TAG, photoStrings)
}
}

View File

@@ -1,222 +0,0 @@
package h_mal.appttude.com.driver.Driver
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Bundle
import android.provider.MediaStore
import android.text.TextUtils
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.*
import androidx.fragment.app.Fragment
import com.google.android.gms.tasks.OnCompleteListener
import com.google.android.gms.tasks.Task
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.ValueEventListener
import com.squareup.picasso.Picasso
import h_mal.appttude.com.driver.Global.*
import h_mal.appttude.com.driver.Global.ImageSelectorResults.FilepathResponse
import h_mal.appttude.com.driver.MainActivity
import h_mal.appttude.com.driver.Objects.MotObject
import h_mal.appttude.com.driver.R
class MotFragment : Fragment() {
private val TAG: String = this.javaClass.simpleName
var reference: DatabaseReference? = null
var uploadMot: TextView? = null
var motImage: ImageView? = null
var motExpiryEditText: EditText? = null
var filePath: Uri? = null
var picUri: Uri? = null
var motObject: MotObject? = null
var motExpText: String? = null
var uploadNew: Boolean? = null
var UID: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
uploadNew = false
if (arguments != null) {
Log.i(TAG, "onCreate: args = args exist")
if (arguments!!.containsKey("user_id")) {
UID = arguments!!.getString("user_id")
} else {
UID = MainActivity.auth!!.currentUser!!.uid
}
if (arguments!!.containsKey(ExecuteFragment.UPLOAD_NEW)) {
uploadNew = true
}
} else {
UID = MainActivity.auth!!.currentUser!!.uid
}
reference =
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
(UID)!!
)
.child(FirebaseClass.VEHICLE_FIREBASE)
.child(FirebaseClass.MOT_FIREBASE)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view: View = inflater.inflate(R.layout.fragment_mot, container, false)
motImage = view.findViewById(R.id.mot_img)
uploadMot = view.findViewById(R.id.uploadmot)
motExpiryEditText = view.findViewById(R.id.mot_expiry)
val submit: Button = view.findViewById(R.id.submit_mot)
MainActivity.viewController!!.progress(View.VISIBLE)
reference!!.addListenerForSingleValueEvent(valueEventListener)
uploadMot.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
val imageSelectorDialog: ImageSelectorDialog = ImageSelectorDialog((context)!!)
imageSelectorDialog.setImageName("mot_certificate")
imageSelectorDialog.show()
}
})
motExpiryEditText.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
val dateDialog: DateDialog = DateDialog((context)!!)
dateDialog.init(motExpiryEditText)
}
})
submit.setOnClickListener(submitOnClickListener)
return view
}
var valueEventListener: ValueEventListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
MainActivity.viewController!!.progress(View.GONE)
try {
motObject = dataSnapshot.getValue(MotObject::class.java)
} catch (e: Exception) {
Log.e(TAG, "onDataChange: ", e)
} finally {
if (motObject != null) {
if (!uploadNew!!) {
picUri = Uri.parse(motObject.getMotImageString())
motExpText = motObject.getMotExpiry()
motExpiryEditText!!.setText(motExpText)
Picasso.get()
.load(picUri)
.into(MainActivity.loadImage(motImage))
}
}
}
}
override fun onCancelled(databaseError: DatabaseError) {
MainActivity.viewController!!.progress(View.GONE)
}
}
var submitOnClickListener: View.OnClickListener = object : View.OnClickListener {
override fun onClick(v: View) {
motExpText = motExpiryEditText!!.text.toString().trim({ it <= ' ' })
if (!TextUtils.isEmpty(motExpText)) {
MainActivity.viewController!!.progress(View.VISIBLE)
if (filePath == null && picUri == null) {
Toast.makeText(context, "No Driver image", Toast.LENGTH_SHORT).show()
MainActivity.viewController!!.progress(View.GONE)
} else {
if (filePath != null) {
Log.i(TAG, "onClick: new Image uploaded")
FirebaseClass(context, filePath, object : FirebaseClass.Response {
override fun processFinish(output: Uri?) {
Log.i(TAG, "processFinish: ")
if (output != null) {
picUri = output
publishObject()
} else {
Toast.makeText(
context,
R.string.unsuccessful,
Toast.LENGTH_SHORT
).show()
}
}
}).uploadImage(
FirebaseClass.MOT_FIREBASE,
FirebaseClass.MOT_FIREBASE + MainActivity.Companion.dateStamp
)
} else {
Log.i(TAG, "onClick: pushing with same image")
publishObject()
}
}
} else {
if (TextUtils.isEmpty(motExpText)) {
motExpiryEditText!!.error = "Field required"
}
if (picUri == null) {
Toast.makeText(
context,
getString(R.string.image_required),
Toast.LENGTH_SHORT
).show()
}
}
}
}
private fun publishObject() {
if ((uploadNew)!!) {
MainActivity.archiveClass!!.archiveRecord(
UID,
FirebaseClass.MOT_FIREBASE,
motObject
)
}
val motObject: MotObject = MotObject(picUri.toString(), motExpText)
reference!!.setValue(motObject).addOnCompleteListener(object : OnCompleteListener<Void?> {
override fun onComplete(task: Task<Void?>) {
if (task.isSuccessful) {
Log.i(TAG, "onComplete: publish = " + task.isSuccessful)
MainActivity.approvalsClass!!.setStatusCode(
UID,
FirebaseClass.MOT_FIREBASE + FirebaseClass.APPROVAL_CONSTANT,
FirebaseClass.APPROVAL_PENDING
)
MainActivity.fragmentManager!!.popBackStack()
} else {
Toast.makeText(context, "Unable to upload", Toast.LENGTH_SHORT).show()
}
MainActivity.viewController!!.progress(View.GONE)
}
})
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE) {
if (grantResults.get(0) == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(context, "camera permission granted", Toast.LENGTH_LONG).show()
val cameraIntent: Intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivityForResult(cameraIntent, ImageSelectorDialog.CAMERA_REQUEST)
} else {
Toast.makeText(context, "camera permission denied", Toast.LENGTH_LONG).show()
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
super.onActivityResult(requestCode, resultCode, data)
ImageSelectorResults().Results(
activity, requestCode, resultCode, data,
filePath, motImage, object : FilepathResponse {
override fun processFinish(output: Uri?) {
filePath = output
}
})
}
}

View File

@@ -1,240 +0,0 @@
package h_mal.appttude.com.driver.Driver
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Bundle
import android.provider.MediaStore
import android.text.TextUtils
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.*
import androidx.fragment.app.Fragment
import com.google.android.gms.tasks.OnCompleteListener
import com.google.android.gms.tasks.Task
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.ValueEventListener
import com.squareup.picasso.Picasso
import h_mal.appttude.com.driver.Global.*
import h_mal.appttude.com.driver.Global.ImageSelectorResults.FilepathResponse
import h_mal.appttude.com.driver.MainActivity
import h_mal.appttude.com.driver.Objects.PrivateHireObject
import h_mal.appttude.com.driver.R
class PrivateHireLicenseFragment : Fragment() {
private val TAG: String = this.javaClass.simpleName
private var imageView: ImageView? = null
var phNo: EditText? = null
var phExpiry: EditText? = null
var filePath: Uri? = null
var picUri: Uri? = null
var Ph_numberString: String? = null
var Ph_exprString: String? = null
var reference: DatabaseReference? = null
var privateHireObject: PrivateHireObject? = null
var uploadNew: Boolean? = null
var UID: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
uploadNew = false
if (arguments != null) {
Log.i(TAG, "onCreate: args = args exist")
if (arguments!!.containsKey("user_id")) {
UID = arguments!!.getString("user_id")
} else {
UID = MainActivity.auth!!.currentUser!!.uid
}
if (arguments!!.containsKey(ExecuteFragment.UPLOAD_NEW)) {
uploadNew = true
}
} else {
UID = MainActivity.auth!!.currentUser!!.uid
}
reference =
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
(UID)!!
)
.child(FirebaseClass.DRIVER_FIREBASE)
.child(FirebaseClass.PRIVATE_HIRE_FIREBASE)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view: View = inflater.inflate(R.layout.fragment_private_hire_license, container, false)
MainActivity.viewController!!.progress(View.VISIBLE)
reference!!.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
MainActivity.viewController!!.progress(View.GONE)
try {
privateHireObject = dataSnapshot.getValue(PrivateHireObject::class.java)
} catch (e: Exception) {
Log.e(TAG, "onDataChange: ", e)
} finally {
if (privateHireObject != null) {
picUri = Uri.parse(privateHireObject.getPhImageString())
Ph_numberString = privateHireObject.getPhNumber()
Ph_exprString = privateHireObject.phExpiry
Log.i(TAG, "onDataChange: uploadNew = " + uploadNew)
if (!uploadNew!!) {
phNo!!.setText(Ph_numberString)
phExpiry!!.setText(Ph_exprString)
Picasso.get()
.load(picUri)
.into(MainActivity.loadImage(imageView))
}
}
}
}
override fun onCancelled(databaseError: DatabaseError) {
MainActivity.viewController!!.progress(View.GONE)
}
})
val uploadPH: TextView = view.findViewById(R.id.uploadphlic)
imageView = view.findViewById(R.id.imageView2)
phNo = view.findViewById(R.id.ph_no)
phExpiry = view.findViewById(R.id.ph_expiry)
phExpiry.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
val dateDialog: DateDialog = DateDialog((context)!!)
dateDialog.init(phExpiry)
dateDialog.show()
}
})
val submit: Button = view.findViewById(R.id.submit)
uploadPH.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
val imageSelectorDialog: ImageSelectorDialog = ImageSelectorDialog((context)!!)
imageSelectorDialog.setImageName("private_hire")
imageSelectorDialog.show()
}
})
submit.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
Ph_numberString = phNo.getText().toString().trim({ it <= ' ' })
Ph_exprString = phExpiry.getText().toString().trim({ it <= ' ' })
//validation for data then submit
if (!TextUtils.isEmpty(Ph_numberString) &&
!TextUtils.isEmpty(Ph_exprString)
) {
MainActivity.viewController!!.progress(View.VISIBLE)
if (filePath == null && picUri == null) {
Toast.makeText(context, "No Driver image", Toast.LENGTH_SHORT).show()
MainActivity.viewController!!.progress(View.GONE)
} else {
if (filePath != null) {
Log.i(TAG, "onClick: new Image uploaded")
FirebaseClass(context, filePath, object : FirebaseClass.Response {
override fun processFinish(output: Uri?) {
Log.i(TAG, "processFinish: ")
if (output != null) {
picUri = output
publishObject()
} else {
Toast.makeText(
context,
R.string.unsuccessful,
Toast.LENGTH_SHORT
).show()
MainActivity.viewController!!.progress(View.GONE)
}
}
}).uploadImage(
FirebaseClass.PRIVATE_HIRE_FIREBASE,
FirebaseClass.PRIVATE_HIRE_FIREBASE + MainActivity.Companion.dateStamp
)
} else {
Log.i(TAG, "onClick: pushing with same image")
publishObject()
}
}
} else {
if (TextUtils.isEmpty(Ph_numberString)) {
phNo.setError("Field required")
}
if (TextUtils.isEmpty(Ph_exprString)) {
phExpiry.setError("Field required")
}
if (picUri == null) {
Toast.makeText(
context,
getString(R.string.image_required),
Toast.LENGTH_SHORT
).show()
}
}
}
})
return view
}
private fun publishObject() {
if ((uploadNew)!!) {
MainActivity.archiveClass!!.archiveRecord(
UID,
FirebaseClass.PRIVATE_HIRE_FIREBASE,
privateHireObject
)
}
val privateHireObjectNew: PrivateHireObject =
PrivateHireObject(picUri.toString(), Ph_numberString, Ph_exprString)
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE)
.child((UID)!!).child(FirebaseClass.DRIVER_FIREBASE)
.child(FirebaseClass.PRIVATE_HIRE_FIREBASE)
.setValue(privateHireObjectNew)
.addOnCompleteListener(object : OnCompleteListener<Void?> {
override fun onComplete(task: Task<Void?>) {
if (task.isSuccessful) {
Log.i(TAG, "onComplete: publish = " + task.isSuccessful)
MainActivity.approvalsClass!!.setStatusCode(
UID,
FirebaseClass.PRIVATE_HIRE_FIREBASE + FirebaseClass.APPROVAL_CONSTANT,
FirebaseClass.APPROVAL_PENDING
)
MainActivity.fragmentManager!!.popBackStack()
} else {
Toast.makeText(context, R.string.unsuccessful, Toast.LENGTH_SHORT)
.show()
}
MainActivity.viewController!!.progress(View.GONE)
}
})
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE) {
if (grantResults.get(0) == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(context, "camera permission granted", Toast.LENGTH_LONG).show()
val cameraIntent: Intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivityForResult(cameraIntent, ImageSelectorDialog.CAMERA_REQUEST)
} else {
Toast.makeText(context, "camera permission denied", Toast.LENGTH_LONG).show()
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
super.onActivityResult(requestCode, resultCode, data)
ImageSelectorResults().Results(
activity, requestCode, resultCode, data,
filePath, imageView, object : FilepathResponse {
override fun processFinish(output: Uri?) {
filePath = output
}
})
}
}

View File

@@ -1,242 +0,0 @@
package h_mal.appttude.com.driver.Driver
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Bundle
import android.provider.MediaStore
import android.text.TextUtils
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.*
import androidx.fragment.app.Fragment
import com.google.android.gms.tasks.OnCompleteListener
import com.google.android.gms.tasks.Task
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.ValueEventListener
import com.squareup.picasso.Picasso
import h_mal.appttude.com.driver.Global.*
import h_mal.appttude.com.driver.Global.ImageSelectorResults.FilepathResponse
import h_mal.appttude.com.driver.MainActivity
import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject
import h_mal.appttude.com.driver.R
class PrivateHireVehicleFragment : Fragment() {
private val TAG: String = this.javaClass.simpleName
private var imageView: ImageView? = null
var phNo: EditText? = null
var phExpiry: EditText? = null
var filePath: Uri? = null
var picUri: Uri? = null
var Ph_numberString: String? = null
var Ph_exprString: String? = null
var reference: DatabaseReference? = null
var privateHireObject: PrivateHireVehicleObject? = null
var uploadNew: Boolean? = null
var UID: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
uploadNew = false
if (arguments != null) {
Log.i(TAG, "onCreate: args = args exist")
if (arguments!!.containsKey("user_id")) {
UID = arguments!!.getString("user_id")
} else {
UID = MainActivity.auth!!.currentUser!!.uid
}
if (arguments!!.containsKey(ExecuteFragment.UPLOAD_NEW)) {
uploadNew = true
}
} else {
UID = MainActivity.auth!!.currentUser!!.uid
}
reference =
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
(UID)!!
)
.child(FirebaseClass.VEHICLE_FIREBASE)
.child(FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view: View = inflater.inflate(R.layout.fragment_private_hire_vehicle, container, false)
MainActivity.viewController!!.progress(View.VISIBLE)
reference!!.addListenerForSingleValueEvent(valueEventListener)
val uploadPH: TextView = view.findViewById(R.id.uploadphlic)
imageView = view.findViewById(R.id.imageView2)
phNo = view.findViewById(R.id.ph_no)
phExpiry = view.findViewById(R.id.ph_expiry)
phExpiry.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
val dateDialog: DateDialog = DateDialog((context)!!)
dateDialog.init(phExpiry)
dateDialog.show()
}
})
val submit: Button = view.findViewById(R.id.submit)
submit.setOnClickListener(submitClick)
uploadPH.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
val imageSelectorDialog: ImageSelectorDialog = ImageSelectorDialog((context)!!)
imageSelectorDialog.setImageName("private_hire")
imageSelectorDialog.show()
}
})
return view
}
private val submitClick: View.OnClickListener = object : View.OnClickListener {
override fun onClick(v: View) {
Ph_numberString = phNo!!.text.toString().trim({ it <= ' ' })
Ph_exprString = phExpiry!!.text.toString().trim({ it <= ' ' })
//validation for data then submit
if (!TextUtils.isEmpty(Ph_numberString) &&
!TextUtils.isEmpty(Ph_exprString)
) {
MainActivity.viewController!!.progress(View.VISIBLE)
if (filePath == null && picUri == null) {
Toast.makeText(context, "No Driver image", Toast.LENGTH_SHORT).show()
MainActivity.viewController!!.progress(View.GONE)
} else {
if (filePath != null) {
Log.i(TAG, "onClick: new Image uploaded")
FirebaseClass(context, filePath, object : FirebaseClass.Response {
override fun processFinish(output: Uri?) {
Log.i(TAG, "processFinish: ")
if (output != null) {
picUri = output
publishObject()
} else {
Toast.makeText(
context,
R.string.unsuccessful,
Toast.LENGTH_SHORT
).show()
MainActivity.viewController!!.progress(View.GONE)
}
}
}).uploadImage(
FirebaseClass.PRIVATE_HIRE_FIREBASE,
FirebaseClass.PRIVATE_HIRE_FIREBASE + MainActivity.Companion.dateStamp
)
} else {
Log.i(TAG, "onClick: pushing with same image")
publishObject()
}
}
} else {
if (TextUtils.isEmpty(Ph_numberString)) {
phNo!!.error = "Field required"
}
if (TextUtils.isEmpty(Ph_exprString)) {
phExpiry!!.error = "Field required"
}
if (picUri == null) {
Toast.makeText(
context,
getString(R.string.image_required),
Toast.LENGTH_SHORT
).show()
}
}
}
}
var valueEventListener: ValueEventListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
MainActivity.viewController!!.progress(View.GONE)
try {
privateHireObject = dataSnapshot.getValue(
PrivateHireVehicleObject::class.java
)
} catch (e: Exception) {
Log.e(TAG, "onDataChange: ", e)
} finally {
if (privateHireObject != null) {
picUri = Uri.parse(privateHireObject.getPhCarImageString())
Ph_numberString = privateHireObject.getPhCarNumber()
Ph_exprString = privateHireObject.getPhCarExpiry()
Log.i(TAG, "onDataChange: uploadNew = " + uploadNew)
if (!uploadNew!!) {
phNo!!.setText(Ph_numberString)
phExpiry!!.setText(Ph_exprString)
Picasso.get()
.load(picUri)
.into(MainActivity.loadImage(imageView))
}
}
}
}
override fun onCancelled(databaseError: DatabaseError) {
MainActivity.viewController!!.progress(View.GONE)
}
}
private fun publishObject() {
if ((uploadNew)!!) {
MainActivity.archiveClass!!.archiveRecord(
UID,
FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE,
privateHireObject
)
}
val privateHireObjectNew: PrivateHireVehicleObject =
PrivateHireVehicleObject(picUri.toString(), Ph_numberString, Ph_exprString)
reference!!.setValue(privateHireObjectNew)
.addOnCompleteListener(object : OnCompleteListener<Void?> {
override fun onComplete(task: Task<Void?>) {
if (task.isSuccessful) {
Log.i(TAG, "onComplete: publish = " + task.isSuccessful)
MainActivity.approvalsClass!!.setStatusCode(
UID,
FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE + FirebaseClass.APPROVAL_CONSTANT,
FirebaseClass.APPROVAL_PENDING
)
MainActivity.fragmentManager!!.popBackStack()
} else {
Toast.makeText(context, R.string.unsuccessful, Toast.LENGTH_SHORT)
.show()
}
MainActivity.viewController!!.progress(View.GONE)
}
})
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE) {
if (grantResults.get(0) == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(context, "camera permission granted", Toast.LENGTH_LONG).show()
val cameraIntent: Intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivityForResult(cameraIntent, ImageSelectorDialog.CAMERA_REQUEST)
} else {
Toast.makeText(context, "camera permission denied", Toast.LENGTH_LONG).show()
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
super.onActivityResult(requestCode, resultCode, data)
ImageSelectorResults().Results(
activity, requestCode, resultCode, data,
filePath, imageView, object : FilepathResponse {
override fun processFinish(output: Uri?) {
filePath = output
}
})
}
}

View File

@@ -1,194 +0,0 @@
package h_mal.appttude.com.driver.Driver
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.cardview.widget.CardView
import androidx.fragment.app.Fragment
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.ValueEventListener
import h_mal.appttude.com.driver.Global.ExecuteFragment
import h_mal.appttude.com.driver.Global.FirebaseClass
import h_mal.appttude.com.driver.MainActivity
import h_mal.appttude.com.driver.Objects.ApprovalsObject
import h_mal.appttude.com.driver.Objects.WholeDriverObject
import h_mal.appttude.com.driver.R
class VehicleOverallFragment : Fragment() {
var vehicleApr: ImageView? = null
var insuranceApr: ImageView? = null
var motApr: ImageView? = null
var logbookApr: ImageView? = null
private var privateHireCarApr: ImageView? = null
var insuranceExp: TextView? = null
var motExp: TextView? = null
private var privateHireExp: TextView? = null
private var vehicleProfile: CardView? = null
private var insurance: CardView? = null
private var mot: CardView? = null
private var logbook: CardView? = null
private var privateHireCar: CardView? = null
private var reference: DatabaseReference? = null
private var wholeDriverObject: WholeDriverObject? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
reference =
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
MainActivity.auth!!.currentUser!!.uid
)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view: View = inflater.inflate(R.layout.fragment_vehicle_overall, container, false)
vehicleProfile = view.findViewById(R.id.vehicle_prof)
insurance = view.findViewById(R.id.insurance)
mot = view.findViewById(R.id.mot)
logbook = view.findViewById(R.id.logbook)
privateHireCar = view.findViewById(R.id.private_hire_vehicle_license)
vehicleApr = view.findViewById(R.id.approval_vehicle)
insuranceApr = view.findViewById(R.id.approval_insurance)
motApr = view.findViewById(R.id.approval_mot)
logbookApr = view.findViewById(R.id.approval_lb)
privateHireCarApr = view.findViewById(R.id.approval_ph_car)
insuranceExp = view.findViewById(R.id.ins_exp)
motExp = view.findViewById(R.id.mot_exp)
privateHireExp = view.findViewById(R.id.ph_car_exp)
insuranceExp.setVisibility(View.GONE)
motExp.setVisibility(View.GONE)
privateHireExp.setVisibility(View.GONE)
MainActivity.viewController!!.progress(View.VISIBLE)
reference!!.addListenerForSingleValueEvent(valueEventListener)
return view
}
var valueEventListener: ValueEventListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
wholeDriverObject = dataSnapshot.getValue(WholeDriverObject::class.java)
if (wholeDriverObject!!.approvalsObject != null) {
val approvalsObject: ApprovalsObject? = wholeDriverObject.approvalsObject
vehicleApr!!.setImageResource(
MainActivity.approvalsClass!!.setImageResource(
approvalsObject.vehicle_details_approval
)
)
insuranceApr!!.setImageResource(
MainActivity.approvalsClass!!.setImageResource(
approvalsObject.insurance_details_approval
)
)
motApr!!.setImageResource(
MainActivity.approvalsClass!!.setImageResource(
approvalsObject.getMot_details_approval()
)
)
logbookApr!!.setImageResource(
MainActivity.approvalsClass!!.setImageResource(
approvalsObject.getLog_book_approval()
)
)
privateHireCarApr!!.setImageResource(
MainActivity.approvalsClass!!.setImageResource(
approvalsObject.getPh_car_approval()
)
)
}
if (wholeDriverObject!!.vehicle_profile != null) {
if (wholeDriverObject.getVehicle_profile().insurance_details != null) {
insuranceExp!!.visibility = View.VISIBLE
insuranceExp!!.text = "Expiry: " + wholeDriverObject.getVehicle_profile().getInsurance_details()
.getExpiryDate()
}
if (wholeDriverObject.getVehicle_profile().mot_details != null) {
motExp!!.visibility = View.VISIBLE
motExp!!.text = "Expiry: " + wholeDriverObject.getVehicle_profile().getMot_details()
.getMotExpiry()
}
if (wholeDriverObject.getVehicle_profile().private_hire_vehicle != null) {
privateHireExp!!.visibility = View.VISIBLE
privateHireExp!!.text = "Expiry: " + wholeDriverObject.getVehicle_profile()
.getPrivateHireVehicleObject().getPhCarExpiry()
}
}
vehicleProfile!!.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
if (wholeDriverObject!!.vehicle_profile == null) {
ExecuteFragment.executeFragment(VehicleSetupFragment())
} else {
MainActivity.archiveClass!!.openDialogArchive(
context,
wholeDriverObject.getVehicle_profile().getVehicle_details(),
VehicleSetupFragment()
)
}
}
})
insurance!!.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
if (wholeDriverObject!!.vehicle_profile == null) {
ExecuteFragment.executeFragment(InsuranceFragment())
} else {
MainActivity.archiveClass!!.openDialogArchive(
context,
wholeDriverObject.getVehicle_profile().getInsurance_details(),
InsuranceFragment()
)
}
}
})
mot!!.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
if (wholeDriverObject!!.vehicle_profile == null) {
ExecuteFragment.executeFragment(MotFragment())
} else {
MainActivity.archiveClass!!.openDialogArchive(
context,
wholeDriverObject.getVehicle_profile().getMot_details(),
MotFragment()
)
}
}
})
logbook!!.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
if (wholeDriverObject!!.vehicle_profile == null) {
ExecuteFragment.executeFragment(logbookFragment())
} else {
MainActivity.archiveClass!!.openDialogArchive(
context,
wholeDriverObject.getVehicle_profile().getLog_book(),
logbookFragment()
)
}
}
})
privateHireCar!!.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
if (wholeDriverObject!!.vehicle_profile == null) {
ExecuteFragment.executeFragment(PrivateHireVehicleFragment())
} else {
MainActivity.archiveClass!!.openDialogArchive(
context,
wholeDriverObject.getVehicle_profile().getPrivateHireVehicleObject(),
PrivateHireVehicleFragment()
)
}
}
})
MainActivity.viewController!!.progress(View.GONE)
}
override fun onCancelled(databaseError: DatabaseError) {
MainActivity.viewController!!.progress(View.GONE)
}
}
}

View File

@@ -1,226 +0,0 @@
package h_mal.appttude.com.driver.Driver
import android.os.Bundle
import android.text.TextUtils
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.CheckBox
import android.widget.EditText
import android.widget.Toast
import androidx.fragment.app.Fragment
import com.google.android.gms.tasks.OnCompleteListener
import com.google.android.gms.tasks.Task
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.ValueEventListener
import h_mal.appttude.com.driver.Global.DateDialog
import h_mal.appttude.com.driver.Global.ExecuteFragment
import h_mal.appttude.com.driver.Global.FirebaseClass
import h_mal.appttude.com.driver.MainActivity
import h_mal.appttude.com.driver.Objects.VehicleProfileObject
import h_mal.appttude.com.driver.R
class VehicleSetupFragment : Fragment() {
private val TAG: String = this.javaClass.simpleName
var reg: EditText? = null
var make: EditText? = null
var model: EditText? = null
var color: EditText? = null
var keeperName: EditText? = null
var address: EditText? = null
var postcode: EditText? = null
var startDate: EditText? = null
var seized: CheckBox? = null
var Submit: Button? = null
var ref: DatabaseReference? = null
var vehicleProfileObject: VehicleProfileObject? = null
var uploadNew: Boolean? = null
var UID: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
uploadNew = false
if (arguments != null) {
Log.i(TAG, "onCreate: args = args exist")
if (arguments!!.containsKey("user_id")) {
UID = arguments!!.getString("user_id")
} else {
UID = MainActivity.auth!!.currentUser!!.uid
}
if (arguments!!.containsKey(ExecuteFragment.UPLOAD_NEW)) {
uploadNew = true
}
} else {
UID = MainActivity.auth!!.currentUser!!.uid
}
ref = MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
(UID)!!
).child(FirebaseClass.VEHICLE_FIREBASE)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view: View = inflater.inflate(R.layout.fragment_vehicle_setup, container, false)
reg = view.findViewById(R.id.reg)
make = view.findViewById(R.id.make)
model = view.findViewById(R.id.model)
color = view.findViewById(R.id.colour)
keeperName = view.findViewById(R.id.keeper_name)
address = view.findViewById(R.id.address)
postcode = view.findViewById(R.id.postcode)
startDate = view.findViewById(R.id.start_date)
seized = view.findViewById(R.id.seized)
Submit = view.findViewById(R.id.submit_vehicle)
startDate.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
val dateDialog: DateDialog = DateDialog((context)!!)
dateDialog.init(startDate)
}
})
MainActivity.viewController!!.progress(View.VISIBLE)
ref!!.addListenerForSingleValueEvent(valueEventListener)
Submit.setOnClickListener(submitOnClickListener)
return view
}
var valueEventListener: ValueEventListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
MainActivity.viewController!!.progress(View.GONE)
try {
vehicleProfileObject =
dataSnapshot.child(FirebaseClass.VEHICLE_DETAILS_FIREBASE).getValue(
VehicleProfileObject::class.java
)
} catch (e: Exception) {
Log.e(TAG, "onDataChange: ", e)
} finally {
if (vehicleProfileObject != null) {
if (!uploadNew!!) {
reg.setText(vehicleProfileObject.getReg())
make.setText(vehicleProfileObject.getMake())
model.setText(vehicleProfileObject.getModel())
color.setText(vehicleProfileObject.getColour())
keeperName.setText(vehicleProfileObject.getKeeperName())
address.setText(vehicleProfileObject.getKeeperAddress())
postcode.setText(vehicleProfileObject.getKeeperPostCode())
startDate.setText(vehicleProfileObject.getStartDate())
seized!!.isChecked = vehicleProfileObject!!.isSeized()
}
}
}
}
override fun onCancelled(databaseError: DatabaseError) {
MainActivity.viewController!!.progress(View.GONE)
}
}
var submitOnClickListener: View.OnClickListener = object : View.OnClickListener {
override fun onClick(v: View) {
val regString: String = reg!!.text.toString().trim({ it <= ' ' })
val makeString: String = make!!.text.toString().trim({ it <= ' ' })
val modelString: String = model!!.text.toString().trim({ it <= ' ' })
val colourString: String = color!!.text.toString().trim({ it <= ' ' })
val keeperNameStrin: String = keeperName!!.text.toString().trim({ it <= ' ' })
val addressString: String = address!!.text.toString().trim({ it <= ' ' })
val postcodeString: String = postcode!!.text.toString().trim({ it <= ' ' })
val driverForename: String = startDate!!.text.toString().trim({ it <= ' ' })
if ((!TextUtils.isEmpty(regString)
&& !TextUtils.isEmpty(makeString)
&& !TextUtils.isEmpty(modelString)
&& !TextUtils.isEmpty(colourString)
&& !TextUtils.isEmpty(keeperNameStrin)
&& !TextUtils.isEmpty(addressString)
&& !TextUtils.isEmpty(postcodeString)
&& !TextUtils.isEmpty(driverForename))
) {
if ((uploadNew)!!) {
MainActivity.archiveClass!!.archiveRecord(
UID,
FirebaseClass.VEHICLE_DETAILS_FIREBASE,
vehicleProfileObject
)
}
val vehicleProfileObject: VehicleProfileObject = VehicleProfileObject(
regString,
makeString,
modelString,
colourString,
keeperNameStrin,
addressString,
postcodeString,
driverForename,
seized!!.isChecked
)
MainActivity.viewController!!.progress(View.VISIBLE)
ref!!.child(FirebaseClass.VEHICLE_DETAILS_FIREBASE)
.setValue(vehicleProfileObject)
.addOnCompleteListener(object : OnCompleteListener<Void?> {
override fun onComplete(task: Task<Void?>) {
if (task.isSuccessful) {
MainActivity.approvalsClass!!.setStatusCode(
UID,
FirebaseClass.VEHICLE_DETAILS_FIREBASE + FirebaseClass.APPROVAL_CONSTANT,
FirebaseClass.APPROVAL_PENDING
)
MainActivity.approvalsClass!!.setStatusCode(
UID,
FirebaseClass.MOT_FIREBASE + FirebaseClass.APPROVAL_CONSTANT,
FirebaseClass.APPROVAL_PENDING
)
MainActivity.approvalsClass!!.setStatusCode(
UID,
FirebaseClass.INSURANCE_FIREBASE + FirebaseClass.APPROVAL_CONSTANT,
FirebaseClass.APPROVAL_PENDING
)
MainActivity.approvalsClass!!.setStatusCode(
UID,
FirebaseClass.LOG_BOOK_FIREBASE + FirebaseClass.APPROVAL_CONSTANT,
FirebaseClass.APPROVAL_PENDING
)
MainActivity.fragmentManager!!.popBackStack()
} else {
Toast.makeText(
context,
"Upload Unsuccessful",
Toast.LENGTH_SHORT
).show()
}
MainActivity.viewController!!.progress(View.GONE)
}
})
} else {
if (TextUtils.isEmpty(regString)) {
reg!!.error = "Field required"
}
if (TextUtils.isEmpty(makeString)) {
make!!.error = "Field required"
}
if (TextUtils.isEmpty(modelString)) {
model!!.error = "Field required"
}
if (TextUtils.isEmpty(colourString)) {
color!!.error = "Field required"
}
if (TextUtils.isEmpty(keeperNameStrin)) {
keeperName!!.error = "Field required"
}
if (TextUtils.isEmpty(addressString)) {
address!!.error = "Field required"
}
if (TextUtils.isEmpty(postcodeString)) {
postcode!!.error = "Field required"
}
if (TextUtils.isEmpty(driverForename)) {
startDate!!.error = "Field required"
}
}
}
}
}

View File

@@ -1,39 +0,0 @@
package h_mal.appttude.com.driver.Driver
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import androidx.cardview.widget.CardView
import androidx.fragment.app.Fragment
import h_mal.appttude.com.driver.Global.ExecuteFragment
import h_mal.appttude.com.driver.R
class homeDriverFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view: View = inflater.inflate(R.layout.fragment_home, container, false)
val button: Button = view.findViewById(R.id.driver)
button.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
ExecuteFragment.executeFragment(DriverOverallFragment())
}
})
val second: CardView = view.findViewById(R.id.car)
second.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
ExecuteFragment.executeFragment(VehicleOverallFragment())
}
})
return view
}
}

View File

@@ -1,220 +0,0 @@
package h_mal.appttude.com.driver.Driver
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Bundle
import android.provider.MediaStore
import android.text.TextUtils
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.*
import androidx.fragment.app.Fragment
import com.google.android.gms.tasks.OnCompleteListener
import com.google.android.gms.tasks.Task
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.ValueEventListener
import com.squareup.picasso.Picasso
import h_mal.appttude.com.driver.Global.ExecuteFragment
import h_mal.appttude.com.driver.Global.FirebaseClass
import h_mal.appttude.com.driver.Global.ImageSelectorDialog
import h_mal.appttude.com.driver.Global.ImageSelectorResults
import h_mal.appttude.com.driver.Global.ImageSelectorResults.FilepathResponse
import h_mal.appttude.com.driver.MainActivity
import h_mal.appttude.com.driver.Objects.LogbookObject
import h_mal.appttude.com.driver.R
class logbookFragment : Fragment() {
private val TAG: String = this.javaClass.simpleName
var reference: DatabaseReference? = null
var uploadlb: TextView? = null
var lbImage: ImageView? = null
var v5cNumber: EditText? = null
var filePath: Uri? = null
var picUri: Uri? = null
var v5cString: String? = null
var logbookObject: LogbookObject? = null
var uploadNew: Boolean? = null
var UID: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
uploadNew = false
if (arguments != null) {
Log.i(TAG, "onCreate: args = args exist")
if (arguments!!.containsKey("user_id")) {
UID = arguments!!.getString("user_id")
} else {
UID = MainActivity.auth!!.currentUser!!.uid
}
if (arguments!!.containsKey(ExecuteFragment.UPLOAD_NEW)) {
uploadNew = true
}
} else {
UID = MainActivity.auth!!.currentUser!!.uid
}
reference =
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
(UID)!!
).child(FirebaseClass.VEHICLE_FIREBASE)
.child(FirebaseClass.LOG_BOOK_FIREBASE)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view: View = inflater.inflate(R.layout.fragment_logbook, container, false)
uploadlb = view.findViewById(R.id.upload_lb)
lbImage = view.findViewById(R.id.log_book_img)
v5cNumber = view.findViewById(R.id.v5c_no)
val submit: Button = view.findViewById(R.id.submit_lb)
MainActivity.viewController!!.progress(View.VISIBLE)
reference!!.addListenerForSingleValueEvent(valueEventListener)
uploadlb.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
val imageSelectorDialog: ImageSelectorDialog = ImageSelectorDialog((context)!!)
imageSelectorDialog.setImageName("logbook_pic" + MainActivity.Companion.dateStamp)
imageSelectorDialog.show()
}
})
submit.setOnClickListener(submitOnClickListener)
return view
}
var valueEventListener: ValueEventListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
MainActivity.viewController!!.progress(View.GONE)
try {
logbookObject = dataSnapshot.getValue(LogbookObject::class.java)
} catch (e: Exception) {
Log.e(TAG, "onDataChange: ", e)
} finally {
if (logbookObject != null) {
picUri = Uri.parse(logbookObject.getPhotoString())
v5cString = logbookObject.getV5cnumber()
if (!uploadNew!!) {
v5cNumber!!.setText(v5cString)
Picasso.get()
.load(picUri)
.into(MainActivity.loadImage(lbImage))
}
}
}
}
override fun onCancelled(databaseError: DatabaseError) {
MainActivity.viewController!!.progress(View.GONE)
}
}
var submitOnClickListener: View.OnClickListener = object : View.OnClickListener {
override fun onClick(v: View) {
v5cString = v5cNumber!!.text.toString().trim({ it <= ' ' })
if (!TextUtils.isEmpty(v5cString)) {
MainActivity.viewController!!.progress(View.VISIBLE)
if (filePath == null && picUri == null) {
Toast.makeText(context, "No Driver image", Toast.LENGTH_SHORT).show()
MainActivity.viewController!!.progress(View.GONE)
} else {
if (filePath != null) {
Log.i(TAG, "onClick: new Image uploaded")
FirebaseClass(context, filePath, object : FirebaseClass.Response {
override fun processFinish(output: Uri?) {
Log.i(TAG, "processFinish: ")
if (output != null) {
picUri = output
publishObject()
} else {
Toast.makeText(
context,
R.string.unsuccessful,
Toast.LENGTH_SHORT
).show()
MainActivity.viewController!!.progress(View.GONE)
}
}
}).uploadImage(
FirebaseClass.LOG_BOOK_FIREBASE,
FirebaseClass.LOG_BOOK_FIREBASE + MainActivity.Companion.dateStamp
)
} else {
Log.i(TAG, "onClick: pushing with same image")
publishObject()
}
}
} else {
if (TextUtils.isEmpty(v5cString)) {
v5cNumber!!.error = "Field required"
}
if (picUri == null) {
Toast.makeText(
context,
getString(R.string.image_required),
Toast.LENGTH_SHORT
).show()
}
}
}
}
private fun publishObject() {
if ((uploadNew)!!) {
MainActivity.archiveClass!!.archiveRecord(
UID,
FirebaseClass.LOG_BOOK_FIREBASE,
logbookObject
)
}
val logbookObjectNew: LogbookObject = LogbookObject(picUri.toString(), v5cString)
reference!!.setValue(logbookObjectNew)
.addOnCompleteListener(object : OnCompleteListener<Void?> {
override fun onComplete(task: Task<Void?>) {
if (task.isSuccessful) {
MainActivity.approvalsClass!!.setStatusCode(
UID,
FirebaseClass.LOG_BOOK_FIREBASE + FirebaseClass.APPROVAL_CONSTANT,
FirebaseClass.APPROVAL_PENDING
)
MainActivity.fragmentManager!!.popBackStack()
} else {
Toast.makeText(context, "Upload Unsuccessful", Toast.LENGTH_SHORT)
.show()
}
MainActivity.viewController!!.progress(View.VISIBLE)
}
})
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE) {
if (grantResults.get(0) == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(context, "camera permission granted", Toast.LENGTH_LONG).show()
val cameraIntent: Intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivityForResult(cameraIntent, ImageSelectorDialog.CAMERA_REQUEST)
} else {
Toast.makeText(context, "camera permission denied", Toast.LENGTH_LONG).show()
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
super.onActivityResult(requestCode, resultCode, data)
ImageSelectorResults().Results(
activity, requestCode, resultCode, data,
filePath, lbImage, object : FilepathResponse {
override fun processFinish(output: Uri?) {
filePath = output
}
})
}
}

View File

@@ -1,8 +1,5 @@
package h_mal.appttude.com.driver.Global
import com.google.android.gms.tasks.OnCompleteListener
import com.google.android.gms.tasks.Task
import h_mal.appttude.com.driver.MainActivity
import h_mal.appttude.com.driver.Objects.ApprovalsObject
import h_mal.appttude.com.driver.Objects.WholeDriverObject
import h_mal.appttude.com.driver.R
@@ -11,16 +8,16 @@ import h_mal.appttude.com.driver.R
class ApprovalsClass {
fun getOverApprovalStatusCode(wholeDriverObject: WholeDriverObject?): Int {
if (wholeDriverObject!!.approvalsObject != null) {
val approvalsObject: ApprovalsObject? = wholeDriverObject.approvalsObject
val approvalsObject: ApprovalsObject = wholeDriverObject!!.approvalsObject!!
val ints: IntArray = intArrayOf(
approvalsObject.getDriver_details_approval(),
approvalsObject.driver_details_approval,
approvalsObject.driver_license_approval,
approvalsObject.private_hire_approval,
approvalsObject.vehicle_details_approval,
approvalsObject.insurance_details_approval,
approvalsObject.getMot_details_approval(),
approvalsObject.getLog_book_approval(),
approvalsObject.getPh_car_approval()
approvalsObject.mot_details_approval,
approvalsObject.log_book_approval,
approvalsObject.ph_car_approval
)
return setImageResource(mode(ints))
}
@@ -28,18 +25,16 @@ class ApprovalsClass {
}
fun setStatusCode(userId: String?, approvalNameString: String, status: Int) {
if (!(approvalNameString == "")) {
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE)
.child((userId)!!).child(FirebaseClass.USER_APPROVALS)
.child(approvalNameString)
.setValue(status).addOnCompleteListener(object : OnCompleteListener<Void?> {
override fun onComplete(task: Task<Void?>) {
if (task.isSuccessful) {
} else {
}
}
})
}
// if (!(approvalNameString == "")) {
// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE)
// .child((userId)!!).child(FirebaseClass.USER_APPROVALS)
// .child(approvalNameString)
// .setValue(status).addOnCompleteListener { task ->
// if (task.isSuccessful) {
// } else {
// }
// }
// }
}
fun setImageResource(statusCode: Int): Int {
@@ -55,7 +50,6 @@ class ApprovalsClass {
companion object {
fun mode(array: IntArray): Int {
MainActivity.printObjectAsJson("modeArrays", array)
var mode: Int = array.get(0)
var maxCount: Int = 0
if (matchedArray(array, 3)) {

View File

@@ -2,54 +2,45 @@ package h_mal.appttude.com.driver.Global
import android.app.AlertDialog
import android.content.Context
import android.content.DialogInterface
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import com.google.android.gms.tasks.OnCompleteListener
import com.google.android.gms.tasks.Task
import com.google.firebase.database.DatabaseReference
import h_mal.appttude.com.driver.MainActivity
import h_mal.appttude.com.driver.utils.UPLOAD_NEW
class ArchiveClass {
fun archiveRecord(UID: String?, item: String?, `object`: Any?) {
val toPath: DatabaseReference =
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
(UID)!!
)
.child(FirebaseClass.ARCHIVE_FIREBASE).child((item)!!)
toPath.child(MainActivity.Companion.getDateTimeStamp()).setValue(`object`)
.addOnCompleteListener(object : OnCompleteListener<Void?> {
override fun onComplete(task: Task<Void?>) {
if (task.isSuccessful) {
Log.i(TAG, "onComplete: archive successful")
} else {
Log.i(TAG, "onComplete: archive unsuccessful")
}
}
})
// val toPath: DatabaseReference =
// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
// (UID)!!
// )
// .child(FirebaseClass.ARCHIVE_FIREBASE).child((item)!!)
// toPath.child(MainActivity.dateTimeStamp).setValue(`object`)
// .addOnCompleteListener { task ->
// if (task.isSuccessful) {
// Log.i(TAG, "onComplete: archive successful")
// } else {
// Log.i(TAG, "onComplete: archive unsuccessful")
// }
// }
}
fun openDialogArchive(context: Context?, `object`: Any?, fragment: Fragment) {
if (`object` == null) {
ExecuteFragment.executeFragment(fragment)
// executeFragment(fragment)
} else {
val builder: AlertDialog.Builder = AlertDialog.Builder(context)
builder.setMessage("Do you want to View/Edit or Upload new?")
.setPositiveButton("View/Edit", object : DialogInterface.OnClickListener {
override fun onClick(dialog: DialogInterface, which: Int) {
ExecuteFragment.executeFragment(fragment)
}
})
.setNegativeButton("Upload New", object : DialogInterface.OnClickListener {
override fun onClick(dialog: DialogInterface, which: Int) {
val bundle: Bundle = Bundle()
bundle.putString(ExecuteFragment.UPLOAD_NEW, "Yes")
fragment.arguments = bundle
ExecuteFragment.executeFragment(fragment)
}
})
.setPositiveButton("View/Edit"
) { _, _ ->
// executeFragment(fragment)
}
.setNegativeButton("Upload New"
) { _, _ ->
val bundle = Bundle()
bundle.putString(UPLOAD_NEW, "Yes")
fragment.arguments = bundle
// executeFragment(fragment)
}
.create().show()
}
}
@@ -59,26 +50,21 @@ class ArchiveClass {
bundle.putString("user_id", user)
fragment!!.arguments = bundle
if (`object` == null) {
ExecuteFragment.executeFragment(fragment)
// executeFragment(fragment)
} else {
val builder: AlertDialog.Builder = AlertDialog.Builder(context)
builder.setMessage("Do you want to View/Edit or Upload new?")
.setPositiveButton("View/Edit", object : DialogInterface.OnClickListener {
override fun onClick(dialog: DialogInterface, which: Int) {
ExecuteFragment.executeFragment(fragment)
}
})
.setNegativeButton("Upload New", object : DialogInterface.OnClickListener {
override fun onClick(dialog: DialogInterface, which: Int) {
bundle.putString(ExecuteFragment.UPLOAD_NEW, "Yes")
ExecuteFragment.executeFragment(fragment)
}
})
.setPositiveButton("View/Edit"
) { _, _ ->
// executeFragment(fragment)
}
.setNegativeButton("Upload New"
) { _, _ ->
bundle.putString(UPLOAD_NEW, "Yes")
// executeFragment(fragment)
}
.create().show()
}
}
companion object {
private val TAG: String = "ArchiveClass"
}
}

View File

@@ -1,103 +1,54 @@
package h_mal.appttude.com.driver.Global
import android.app.DatePickerDialog
import android.app.DatePickerDialog.OnDateSetListener
import android.content.Context
import android.icu.util.Calendar
import android.os.Build
import android.text.TextUtils
import android.util.Log
import android.widget.DatePicker
import android.widget.EditText
import androidx.annotation.RequiresApi
import h_mal.appttude.com.driver.R
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
import h_mal.appttude.com.driver.utils.DateUtils
private const val DATE_FORMAT = "dd/MM/yyyy"
@RequiresApi(api = Build.VERSION_CODES.N)
class DateDialog(
context: Context,
private val editText: EditText
) : DatePickerDialog(context) {
class DateDialog : DatePickerDialog {
var mYear: Int = 0
var mMonth: Int = 0
var mDay: Int = 0
var editText: EditText? = null
var dateSetListener: OnDateSetListener =
OnDateSetListener { _, year, month, dayOfMonth ->
val cal = Calendar.getInstance()
cal.set(year, month + 1, dayOfMonth)
@RequiresApi(api = Build.VERSION_CODES.N)
constructor(context: Context) : super(context)
@RequiresApi(api = Build.VERSION_CODES.N)
constructor(context: Context, themeResId: Int) : super(context, themeResId)
constructor(
context: Context,
listener: OnDateSetListener?,
year: Int, month: Int, dayOfMonth: Int
) : super(context, listener, year, month, dayOfMonth)
constructor(
context: Context,
themeResId: Int,
listener: OnDateSetListener?,
year: Int,
monthOfYear: Int,
dayOfMonth: Int
) : super(context, themeResId, listener, year, monthOfYear, dayOfMonth)
override fun setTitle(title: CharSequence) {
super.setTitle(title)
}
override fun setOnDateSetListener(listener: OnDateSetListener?) {
super.setOnDateSetListener(dateSetListener)
}
fun init(editText: EditText?) {
this.editText = editText
val dateString: String = editText!!.text.toString()
var javaDate: Date? = null
if (TextUtils.isEmpty(dateString)) {
val calendar: Calendar = Calendar.getInstance()
mYear = calendar.get(Calendar.YEAR)
mMonth = calendar.get(Calendar.MONTH)
mDay = calendar.get(Calendar.DAY_OF_MONTH)
} else {
try {
val sdfrmt: SimpleDateFormat = SimpleDateFormat("dd/MM/yyyy")
sdfrmt.isLenient = false
javaDate = sdfrmt.parse(dateString)
} catch (e: ParseException) {
e.printStackTrace()
} finally {
if (javaDate != null) {
mYear = dateString.substring(6, dateString.length).toInt()
mMonth = dateString.substring(3, 5).toInt() - 1
mDay = dateString.substring(0, 2).toInt()
} else {
val calendar: Calendar = Calendar.getInstance()
mYear = calendar.get(Calendar.YEAR)
mMonth = calendar.get(Calendar.MONTH)
mDay = calendar.get(Calendar.DAY_OF_MONTH)
}
}
editText.setText(DateUtils.parseCalenderIntoDateString(cal, DATE_FORMAT))
}
Log.i(
this.javaClass.simpleName, ("init: year =" + mYear +
"month = " + mMonth +
"day = " + mDay)
)
updateDate(mYear, mMonth, mDay)
setOnDateSetListener(null)
this.setTitle(context.getString(R.string.set_date))
init {
val dateString = editText.text?.toString()
val date = if (dateString.isNullOrBlank()){
// Set time to now
Calendar.getInstance()
}else{
// Parse current edit text string and set value
DateUtils.parseDateStringIntoCalender(dateString, DATE_FORMAT)
?: Calendar.getInstance()
}
setDateFromCalender(date)
setOnDateSetListener(dateSetListener)
setTitle(context.getString(R.string.set_date))
show()
}
var dateSetListener: OnDateSetListener = object : OnDateSetListener {
override fun onDateSet(view: DatePicker, year: Int, month: Int, dayOfMonth: Int) {
mYear = year
mMonth = month + 1
mDay = dayOfMonth
editText!!.setText(
(String.format("%02d", mDay) + "/" + String.format("%02d", (mMonth)) + "/" +
mYear)
)
}
private fun setDateFromCalender(calendar: Calendar){
val mYear = calendar.get(Calendar.YEAR)
val mMonth = calendar.get(Calendar.MONTH)
val mDay = calendar.get(Calendar.DAY_OF_MONTH)
updateDate(mYear, mMonth, mDay)
}
}

View File

@@ -1,68 +0,0 @@
package h_mal.appttude.com.driver.Global
import android.os.Bundle
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentTransaction
import h_mal.appttude.com.driver.MainActivity
import h_mal.appttude.com.driver.R
object ExecuteFragment {
val UPLOAD_NEW: String = "upload_new"
fun executeFragment(fragment: Fragment, bundle: Bundle?) {
executeFragmentMethod(fragment, bundle)
}
fun executeFragment(fragment: Fragment?) {
executeFragmentMethod(fragment)
}
fun executeFragment(fragment: Fragment?, userId: String?) {
executeFragmentMethod(fragment, userId)
}
fun executeFragment(fragment: Fragment, userId: String?, archive: String?) {
executeFragmentMethod(fragment, userId, archive)
}
private fun executeFragmentMethod(f: Fragment?) {
val fragmentTransaction: FragmentTransaction =
MainActivity.fragmentManager!!.beginTransaction()
fragmentTransaction.replace(R.id.container, (f)!!)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.addToBackStack(f.javaClass.simpleName).commit()
}
private fun executeFragmentMethod(f: Fragment?, user_id: String?) {
val bundle: Bundle = Bundle()
bundle.putString("user_id", user_id)
f!!.arguments = bundle
val fragmentTransaction: FragmentTransaction =
MainActivity.fragmentManager!!.beginTransaction()
fragmentTransaction.replace(R.id.container, (f))
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.addToBackStack(f.javaClass.simpleName).commit()
}
private fun executeFragmentMethod(f: Fragment, user_id: String?, archive: String?) {
val bundle: Bundle = Bundle()
bundle.putString("user_id", user_id)
bundle.putString("archive", archive)
f.arguments = bundle
val fragmentTransaction: FragmentTransaction =
MainActivity.fragmentManager!!.beginTransaction()
fragmentTransaction.replace(R.id.container, f)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.addToBackStack(f.javaClass.simpleName).commit()
}
private fun executeFragmentMethod(f: Fragment, b: Bundle?) {
if (b != null) {
f.arguments = b
}
val fragmentTransaction: FragmentTransaction =
MainActivity.fragmentManager!!.beginTransaction()
fragmentTransaction.replace(R.id.container, f)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.addToBackStack(f.javaClass.simpleName).commit()
}
}

View File

@@ -1,15 +1,7 @@
package h_mal.appttude.com.driver.Global
import android.app.ProgressDialog
import android.content.Context
import android.net.Uri
import com.google.android.gms.tasks.Continuation
import com.google.android.gms.tasks.Task
import com.google.firebase.storage.OnProgressListener
import com.google.firebase.storage.StorageReference
import com.google.firebase.storage.UploadTask
import h_mal.appttude.com.driver.MainActivity
import h_mal.appttude.com.driver.utils.displayToast
class FirebaseClass constructor(var context: Context?, var filePath: Uri?, var delegate: Response) {
open interface Response {
@@ -17,46 +9,41 @@ class FirebaseClass constructor(var context: Context?, var filePath: Uri?, var d
}
fun uploadImage(path: String, name: String) {
if (filePath != null) {
val progressDialog: ProgressDialog = ProgressDialog(context)
progressDialog.setTitle("Uploading...")
progressDialog.show()
val ref: StorageReference = MainActivity.storageReference!!.child(
("images/" + MainActivity.auth!!.currentUser!!
.uid + "/" + path
+ "/" + name)
)
val uploadTask: UploadTask = ref.putFile(filePath!!)
uploadTask.addOnProgressListener(object : OnProgressListener<UploadTask.TaskSnapshot> {
override fun onProgress(taskSnapshot: UploadTask.TaskSnapshot) {
val progress: Double =
(100.0 * taskSnapshot.bytesTransferred / taskSnapshot
.totalByteCount)
progressDialog.setMessage("Uploaded " + progress.toInt() + "%")
}
}).continueWithTask(object : Continuation<UploadTask.TaskSnapshot?, Task<Uri>> {
@Throws(Exception::class)
override fun then(task: Task<UploadTask.TaskSnapshot?>): Task<Uri> {
if (!task.isSuccessful) {
throw (task.exception)!!
}
// Continue with the task to get the download URL
return ref.downloadUrl
}
}).addOnCompleteListener { task ->
if (task.isSuccessful) {
delegate.processFinish(task.result)
progressDialog.dismiss()
context?.displayToast("Uploaded Successfully")
println("onComplete: uploaded Successful uri: " + task.result)
} else {
delegate.processFinish(null)
progressDialog.dismiss()
context?.displayToast("Uploaded Successfully")
}
}
}
// if (filePath != null) {
// val progressDialog: ProgressDialog = ProgressDialog(context)
// progressDialog.setTitle("Uploading...")
// progressDialog.show()
// val ref: StorageReference = MainActivity.storageReference!!.child(
// ("images/" + MainActivity.auth!!.currentUser!!
// .uid + "/" + path
// + "/" + name)
// )
// val uploadTask: UploadTask = ref.putFile(filePath!!)
// uploadTask.addOnProgressListener { taskSnapshot ->
// val progress: Double =
// (100.0 * taskSnapshot.bytesTransferred / taskSnapshot
// .totalByteCount)
// progressDialog.setMessage("Uploaded " + progress.toInt() + "%")
// }.continueWithTask { task ->
// if (!task.isSuccessful) {
// throw (task.exception)!!
// }
//
// // Continue with the task to get the download URL
// ref.downloadUrl
// }.addOnCompleteListener { task ->
// if (task.isSuccessful) {
// delegate.processFinish(task.result)
// progressDialog.dismiss()
// context?.displayToast("Uploaded Successfully")
// println("onComplete: uploaded Successful uri: " + task.result)
// } else {
// delegate.processFinish(null)
// progressDialog.dismiss()
// context?.displayToast("Uploaded Successfully")
// }
// }
// }
}
companion object {

View File

@@ -11,13 +11,11 @@ import android.net.Uri
import android.os.Bundle
import android.os.Environment
import android.provider.MediaStore
import android.view.View
import android.widget.Button
import android.widget.Toast
import androidx.core.app.ActivityCompat
import androidx.core.content.FileProvider
import androidx.fragment.app.Fragment
import h_mal.appttude.com.driver.MainActivity
import h_mal.appttude.com.driver.R
import java.io.File
import java.util.*
@@ -55,49 +53,45 @@ class ImageSelectorDialog : Dialog {
)
val permissionCam: Int =
ActivityCompat.checkSelfPermission(context, Manifest.permission.CAMERA)
fragment = MainActivity.fragmentManager!!.fragments.get(0)
// fragment = MainActivity.mainFragmentManager.fragments[0]
val upload: Button = findViewById(R.id.upload)
val takePic: Button = findViewById(R.id.take_pic)
upload.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
if (permissionPic == PackageManager.PERMISSION_GRANTED) {
chooseImage()
} else {
Toast.makeText(context, "Storage permissions required", Toast.LENGTH_SHORT)
.show()
ActivityCompat.requestPermissions(
(fragment.getActivity())!!,
arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),
STORAGE_PERMISSION_CODE
)
}
dismiss()
upload.setOnClickListener {
if (permissionPic == PackageManager.PERMISSION_GRANTED) {
chooseImage()
} else {
Toast.makeText(context, "Storage permissions required", Toast.LENGTH_SHORT)
.show()
ActivityCompat.requestPermissions(
(fragment!!.requireActivity()),
arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),
STORAGE_PERMISSION_CODE
)
}
})
takePic.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
if (permissionCam == PackageManager.PERMISSION_GRANTED) {
val cameraIntent: Intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
val file: File = createFile()
photoURI = Uri.fromFile(file)
val imageUri: Uri = FileProvider.getUriForFile(
context,
"h_mal.appttude.com.driver",
file
)
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri)
fragment.startActivityForResult(cameraIntent, CAMERA_REQUEST)
} else {
Toast.makeText(context, "Camera Permissions required", Toast.LENGTH_SHORT)
.show()
ActivityCompat.requestPermissions(
(fragment.getActivity())!!, arrayOf(Manifest.permission.CAMERA),
MY_CAMERA_PERMISSION_CODE
)
}
dismiss()
dismiss()
}
takePic.setOnClickListener {
if (permissionCam == PackageManager.PERMISSION_GRANTED) {
val cameraIntent: Intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
val file: File = createFile()
photoURI = Uri.fromFile(file)
val imageUri: Uri = FileProvider.getUriForFile(
context,
"h_mal.appttude.com.driver",
file
)
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri)
fragment!!.startActivityForResult(cameraIntent, CAMERA_REQUEST)
} else {
Toast.makeText(context, "Camera Permissions required", Toast.LENGTH_SHORT)
.show()
ActivityCompat.requestPermissions(
(fragment!!.requireActivity()), arrayOf(Manifest.permission.CAMERA),
MY_CAMERA_PERMISSION_CODE
)
}
})
dismiss()
}
}
fun setImageName(saveFileName: String) {

View File

@@ -8,26 +8,26 @@ import android.graphics.Bitmap
import android.net.Uri
import android.os.Environment
import android.provider.MediaStore
import android.util.Log
import android.view.View
import android.widget.ImageView
import android.widget.Toast
import androidx.core.app.ActivityCompat
import h_mal.appttude.com.driver.MainActivity
import h_mal.appttude.com.driver.utils.DateUtils.getDateStamp
import h_mal.appttude.com.driver.utils.DateUtils.getDateTimeStamp
import java.io.File
import java.io.FileOutputStream
import java.io.IOException
class ImageSelectorResults // public FilepathResponse delegate;
{
var activity: Activity? = null
lateinit var activity: Activity
open interface FilepathResponse {
interface FilepathResponse {
fun processFinish(output: Uri?)
}
fun Results(
activity: Activity?, requestCode: Int, resultCode: Int, data: Intent?, filePath: Uri?,
activity: Activity, requestCode: Int, resultCode: Int, data: Intent?, filePath: Uri?,
imageView: ImageView?, delegate: FilepathResponse
) {
var filePath: Uri? = filePath
@@ -35,11 +35,11 @@ class ImageSelectorResults // public FilepathResponse delegate;
if ((requestCode == ImageSelectorDialog.PICK_IMAGE_REQUEST) && (resultCode == Activity.RESULT_OK
) && (data != null) && (data.data != null)
) {
filePath = data.data
val uri = data.data
var bitmap: Bitmap? = null
try {
bitmap =
MediaStore.Images.Media.getBitmap(activity!!.contentResolver, filePath)
MediaStore.Images.Media.getBitmap(activity.contentResolver, uri)
if (imageView!!.visibility != View.VISIBLE) {
imageView.visibility = View.VISIBLE
}
@@ -48,8 +48,7 @@ class ImageSelectorResults // public FilepathResponse delegate;
e.printStackTrace()
} finally {
if (bitmap != null) {
delegate.processFinish(filePath)
Log.i(javaClass.simpleName, "Results: " + filePath)
delegate.processFinish(uri)
}
}
}
@@ -67,9 +66,9 @@ class ImageSelectorResults // public FilepathResponse delegate;
try {
val f: File =
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
val fname: String = "driver" + MainActivity.dateStamp + ".jpg"
val image: File = File(f, fname)
val fileOutputStream: FileOutputStream = FileOutputStream(image)
val fname: String = "driver" + getDateStamp() + ".jpg"
val image = File(f, fname)
val fileOutputStream = FileOutputStream(image)
filePath = ImageSelectorDialog.photoURI
val bitmap: Bitmap = MediaStore.Images.Media
.getBitmap(
@@ -86,12 +85,11 @@ class ImageSelectorResults // public FilepathResponse delegate;
}
}
delegate.processFinish(filePath)
Log.i(javaClass.simpleName, "Results: " + filePath)
}
}
fun Results(
activity: Activity?,
activity: Activity,
requestCode: Int,
resultCode: Int,
data: Intent?,
@@ -107,20 +105,19 @@ class ImageSelectorResults // public FilepathResponse delegate;
var bitmap: Bitmap? = null
try {
bitmap =
MediaStore.Images.Media.getBitmap(activity!!.contentResolver, filePath)
MediaStore.Images.Media.getBitmap(activity.contentResolver, filePath)
} catch (e: IOException) {
e.printStackTrace()
} finally {
if (bitmap != null) {
delegate.processFinish(filePath)
Log.i(javaClass.simpleName, "Results: " + filePath)
}
}
}
if (requestCode == ImageSelectorDialog.CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {
//check if we have we have storage rights
val permission: Int = ActivityCompat.checkSelfPermission(
(activity)!!,
(activity),
Manifest.permission.WRITE_EXTERNAL_STORAGE
)
if (permission != PackageManager.PERMISSION_GRANTED) {
@@ -131,7 +128,7 @@ class ImageSelectorResults // public FilepathResponse delegate;
try {
val f: File =
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
val fname: String = "driver" + MainActivity.dateStamp + ".jpg"
val fname: String = "driver" + getDateTimeStamp() + ".jpg"
val image: File = File(f, fname)
val fileOutputStream: FileOutputStream = FileOutputStream(image)
filePath = ImageSelectorDialog.photoURI
@@ -149,7 +146,6 @@ class ImageSelectorResults // public FilepathResponse delegate;
}
}
delegate.processFinish(filePath)
Log.i(javaClass.simpleName, "Results: " + filePath)
}
}
@@ -158,6 +154,6 @@ class ImageSelectorResults // public FilepathResponse delegate;
val f: File = File(ImageSelectorDialog.photoURI!!.path)
val contentUri: Uri = Uri.fromFile(f)
mediaScanIntent.data = contentUri
activity!!.sendBroadcast(mediaScanIntent)
activity.sendBroadcast(mediaScanIntent)
}
}

View File

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

View File

@@ -13,8 +13,8 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import com.github.chrisbanes.photoview.PhotoView
import com.google.android.material.floatingactionbutton.FloatingActionButton
import h_mal.appttude.com.driver.MainActivity
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.utils.DateUtils
import java.io.File
import java.io.FileNotFoundException
import java.io.FileOutputStream
@@ -24,11 +24,12 @@ import java.io.IOException
class ImageViewClass {
fun open(bitmap: Bitmap?) {
Companion.bitmap = bitmap
ExecuteFragment.executeFragment(ImageViewerFragment())
// executeFragment(ImageViewerFragment())
}
class ImageViewerFragment : Fragment() {
private var view: View? = null
private lateinit var viewer: View
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
@@ -38,10 +39,10 @@ class ImageViewClass {
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
view = inflater.inflate(R.layout.fragment_image_viewer, container, false)
val fab: FloatingActionButton = view.findViewById(R.id.download_pic)
viewer = inflater.inflate(R.layout.fragment_image_viewer, container, false)
val fab: FloatingActionButton = viewer.findViewById(R.id.download_pic)
if (bitmap != null) {
val photoView: PhotoView = view.findViewById(R.id.photo_view)
val photoView: PhotoView = viewer.findViewById(R.id.photo_view)
photoView.setImageBitmap(bitmap)
fab.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
@@ -53,26 +54,26 @@ class ImageViewClass {
}
})
}
return view
return viewer
}
override fun onResume() {
super.onResume()
(activity as AppCompatActivity?)!!.supportActionBar!!.hide()
activity!!.window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
requireActivity().window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
}
override fun onStop() {
super.onStop()
(activity as AppCompatActivity?)!!.supportActionBar!!.show()
activity!!.window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
requireActivity().window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
}
@Throws(FileNotFoundException::class)
private fun downloadPic() {
val f: File =
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
val fname: String = "driver" + MainActivity.Companion.dateStamp + ".jpg"
val fname: String = "driver" + DateUtils.getDateTimeStamp() + ".jpg"
val image: File = File(f, fname)
val fileOutputStream: FileOutputStream = FileOutputStream(image)
bitmap!!.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream)
@@ -82,7 +83,7 @@ class ImageViewClass {
val mediaScanIntent: Intent = Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE)
val contentUri: Uri = Uri.fromFile(image)
mediaScanIntent.data = contentUri
activity!!.sendBroadcast(mediaScanIntent)
requireActivity().sendBroadcast(mediaScanIntent)
} catch (e: IOException) {
e.printStackTrace()
}

View File

@@ -3,12 +3,7 @@ package h_mal.appttude.com.driver.Global
import android.app.Activity
import android.app.AlertDialog
import android.content.DialogInterface
import android.view.View
import android.widget.ImageView
import android.widget.Toast
import com.google.android.gms.tasks.OnCompleteListener
import com.google.android.gms.tasks.Task
import h_mal.appttude.com.driver.MainActivity
class SetApprovalDialog constructor(
@@ -61,35 +56,33 @@ class SetApprovalDialog constructor(
}
private fun publishStatuscode(status: Int, dialog: DialogInterface) {
MainActivity.viewController!!.progress(View.VISIBLE)
if (!(approvalNameString == "")) {
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
(userId)!!
).child(FirebaseClass.USER_APPROVALS).child(approvalNameString)
.setValue(status).addOnCompleteListener(object : OnCompleteListener<Void?> {
override fun onComplete(task: Task<Void?>) {
if (task.isSuccessful) {
Toast.makeText(activity, "Status change successful", Toast.LENGTH_SHORT)
.show()
imageView.setImageResource(
MainActivity.approvalsClass!!.setImageResource(
status
)
)
dialog.dismiss()
} else {
Toast.makeText(
activity,
"Status change unsuccessful",
Toast.LENGTH_SHORT
).show()
}
MainActivity.viewController!!.progress(View.GONE)
}
})
} else {
Toast.makeText(activity, "Could not push status", Toast.LENGTH_SHORT).show()
}
// if (!(approvalNameString == "")) {
// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
// (userId)!!
// ).child(FirebaseClass.USER_APPROVALS).child(approvalNameString)
// .setValue(status).addOnCompleteListener { task ->
// if (task.isSuccessful) {
// Toast.makeText(activity, "Status change successful", Toast.LENGTH_SHORT)
// .show()
// imageView.setImageResource(
// MainActivity.approvalsClass!!.setImageResource(
// status
// )
// )
// dialog.dismiss()
// } else {
// Toast.makeText(
// activity,
// "Status change unsuccessful",
// Toast.LENGTH_SHORT
// ).show()
// }
//
// }
// } else {
// Toast.makeText(activity, "Could not push status", Toast.LENGTH_SHORT).show()
// }
}
private fun getElement(i: Int): String {

View File

@@ -1,206 +1,106 @@
package h_mal.appttude.com.driver
import android.Manifest
import android.app.Activity
import android.app.AlertDialog
import android.content.DialogInterface
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Bitmap
import android.graphics.drawable.Drawable
import android.os.Bundle
import android.util.Log
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.widget.ImageView
import android.widget.ProgressBar
import android.widget.TextView
import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import androidx.core.app.ActivityCompat
import androidx.core.view.GravityCompat
import androidx.drawerlayout.widget.DrawerLayout
import androidx.fragment.app.FragmentManager
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.FirebaseAuth
import com.google.firebase.auth.FirebaseUser
import com.google.firebase.database.*
import com.google.firebase.storage.FirebaseStorage
import com.google.firebase.storage.StorageReference
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import com.google.gson.JsonElement
import com.google.gson.JsonParser
import com.squareup.picasso.Picasso
import com.squareup.picasso.Picasso.LoadedFrom
import com.squareup.picasso.Target
import h_mal.appttude.com.driver.Driver.DriverOverallFragment
import h_mal.appttude.com.driver.Driver.VehicleOverallFragment
import h_mal.appttude.com.driver.Driver.homeDriverFragment
import h_mal.appttude.com.driver.Global.*
import h_mal.appttude.com.driver.Global.ViewController.ViewControllerInterface
import h_mal.appttude.com.driver.SuperUser.homeSuperUserFragment
import h_mal.appttude.com.driver.Global.ApprovalsClass
import h_mal.appttude.com.driver.Global.ArchiveClass
import h_mal.appttude.com.driver.Global.ImageViewClass
import h_mal.appttude.com.driver.base.BaseActivity
import h_mal.appttude.com.driver.dialogs.ExitDialog.displayExitDialog
import h_mal.appttude.com.driver.user.LoginActivity
import h_mal.appttude.com.driver.user.profileFragment
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
import h_mal.appttude.com.driver.utils.ActivityIntentBuilder.createIntent
import h_mal.appttude.com.driver.utils.setPicassoImage
import h_mal.appttude.com.driver.viewmodels.MainViewModel
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.app_bar_main.*
import kotlinx.android.synthetic.main.nav_header_main.view.*
class MainActivity : AppCompatActivity(),
NavigationView.OnNavigationItemSelectedListener, ViewControllerInterface {
var navigationView: NavigationView? = null
var progressBar: ProgressBar? = null
var toolbar: Toolbar? = null
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)
setContentView(R.layout.activity_main)
viewController = ViewController(this)
imageViewClass = ImageViewClass()
approvalsClass = ApprovalsClass()
archiveClass = ArchiveClass()
auth = FirebaseAuth.getInstance()
storage = FirebaseStorage.getInstance()
storageReference = storage!!.reference
mDatabase = FirebaseDatabase.getInstance().reference
val ref: DatabaseReference = mDatabase!!.child(FirebaseClass.USER_FIREBASE)
.child(auth.getCurrentUser()!!.uid)
.child("role")
toolbar = findViewById<View>(R.id.toolbar) as Toolbar?
setSupportActionBar(toolbar)
val drawer: DrawerLayout = findViewById<View>(R.id.drawer_layout) as DrawerLayout
val toggle: ActionBarDrawerToggle = ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close
)
drawer.addDrawerListener(toggle)
toggle.syncState()
navigationView = findViewById<View>(R.id.nav_view) as NavigationView?
navigationView!!.setNavigationItemSelectedListener(this)
setupDrawer()
fragmentManager = supportFragmentManager
fragmentManager.addOnBackStackChangedListener(backStackChangedListener)
progressBar = findViewById(R.id.progress_bar)
progressBar.setVisibility(View.VISIBLE)
ref.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
val role: String? = dataSnapshot.value as String?
Log.i(TAG, "onDataChange: " + role)
if ((role == "driver")) {
ExecuteFragment.executeFragment(homeDriverFragment())
} else if ((role == "super_user")) {
ExecuteFragment.executeFragment(homeSuperUserFragment())
}
drawerMenuItems(role)
progressBar.setVisibility(View.GONE)
}
override fun onCancelled(databaseError: DatabaseError) {
progressBar.setVisibility(View.GONE)
}
})
setSupportActionBar(toolbar)
navController = findNavController(R.id.container)
appBarConfiguration = AppBarConfiguration(navController.graph, drawer_layout)
nav_view.setupWithNavController(navController)
setupActionBarWithNavController(navController, appBarConfiguration)
getViewModel().getUserDetails()
setupLogoutInDrawer()
}
var backStackChangedListener: FragmentManager.OnBackStackChangedListener =
object : FragmentManager.OnBackStackChangedListener {
override fun onBackStackChanged() {
val fragmentString: String =
fragmentManager!!.fragments.get(0).javaClass.simpleName
val title: String
when (fragmentString) {
"DriverProfileFragment" -> title = "Driver Profile"
"DriverLicenseFragment" -> title = "Drivers License"
"InsuranceFragment" -> title = "Insurance"
"logbookFragment" -> title = "Logbook"
"MotFragment" -> title = "M.O.T"
"PrivateHireLicenseFragment" -> title = "Private Hire License"
"VehicleSetupFragment" -> title = "Vehicle Profile"
"UserMainFragment" -> return
"ArchiveFragment" -> return
else -> title = resources.getString(R.string.app_name)
}
setTitle(title)
}
}
override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
}
override fun setTitle(title: CharSequence) {
toolbar!!.title = title
}
fun drawerMenuItems(s: String?) {
if ((s == "super_user")) {
val menu: Menu = navigationView!!.menu
menu.removeGroup(R.id.menu_group)
}
}
fun setupDrawer() {
val header: View = navigationView!!.getHeaderView(0)
val driverEmail: TextView = header.findViewById(R.id.driver_email)
val driverName: TextView = header.findViewById(R.id.driver_name)
val driverImage: ImageView = header.findViewById(R.id.profileImage)
if (auth != null) {
val user: FirebaseUser? = auth!!.currentUser
if (user!!.email != null) {
driverEmail.text = user.email
}
if (user.displayName != null) {
driverName.text = user.displayName
}
Picasso.get()
.load(user.photoUrl)
.placeholder(R.drawable.choice_img_round)
.into(driverImage)
}
val textView: TextView = findViewById(R.id.logout)
textView.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
auth!!.signOut()
val intent: Intent = Intent(applicationContext, LoginActivity::class.java)
startActivity(intent)
finish()
}
})
toolbar.title = title
}
override fun onBackPressed() {
val drawer: DrawerLayout = findViewById<View>(R.id.drawer_layout) as DrawerLayout
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START)
if (drawer_layout.isDrawerOpen(GravityCompat.START)) {
drawer_layout.closeDrawer(GravityCompat.START)
} else {
if (fragmentManager!!.backStackEntryCount > 1) {
if ((fragmentManager!!.fragments.get(0).javaClass
.simpleName == "InsuranceFragment")
) {
AlertDialog.Builder(this)
.setTitle("Return to previous?")
.setMessage("Progress unsaved. Are you sure?")
.setNegativeButton(android.R.string.no, null)
.setPositiveButton(
android.R.string.yes,
object : DialogInterface.OnClickListener {
override fun onClick(arg0: DialogInterface, arg1: Int) {
fragmentManager!!.popBackStack()
}
}).create().show()
} else {
fragmentManager!!.popBackStack()
}
} else {
AlertDialog.Builder(this)
.setTitle("Leave?")
.setMessage("Are you sure you want to exit?")
.setNegativeButton(android.R.string.no, null)
.setPositiveButton(
android.R.string.yes,
object : DialogInterface.OnClickListener {
override fun onClick(arg0: DialogInterface, arg1: Int) {
finish()
System.exit(0)
}
}).create().show()
val navHostFragment = supportFragmentManager.findFragmentById(R.id.container)
navHostFragment?.childFragmentManager?.backStackEntryCount?.takeIf { it > 1 }?.let {
return super.onBackPressed()
}
displayExitDialog()
}
}
override fun onSuccess(data: Any?) {
super.onSuccess(data)
when(data){
is FirebaseUser -> {
setupDrawer(data)
}
}
}
private fun setupDrawer(user: FirebaseUser) {
val header: View = nav_view.getHeaderView(0)
header.driver_email.text = user.email
header.driver_name.text = user.displayName
header.profileImage.setPicassoImage(user.photoUrl)
}
private fun setupLogoutInDrawer(){
logout.setOnClickListener {
getViewModel().logOut()
startActivity(createIntent<LoginActivity>())
finish()
}
}
@@ -208,8 +108,7 @@ class MainActivity : AppCompatActivity(),
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
val id: Int = item.itemId
if (id == R.id.action_settings) {
if (item.itemId == R.id.action_settings) {
return true
}
return super.onOptionsItemSelected(item)
@@ -217,66 +116,29 @@ class MainActivity : AppCompatActivity(),
override fun onNavigationItemSelected(item: MenuItem): Boolean {
// Handle navigation view item clicks here.
val id: Int = item.itemId
if (id == R.id.nav_camera) {
// Handle the camera action
ExecuteFragment.executeFragment(profileFragment())
} else if (id == R.id.nav_gallery) {
ExecuteFragment.executeFragment(DriverOverallFragment())
} else if (id == R.id.nav_slideshow) {
ExecuteFragment.executeFragment(VehicleOverallFragment())
when (item.itemId) {
R.id.nav_user_settings -> { }
}
val drawer: DrawerLayout = findViewById<View>(R.id.drawer_layout) as DrawerLayout
drawer.closeDrawer(GravityCompat.START)
drawer_layout.closeDrawer(GravityCompat.START)
return true
}
override fun progressVisibility(vis: Int) {
progressBar!!.visibility = vis
}
override fun updateDrawer() {
setupDrawer()
}
companion object {
private val TAG: String = MainActivity::class.java.simpleName
var fragmentManager: FragmentManager? = null
var auth: FirebaseAuth? = null
var storage: FirebaseStorage? = null
var storageReference: StorageReference? = null
var mDatabase: DatabaseReference? = null
var viewController: ViewController? = null
var imageViewClass: ImageViewClass? = null
var approvalsClass: ApprovalsClass? = null
var archiveClass: ArchiveClass? = null
private val REQUEST_EXTERNAL_STORAGE: Int = 1
lateinit var imageViewClass: ImageViewClass
lateinit var approvalsClass: ApprovalsClass
lateinit var archiveClass: ArchiveClass
private const val REQUEST_EXTERNAL_STORAGE: Int = 1
private val PERMISSIONS_STORAGE: Array<String> = arrayOf(
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
)
fun verifyStoragePermissions(activity: Activity?) {
// Check if we have write permission
val permission: Int = ActivityCompat.checkSelfPermission(
(activity)!!,
Manifest.permission.WRITE_EXTERNAL_STORAGE
)
if (permission != PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(
(activity),
PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE
)
}
}
fun loadImage(mainImage: ImageView?): Target {
val target: Target = object : Target {
override fun onBitmapLoaded(bitmap: Bitmap, from: LoadedFrom) {
mainImage!!.setImageBitmap(bitmap)
mainImage.setOnClickListener(View.OnClickListener { imageViewClass!!.open(bitmap) })
mainImage.setOnClickListener{ imageViewClass.open(bitmap) }
}
override fun onBitmapFailed(e: Exception, errorDrawable: Drawable) {}
@@ -288,31 +150,5 @@ class MainActivity : AppCompatActivity(),
return target
}
val dateStamp: String
get() {
val sdf: SimpleDateFormat = SimpleDateFormat("yyyyMMdd_HHmm")
return sdf.format(Date())
}
val dateTimeStamp: String
get() {
val sdf: SimpleDateFormat = SimpleDateFormat("yyyyMMdd_HHmmss")
return sdf.format(Date())
}
@Throws(ParseException::class)
fun setAsDateTime(strCurrentDate: String?): String {
var format: SimpleDateFormat = SimpleDateFormat("yyyyMMdd_HHmmss")
val newDate: Date = format.parse(strCurrentDate)
format = SimpleDateFormat("dd/MM/yyyy")
return format.format(newDate)
}
fun printObjectAsJson(TAG: String?, o: Any?) {
val gson: Gson = GsonBuilder().setPrettyPrinting().create()
val jp: JsonParser = JsonParser()
val je: JsonElement = jp.parse(Gson().toJson(o))
val prettyJsonString: String = gson.toJson(je)
Log.i(TAG, "onBindViewHolder: object" + prettyJsonString)
}
}
}

View File

@@ -1,5 +1,9 @@
package h_mal.appttude.com.driver.Objects
import h_mal.appttude.com.driver.model.DriversLicenseObject
import h_mal.appttude.com.driver.model.MotObject
import h_mal.appttude.com.driver.model.PrivateHireObject
import h_mal.appttude.com.driver.model.VehicleProfileObject
import java.util.*
class ArchiveObject {
@@ -27,6 +31,6 @@ class ArchiveObject {
this.insurance_details = insurance_details
this.mot_details = mot_details
this.log_book = log_book
ph_car = private_hire_vehicle
this.ph_car = private_hire_vehicle
}
}

View File

@@ -1,27 +0,0 @@
package h_mal.appttude.com.driver.Objects
class DriverProfileObject {
var driverPic: String? = null
var forenames: String? = null
var address: String? = null
var postcode: String? = null
var dob: String? = null
var ni: String? = null
var dateFirst: String? = null
constructor()
constructor(
driverPic: String?, forenames: String?, address: String?,
postcode: String?, dob: String?, ni: String?, dateFirst: String?
) {
this.driverPic = driverPic
this.forenames = forenames
this.address = address
this.postcode = postcode
this.dob = dob
this.ni = ni
this.dateFirst = dateFirst
}
}

View File

@@ -1,16 +0,0 @@
package h_mal.appttude.com.driver.Objects
class DriversLicenseObject {
var licenseImageString: String? = null
var licenseNumber: String? = null
var licenseExpiry: String? = null
constructor()
constructor(licenseImageString: String?, licenseNumber: String?, licenseExpiry: String?) {
this.licenseImageString = licenseImageString
this.licenseNumber = licenseNumber
this.licenseExpiry = licenseExpiry
}
}

View File

@@ -2,15 +2,8 @@ package h_mal.appttude.com.driver.Objects
class InsuranceObject {
var photoStrings: MutableList<String?>? = null
var insurerName: String? = null
data class InsuranceObject (
var photoStrings: MutableList<String?>? = null,
var insurerName: String? = null,
var expiryDate: String? = null
constructor()
constructor(photoStrings: MutableList<String?>?, insurerName: String?, expiryDate: String?) {
this.photoStrings = photoStrings
this.insurerName = insurerName
this.expiryDate = expiryDate
}
}
)

View File

@@ -1,14 +0,0 @@
package h_mal.appttude.com.driver.Objects
class MotObject {
var motImageString: String? = null
var motExpiry: String? = null
constructor()
constructor(motImageString: String?, motExpiry: String?) {
this.motImageString = motImageString
this.motExpiry = motExpiry
}
}

View File

@@ -1,16 +0,0 @@
package h_mal.appttude.com.driver.Objects
class PrivateHireObject {
var phImageString: String? = null
var phNumber: String? = null
var phExpiry: String? = null
constructor()
constructor(phImageString: String?, phNumber: String?, phExpiry: String?) {
this.phImageString = phImageString
this.phNumber = phNumber
this.phExpiry = phExpiry
}
}

View File

@@ -2,16 +2,8 @@ package h_mal.appttude.com.driver.Objects
class PrivateHireVehicleObject {
var phCarImageString: String? = null
var phCarNumber: String? = null
class PrivateHireVehicleObject(
var phCarImageString: String? = null,
var phCarNumber: String? = null,
var phCarExpiry: String? = null
constructor(phCarImageString: String?, phCarNumber: String?, phCarExpiry: String?) {
this.phCarImageString = phCarImageString
this.phCarNumber = phCarNumber
this.phCarExpiry = phCarExpiry
}
constructor()
}
)

View File

@@ -1,31 +0,0 @@
package h_mal.appttude.com.driver.Objects
class VehicleProfileObject {
var reg: String? = null
var make: String? = null
var model: String? = null
var colour: String? = null
var keeperName: String? = null
var keeperAddress: String? = null
var keeperPostCode: String? = null
var startDate: String? = null
var isSeized: Boolean = false
constructor()
constructor(
reg: String?, make: String?, model: String?, colour: String?, keeperName: String?,
keeperAddress: String?, keeperPostCode: String?, startDate: String?, seized: Boolean
) {
this.reg = reg
this.make = make
this.model = model
this.colour = colour
this.keeperName = keeperName
this.keeperAddress = keeperAddress
this.keeperPostCode = keeperPostCode
this.startDate = startDate
isSeized = seized
}
}

View File

@@ -1,8 +1,8 @@
package h_mal.appttude.com.driver.Objects.WholeObject
import h_mal.appttude.com.driver.Objects.DriverProfileObject
import h_mal.appttude.com.driver.Objects.DriversLicenseObject
import h_mal.appttude.com.driver.Objects.PrivateHireObject
import h_mal.appttude.com.driver.model.DriverProfileObject
import h_mal.appttude.com.driver.model.DriversLicenseObject
import h_mal.appttude.com.driver.model.PrivateHireObject
class DriverProfile {

View File

@@ -28,7 +28,7 @@ class MappedObject : Parcelable {
}
companion object {
val CREATOR: Parcelable.Creator<MappedObject> = object : Parcelable.Creator<MappedObject?> {
val CREATOR: Parcelable.Creator<MappedObject?> = object : Parcelable.Creator<MappedObject?> {
override fun createFromParcel(`in`: Parcel): MappedObject? {
return MappedObject(`in`)
}

View File

@@ -1,6 +1,10 @@
package h_mal.appttude.com.driver.Objects.WholeObject
import h_mal.appttude.com.driver.Objects.*
import h_mal.appttude.com.driver.Objects.InsuranceObject
import h_mal.appttude.com.driver.Objects.LogbookObject
import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject
import h_mal.appttude.com.driver.model.MotObject
import h_mal.appttude.com.driver.model.VehicleProfileObject
class VehicleProfile {

View File

@@ -3,7 +3,6 @@ package h_mal.appttude.com.driver.SuperUser
import android.app.Activity
import android.content.Context
import android.util.DisplayMetrics
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -11,22 +10,29 @@ import android.widget.ArrayAdapter
import android.widget.ImageView
import android.widget.TextView
import androidx.fragment.app.Fragment
import h_mal.appttude.com.driver.Archive.ArchiveFragment
import h_mal.appttude.com.driver.Driver.*
import h_mal.appttude.com.driver.Global.ExecuteFragment
import h_mal.appttude.com.driver.Global.FirebaseClass
import h_mal.appttude.com.driver.Global.SetApprovalDialog
import h_mal.appttude.com.driver.MainActivity
import h_mal.appttude.com.driver.Objects.ApprovalsObject
import h_mal.appttude.com.driver.Objects.ArchiveObject
import h_mal.appttude.com.driver.Objects.WholeDriverObject
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.driver.InsuranceFragment
import h_mal.appttude.com.driver.ui.driver.driverprofile.DriverLicenseFragment
import h_mal.appttude.com.driver.ui.driver.driverprofile.DriverProfileFragment
import h_mal.appttude.com.driver.ui.driver.driverprofile.PrivateHireLicenseFragment
import h_mal.appttude.com.driver.ui.driver.vehicleprofile.LogbookFragment
import h_mal.appttude.com.driver.ui.driver.vehicleprofile.MotFragment
import h_mal.appttude.com.driver.ui.driver.vehicleprofile.PrivateHireVehicleFragment
import h_mal.appttude.com.driver.ui.driver.vehicleprofile.VehicleProfileFragment
class ApprovalListAdapter constructor(activity: Activity, objects: Array<MappedObject>) :
ArrayAdapter<MappedObject?>(activity, 0, objects) {
private val TAG: String = "ApprovalListAdapter"
class ApprovalListAdapter(
val activity: Activity,
objects: Array<MappedObject>
): ArrayAdapter<MappedObject?>(activity, 0, objects) {
var mappedObject: MappedObject = objects[0]
var names: Array<String> = arrayOf(
"Driver Profile",
"Driver License",
@@ -37,8 +43,8 @@ class ApprovalListAdapter constructor(activity: Activity, objects: Array<MappedO
"Logbook",
"P/H Vehicle"
)
var mappedObject: MappedObject
var activity: Activity
var approvalCode: Int = 0
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
var listItemView: View? = convertView
@@ -56,51 +62,38 @@ class ApprovalListAdapter constructor(activity: Activity, objects: Array<MappedO
approvalCode
)
)
imageView.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
SetApprovalDialog(
approvalCode,
activity,
mappedObject.getUserId(),
position,
imageView
)
}
})
val archiveImage: ImageView = listItemView.findViewById(R.id.archive_icon)
if (mappedObject.getWholeDriverObject().archive != null) {
Log.i(
TAG,
"getView: archive = " + getArchive(
position,
mappedObject.getWholeDriverObject().getArchive()
)
imageView.setOnClickListener {
SetApprovalDialog(
approvalCode,
activity,
mappedObject.userId,
position,
imageView
)
}
val archiveImage: ImageView = listItemView.findViewById(R.id.archive_icon)
mappedObject.wholeDriverObject?.archive?.let {
archiveImage.visibility = getArchive(
position,
mappedObject.getWholeDriverObject().getArchive()
it
)
archiveImage.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
var s: String? = null
when (position) {
1 -> s = FirebaseClass.DRIVERS_LICENSE_FIREBASE
2 -> s = FirebaseClass.PRIVATE_HIRE_FIREBASE
3 -> s = FirebaseClass.VEHICLE_DETAILS_FIREBASE
4 -> s = FirebaseClass.INSURANCE_FIREBASE
5 -> s = FirebaseClass.MOT_FIREBASE
6 -> s = FirebaseClass.LOG_BOOK_FIREBASE
7 -> s = FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE
}
ExecuteFragment.executeFragment(ArchiveFragment(), mappedObject.getUserId(), s)
archiveImage.setOnClickListener {
var s: String? = null
when (position) {
1 -> s = FirebaseClass.DRIVERS_LICENSE_FIREBASE
2 -> s = FirebaseClass.PRIVATE_HIRE_FIREBASE
3 -> s = FirebaseClass.VEHICLE_DETAILS_FIREBASE
4 -> s = FirebaseClass.INSURANCE_FIREBASE
5 -> s = FirebaseClass.MOT_FIREBASE
6 -> s = FirebaseClass.LOG_BOOK_FIREBASE
7 -> s = FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE
}
})
}
listItemView.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
getFragment(position)
// executeFragment(ArchiveFragment(), mappedObject.userId, s)
}
})
}
listItemView.setOnClickListener(View.OnClickListener { getFragment(position) })
listItemView.minimumHeight = parent.height / 4
listItemView.setPadding(
convertDpToPixel(9f, context).toInt(),
@@ -119,15 +112,14 @@ class ApprovalListAdapter constructor(activity: Activity, objects: Array<MappedO
var o: Any? = null
val visible: Int
when (i) {
0 -> {
}
0 -> { }
1 -> o = archiveObject!!.driver_license
2 -> o = archiveObject!!.private_hire
3 -> o = archiveObject!!.vehicle_details
4 -> o = archiveObject!!.insurance_details
5 -> o = archiveObject!!.mot_details
6 -> o = archiveObject!!.log_book
7 -> o = archiveObject.private_hire_vehicle
7 -> o = archiveObject!!.ph_car
}
if (o != null) {
visible = View.VISIBLE
@@ -138,101 +130,68 @@ class ApprovalListAdapter constructor(activity: Activity, objects: Array<MappedO
}
private fun getFragment(i: Int) {
var f: Fragment? = null
val wholeDriverObject: WholeDriverObject? = mappedObject.getWholeDriverObject()
var o: Any? = null
when (i) {
lateinit var f: Fragment
val driverProfile by lazy { mappedObject.wholeDriverObject?.driver_profile }
val vehicleProfile by lazy { mappedObject.wholeDriverObject?.vehicle_profile }
val o: Any? = when (i) {
0 -> {
f = DriverProfileFragment()
if (wholeDriverObject!!.driver_profile != null && wholeDriverObject.getDriver_profile().driver_profile != null) {
o = wholeDriverObject.getDriver_profile().getDriver_profile()
}
driverProfile?.driver_profile
}
1 -> {
f = DriverLicenseFragment()
if (wholeDriverObject!!.driver_profile != null && wholeDriverObject.getDriver_profile().driver_license != null) {
o = wholeDriverObject.getDriver_profile().driver_license
}
driverProfile?.driver_license
}
2 -> {
f = PrivateHireLicenseFragment()
if (wholeDriverObject!!.driver_profile != null && wholeDriverObject.getDriver_profile().private_hire != null) {
o = wholeDriverObject.getDriver_profile().private_hire
}
driverProfile?.private_hire
}
3 -> {
f = VehicleSetupFragment()
if (wholeDriverObject!!.vehicle_profile != null && wholeDriverObject.getVehicle_profile().vehicle_details != null) {
o = wholeDriverObject.getVehicle_profile().getVehicle_details()
}
f = VehicleProfileFragment()
vehicleProfile?.vehicle_details
}
4 -> {
f = InsuranceFragment()
if (wholeDriverObject!!.vehicle_profile != null && wholeDriverObject.getVehicle_profile().insurance_details != null) {
o = wholeDriverObject.getVehicle_profile().getInsurance_details()
}
vehicleProfile?.insurance_details
}
5 -> {
f = MotFragment()
if (wholeDriverObject!!.vehicle_profile != null && wholeDriverObject.getVehicle_profile().mot_details != null) {
o = wholeDriverObject.getVehicle_profile().getMot_details()
}
vehicleProfile?.insurance_details
}
6 -> {
f = logbookFragment()
if (wholeDriverObject!!.vehicle_profile != null && wholeDriverObject.getVehicle_profile().log_book != null) {
o = wholeDriverObject.getVehicle_profile().getLog_book()
}
f = LogbookFragment()
vehicleProfile?.log_book
}
7 -> {
f = PrivateHireVehicleFragment()
if (wholeDriverObject!!.vehicle_profile != null && wholeDriverObject.getVehicle_profile().private_hire_vehicle != null) {
o = wholeDriverObject.getVehicle_profile().getPrivateHireVehicleObject()
}
vehicleProfile?.privateHireVehicleObject
}
else -> null
}
if (o == null) {
ExecuteFragment.executeFragment(f, mappedObject.getUserId())
// executeFragment(f, mappedObject.userId)
} else {
MainActivity.archiveClass!!.openDialogArchive(
context, o, mappedObject.getUserId(), f
MainActivity.archiveClass.openDialogArchive(
context, o, mappedObject.userId, f
)
}
}
private fun getApprovalStatusCode(i: Int): Int {
var statusCode: Int = FirebaseClass.NO_DATE_PRESENT
if (mappedObject.getWholeDriverObject().approvalsObject != null) {
val approvalsObject: ApprovalsObject? =
mappedObject.getWholeDriverObject().approvalsObject
when (i) {
0 -> if (approvalsObject!!.driver_details_approval != 0) {
statusCode = approvalsObject.getDriver_details_approval()
}
1 -> if (approvalsObject!!.driver_license_approval != 0) {
statusCode = approvalsObject.driver_license_approval
}
2 -> if (approvalsObject!!.private_hire_approval != 0) {
statusCode = approvalsObject.private_hire_approval
}
3 -> if (approvalsObject!!.vehicle_details_approval != 0) {
statusCode = approvalsObject.vehicle_details_approval
}
4 -> if (approvalsObject!!.insurance_details_approval != 0) {
statusCode = approvalsObject.insurance_details_approval
}
5 -> if (approvalsObject!!.mot_details_approval != 0) {
statusCode = approvalsObject.getMot_details_approval()
}
6 -> if (approvalsObject!!.log_book_approval != 0) {
statusCode = approvalsObject.getLog_book_approval()
}
7 -> if (approvalsObject.private_hire_vehicle_approval != 0) {
statusCode = approvalsObject.getPh_car_approval()
}
val statusCode = mappedObject.wholeDriverObject?.approvalsObject?.let{
when (i) {
0 -> it.driver_details_approval
1 -> it.driver_license_approval
2 -> it.private_hire_approval
3 -> it.vehicle_details_approval
4 -> it.insurance_details_approval
5 -> it.mot_details_approval
6 -> it.log_book_approval
7 -> it.ph_car_approval
else -> FirebaseClass.NO_DATE_PRESENT
}
}
return statusCode
return statusCode ?: FirebaseClass.NO_DATE_PRESENT
}
companion object {
@@ -242,8 +201,5 @@ class ApprovalListAdapter constructor(activity: Activity, objects: Array<MappedO
}
}
init {
mappedObject = objects.get(0)
this.activity = activity
}
}

View File

@@ -2,13 +2,8 @@ package h_mal.appttude.com.driver.SuperUser
import android.app.AlertDialog
import android.content.Context
import android.content.DialogInterface
import android.view.View
import androidx.cardview.widget.CardView
import com.google.android.gms.tasks.OnCompleteListener
import com.google.android.gms.tasks.Task
import h_mal.appttude.com.driver.Global.FirebaseClass
import h_mal.appttude.com.driver.MainActivity
class DriverStatusClass : View.OnClickListener {
@@ -27,24 +22,20 @@ class DriverStatusClass : View.OnClickListener {
}
alertDialog.setSingleChoiceItems(
choices,
selection,
object : DialogInterface.OnClickListener {
override fun onClick(dialog: DialogInterface, which: Int) {}
})
selection
) { dialog, which -> }
alertDialog.create().show()
}
private fun SetStatus(status: Boolean) {
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE)
.child((userId)!!).child(FirebaseClass.DRIVER_STATUS).setValue(status)
.addOnCompleteListener(object : OnCompleteListener<Void?> {
override fun onComplete(task: Task<Void?>) {
if (task.isSuccessful) {
cardView!!.setBackgroundColor(setStatusColour(status))
} else {
}
}
})
// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE)
// .child((userId)!!).child(FirebaseClass.DRIVER_STATUS).setValue(status)
// .addOnCompleteListener { task ->
// if (task.isSuccessful) {
// cardView!!.setBackgroundColor(setStatusColour(status))
// } else {
// }
// }
}
private fun setStatusColour(b: Boolean): Int {
@@ -63,9 +54,9 @@ class DriverStatusClass : View.OnClickListener {
// approvalsObject.private_hire_approval,
// approvalsObject.vehicle_details_approval,
// approvalsObject.insurance_details_approval,
// approvalsObject.getMot_details_approval(),
// approvalsObject.getLog_book_approval(),
// approvalsObject.getPh_car_approval()};
// approvalsObject.mot_details_approval,
// approvalsObject.log_book_approval,
// approvalsObject.ph_car_approval};
//
//
// return setImageResource(mode(ints));

View File

@@ -1,149 +0,0 @@
package h_mal.appttude.com.driver.SuperUser
import android.app.AlertDialog
import android.content.Context
import android.content.DialogInterface
import android.graphics.Bitmap
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.*
import com.google.android.gms.tasks.OnCompleteListener
import com.google.android.gms.tasks.Task
import com.google.firebase.database.DatabaseReference
import com.squareup.picasso.Picasso
import com.squareup.picasso.Picasso.LoadedFrom
import com.squareup.picasso.Target
import h_mal.appttude.com.driver.Global.ExecuteFragment
import h_mal.appttude.com.driver.Global.FirebaseClass
import h_mal.appttude.com.driver.MainActivity
import h_mal.appttude.com.driver.Objects.UserObject
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject
import h_mal.appttude.com.driver.R
class ListViewSuperAdapter constructor(context: Context, objects: List<MappedObject?>) :
ArrayAdapter<MappedObject?>(context, 0, objects) {
override fun getView(i: Int, convertView: View?, parent: ViewGroup): View {
var listItemView: View? = convertView
if (listItemView == null) {
listItemView = LayoutInflater.from(context).inflate(
R.layout.list_item_layout, parent, false
)
}
Log.i("getviewposition", "getView: pos = " + i)
val profilePicImage: ImageView = listItemView!!.findViewById(R.id.driverPic)
// final ProgressBar progressBar = listItemView.findViewById(R.id.pb_su_list);
val userNameTextView: TextView = listItemView.findViewById(R.id.username_text)
val userEmailTextView: TextView = listItemView.findViewById(R.id.emailaddress_text)
val profileApprovalImage: ImageView = listItemView.findViewById(R.id.approval_iv)
val driverNo: TextView = listItemView.findViewById(R.id.driver_no)
val mappedObject: MappedObject? = getItem(i)
val `object`: UserObject? = mappedObject.getWholeDriverObject().getUser_details()
if (profilePicImage.drawable == null) {
if (`object`!!.profilePicString != null) {
Picasso.get()
.load(`object`.getProfilePicString())
.resize(128, 128)
.placeholder(R.drawable.choice_img_round)
.into(object : Target {
override fun onBitmapLoaded(bitmap: Bitmap, from: LoadedFrom) {
// progressBar.setVisibility(View.GONE);
profilePicImage.setImageBitmap(bitmap)
}
override fun onBitmapFailed(e: Exception, errorDrawable: Drawable) {
// progressBar.setVisibility(View.GONE);
}
override fun onPrepareLoad(placeHolderDrawable: Drawable) {
// progressBar.setVisibility(View.VISIBLE);
}
})
} else {
profilePicImage.setImageResource(R.drawable.choice_img_round)
}
}
userNameTextView.setText(`object`.getProfileName())
userEmailTextView.setText(`object`.getProfileEmail())
if (mappedObject.getWholeDriverObject().driver_number == null) {
driverNo.text = "0"
} else {
val s: String = mappedObject.getWholeDriverObject().getDriver_number().toString()
driverNo.text = s
}
driverNo.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
val builder: AlertDialog.Builder = AlertDialog.Builder(context)
val input: EditText = EditText(context)
val layout: LinearLayout = LinearLayout(context)
layout.orientation = LinearLayout.VERTICAL
layout.setPadding(28, 0, 56, 0)
input.setText(driverNo.text.toString())
input.setSelectAllOnFocus(true)
layout.addView(input)
builder.setTitle("Change Driver Number")
.setView(layout)
.setPositiveButton("Submit", object : DialogInterface.OnClickListener {
override fun onClick(dialog: DialogInterface, which: Int) {
val reference: DatabaseReference =
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE)
.child(mappedObject.getUserId())
.child(FirebaseClass.DRIVER_NUMBER)
Log.i("Dialog Driver no", "onClick: " + reference.toString())
reference.setValue(input.text.toString())
.addOnCompleteListener(object : OnCompleteListener<Void> {
override fun onComplete(task: Task<Void>) {
if (task.isSuccessful) {
Toast.makeText(
context,
"Driver Number Changed",
Toast.LENGTH_SHORT
).show()
dialog.dismiss()
notifyDataSetChanged()
Log.i(
"Dialog Driver no",
"onComplete: " + task.result
)
} else {
Log.e(
"Dialog Driver no",
"onComplete: ",
task.exception
)
}
}
})
}
}
).create()
.show()
}
})
profileApprovalImage.setImageResource(
MainActivity.approvalsClass!!.getOverApprovalStatusCode(mappedObject.getWholeDriverObject())
)
listItemView.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
val bundle: Bundle = Bundle()
bundle.putParcelable("mapped", mappedObject)
ExecuteFragment.executeFragment(UserMainFragment(), bundle)
}
})
return (listItemView)
}
private fun hasImage(view: ImageView): Boolean {
val drawable: Drawable? = view.drawable
var hasImage: Boolean = (drawable != null)
if (hasImage && (drawable is BitmapDrawable)) {
hasImage = drawable.bitmap != null
}
return hasImage
}
}

View File

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

View File

@@ -12,9 +12,6 @@ import h_mal.appttude.com.driver.R
class UserMainFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
@@ -23,14 +20,11 @@ class UserMainFragment : Fragment() {
// Inflate the layout for this fragment
val view: View = inflater.inflate(R.layout.fragment_user_main, container, false)
Log.i("UserMain", "onCreateView: height = " + view.height)
val mappedObject: MappedObject = arguments!!.getParcelable("mapped")
activity.setTitle(
mappedObject.getWholeDriverObject().getUser_details().getProfileName()
)
val mappedObject: MappedObject = requireArguments().getParcelable<MappedObject>("mapped")
activity?.title = mappedObject.wholeDriverObject?.user_details?.profileName
// ListView listView = view.findViewById(R.id.approvals_list);
val listView: GridView = view.findViewById(R.id.approvals_list)
listView.adapter = ApprovalListAdapter((activity)!!, arrayOf(mappedObject))
listView.adapter = ApprovalListAdapter(requireActivity(), arrayOf(mappedObject))
return view
}
}

View File

@@ -8,36 +8,31 @@ import android.util.Log
import android.view.*
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.ValueEventListener
import h_mal.appttude.com.driver.Global.FirebaseClass
import h_mal.appttude.com.driver.MainActivity
import h_mal.appttude.com.driver.Objects.WholeDriverObject
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject
import h_mal.appttude.com.driver.R
import kotlinx.android.synthetic.main.fragment_home_super_user.*
import java.util.*
class homeSuperUserFragment : Fragment() {
var users: DatabaseReference? = null
var listViewSuperAdapter: ListViewSuperAdapter? = null
var mappedObjectList: MutableList<MappedObject>? = null
private var sharedPreferences: SharedPreferences? = null
private var sortOrder: Int = 0
private val sortDesc: Boolean = false
private var recyclerView: RecyclerView? = null
private var recyclerViewAdapter: RecyclerViewAdapter? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
users = MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE)
mappedObjectList = ArrayList()
MainActivity.viewController!!.progress(View.VISIBLE)
users!!.addValueEventListener(valueEventListener)
sharedPreferences = activity!!.getSharedPreferences("PREFS", 0)
sharedPreferences = requireActivity().getSharedPreferences("PREFS", 0)
}
override fun onCreateView(
@@ -47,14 +42,12 @@ class homeSuperUserFragment : Fragment() {
// Inflate the layout for this fragment
val view: View = inflater.inflate(R.layout.fragment_home_super_user, container, false)
// final ListView list = view.findViewById(R.id.list_view_super);
recycler_view.apply {
layoutManager = LinearLayoutManager(context)
recyclerViewAdapter = RecyclerViewAdapter(context, mappedObjectList)
adapter = recyclerViewAdapter
}
// listViewSuperAdapter = new ListViewSuperAdapter(getContext(),mappedObjectList);
// list.setAdapter(listViewSuperAdapter);
recyclerView = view.findViewById(R.id.recycler_view)
recyclerView.setLayoutManager(LinearLayoutManager(context))
recyclerViewAdapter = RecyclerViewAdapter(context, mappedObjectList)
recyclerView.setAdapter(recyclerViewAdapter)
return view
}
@@ -64,7 +57,6 @@ class homeSuperUserFragment : Fragment() {
Log.i("Count ", "" + snapshot.childrenCount)
for (postSnapshot: DataSnapshot in snapshot.children) {
if ((postSnapshot.child("role").value.toString() == "driver")) {
MainActivity.printObjectAsJson("object", postSnapshot.toString())
mappedObjectList!!.add(
MappedObject(
postSnapshot.key, postSnapshot.getValue(
@@ -75,11 +67,11 @@ class homeSuperUserFragment : Fragment() {
}
}
sortDate(sortOrder, sortDesc)
MainActivity.viewController!!.progress(View.GONE)
}
override fun onCancelled(databaseError: DatabaseError) {
MainActivity.viewController!!.progress(View.GONE)
}
}
@@ -93,72 +85,51 @@ class homeSuperUserFragment : Fragment() {
val grpname: Array<String> = arrayOf("Driver Name", "Driver Number", "Approval")
sortOrder = sharedPreferences!!.getInt(SORT, 0)
val checkedItem: Int = sortOrder
val compareInt: IntArray = intArrayOf(0)
var compareInt = 0
val click = DialogInterface.OnClickListener { dialog, _ ->
sortDate(compareInt, false)
dialog.dismiss()
}
val builder: AlertDialog.Builder = AlertDialog.Builder(context)
builder.setTitle("Sort by:")
.setSingleChoiceItems(
grpname,
checkedItem,
object : DialogInterface.OnClickListener {
override fun onClick(dialog: DialogInterface, item: Int) {
when (item) {
0 -> {
compareInt.get(0) = 0
return
}
1 -> {
compareInt.get(0) = 1
return
}
2 -> compareInt.get(0) = 2
}
}
}).setPositiveButton("Ascending", object : DialogInterface.OnClickListener {
override fun onClick(dialog: DialogInterface, id: Int) {
sortDate(compareInt.get(0), false)
dialog.dismiss()
}
}).setNegativeButton("Descending", object : DialogInterface.OnClickListener {
override fun onClick(dialog: DialogInterface, id: Int) {
sortDate(compareInt.get(0), true)
dialog.dismiss()
}
})
checkedItem
) { _, pos -> compareInt = pos }
.setPositiveButton("Ascending", click)
.setNegativeButton("Descending", click)
.create().show()
}
return super.onOptionsItemSelected(item)
}
private fun sortDate(compareInt: Int, reversed: Boolean) {
Log.i(TAG, "sortDate: " + compareInt + " - " + reversed)
val comparator: Comparator<MappedObject> = object : Comparator<MappedObject> {
override fun compare(o1: MappedObject, o2: MappedObject): Int {
when (compareInt) {
0 -> return o1.getWholeDriverObject().getUser_details().getProfileName()
.compareTo(
o2.getWholeDriverObject().getUser_details().getProfileName()
)
0 -> return o1.wholeDriverObject?.user_details?.profileName!!.compareTo(
o2.wholeDriverObject?.user_details?.profileName!!
)
1 -> {
var s1: String? = o1.getWholeDriverObject().getDriver_number()
var s2: String? = o2.getWholeDriverObject().getDriver_number()
if (o1.getWholeDriverObject().driver_number == null || (o1.getWholeDriverObject()
.getDriver_number() == "0")
var s1: String? = o1.wholeDriverObject?.driver_number
var s2: String? = o2.wholeDriverObject?.driver_number
if (o1.wholeDriverObject?.driver_number == null || (o1.wholeDriverObject!!
.driver_number == "0")
) {
s1 = ";"
}
if (o2.getWholeDriverObject().driver_number == null || (o2.getWholeDriverObject()
.getDriver_number() == "0")
if (o2.wholeDriverObject?.driver_number == null || (o2.wholeDriverObject!!
.driver_number == "0")
) {
s2 = ";"
}
return s1!!.compareTo((s2)!!)
}
2 -> return MainActivity.approvalsClass!!.getOverApprovalStatusCode(o1.wholeDriverObject) -
MainActivity.approvalsClass!!.getOverApprovalStatusCode(o2.wholeDriverObject)
else -> return MainActivity.approvalsClass!!.getOverApprovalStatusCode(
2 -> return MainActivity.approvalsClass.getOverApprovalStatusCode(o1.wholeDriverObject) -
MainActivity.approvalsClass.getOverApprovalStatusCode(o2.wholeDriverObject)
else -> return MainActivity.approvalsClass.getOverApprovalStatusCode(
o1.wholeDriverObject
) -
MainActivity.approvalsClass!!.getOverApprovalStatusCode(o2.wholeDriverObject)
) - MainActivity.approvalsClass.getOverApprovalStatusCode(o2.wholeDriverObject)
}
}
}
@@ -170,12 +141,10 @@ class homeSuperUserFragment : Fragment() {
Collections.sort(mappedObjectList, comparator)
}
recyclerViewAdapter!!.notifyDataSetChanged()
// listViewSuperAdapter.notifyDataSetChanged();
}
companion object {
private val SORT: String = "SORT"
private val REVERSED: String = "REVERSED"
private val TAG: String = "homeSuperUserFragment"
}
}

View File

@@ -0,0 +1,36 @@
package h_mal.appttude.com.driver.application
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import h_mal.appttude.com.driver.data.FirebaseAuthSource
import h_mal.appttude.com.driver.data.FirebaseDatabaseSource
import h_mal.appttude.com.driver.data.FirebaseStorageSource
import h_mal.appttude.com.driver.viewmodels.*
class ApplicationViewModelFactory(
private val firebaseAuthSource: FirebaseAuthSource,
private val firebaseDatabaseSource: FirebaseDatabaseSource,
private val firebaseStorageSource: FirebaseStorageSource
) : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel> create(modelClass: Class<T>): T {
with(modelClass){
return when{
isAssignableFrom(UserViewModel::class.java) -> UserViewModel(firebaseAuthSource)
isAssignableFrom(MainViewModel::class.java) -> MainViewModel(firebaseAuthSource, firebaseDatabaseSource)
isAssignableFrom(UpdateUserViewModel::class.java) -> UpdateUserViewModel(firebaseAuthSource, firebaseStorageSource)
isAssignableFrom(DriverLicenseViewModel::class.java) -> DriverLicenseViewModel(firebaseAuthSource, firebaseDatabaseSource, firebaseStorageSource)
isAssignableFrom(DriverProfileViewModel::class.java) -> DriverProfileViewModel(firebaseAuthSource, firebaseDatabaseSource, firebaseStorageSource)
isAssignableFrom(PrivateHireLicenseViewModel::class.java) -> PrivateHireLicenseViewModel(firebaseAuthSource, firebaseDatabaseSource, firebaseStorageSource)
isAssignableFrom(VehicleProfileViewModel::class.java) -> VehicleProfileViewModel(firebaseAuthSource, firebaseDatabaseSource, firebaseStorageSource)
isAssignableFrom(InsuranceViewModel::class.java) -> InsuranceViewModel(firebaseAuthSource, firebaseDatabaseSource, firebaseStorageSource)
isAssignableFrom(MotViewModel::class.java) -> MotViewModel(firebaseAuthSource, firebaseDatabaseSource, firebaseStorageSource)
isAssignableFrom(LogbookViewModel::class.java) -> LogbookViewModel(firebaseAuthSource, firebaseDatabaseSource, firebaseStorageSource)
isAssignableFrom(PrivateHireVehicleViewModel::class.java) -> PrivateHireVehicleViewModel(firebaseAuthSource, firebaseDatabaseSource, firebaseStorageSource)
else -> throw IllegalArgumentException("Unknown ViewModel class")
} as T
}
}
}

View File

@@ -0,0 +1,25 @@
package h_mal.appttude.com.driver.application
import android.app.Application
import h_mal.appttude.com.driver.data.FirebaseAuthSource
import h_mal.appttude.com.driver.data.FirebaseDatabaseSource
import h_mal.appttude.com.driver.data.FirebaseStorageSource
import org.kodein.di.Kodein
import org.kodein.di.KodeinAware
import org.kodein.di.android.x.androidXModule
import org.kodein.di.generic.bind
import org.kodein.di.generic.instance
import org.kodein.di.generic.provider
import org.kodein.di.generic.singleton
class DriverApplication : Application(), KodeinAware{
// Kodein aware to initialise the classes used for DI
override val kodein = Kodein.lazy {
import(androidXModule(this@DriverApplication))
bind() from singleton { FirebaseAuthSource() }
bind() from singleton { FirebaseDatabaseSource() }
bind() from singleton { FirebaseStorageSource() }
bind() from provider { ApplicationViewModelFactory(instance(), instance(), instance()) }
}
}

View File

@@ -0,0 +1,118 @@
package h_mal.appttude.com.driver.base
import android.content.Intent
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.application.ApplicationViewModelFactory
import h_mal.appttude.com.driver.data.ViewState
import h_mal.appttude.com.driver.utils.displayToast
import h_mal.appttude.com.driver.utils.hide
import h_mal.appttude.com.driver.utils.show
import h_mal.appttude.com.driver.utils.triggerAnimation
import org.kodein.di.KodeinAware
import org.kodein.di.android.kodein
import org.kodein.di.generic.instance
abstract class BaseActivity<V : BaseViewModel> : AppCompatActivity(), KodeinAware {
private lateinit var loadingView: View
abstract fun getViewModel(): V?
abstract val layoutId: Int
override val kodein by kodein()
val factory by instance<ApplicationViewModelFactory>()
inline fun <reified VM : ViewModel> createLazyViewModel(): Lazy<VM> = viewModels { factory }
inline fun <reified VM : ViewModel> createViewModel(): VM = ViewModelProvider(viewModelStore, factory).get(VM::class.java)
var mProgressDialog: View? = null
private var loading: Boolean = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
configureObserver()
setContentView(layoutId)
}
override fun onStart() {
super.onStart()
loadingView = layoutInflater.inflate(R.layout.progress_layout, null)
loadingView.setOnClickListener(null)
addContentView(loadingView, ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
))
loadingView.hide()
}
fun <A : AppCompatActivity> startActivity(activity: Class<A>){
val intent = Intent(this, activity)
startActivity(intent)
}
/**
* Called in case of success or some data emitted from the liveData in viewModel
*/
open fun onStarted() {
loadingView.fadeIn()
loading = true
}
/**
* Called in case of success or some data emitted from the liveData in viewModel
*/
open fun onSuccess(data: Any?) {
loadingView.fadeOut()
loading = false
}
/**
* Called in case of failure or some error emitted from the liveData in viewModel
*/
open fun onFailure(error: String?) {
error?.let { displayToast(it) }
loadingView.fadeOut()
loading = false
}
private fun configureObserver() {
getViewModel()?.uiState?.observe(this, Observer {
when(it){
is ViewState.HasStarted -> onStarted()
is ViewState.HasData<*> -> onSuccess(it.data.getContentIfNotHandled())
is ViewState.HasError -> onFailure(it.error.getContentIfNotHandled())
}
})
}
private fun View.fadeIn() {
apply {
show()
triggerAnimation(R.anim.nav_default_enter_anim){}
}
}
private fun View.fadeOut() {
apply {
hide()
triggerAnimation(R.anim.nav_default_exit_anim){}
}
}
override fun onBackPressed() {
if (!loading) super.onBackPressed()
}
}

View File

@@ -0,0 +1,142 @@
package h_mal.appttude.com.driver.base
import android.app.Activity
import android.content.ClipData
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModel
import h_mal.appttude.com.driver.application.ApplicationViewModelFactory
import h_mal.appttude.com.driver.data.ViewState
import h_mal.appttude.com.driver.utils.PermissionsUtils
import org.kodein.di.KodeinAware
import org.kodein.di.android.x.kodein
import org.kodein.di.generic.instance
const val IMAGE_SELECT_REQUEST_CODE = 401
abstract class BaseFragment<V : BaseViewModel> : Fragment(), KodeinAware {
var mActivity: BaseActivity<V>? = null
abstract fun getViewModel(): V
abstract fun getLayoutId(): Int
private var multipleImage: Boolean = false
fun setImageSelectionAsMultiple(){
multipleImage = true
}
override val kodein by kodein()
val factory by instance<ApplicationViewModelFactory>()
inline fun <reified VM : ViewModel> getFragmentViewModel(): Lazy<VM> = viewModels { factory }
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? = inflater.inflate(getLayoutId(), container, false)
@Suppress("UNCHECKED_CAST")
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
mActivity = activity as BaseActivity<V>
configureObserver()
}
/**
* Called in case of starting operation liveData in viewModel
*/
open fun onStarted() {
mActivity?.onStarted()
}
/**
* Called in case of success or some data emitted from the liveData in viewModel
*/
open fun onSuccess(data: Any?) {
mActivity?.onSuccess(data)
}
/**
* Called in case of failure or some error emitted from the liveData in viewModel
*/
open fun onFailure(error: String?) {
mActivity?.onFailure(error)
}
private fun configureObserver() {
getViewModel().uiState.observe(viewLifecycleOwner, Observer {
when (it) {
is ViewState.HasStarted -> onStarted()
is ViewState.HasData<*> -> onSuccess(it.data.getContentIfNotHandled())
is ViewState.HasError -> onFailure(it.error.getContentIfNotHandled())
}
})
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == Activity.RESULT_OK){
when(requestCode){
IMAGE_SELECT_REQUEST_CODE -> {
data?.clipData?.convertToList()?.let {
onImageGalleryResult(it.subList(0, 9))
return
}
onImageGalleryResult(data?.data)
}
}
}
}
private fun ClipData.convertToList(): List<Uri> {
val list = mutableListOf<Uri>()
for (i in 0 until itemCount) {
val item: ClipData.Item = getItemAt(i)
val uri = item.uri
list.add(uri)
}
return list.toList()
}
/**
* 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
}
}
}
open fun onImageGalleryResult(imageUri: Uri?){ }
open fun onImageGalleryResult(imageUris: List<Uri>?){ }
fun openGalleryForImage() {
val intent = Intent(Intent.ACTION_PICK)
intent.type = "image/*"
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, multipleImage);
startActivityForResult(intent, IMAGE_SELECT_REQUEST_CODE)
}
}

View File

@@ -0,0 +1,42 @@
package h_mal.appttude.com.driver.base
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import h_mal.appttude.com.driver.data.ViewState
import h_mal.appttude.com.driver.utils.Event
abstract class BaseViewModel: ViewModel(){
open val uiState: MutableLiveData<ViewState> = MutableLiveData()
fun onStart() {
uiState.postValue(ViewState.HasStarted)
}
fun <T : Any> onSuccess(result: T) {
uiState.postValue(ViewState.HasData(Event(result)))
}
protected fun onError(error: String) {
uiState.postValue(ViewState.HasError(Event(error)))
}
suspend fun doTryOperation(
defaultErrorMessage: String?,
operation: suspend () -> Unit
){
try {
onStart()
operation()
}catch (e: Exception){
e.printStackTrace()
e.message?.let {
onError(it)
return
}
defaultErrorMessage?.let {
onError(it)
return
}
}
}
}

View File

@@ -0,0 +1,78 @@
package h_mal.appttude.com.driver.base
import android.Manifest
import android.net.Uri
import android.os.Bundle
import android.view.View
import android.widget.EditText
import androidx.core.widget.doAfterTextChanged
import h_mal.appttude.com.driver.utils.PermissionsUtils.askForPermissions
import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEditText
private const val IMAGE_PERMISSION_RESULT = 402
abstract class DataSubmissionBaseFragment<V : DataSubmissionBaseViewModel<T>, T: Any> : BaseFragment<BaseViewModel>(){
var picUri: Uri? = null
abstract override fun getViewModel(): V
abstract var model: T
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
getViewModel().getDataFromDatabase()
}
@Suppress("UNCHECKED_CAST")
override fun onSuccess(data: Any?) {
super.onSuccess(data)
data?.let {
if (it::class.java == model::class.java)
setFields(data as T)
}
}
open fun setFields(data: T){
model = data
}
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()
}
fun validateEditTexts(vararg editTexts: EditText): Boolean{
editTexts.forEach {
if (it.text.isNullOrBlank()){
it.validateEditText()
return false
}
}
return true
}
fun EditText.setTextOnChange(output: (m: String) -> Unit){
doAfterTextChanged {
output(text.toString())
}
}
override fun onImageGalleryResult(imageUri: Uri?){
super.onImageGalleryResult(imageUri)
picUri = imageUri
}
}

View File

@@ -0,0 +1,86 @@
package h_mal.appttude.com.driver.base
import android.net.Uri
import com.google.firebase.database.DatabaseReference
import com.google.firebase.storage.StorageReference
import h_mal.appttude.com.driver.data.FirebaseCompletion
import h_mal.appttude.com.driver.data.FirebaseDatabaseSource
import h_mal.appttude.com.driver.data.FirebaseStorageSource
import h_mal.appttude.com.driver.utils.Coroutines.io
import h_mal.appttude.com.driver.utils.DateUtils.getDateTimeStamp
import h_mal.appttude.com.driver.utils.getDataFromDatabaseRef
import kotlinx.coroutines.Job
import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope
import java.io.IOException
abstract class DataSubmissionBaseViewModel<T : Any>(
private val database: FirebaseDatabaseSource,
private val storage: FirebaseStorageSource?
) : BaseViewModel() {
abstract val databaseRef: DatabaseReference
abstract val storageRef: StorageReference?
abstract val objectName: String
abstract fun getDataFromDatabase(): Job
open fun setDataInDatabase(data: T, localImageUri: Uri?): Job = Job()
open fun setDataInDatabase(data: T, localImageUris: List<Uri?>?): Job = Job()
open fun setDataInDatabase(data: T) { }
inline fun <reified T : Any> getDataClass() = io {
doTryOperation("Failed to retrieve $objectName") {
val data = databaseRef.getDataFromDatabaseRef<T>()
onSuccess(data ?: FirebaseCompletion.Default)
}
}
suspend fun <T : Any> postDataToDatabase(data: T) {
val driversLicense = database.postToDatabaseRed(databaseRef, data)
onSuccess(driversLicense)
}
private suspend fun uploadImage(localImageUri: Uri?): String? {
val imageString = StringBuilder()
.append(getDateTimeStamp())
.append("_")
.append(objectName.replace(" ", "_"))
.toString()
return localImageUri?.let { uri ->
storageRef?.let {
val image = storage?.uploadImage(uri, it, imageString)
image.toString()
}
}
}
suspend fun getImageUrl(localImageUri: Uri?, imageUrl: String?): String {
if (localImageUri == null && imageUrl.isNullOrBlank()){
throw IOException("No image is selected")
}
return uploadImage(localImageUri) ?: imageUrl!!
}
suspend fun getImageUrls(localImageUris: List<Uri?>?): List<String?> {
if (localImageUris.isNullOrEmpty()){
throw IOException("No images is selected")
}
val listOfUrls = mutableListOf<String>()
localImageUris.forEach { uri ->
uploadImage(uri)?.let {
listOfUrls.add(it)
}
}
return listOfUrls
}
suspend fun <T, R> Iterable<T>.mapSuspend(transform: suspend (T) -> R): List<R> =
coroutineScope { map { t: T -> async { transform(t) } }.map { it.await() } }
suspend fun <T, R> Iterable<T>.mapIndexSuspend(transform: suspend (index: Int, T) -> R) =
coroutineScope { mapIndexed { index: Int, t: T -> async { transform(index, t) } }.map { it.await() } }
}

View File

@@ -0,0 +1,7 @@
package h_mal.appttude.com.driver.data
sealed class DataFieldState {
object DefaultState : DataFieldState()
object NonUserSateUpdated: DataFieldState()
object UserUpdateState: DataFieldState()
}

View File

@@ -0,0 +1,9 @@
package h_mal.appttude.com.driver.data
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
sealed class EventResponse {
data class Changed(val snapshot: DataSnapshot): EventResponse()
data class Cancelled(val error: DatabaseError): EventResponse()
}

View File

@@ -0,0 +1,48 @@
package h_mal.appttude.com.driver.data
import android.net.Uri
import com.google.android.gms.tasks.Task
import com.google.firebase.auth.*
class FirebaseAuthSource: FirebaseAuthentication{
private val auth = FirebaseAuth.getInstance()
override fun getUid(): String? = auth.uid
override fun getUser(): FirebaseUser? = auth.currentUser
override fun signIn(email: String, password: String): Task<AuthResult> =
auth.signInWithEmailAndPassword(email, password)
override fun registerUser(email: String, password: String): Task<AuthResult> =
auth.createUserWithEmailAndPassword(email, password)
override fun logOut() = auth.signOut()
override fun forgotPassword(email: String): Task<Void> = auth.sendPasswordResetEmail(email)
override fun updateProfile(
name: String?,
profilePic: Uri?
): Task<Void>? {
val profileUpdates = UserProfileChangeRequest.Builder().apply {
name?.let { setDisplayName(it) }
profilePic?.let { setPhotoUri(it) }
}.build()
return getUser()?.updateProfile(profileUpdates)
}
override fun reauthenticate(
email: String,
password: String
): Task<Void>? {
val credential = EmailAuthProvider.getCredential(email, password)
return getUser()?.reauthenticate(credential)
}
override fun updateEmail(email: String): Task<Void>? = getUser()?.updateEmail(email)
override fun updatePassword(password: String): Task<Void>? = getUser()?.updatePassword(password)
override fun deleteProfile() = getUser()?.delete()
}

View File

@@ -0,0 +1,26 @@
package h_mal.appttude.com.driver.data
import android.net.Uri
import com.google.android.gms.tasks.Task
import com.google.firebase.auth.AuthResult
import com.google.firebase.auth.FirebaseUser
interface FirebaseAuthentication{
fun getUid(): String?
fun getUser(): FirebaseUser?
fun signIn(email: String, password: String): Task<AuthResult>
fun registerUser(email: String, password: String): Task<AuthResult>
fun logOut()
fun forgotPassword(email: String): Task<Void>
fun updateProfile(
name: String?,
profilePic: Uri?
): Task<Void>?
fun reauthenticate(
email: String,
password: String
): Task<Void>?
fun updateEmail(email: String): Task<Void>?
fun updatePassword(password: String): Task<Void>?
fun deleteProfile(): Task<Void>?
}

View File

@@ -0,0 +1,7 @@
package h_mal.appttude.com.driver.data
sealed class FirebaseCompletion{
object Default: FirebaseCompletion()
data class Changed(val message: String): FirebaseCompletion()
data class ProfileDeleted(val message: String): FirebaseCompletion()
}

View File

@@ -0,0 +1,57 @@
package h_mal.appttude.com.driver.data
import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.FirebaseDatabase
import kotlinx.coroutines.tasks.await
const val USER_CONST = "user"
const val PROFILE_ROLE ="role"
const val DRIVER_NUMBER = "driver_number"
const val USER_DETAILS = "user_details"
const val VEHICLE_PROFILE = "vehicle_profile"
const val DRIVER_PROFILE = "driver_profile"
const val APPROVALS = "approvalsObject"
const val DRIVER_DETAILS = "driver_details"
const val DRIVER_LICENSE = "driver_license"
const val PRIVATE_HIRE = "private_hire"
const val INSURANCE_DETAILS = "insurance_details"
const val LOG_BOOK = "log_book"
const val MOT = "mot_details"
const val PRIVATE_HIRE_VEHICLE = "private_hire_vehicle"
const val VEHICLE_DETAILS = "vehicle_details"
const val ARCHIVE = "archive"
class FirebaseDatabaseSource {
private val database = FirebaseDatabase.getInstance()
suspend fun <T: Any> postToDatabaseRed(ref: DatabaseReference, data: T) : T{
ref.setValue(data).await()
return data
}
fun getUserRef(uid: String) = database.getReference(USER_CONST).child(uid)
fun getUserDetailsRef(uid: String) = getUserRef(uid).child(USER_DETAILS)
fun getVehicleRef(uid: String) = getUserRef(uid).child(VEHICLE_PROFILE)
fun getDriverRef(uid: String) = getUserRef(uid).child(DRIVER_PROFILE)
fun getApprovalsRef(uid: String) = getUserRef(uid).child(APPROVALS)
fun getArchiveRef(uid: String) = getUserRef(uid).child(ARCHIVE)
fun getUserRoleRef(uid: String) = getUserRef(uid).child(PROFILE_ROLE)
fun getDriverNumberRef(uid: String) = getUserRef(uid).child(DRIVER_NUMBER)
fun getDriverDetailsRef(uid: String) = getDriverRef(uid).child(DRIVER_DETAILS)
fun getDriverLicenseRef(uid: String) = getDriverRef(uid).child(DRIVER_LICENSE)
fun getPrivateHireRef(uid: String) = getDriverRef(uid).child(PRIVATE_HIRE)
fun getInsuranceDetailsRef(uid: String) = getVehicleRef(uid).child(INSURANCE_DETAILS)
fun getLogbookRef(uid: String) = getVehicleRef(uid).child(LOG_BOOK)
fun getMotDetailsRef(uid: String) = getVehicleRef(uid).child(MOT)
fun getPrivateHireVehicleRef(uid: String) = getVehicleRef(uid).child(PRIVATE_HIRE_VEHICLE)
fun getVehicleDetailsRef(uid: String) = getVehicleRef(uid).child(VEHICLE_DETAILS)
fun getDriverLicenseArchiveRef(uid: String) = getArchiveRef(uid).child(DRIVER_LICENSE)
fun getArchiveInsuranceDetailsRef(uid: String) = getArchiveRef(uid).child(INSURANCE_DETAILS)
fun getArchiveLogbookRef(uid: String) = getArchiveRef(uid).child(LOG_BOOK)
fun getArchiveMotDetailsRef(uid: String) = getArchiveRef(uid).child(MOT)
fun getArchivePrivateHireLicenseRef(uid: String) = getArchiveRef(uid).child(PRIVATE_HIRE)
fun getArchivePrivateHireVehicleRef(uid: String) = getArchiveRef(uid).child(PRIVATE_HIRE_VEHICLE)
fun getArchiveVehicleDetailsRef(uid: String) = getArchiveRef(uid).child(VEHICLE_DETAILS)
}

View File

@@ -0,0 +1,35 @@
package h_mal.appttude.com.driver.data
import android.net.Uri
import com.google.firebase.storage.FirebaseStorage
import com.google.firebase.storage.StorageReference
import kotlinx.coroutines.tasks.await
private const val IMAGE_CONST = "images"
const val PROFILE_SREF = "user_profile"
const val DRIVERS_LICENSE_SREF = "drivers_license"
const val INSURANCE_SREF = "insurance_details"
const val LOG_BOOK_SREF = "log_book"
const val MOT_SREF = "mot_Details"
const val PRIVATE_HIRE_SREF = "private_hire"
const val PRIVATE_HIRE_VEHICLE_SREF = "private_hire_vehicle"
class FirebaseStorageSource {
private val storage = FirebaseStorage.getInstance()
private val storageRef: StorageReference by lazy { storage.reference }
suspend fun uploadImage(localFilePath: Uri, path: StorageReference, filename: String): Uri {
val ref = path.child("$filename.jpg")
return ref.putFile(localFilePath)
.continueWithTask { ref.downloadUrl }
.await()
}
private fun usersImagesStorageRef(uid: String) = storageRef.child(IMAGE_CONST).child(uid)
fun profileImageStorageRef(uid: String) = usersImagesStorageRef(uid).child(PROFILE_SREF)
fun driversLicenseStorageRef(uid: String) = usersImagesStorageRef(uid).child(DRIVERS_LICENSE_SREF)
fun insuranceStorageRef(uid: String) = usersImagesStorageRef(uid).child(INSURANCE_SREF)
fun logBookStorageRef(uid: String) = usersImagesStorageRef(uid).child(LOG_BOOK_SREF)
fun motStorageRef(uid: String) = usersImagesStorageRef(uid).child(MOT_SREF)
fun privateHireStorageRef(uid: String) = usersImagesStorageRef(uid).child(PRIVATE_HIRE_SREF)
fun privateHireVehicleStorageRef(uid: String) = usersImagesStorageRef(uid).child(PRIVATE_HIRE_VEHICLE_SREF)
}

View File

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

View File

@@ -0,0 +1,10 @@
package h_mal.appttude.com.driver.data
import h_mal.appttude.com.driver.utils.Event
sealed class ViewState {
object HasStarted : ViewState()
class HasData<T : Any>(val data: Event<T>) : ViewState()
class HasError(val error: Event<String>) : ViewState()
}

View File

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

View File

@@ -0,0 +1,102 @@
package h_mal.appttude.com.driver.driver
import android.net.Uri
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import androidx.recyclerview.widget.RecyclerView
import h_mal.appttude.com.driver.DataFieldsInterface
import h_mal.appttude.com.driver.Objects.InsuranceObject
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
import h_mal.appttude.com.driver.utils.setPicassoImage
import h_mal.appttude.com.driver.viewmodels.InsuranceViewModel
import io.github.vejei.carouselview.CarouselAdapter
import kotlinx.android.synthetic.main.fragment_insurance.*
class InsuranceFragment : DataSubmissionBaseFragment<InsuranceViewModel, InsuranceObject>(),
DataFieldsInterface {
private var selectedImages: List<Uri>? = listOf()
lateinit var adapter: PageAdapter
private val viewmodel: InsuranceViewModel by getFragmentViewModel()
override fun getViewModel(): InsuranceViewModel = viewmodel
override fun getLayoutId(): Int = R.layout.fragment_insurance
override var model = InsuranceObject()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setImageSelectionAsMultiple()
adapter = PageAdapter()
carousel_view.adapter = adapter
insurer.setTextOnChange { model.insurerName = it }
insurance_exp.setTextOnChange { model.expiryDate = it }
uploadInsurance.setOnClickListener { openGalleryWithPermissionRequest() }
submit_ins.setOnClickListener { submit() }
}
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.setFieldFromDataFetch(model.insurerName)
insurance_exp.setFieldFromDataFetch(model.expiryDate)
model.photoStrings?.let { adapter.setData(it) }
}
override fun onImageGalleryResult(imageUris: List<Uri>?) {
selectedImages = imageUris
selectedImages?.let { adapter.setData(it) }
}
class PageAdapter : CarouselAdapter<PageAdapter.ViewHolder>() {
private var data: List<Any?>? = null
fun setData(list: List<Any?>) {
data = list
notifyDataSetChanged()
}
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
private val backgroundImageView = itemView.findViewById<ImageView>(R.id.imageView)
fun bind(page: Any?) {
backgroundImageView.clipToOutline = true
when (page) {
is Uri -> backgroundImageView.setImageURI(page)
is String -> backgroundImageView.setPicassoImage(page)
}
}
}
override fun onCreatePageViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(
LayoutInflater.from(parent.context).inflate(R.layout.carousal_image_cell, parent, false)
)
}
override fun onBindPageViewHolder(holder: ViewHolder, position: Int) {
holder.bind(data?.get(position))
}
override fun getPageCount(): Int {
return data?.size ?: 0
}
}
}

View File

@@ -0,0 +1,13 @@
package h_mal.appttude.com.driver.model
data class DriverProfileObject(
var driverPic: String? = null,
var forenames: String? = null,
var address: String? = null,
var postcode: String? = null,
var dob: String? = null,
var ni: String? = null,
var dateFirst: String? = null
)

View File

@@ -0,0 +1,8 @@
package h_mal.appttude.com.driver.model
data class DriversLicenseObject(
var licenseImageString: String? = null,
var licenseNumber: String? = null,
var licenseExpiry: String? = null
)

View File

@@ -0,0 +1,8 @@
package h_mal.appttude.com.driver.model
data class MotObject(
var motImageString: String? = null,
var motExpiry: String? = null
)

View File

@@ -0,0 +1,9 @@
package h_mal.appttude.com.driver.model
data class PrivateHireObject (
var phImageString: String? = null,
var phNumber: String? = null,
var phExpiry: String? = null
)

View File

@@ -0,0 +1,15 @@
package h_mal.appttude.com.driver.model
data class VehicleProfileObject(
var reg: String? = null,
var make: String? = null,
var model: String? = null,
var colour: String? = null,
var keeperName: String? = null,
var keeperAddress: String? = null,
var keeperPostCode: String? = null,
var startDate: String? = null,
var isSeized: Boolean = false
)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,58 @@
package h_mal.appttude.com.driver.ui.driver.vehicleprofile
import android.os.Bundle
import android.view.View
import h_mal.appttude.com.driver.DataFieldsInterface
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
import h_mal.appttude.com.driver.model.VehicleProfileObject
import h_mal.appttude.com.driver.viewmodels.VehicleProfileViewModel
import kotlinx.android.synthetic.main.fragment_vehicle_setup.*
class VehicleProfileFragment :
DataSubmissionBaseFragment<VehicleProfileViewModel, VehicleProfileObject>(),
DataFieldsInterface {
private val viewmodel by getFragmentViewModel<VehicleProfileViewModel>()
override fun getViewModel(): VehicleProfileViewModel = viewmodel
override var model = VehicleProfileObject()
override fun getLayoutId(): Int = R.layout.fragment_vehicle_setup
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
reg.setTextOnChange { model.reg = it }
make.setTextOnChange { model.make = it }
car_model.setTextOnChange { model.model = it }
colour.setTextOnChange { model.colour = it }
keeper_name.setTextOnChange { model.keeperName = it }
address.setTextOnChange { model.keeperAddress = it }
postcode.setTextOnChange { model.keeperPostCode = it }
start_date.setTextOnChange { model.startDate = it }
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.setFieldFromDataFetch(data.reg)
make.setFieldFromDataFetch(data.make)
car_model.setFieldFromDataFetch(data.model)
colour.setFieldFromDataFetch(data.colour)
keeper_name.setFieldFromDataFetch(data.keeperName)
address.setFieldFromDataFetch(data.keeperAddress)
postcode.setFieldFromDataFetch(data.keeperPostCode)
start_date.setFieldFromDataFetch(data.startDate)
seized_checkbox.isChecked = data.isSeized
}
}

View File

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

View File

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

View File

@@ -0,0 +1,37 @@
package h_mal.appttude.com.driver.update
import android.os.Bundle
import android.view.View
import androidx.fragment.app.activityViewModels
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText
import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText
import h_mal.appttude.com.driver.utils.setEnterPressedListener
import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
import kotlinx.android.synthetic.main.fragment_update_email.*
class UpdateEmailFragment : BaseFragment<UpdateUserViewModel>() {
private val viewmodel: UpdateUserViewModel by activityViewModels()
override fun getViewModel(): UpdateUserViewModel = viewmodel
override fun getLayoutId(): Int = R.layout.fragment_update_email
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
new_email.setEnterPressedListener { registerUser() }
submission_button_label.setOnClickListener { registerUser() }
}
private fun registerUser(){
val emailString = email_update.validatePasswordEditText() ?: return
val passwordText = password_top.validatePasswordEditText() ?: return
val newEmail = new_email.validateEmailEditText() ?: return
getViewModel().updateEmail(emailString, passwordText, newEmail)
}
}

View File

@@ -0,0 +1,40 @@
package h_mal.appttude.com.driver.update
import android.os.Bundle
import android.view.View
import androidx.fragment.app.activityViewModels
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.driver.utils.navigateTo
import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
import kotlinx.android.synthetic.main.update_overview_fragment.*
class UpdateOverviewFragment : BaseFragment<UpdateUserViewModel>(), View.OnClickListener {
private val vm by activityViewModels<UpdateUserViewModel>()
override fun getViewModel(): UpdateUserViewModel = vm
override fun getLayoutId(): Int = R.layout.update_overview_fragment
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
update_email_button.setOnClickListener(this)
update_password_button.setOnClickListener(this)
update_profile_button.setOnClickListener(this)
}
private fun View.submit(){
when(id){
R.id.update_email_button -> navigateTo(R.id.to_updateEmailFragment)
R.id.update_password_button -> navigateTo(R.id.to_updatePasswordFragment)
R.id.update_profile_button -> navigateTo(R.id.to_updateProfileFragment)
R.id.delete_profile -> navigateTo(R.id.to_deleteProfileFragment)
}
}
override fun onClick(v: View?){
v?.submit()
}
}

View File

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

View File

@@ -0,0 +1,92 @@
package h_mal.appttude.com.driver.update
import android.Manifest.permission.READ_EXTERNAL_STORAGE
import android.net.Uri
import android.os.Bundle
import android.view.View
import androidx.core.widget.doAfterTextChanged
import androidx.fragment.app.activityViewModels
import com.google.firebase.auth.FirebaseUser
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.driver.utils.PermissionsUtils.askForPermissions
import h_mal.appttude.com.driver.utils.setEnterPressedListener
import h_mal.appttude.com.driver.utils.setPicassoImage
import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
import kotlinx.android.synthetic.main.fragment_update_profile.*
const val TAG_CONST = "non-user"
private const val IMAGE_PERMISSION_RESULT = 402
class UpdateProfileFragment : BaseFragment<UpdateUserViewModel>() {
private val viewmodel: UpdateUserViewModel by activityViewModels()
override fun getViewModel(): UpdateUserViewModel = viewmodel
override fun getLayoutId(): Int = R.layout.fragment_update_profile
private var imageChangeListener: Boolean = false
private var nameChangeListener: Boolean = false
private var imageUri: Uri? = null
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewmodel.getUser()
update_name.apply {
doAfterTextChanged {
if (tag == TAG_CONST) {
tag = null
return@doAfterTextChanged
}
nameChangeListener = true
}
setEnterPressedListener { submitProfileUpdate() }
}
profile_img.setOnClickListener {
if (askForPermissions(READ_EXTERNAL_STORAGE, IMAGE_PERMISSION_RESULT)) {
openGalleryForImage()
}
}
submit_update_profile.setOnClickListener { submitProfileUpdate() }
}
private fun submitProfileUpdate() {
val name: String? = takeIf { nameChangeListener }?.update_name?.text?.toString()
val imgUri = takeIf { imageChangeListener }?.let { imageUri }
viewmodel.updateProfile(name, imgUri)
}
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)
}
private fun setFields(firebaseUser: FirebaseUser) {
profile_img.setPicassoImage(firebaseUser.photoUrl)
update_name.apply {
setText(firebaseUser.displayName)
tag = TAG_CONST
}
}
override fun onImageGalleryResult(imageUri: Uri?) {
super.onImageGalleryResult(imageUri)
this.imageUri = imageUri
profile_img.setImageURI(imageUri)
imageChangeListener = true
}
}

View File

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

View File

@@ -0,0 +1,37 @@
package h_mal.appttude.com.driver.user
import android.content.Intent
import android.os.Bundle
import com.google.firebase.auth.AuthResult
import com.google.firebase.auth.FirebaseUser
import h_mal.appttude.com.driver.MainActivity
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.BaseActivity
import h_mal.appttude.com.driver.viewmodels.UserViewModel
/**
* A login screen that offers login via email/password.
*/
class LoginActivity : BaseActivity<UserViewModel>() {
override fun getViewModel(): UserViewModel? = null
override val layoutId: Int = R.layout.activity_login
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
createViewModel<UserViewModel>()
}
override fun onSuccess(data: Any?) {
super.onSuccess(data)
if (data is AuthResult || data is FirebaseUser) {
val intent = Intent(this, MainActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
finish()
}
}
}

View File

@@ -0,0 +1,40 @@
package h_mal.appttude.com.driver.user
import android.os.Bundle
import android.view.View
import androidx.fragment.app.activityViewModels
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText
import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText
import h_mal.appttude.com.driver.utils.navigateTo
import h_mal.appttude.com.driver.utils.setEnterPressedListener
import h_mal.appttude.com.driver.viewmodels.UserViewModel
import kotlinx.android.synthetic.main.fragment_login.*
class LoginFragment : BaseFragment<UserViewModel>() {
private val userViewModel: UserViewModel by activityViewModels()
override fun getViewModel(): UserViewModel = userViewModel
override fun getLayoutId(): Int = R.layout.fragment_login
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
password.setEnterPressedListener { attemptLogin() }
email_sign_in_button.setOnClickListener { attemptLogin() }
register_button.setOnClickListener { it.navigateTo(R.id.to_register) }
forgot.setOnClickListener { it.navigateTo(R.id.to_forgotPassword) }
}
private fun attemptLogin(){
// Store values at the time of the login attempt.
val emailString = email.validateEmailEditText() ?: return
val passwordString = password.validatePasswordEditText() ?: return
// attempt to login user
getViewModel().signInUser(emailString, passwordString)
}
}

View File

@@ -0,0 +1,43 @@
package h_mal.appttude.com.driver.user
import android.os.Bundle
import android.view.View
import androidx.fragment.app.activityViewModels
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText
import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText
import h_mal.appttude.com.driver.utils.setEnterPressedListener
import h_mal.appttude.com.driver.viewmodels.UserViewModel
import kotlinx.android.synthetic.main.fragment_register.*
class RegisterFragment : BaseFragment<UserViewModel>() {
override fun getLayoutId(): Int = R.layout.fragment_register
override fun getViewModel(): UserViewModel {
val userViewModel: UserViewModel by activityViewModels()
return userViewModel
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
password_bottom.setEnterPressedListener { registerUser() }
email_sign_up.setOnClickListener { registerUser() }
}
private fun registerUser(){
val nameString = name_register.validatePasswordEditText() ?: return
val emailText = email_register.validateEmailEditText() ?: return
val passwordText = password_top.validatePasswordEditText() ?: return
val passwordTextBottom = password_bottom.validatePasswordEditText() ?: return
if ((passwordText != passwordTextBottom)) {
password_bottom.error = getString(R.string.no_match_password)
password_bottom.requestFocus()
return
}
getViewModel().registerUser(nameString, emailText, passwordText)
}
}

View File

@@ -0,0 +1,33 @@
package h_mal.appttude.com.driver.user
import android.os.Bundle
import android.view.View
import androidx.fragment.app.activityViewModels
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.base.BaseFragment
import h_mal.appttude.com.driver.utils.Coroutines.main
import h_mal.appttude.com.driver.utils.navigateTo
import h_mal.appttude.com.driver.viewmodels.UserViewModel
import kotlinx.coroutines.delay
class SplashScreenFragment : BaseFragment<UserViewModel>() {
private val userViewModel by activityViewModels<UserViewModel>()
override fun getViewModel(): UserViewModel = userViewModel
override fun getLayoutId(): Int = R.layout.fragment_splash_screen
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
userViewModel.getUser()
goToLogin()
}
private fun goToLogin() = main{
delay(1000)
view?.navigateTo(R.id.to_loginFragment)
}
}

View File

@@ -1,165 +0,0 @@
package h_mal.appttude.com.driver.user
import android.animation.Animator
import android.animation.AnimatorListenerAdapter
import android.annotation.TargetApi
import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.text.TextUtils
import android.view.View
import android.view.inputmethod.EditorInfo
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import android.widget.TextView.OnEditorActionListener
import androidx.appcompat.app.AppCompatActivity
import com.google.android.gms.tasks.Task
import com.google.firebase.auth.AuthResult
import com.google.firebase.auth.FirebaseAuth
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.utils.Navigations
import h_mal.appttude.com.driver.utils.displayToast
import h_mal.appttude.com.driver.utils.navigateToActivity
/**
* A login screen that offers login via email/password.
*/
class LoginActivity : AppCompatActivity() {
private var auth: FirebaseAuth? = null
// UI references.
private var mEmailView: EditText? = null
private var mPasswordView: EditText? = null
private var mProgressView: View? = null
private var mLoginView: View? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
auth = FirebaseAuth.getInstance()
// Set up the login form.
mEmailView = findViewById(R.id.email)
mPasswordView = findViewById<View>(R.id.password) as EditText
mPasswordView!!.setOnEditorActionListener(OnEditorActionListener { textView, id, keyEvent ->
if (id == EditorInfo.IME_ACTION_DONE || id == EditorInfo.IME_NULL) {
attemptLogin()
return@OnEditorActionListener true
}
false
})
val mEmailSignInButton = findViewById<Button>(R.id.email_sign_in_button)
mEmailSignInButton.setOnClickListener { view: View? -> attemptLogin() }
mProgressView = findViewById(R.id.login_progress)
mLoginView = findViewById(R.id.email_login_form)
val register = findViewById<TextView>(R.id.register_button)
register.setOnClickListener { v: View? ->
val intent = Intent(application, RegisterActivity::class.java)
startActivity(intent)
}
val forgotPw = findViewById<TextView>(R.id.forgot)
forgotPw.setOnClickListener { v: View? ->
val intent = Intent(application, forgotPasswordActivity::class.java)
startActivity(intent)
}
}
/**
* Attempts to sign in or register the account specified by the login form.
* If there are form errors (invalid email, missing fields, etc.), the
* errors are presented and no actual login attempt is made.
*/
private fun attemptLogin() {
if (auth == null) {
displayToast("Login invalid")
return
}
// Reset errors
mEmailView!!.error = null
mPasswordView!!.error = null
// Store values at the time of the login attempt.
val email = mEmailView!!.text.toString()
val password = mPasswordView!!.text.toString()
var cancel = false
var focusView: View? = null
// Check for a valid password, if the user entered one.
if (!TextUtils.isEmpty(password) && !isPasswordValid(password)) {
mPasswordView!!.error = getString(R.string.error_invalid_password)
focusView = mPasswordView
cancel = true
}
// Check for a valid email address.
if (TextUtils.isEmpty(email)) {
mEmailView!!.error = getString(R.string.error_field_required)
focusView = mEmailView
cancel = true
} else if (!isEmailValid(email)) {
mEmailView!!.error = getString(R.string.error_invalid_email)
focusView = mEmailView
cancel = true
}
if (cancel) {
// There was an error; don't attempt login and focus the first
// form field with an error.
focusView!!.requestFocus()
} else {
// Show a progress spinner, and kick off a background task to
// perform the user login attempt.
showProgress(true)
auth!!.signInWithEmailAndPassword(email, password)
.addOnCompleteListener { task: Task<AuthResult?> ->
showProgress(false)
if (task.isSuccessful) {
navigateToActivity(
this@LoginActivity,
Navigations.Main
)
finish()
} else {
displayToast(getString(R.string.login_failed))
}
}
}
}
private fun isEmailValid(email: String): Boolean {
//TODO: Replace this with your own logic
return email.contains("@")
}
private fun isPasswordValid(password: String): Boolean {
//TODO: Replace this with your own logic
return password.length > 6
}
/**
* Shows the progress UI and hides the login form.
*/
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
private fun showProgress(show: Boolean) {
// On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow
// for very easy animations. If available, use these APIs to fade-in
// the progress spinner.
val shortAnimTime = resources.getInteger(android.R.integer.config_shortAnimTime)
mLoginView!!.visibility = if (show) View.GONE else View.VISIBLE
mLoginView!!.animate().setDuration(shortAnimTime.toLong()).alpha(
if (show) 0F else 1.toFloat()
).setListener(object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator) {
mLoginView!!.visibility = if (show) View.GONE else View.VISIBLE
}
})
mProgressView!!.visibility = if (show) View.VISIBLE else View.GONE
mProgressView!!.animate().setDuration(shortAnimTime.toLong()).alpha(
if (show) 1F else 0.toFloat()
).setListener(object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator) {
mProgressView!!.visibility = if (show) View.VISIBLE else View.GONE
}
})
}
}

View File

@@ -1,161 +0,0 @@
package h_mal.appttude.com.driver.user
import android.content.Intent
import android.os.Bundle
import android.text.TextUtils
import android.util.Log
import android.view.View
import android.widget.Button
import android.widget.EditText
import android.widget.ProgressBar
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.google.android.gms.tasks.OnCompleteListener
import com.google.android.gms.tasks.Task
import com.google.firebase.auth.AuthResult
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.UserProfileChangeRequest
import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.FirebaseDatabase
import h_mal.appttude.com.driver.Global.FirebaseClass
import h_mal.appttude.com.driver.MainActivity
import h_mal.appttude.com.driver.Objects.UserObject
import h_mal.appttude.com.driver.R
class RegisterActivity : AppCompatActivity() {
private var auth: FirebaseAuth? = null
private var name: EditText? = null
private var email: EditText? = null
private var passwordTop: EditText? = null
private var passwordBottom: EditText? = null
private var progressBar: ProgressBar? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_register)
auth = FirebaseAuth.getInstance()
name = findViewById(R.id.name_register)
email = findViewById(R.id.email_register)
passwordTop = findViewById(R.id.password_top)
passwordBottom = findViewById(R.id.password_bottom)
progressBar = findViewById(R.id.pb)
val submit: Button = findViewById(R.id.email_sign_up)
submit.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
val nameString: String = name.getText().toString().trim({ it <= ' ' })
val emailText: String = email.getText().toString().trim({ it <= ' ' })
val passwordText: String = passwordTop.getText().toString().trim({ it <= ' ' })
val passwordTextBottom: String =
passwordBottom.getText().toString().trim({ it <= ' ' })
var cancel: Boolean = false
var focusView: View? = null
if (TextUtils.isEmpty(nameString)) {
name.setError(getString(R.string.error_field_required))
focusView = name
cancel = true
}
if (TextUtils.isEmpty(emailText)) {
email.setError(getString(R.string.error_field_required))
focusView = email
cancel = true
}
if (TextUtils.isEmpty(passwordText)) {
passwordTop.setError(getString(R.string.error_field_required))
focusView = passwordTop
cancel = true
}
if (TextUtils.isEmpty(passwordTextBottom)) {
passwordBottom.setError(getString(R.string.error_field_required))
focusView = passwordBottom
cancel = true
}
if (!TextUtils.isEmpty(passwordText) && !isPasswordValid(passwordText)) {
passwordTop.setError(getString(R.string.error_invalid_password))
focusView = passwordTop
cancel = true
}
if (!(passwordText == passwordTextBottom)) {
passwordBottom.setError(getString(R.string.no_match_password))
focusView = passwordBottom
cancel = true
}
if (cancel) {
// There was an error; don't attempt login and focus the first
// form field with an error.
focusView!!.requestFocus()
} else {
progressBar.setVisibility(View.VISIBLE)
//create user
auth.createUserWithEmailAndPassword(emailText, passwordText)
.addOnCompleteListener(
this@RegisterActivity,
object : OnCompleteListener<AuthResult?> {
override fun onComplete(task: Task<AuthResult?>) {
progressBar.setVisibility(View.GONE)
if (!task.isSuccessful) {
Toast.makeText(
this@RegisterActivity,
"Authentication failed." + task.exception,
Toast.LENGTH_SHORT
).show()
} else {
val profileUpdatesBuilder: UserProfileChangeRequest.Builder =
UserProfileChangeRequest.Builder()
if (!TextUtils.isEmpty(nameString)) {
profileUpdatesBuilder.setDisplayName(nameString)
}
val profileUpdates: UserProfileChangeRequest =
profileUpdatesBuilder.build()
auth.getCurrentUser()!!.updateProfile(profileUpdates)
.addOnCompleteListener(object :
OnCompleteListener<Void?> {
override fun onComplete(task: Task<Void?>) {
if (task.isSuccessful) {
Log.i(
"RegisterActivity",
"onComplete: " + task.isSuccessful
)
val mDatabase: DatabaseReference =
FirebaseDatabase.getInstance()
.reference
mDatabase.child(FirebaseClass.USER_FIREBASE)
.child(
auth.getCurrentUser()!!.uid
).child("role")
.setValue("driver")
mDatabase.child(FirebaseClass.USER_FIREBASE)
.child(
auth.getCurrentUser()!!.uid
).child("user_details")
.setValue(
UserObject(
auth.getCurrentUser()!!
.displayName,
auth.getCurrentUser()!!
.email,
null
)
)
val intent: Intent = Intent(
this@RegisterActivity,
MainActivity::class.java
)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
startActivity(intent)
finish()
}
}
})
}
}
})
}
}
})
}
private fun isPasswordValid(password: String): Boolean {
//TODO: Replace this with your own logic
return password.length > 6
}
}

View File

@@ -1,50 +0,0 @@
package h_mal.appttude.com.driver.user
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Button
import android.widget.EditText
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.NavUtils
import com.google.android.gms.tasks.OnCompleteListener
import com.google.android.gms.tasks.Task
import com.google.firebase.auth.FirebaseAuth
import h_mal.appttude.com.driver.R
class forgotPasswordActivity : AppCompatActivity() {
var TAG: String = "forgotPasswordActivity"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_forgot_password)
val editText: EditText = findViewById(R.id.reset_pw)
val resetPw: Button = findViewById(R.id.reset_pw_sign_up)
resetPw.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
resetPassword(editText.text.toString().trim({ it <= ' ' }))
}
})
}
private fun resetPassword(emailAddress: String) {
val auth: FirebaseAuth = FirebaseAuth.getInstance()
auth.sendPasswordResetEmail(emailAddress)
.addOnCompleteListener(object : OnCompleteListener<Void?> {
override fun onComplete(task: Task<Void?>) {
if (task.isSuccessful) {
Log.d(TAG, "Email sent.")
NavUtils.navigateUpFromSameTask(this@forgotPasswordActivity)
finish()
} else {
Toast.makeText(
this@forgotPasswordActivity,
"Could not reset Password",
Toast.LENGTH_SHORT
).show()
}
}
})
}
}

View File

@@ -1,201 +0,0 @@
package h_mal.appttude.com.driver.user
import android.app.AlertDialog
import android.content.DialogInterface
import android.os.Bundle
import android.text.InputType
import android.text.TextUtils
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.*
import androidx.fragment.app.Fragment
import com.google.android.gms.tasks.OnCompleteListener
import com.google.android.gms.tasks.OnFailureListener
import com.google.android.gms.tasks.Task
import com.google.firebase.auth.EmailAuthProvider
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.FirebaseUser
import com.google.firebase.auth.UserProfileChangeRequest
import com.google.firebase.database.DatabaseReference
import h_mal.appttude.com.driver.Global.FirebaseClass
import h_mal.appttude.com.driver.Global.ViewController
import h_mal.appttude.com.driver.MainActivity
import h_mal.appttude.com.driver.R
class profileFragment : Fragment() {
private val TAG = this.javaClass.simpleName
private var email: TextView? = null
private var name: TextView? = null
private var changePw: TextView? = null
private var user: FirebaseUser? = null
private var databaseReference: DatabaseReference? = null
var viewController: ViewController? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewController = ViewController(activity)
user = MainActivity.auth!!.currentUser
databaseReference =
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
user!!.uid
)
.child(FirebaseClass.DRIVER_FIREBASE)
.child(FirebaseClass.DRIVER_DETAILS_FIREBASE)
.child("driverPic")
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view = inflater.inflate(R.layout.fragment_profile, container, false)
email = view.findViewById(R.id.change_email)
name = view.findViewById(R.id.change_profile_name)
changePw = view.findViewById(R.id.change_pw)
val button = view.findViewById<Button>(R.id.submit_profile)
button.setOnClickListener(View.OnClickListener { MainActivity.fragmentManager!!.popBackStack() })
name.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
val dialog = AlertDialog.Builder(context)
dialog.setTitle("Update Username")
val titleBox = EditText(context)
titleBox.setText(user!!.displayName)
dialog.setView(titleBox)
dialog.setPositiveButton("Update", object : DialogInterface.OnClickListener {
override fun onClick(dialog: DialogInterface, which: Int) {
updateProfile(titleBox.text.toString().trim { it <= ' ' })
}
})
dialog.show()
}
})
email.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
showDialog(EMAIL_CONSTANT)
}
})
changePw.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
showDialog(PW_CONSTANT)
}
})
return view
}
private fun updateProfile(profileName: String) {
val profileUpdatesBuilder = UserProfileChangeRequest.Builder()
if (!TextUtils.isEmpty(profileName)) {
profileUpdatesBuilder.setDisplayName(profileName)
}
val profileUpdates = profileUpdatesBuilder.build()
user!!.updateProfile(profileUpdates)
.addOnCompleteListener(object : OnCompleteListener<Void?> {
override fun onComplete(task: Task<Void?>) {
if (task.isSuccessful) {
Log.d(TAG, "User profile updated.")
viewController!!.reloadDrawer()
}
}
})
.addOnFailureListener(object : OnFailureListener {
override fun onFailure(e: Exception) {
Toast.makeText(context, "Update Failed", Toast.LENGTH_SHORT).show()
}
})
}
private fun changeCredentials(
email: String,
password: String,
changeText: String,
selector: String
) {
// Get auth credentials from the user for re-authentication
val credential = EmailAuthProvider
.getCredential(email, password) // Current Login Credentials \\
// Prompt the user to re-provide their sign-in credentials
user!!.reauthenticate(credential)
.addOnCompleteListener(object : OnCompleteListener<Void?> {
override fun onComplete(task: Task<Void?>) {
Log.d(TAG, "User re-authenticated.")
user = FirebaseAuth.getInstance().currentUser
if ((selector == EMAIL_CONSTANT)) {
user!!.updateEmail(changeText)
.addOnCompleteListener(object : OnCompleteListener<Void?> {
override fun onComplete(task: Task<Void?>) {
if (task.isSuccessful) {
Log.d(TAG, "User email address updated.")
Toast.makeText(
context,
"Update Successful",
Toast.LENGTH_SHORT
).show()
viewController!!.reloadDrawer()
}
}
})
}
if ((selector == PW_CONSTANT)) {
user!!.updatePassword(changeText)
.addOnCompleteListener(object : OnCompleteListener<Void?> {
override fun onComplete(task: Task<Void?>) {
if (task.isSuccessful) {
Log.d(TAG, "User email address updated.")
Toast.makeText(
context,
"Update Successful",
Toast.LENGTH_SHORT
).show()
}
}
})
}
}
})
}
private fun showDialog(update: String) {
//Make new Dialog
val dialog = AlertDialog.Builder(context)
dialog.setTitle("Update $update")
val layout = LinearLayout(context)
layout.orientation = LinearLayout.VERTICAL
layout.setPadding(28, 0, 56, 0)
val box1 = EditText(context)
box1.hint = "Current Email Address"
box1.inputType = InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS
layout.addView(box1) // Notice this is an add method
val box2 = EditText(context)
box2.hint = "Current Password"
box2.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_VARIATION_PASSWORD
layout.addView(box2) // Another add method
val box3 = EditText(context)
if ((update == PW_CONSTANT)) {
box3.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_VARIATION_PASSWORD
} else {
box3.inputType = InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS
}
box3.hint = "New $update"
layout.addView(box3) // Another add method
dialog.setView(layout)
dialog.setPositiveButton("Update", object : DialogInterface.OnClickListener {
override fun onClick(dialog: DialogInterface, which: Int) {
val email = box1.text.toString().trim { it <= ' ' }
val password = box2.text.toString().trim { it <= ' ' }
val textThree = box3.text.toString().trim { it <= ' ' }
changeCredentials(email, password, textThree, update)
}
})
dialog.show()
}
companion object {
private val EMAIL_CONSTANT = "Email Address"
private val PW_CONSTANT = "Password"
}
}

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