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 { dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar']) implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.0' implementation "androidx.appcompat:appcompat:1.0.0"
implementation 'com.google.android.material:material:1.0.0' implementation "com.google.android.material:material:1.0.0"
implementation 'androidx.cardview:cardview:1.0.0' implementation "androidx.cardview:cardview:1.0.0"
implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation "androidx.legacy:legacy-support-v4:1.0.0"
implementation 'androidx.exifinterface:exifinterface:1.0.0' implementation "androidx.exifinterface:exifinterface:1.0.0"
implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation "androidx.constraintlayout:constraintlayout:1.1.3"
implementation 'androidx.legacy:legacy-support-v4:1.0.0' 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 // 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 // Google firebase
implementation 'com.google.firebase:firebase-core:16.0.1' def firebaseVer = "16.0.1"
implementation 'com.google.firebase:firebase-auth:16.0.1' implementation "com.google.firebase:firebase-core:$firebaseVer"
implementation 'com.google.firebase:firebase-storage:16.0.1' implementation "com.google.firebase:firebase-auth:$firebaseVer"
implementation 'com.google.firebase:firebase-database:16.0.1' implementation "com.google.firebase:firebase-storage:$firebaseVer"
implementation "com.google.firebase:firebase-database:$firebaseVer"
// Photoviewer // Photoviewer
implementation 'com.github.chrisbanes:PhotoView:2.1.0' implementation "com.github.chrisbanes:PhotoView:2.1.0"
// Picasso photo loader /* Picasso photo loader */
implementation 'com.squareup.picasso:picasso:2.71828' implementation "com.squareup.picasso:picasso:2.71828"
// Gson /* Gson */
implementation 'com.google.code.gson:gson:2.3.1' implementation "com.google.code.gson:gson:2.3.1"
testImplementation 'junit:junit:4.12' /* coroutines support for firebase operations */
androidTestImplementation 'androidx.test.ext:junit:1.1.1' implementation "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.1.1"
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
androidTestImplementation 'androidx.test:rules: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"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="h_mal.appttude.com.driver"> package="h_mal.appttude.com.driver">
<!-- To auto-complete the email text field in the login form with the user's emails --> <!-- 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.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PROFILE" /> <uses-permission android:name="android.permission.READ_PROFILE" />
@@ -12,12 +11,14 @@
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.CAMERA" />
<application <application
android:name=".application.DriverApplication"
android:allowBackup="true" android:allowBackup="true"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/AppTheme"> android:theme="@style/AppTheme">
<activity android:name=".update.UpdateActivity" />
<activity <activity
android:name=".user.LoginActivity" android:name=".user.LoginActivity"
android:label="@string/app_name" android:label="@string/app_name"
@@ -25,6 +26,7 @@
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity> </activity>
@@ -32,12 +34,7 @@
android:name=".MainActivity" android:name=".MainActivity"
android:configChanges="orientation|screenSize" android:configChanges="orientation|screenSize"
android:label="@string/app_name" android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar"> android:theme="@style/AppTheme.NoActionBar" />
</activity>
<activity android:name=".user.RegisterActivity">
</activity>
<provider <provider
android:name="androidx.core.content.FileProvider" android:name="androidx.core.content.FileProvider"
@@ -48,8 +45,6 @@
android:name="android.support.FILE_PROVIDER_PATHS" android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" /> android:resource="@xml/file_paths" />
</provider> </provider>
<activity android:name=".user.forgotPasswordActivity"></activity>
</application> </application>
</manifest> </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 package h_mal.appttude.com.driver.Archive
import android.content.Context import android.content.Context
import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup 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.FirebaseClass
import h_mal.appttude.com.driver.Global.ImageSwiperClass import h_mal.appttude.com.driver.Global.ImageSwiperClass
import h_mal.appttude.com.driver.MainActivity 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.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 import java.text.ParseException
class ArchiveObjectListAdapter( class ArchiveObjectListAdapter(
@@ -94,7 +101,6 @@ class ArchiveObjectListAdapter(
fieldTwoText.text = driversLicenseObject.licenseNumber fieldTwoText.text = driversLicenseObject.licenseNumber
} }
FirebaseClass.MOT_FIREBASE -> { FirebaseClass.MOT_FIREBASE -> {
Log.i(TAG, "getView: MOT OBJECT")
expiryHolder.visibility = View.VISIBLE expiryHolder.visibility = View.VISIBLE
fieldTwo.visibility = View.GONE fieldTwo.visibility = View.GONE
val motObject: MotObject = getItem(position) as MotObject val motObject: MotObject = getItem(position) as MotObject
@@ -141,7 +147,7 @@ class ArchiveObjectListAdapter(
val expiryText: TextView = listItemView.findViewById(R.id.exp_text) val expiryText: TextView = listItemView.findViewById(R.id.exp_text)
val fieldTwoText: TextView = listItemView.findViewById(R.id.archive_insurer) val fieldTwoText: TextView = listItemView.findViewById(R.id.archive_insurer)
val insuranceObject: InsuranceObject = getItem(position) as InsuranceObject val insuranceObject: InsuranceObject = getItem(position) as InsuranceObject
swiperClass.reinstantiateList(insuranceObject.photoStrings) // swiperClass.reinstantiateList(insuranceObject.photoStrings)
expiryText.text = insuranceObject.expiryDate expiryText.text = insuranceObject.expiryDate
fieldTwoText.text = insuranceObject.insurerName fieldTwoText.text = insuranceObject.insurerName
} else if ((archiveString == FirebaseClass.VEHICLE_DETAILS_FIREBASE)) { } else if ((archiveString == FirebaseClass.VEHICLE_DETAILS_FIREBASE)) {
@@ -155,7 +161,7 @@ class ArchiveObjectListAdapter(
val keeperAddress: TextView = listItemView.findViewById(R.id.keeper_address) val keeperAddress: TextView = listItemView.findViewById(R.id.keeper_address)
val carText: TextView = listItemView.findViewById(R.id.car_text_arch) val carText: TextView = listItemView.findViewById(R.id.car_text_arch)
val carColour: TextView = listItemView.findViewById(R.id.car_colour) 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 startDate: TextView = listItemView.findViewById(R.id.first_date)
val vehicleProfileObject: VehicleProfileObject = val vehicleProfileObject: VehicleProfileObject =
getItem(position) as VehicleProfileObject getItem(position) as VehicleProfileObject
@@ -180,7 +186,7 @@ class ArchiveObjectListAdapter(
private fun dateString(position: Int) { private fun dateString(position: Int) {
var success: Boolean = true var success: Boolean = true
try { try {
dateArchivedText!!.text = MainActivity.setAsDateTime(mKeys.get(position)) dateArchivedText!!.text = mKeys[position].convertDateStringDatePattern("yyyyMMdd_HHmmss", "dd/MM/yyyy")
} catch (e: ParseException) { } catch (e: ParseException) {
e.printStackTrace() e.printStackTrace()
success = false 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 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.ApprovalsObject
import h_mal.appttude.com.driver.Objects.WholeDriverObject import h_mal.appttude.com.driver.Objects.WholeDriverObject
import h_mal.appttude.com.driver.R import h_mal.appttude.com.driver.R
@@ -11,16 +8,16 @@ import h_mal.appttude.com.driver.R
class ApprovalsClass { class ApprovalsClass {
fun getOverApprovalStatusCode(wholeDriverObject: WholeDriverObject?): Int { fun getOverApprovalStatusCode(wholeDriverObject: WholeDriverObject?): Int {
if (wholeDriverObject!!.approvalsObject != null) { if (wholeDriverObject!!.approvalsObject != null) {
val approvalsObject: ApprovalsObject? = wholeDriverObject.approvalsObject val approvalsObject: ApprovalsObject = wholeDriverObject!!.approvalsObject!!
val ints: IntArray = intArrayOf( val ints: IntArray = intArrayOf(
approvalsObject.getDriver_details_approval(), approvalsObject.driver_details_approval,
approvalsObject.driver_license_approval, approvalsObject.driver_license_approval,
approvalsObject.private_hire_approval, approvalsObject.private_hire_approval,
approvalsObject.vehicle_details_approval, approvalsObject.vehicle_details_approval,
approvalsObject.insurance_details_approval, approvalsObject.insurance_details_approval,
approvalsObject.getMot_details_approval(), approvalsObject.mot_details_approval,
approvalsObject.getLog_book_approval(), approvalsObject.log_book_approval,
approvalsObject.getPh_car_approval() approvalsObject.ph_car_approval
) )
return setImageResource(mode(ints)) return setImageResource(mode(ints))
} }
@@ -28,18 +25,16 @@ class ApprovalsClass {
} }
fun setStatusCode(userId: String?, approvalNameString: String, status: Int) { fun setStatusCode(userId: String?, approvalNameString: String, status: Int) {
if (!(approvalNameString == "")) { // if (!(approvalNameString == "")) {
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE) // MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE)
.child((userId)!!).child(FirebaseClass.USER_APPROVALS) // .child((userId)!!).child(FirebaseClass.USER_APPROVALS)
.child(approvalNameString) // .child(approvalNameString)
.setValue(status).addOnCompleteListener(object : OnCompleteListener<Void?> { // .setValue(status).addOnCompleteListener { task ->
override fun onComplete(task: Task<Void?>) { // if (task.isSuccessful) {
if (task.isSuccessful) { // } else {
} else { // }
} // }
} // }
})
}
} }
fun setImageResource(statusCode: Int): Int { fun setImageResource(statusCode: Int): Int {
@@ -55,7 +50,6 @@ class ApprovalsClass {
companion object { companion object {
fun mode(array: IntArray): Int { fun mode(array: IntArray): Int {
MainActivity.printObjectAsJson("modeArrays", array)
var mode: Int = array.get(0) var mode: Int = array.get(0)
var maxCount: Int = 0 var maxCount: Int = 0
if (matchedArray(array, 3)) { if (matchedArray(array, 3)) {

View File

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

View File

@@ -1,103 +1,54 @@
package h_mal.appttude.com.driver.Global package h_mal.appttude.com.driver.Global
import android.app.DatePickerDialog import android.app.DatePickerDialog
import android.app.DatePickerDialog.OnDateSetListener
import android.content.Context import android.content.Context
import android.icu.util.Calendar
import android.os.Build import android.os.Build
import android.text.TextUtils
import android.util.Log
import android.widget.DatePicker
import android.widget.EditText import android.widget.EditText
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import h_mal.appttude.com.driver.R import h_mal.appttude.com.driver.R
import java.text.ParseException import h_mal.appttude.com.driver.utils.DateUtils
import java.text.SimpleDateFormat
import java.util.*
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 dateSetListener: OnDateSetListener =
var mYear: Int = 0 OnDateSetListener { _, year, month, dayOfMonth ->
var mMonth: Int = 0 val cal = Calendar.getInstance()
var mDay: Int = 0 cal.set(year, month + 1, dayOfMonth)
var editText: EditText? = null
@RequiresApi(api = Build.VERSION_CODES.N) editText.setText(DateUtils.parseCalenderIntoDateString(cal, DATE_FORMAT))
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)
}
}
} }
Log.i(
this.javaClass.simpleName, ("init: year =" + mYear + init {
"month = " + mMonth + val dateString = editText.text?.toString()
"day = " + mDay) val date = if (dateString.isNullOrBlank()){
) // Set time to now
updateDate(mYear, mMonth, mDay) Calendar.getInstance()
setOnDateSetListener(null) }else{
this.setTitle(context.getString(R.string.set_date)) // 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() show()
} }
var dateSetListener: OnDateSetListener = object : OnDateSetListener { private fun setDateFromCalender(calendar: Calendar){
override fun onDateSet(view: DatePicker, year: Int, month: Int, dayOfMonth: Int) { val mYear = calendar.get(Calendar.YEAR)
mYear = year val mMonth = calendar.get(Calendar.MONTH)
mMonth = month + 1 val mDay = calendar.get(Calendar.DAY_OF_MONTH)
mDay = dayOfMonth
editText!!.setText( updateDate(mYear, mMonth, mDay)
(String.format("%02d", mDay) + "/" + String.format("%02d", (mMonth)) + "/" +
mYear)
)
}
} }
} }

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,206 +1,106 @@
package h_mal.appttude.com.driver package h_mal.appttude.com.driver
import android.Manifest 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.Bitmap
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.os.Bundle import android.os.Bundle
import android.util.Log
import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import android.widget.ImageView 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.core.view.GravityCompat
import androidx.drawerlayout.widget.DrawerLayout import androidx.navigation.NavController
import androidx.fragment.app.FragmentManager 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.android.material.navigation.NavigationView
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.FirebaseUser 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.Picasso.LoadedFrom
import com.squareup.picasso.Target import com.squareup.picasso.Target
import h_mal.appttude.com.driver.Driver.DriverOverallFragment import h_mal.appttude.com.driver.Global.ApprovalsClass
import h_mal.appttude.com.driver.Driver.VehicleOverallFragment import h_mal.appttude.com.driver.Global.ArchiveClass
import h_mal.appttude.com.driver.Driver.homeDriverFragment import h_mal.appttude.com.driver.Global.ImageViewClass
import h_mal.appttude.com.driver.Global.* import h_mal.appttude.com.driver.base.BaseActivity
import h_mal.appttude.com.driver.Global.ViewController.ViewControllerInterface import h_mal.appttude.com.driver.dialogs.ExitDialog.displayExitDialog
import h_mal.appttude.com.driver.SuperUser.homeSuperUserFragment
import h_mal.appttude.com.driver.user.LoginActivity import h_mal.appttude.com.driver.user.LoginActivity
import h_mal.appttude.com.driver.user.profileFragment import h_mal.appttude.com.driver.utils.ActivityIntentBuilder.createIntent
import java.text.ParseException import h_mal.appttude.com.driver.utils.setPicassoImage
import java.text.SimpleDateFormat import h_mal.appttude.com.driver.viewmodels.MainViewModel
import java.util.* 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(), class MainActivity : BaseActivity<MainViewModel>(),
NavigationView.OnNavigationItemSelectedListener, ViewControllerInterface { NavigationView.OnNavigationItemSelectedListener {
var navigationView: NavigationView? = null
var progressBar: ProgressBar? = null private val vm by createLazyViewModel<MainViewModel>()
var toolbar: Toolbar? = null 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?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewController = ViewController(this)
imageViewClass = ImageViewClass() imageViewClass = ImageViewClass()
approvalsClass = ApprovalsClass() approvalsClass = ApprovalsClass()
archiveClass = ArchiveClass() 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) { setSupportActionBar(toolbar)
progressBar.setVisibility(View.GONE) 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 = override fun onSupportNavigateUp(): Boolean {
object : FragmentManager.OnBackStackChangedListener { return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
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 setTitle(title: CharSequence) { override fun setTitle(title: CharSequence) {
toolbar!!.title = title 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()
}
})
} }
override fun onBackPressed() { override fun onBackPressed() {
val drawer: DrawerLayout = findViewById<View>(R.id.drawer_layout) as DrawerLayout if (drawer_layout.isDrawerOpen(GravityCompat.START)) {
if (drawer.isDrawerOpen(GravityCompat.START)) { drawer_layout.closeDrawer(GravityCompat.START)
drawer.closeDrawer(GravityCompat.START)
} else { } else {
if (fragmentManager!!.backStackEntryCount > 1) { val navHostFragment = supportFragmentManager.findFragmentById(R.id.container)
if ((fragmentManager!!.fragments.get(0).javaClass navHostFragment?.childFragmentManager?.backStackEntryCount?.takeIf { it > 1 }?.let {
.simpleName == "InsuranceFragment") return super.onBackPressed()
) {
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()
} }
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 // Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long // automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml. // as you specify a parent activity in AndroidManifest.xml.
val id: Int = item.itemId if (item.itemId == R.id.action_settings) {
if (id == R.id.action_settings) {
return true return true
} }
return super.onOptionsItemSelected(item) return super.onOptionsItemSelected(item)
@@ -217,66 +116,29 @@ class MainActivity : AppCompatActivity(),
override fun onNavigationItemSelected(item: MenuItem): Boolean { override fun onNavigationItemSelected(item: MenuItem): Boolean {
// Handle navigation view item clicks here. // Handle navigation view item clicks here.
val id: Int = item.itemId when (item.itemId) {
if (id == R.id.nav_camera) { R.id.nav_user_settings -> { }
// 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())
} }
val drawer: DrawerLayout = findViewById<View>(R.id.drawer_layout) as DrawerLayout drawer_layout.closeDrawer(GravityCompat.START)
drawer.closeDrawer(GravityCompat.START)
return true return true
} }
override fun progressVisibility(vis: Int) {
progressBar!!.visibility = vis
}
override fun updateDrawer() {
setupDrawer()
}
companion object { companion object {
private val TAG: String = MainActivity::class.java.simpleName
var fragmentManager: FragmentManager? = null lateinit var imageViewClass: ImageViewClass
var auth: FirebaseAuth? = null lateinit var approvalsClass: ApprovalsClass
var storage: FirebaseStorage? = null lateinit var archiveClass: ArchiveClass
var storageReference: StorageReference? = null private const val REQUEST_EXTERNAL_STORAGE: Int = 1
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
private val PERMISSIONS_STORAGE: Array<String> = arrayOf( private val PERMISSIONS_STORAGE: Array<String> = arrayOf(
Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_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 { fun loadImage(mainImage: ImageView?): Target {
val target: Target = object : Target { val target: Target = object : Target {
override fun onBitmapLoaded(bitmap: Bitmap, from: LoadedFrom) { override fun onBitmapLoaded(bitmap: Bitmap, from: LoadedFrom) {
mainImage!!.setImageBitmap(bitmap) mainImage!!.setImageBitmap(bitmap)
mainImage.setOnClickListener(View.OnClickListener { imageViewClass!!.open(bitmap) }) mainImage.setOnClickListener{ imageViewClass.open(bitmap) }
} }
override fun onBitmapFailed(e: Exception, errorDrawable: Drawable) {} override fun onBitmapFailed(e: Exception, errorDrawable: Drawable) {}
@@ -288,31 +150,5 @@ class MainActivity : AppCompatActivity(),
return target 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 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.* import java.util.*
class ArchiveObject { class ArchiveObject {
@@ -27,6 +31,6 @@ class ArchiveObject {
this.insurance_details = insurance_details this.insurance_details = insurance_details
this.mot_details = mot_details this.mot_details = mot_details
this.log_book = log_book 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 { data class InsuranceObject (
var photoStrings: MutableList<String?>? = null var photoStrings: MutableList<String?>? = null,
var insurerName: String? = null var insurerName: String? = null,
var expiryDate: String? = null var expiryDate: String? = null
)
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 { class PrivateHireVehicleObject(
var phCarImageString: String? = null var phCarImageString: String? = null,
var phCarNumber: String? = null var phCarNumber: String? = null,
var phCarExpiry: 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 package h_mal.appttude.com.driver.Objects.WholeObject
import h_mal.appttude.com.driver.Objects.DriverProfileObject import h_mal.appttude.com.driver.model.DriverProfileObject
import h_mal.appttude.com.driver.Objects.DriversLicenseObject import h_mal.appttude.com.driver.model.DriversLicenseObject
import h_mal.appttude.com.driver.Objects.PrivateHireObject import h_mal.appttude.com.driver.model.PrivateHireObject
class DriverProfile { class DriverProfile {

View File

@@ -28,7 +28,7 @@ class MappedObject : Parcelable {
} }
companion object { 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? { override fun createFromParcel(`in`: Parcel): MappedObject? {
return MappedObject(`in`) return MappedObject(`in`)
} }

View File

@@ -1,6 +1,10 @@
package h_mal.appttude.com.driver.Objects.WholeObject 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 { class VehicleProfile {

View File

@@ -3,7 +3,6 @@ package h_mal.appttude.com.driver.SuperUser
import android.app.Activity import android.app.Activity
import android.content.Context import android.content.Context
import android.util.DisplayMetrics import android.util.DisplayMetrics
import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
@@ -11,22 +10,29 @@ import android.widget.ArrayAdapter
import android.widget.ImageView import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import androidx.fragment.app.Fragment 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.FirebaseClass
import h_mal.appttude.com.driver.Global.SetApprovalDialog import h_mal.appttude.com.driver.Global.SetApprovalDialog
import h_mal.appttude.com.driver.MainActivity 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.ArchiveObject
import h_mal.appttude.com.driver.Objects.WholeDriverObject
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject
import h_mal.appttude.com.driver.R 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>) : class ApprovalListAdapter(
ArrayAdapter<MappedObject?>(activity, 0, objects) { val activity: Activity,
private val TAG: String = "ApprovalListAdapter" objects: Array<MappedObject>
): ArrayAdapter<MappedObject?>(activity, 0, objects) {
var mappedObject: MappedObject = objects[0]
var names: Array<String> = arrayOf( var names: Array<String> = arrayOf(
"Driver Profile", "Driver Profile",
"Driver License", "Driver License",
@@ -37,8 +43,8 @@ class ApprovalListAdapter constructor(activity: Activity, objects: Array<MappedO
"Logbook", "Logbook",
"P/H Vehicle" "P/H Vehicle"
) )
var mappedObject: MappedObject
var activity: Activity
var approvalCode: Int = 0 var approvalCode: Int = 0
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
var listItemView: View? = convertView var listItemView: View? = convertView
@@ -56,51 +62,38 @@ class ApprovalListAdapter constructor(activity: Activity, objects: Array<MappedO
approvalCode approvalCode
) )
) )
imageView.setOnClickListener(object : View.OnClickListener { imageView.setOnClickListener {
override fun onClick(v: View) { SetApprovalDialog(
SetApprovalDialog( approvalCode,
approvalCode, activity,
activity, mappedObject.userId,
mappedObject.getUserId(), position,
position, imageView
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()
)
) )
}
val archiveImage: ImageView = listItemView.findViewById(R.id.archive_icon)
mappedObject.wholeDriverObject?.archive?.let {
archiveImage.visibility = getArchive( archiveImage.visibility = getArchive(
position, position,
mappedObject.getWholeDriverObject().getArchive() it
) )
archiveImage.setOnClickListener(object : View.OnClickListener { archiveImage.setOnClickListener {
override fun onClick(v: View) { var s: String? = null
var s: String? = null when (position) {
when (position) { 1 -> s = FirebaseClass.DRIVERS_LICENSE_FIREBASE
1 -> s = FirebaseClass.DRIVERS_LICENSE_FIREBASE 2 -> s = FirebaseClass.PRIVATE_HIRE_FIREBASE
2 -> s = FirebaseClass.PRIVATE_HIRE_FIREBASE 3 -> s = FirebaseClass.VEHICLE_DETAILS_FIREBASE
3 -> s = FirebaseClass.VEHICLE_DETAILS_FIREBASE 4 -> s = FirebaseClass.INSURANCE_FIREBASE
4 -> s = FirebaseClass.INSURANCE_FIREBASE 5 -> s = FirebaseClass.MOT_FIREBASE
5 -> s = FirebaseClass.MOT_FIREBASE 6 -> s = FirebaseClass.LOG_BOOK_FIREBASE
6 -> s = FirebaseClass.LOG_BOOK_FIREBASE 7 -> s = FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE
7 -> s = FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE
}
ExecuteFragment.executeFragment(ArchiveFragment(), mappedObject.getUserId(), s)
} }
}) // executeFragment(ArchiveFragment(), mappedObject.userId, s)
}
listItemView.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
getFragment(position)
} }
}) }
listItemView.setOnClickListener(View.OnClickListener { getFragment(position) })
listItemView.minimumHeight = parent.height / 4 listItemView.minimumHeight = parent.height / 4
listItemView.setPadding( listItemView.setPadding(
convertDpToPixel(9f, context).toInt(), convertDpToPixel(9f, context).toInt(),
@@ -119,15 +112,14 @@ class ApprovalListAdapter constructor(activity: Activity, objects: Array<MappedO
var o: Any? = null var o: Any? = null
val visible: Int val visible: Int
when (i) { when (i) {
0 -> { 0 -> { }
}
1 -> o = archiveObject!!.driver_license 1 -> o = archiveObject!!.driver_license
2 -> o = archiveObject!!.private_hire 2 -> o = archiveObject!!.private_hire
3 -> o = archiveObject!!.vehicle_details 3 -> o = archiveObject!!.vehicle_details
4 -> o = archiveObject!!.insurance_details 4 -> o = archiveObject!!.insurance_details
5 -> o = archiveObject!!.mot_details 5 -> o = archiveObject!!.mot_details
6 -> o = archiveObject!!.log_book 6 -> o = archiveObject!!.log_book
7 -> o = archiveObject.private_hire_vehicle 7 -> o = archiveObject!!.ph_car
} }
if (o != null) { if (o != null) {
visible = View.VISIBLE visible = View.VISIBLE
@@ -138,101 +130,68 @@ class ApprovalListAdapter constructor(activity: Activity, objects: Array<MappedO
} }
private fun getFragment(i: Int) { private fun getFragment(i: Int) {
var f: Fragment? = null lateinit var f: Fragment
val wholeDriverObject: WholeDriverObject? = mappedObject.getWholeDriverObject() val driverProfile by lazy { mappedObject.wholeDriverObject?.driver_profile }
var o: Any? = null val vehicleProfile by lazy { mappedObject.wholeDriverObject?.vehicle_profile }
when (i) { val o: Any? = when (i) {
0 -> { 0 -> {
f = DriverProfileFragment() f = DriverProfileFragment()
if (wholeDriverObject!!.driver_profile != null && wholeDriverObject.getDriver_profile().driver_profile != null) { driverProfile?.driver_profile
o = wholeDriverObject.getDriver_profile().getDriver_profile()
}
} }
1 -> { 1 -> {
f = DriverLicenseFragment() f = DriverLicenseFragment()
if (wholeDriverObject!!.driver_profile != null && wholeDriverObject.getDriver_profile().driver_license != null) { driverProfile?.driver_license
o = wholeDriverObject.getDriver_profile().driver_license
}
} }
2 -> { 2 -> {
f = PrivateHireLicenseFragment() f = PrivateHireLicenseFragment()
if (wholeDriverObject!!.driver_profile != null && wholeDriverObject.getDriver_profile().private_hire != null) { driverProfile?.private_hire
o = wholeDriverObject.getDriver_profile().private_hire
}
} }
3 -> { 3 -> {
f = VehicleSetupFragment() f = VehicleProfileFragment()
if (wholeDriverObject!!.vehicle_profile != null && wholeDriverObject.getVehicle_profile().vehicle_details != null) { vehicleProfile?.vehicle_details
o = wholeDriverObject.getVehicle_profile().getVehicle_details()
}
} }
4 -> { 4 -> {
f = InsuranceFragment() f = InsuranceFragment()
if (wholeDriverObject!!.vehicle_profile != null && wholeDriverObject.getVehicle_profile().insurance_details != null) { vehicleProfile?.insurance_details
o = wholeDriverObject.getVehicle_profile().getInsurance_details()
}
} }
5 -> { 5 -> {
f = MotFragment() f = MotFragment()
if (wholeDriverObject!!.vehicle_profile != null && wholeDriverObject.getVehicle_profile().mot_details != null) { vehicleProfile?.insurance_details
o = wholeDriverObject.getVehicle_profile().getMot_details()
}
} }
6 -> { 6 -> {
f = logbookFragment() f = LogbookFragment()
if (wholeDriverObject!!.vehicle_profile != null && wholeDriverObject.getVehicle_profile().log_book != null) { vehicleProfile?.log_book
o = wholeDriverObject.getVehicle_profile().getLog_book()
}
} }
7 -> { 7 -> {
f = PrivateHireVehicleFragment() f = PrivateHireVehicleFragment()
if (wholeDriverObject!!.vehicle_profile != null && wholeDriverObject.getVehicle_profile().private_hire_vehicle != null) { vehicleProfile?.privateHireVehicleObject
o = wholeDriverObject.getVehicle_profile().getPrivateHireVehicleObject()
}
} }
else -> null
} }
if (o == null) { if (o == null) {
ExecuteFragment.executeFragment(f, mappedObject.getUserId()) // executeFragment(f, mappedObject.userId)
} else { } else {
MainActivity.archiveClass!!.openDialogArchive( MainActivity.archiveClass.openDialogArchive(
context, o, mappedObject.getUserId(), f context, o, mappedObject.userId, f
) )
} }
} }
private fun getApprovalStatusCode(i: Int): Int { private fun getApprovalStatusCode(i: Int): Int {
var statusCode: Int = FirebaseClass.NO_DATE_PRESENT val statusCode = mappedObject.wholeDriverObject?.approvalsObject?.let{
if (mappedObject.getWholeDriverObject().approvalsObject != null) { when (i) {
val approvalsObject: ApprovalsObject? = 0 -> it.driver_details_approval
mappedObject.getWholeDriverObject().approvalsObject 1 -> it.driver_license_approval
when (i) { 2 -> it.private_hire_approval
0 -> if (approvalsObject!!.driver_details_approval != 0) { 3 -> it.vehicle_details_approval
statusCode = approvalsObject.getDriver_details_approval() 4 -> it.insurance_details_approval
} 5 -> it.mot_details_approval
1 -> if (approvalsObject!!.driver_license_approval != 0) { 6 -> it.log_book_approval
statusCode = approvalsObject.driver_license_approval 7 -> it.ph_car_approval
} else -> FirebaseClass.NO_DATE_PRESENT
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()
}
} }
} }
return statusCode return statusCode ?: FirebaseClass.NO_DATE_PRESENT
} }
companion object { 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.app.AlertDialog
import android.content.Context import android.content.Context
import android.content.DialogInterface
import android.view.View import android.view.View
import androidx.cardview.widget.CardView 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 { class DriverStatusClass : View.OnClickListener {
@@ -27,24 +22,20 @@ class DriverStatusClass : View.OnClickListener {
} }
alertDialog.setSingleChoiceItems( alertDialog.setSingleChoiceItems(
choices, choices,
selection, selection
object : DialogInterface.OnClickListener { ) { dialog, which -> }
override fun onClick(dialog: DialogInterface, which: Int) {}
})
alertDialog.create().show() alertDialog.create().show()
} }
private fun SetStatus(status: Boolean) { private fun SetStatus(status: Boolean) {
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE) // MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE)
.child((userId)!!).child(FirebaseClass.DRIVER_STATUS).setValue(status) // .child((userId)!!).child(FirebaseClass.DRIVER_STATUS).setValue(status)
.addOnCompleteListener(object : OnCompleteListener<Void?> { // .addOnCompleteListener { task ->
override fun onComplete(task: Task<Void?>) { // if (task.isSuccessful) {
if (task.isSuccessful) { // cardView!!.setBackgroundColor(setStatusColour(status))
cardView!!.setBackgroundColor(setStatusColour(status)) // } else {
} else { // }
} // }
}
})
} }
private fun setStatusColour(b: Boolean): Int { private fun setStatusColour(b: Boolean): Int {
@@ -63,9 +54,9 @@ class DriverStatusClass : View.OnClickListener {
// approvalsObject.private_hire_approval, // approvalsObject.private_hire_approval,
// approvalsObject.vehicle_details_approval, // approvalsObject.vehicle_details_approval,
// approvalsObject.insurance_details_approval, // approvalsObject.insurance_details_approval,
// approvalsObject.getMot_details_approval(), // approvalsObject.mot_details_approval,
// approvalsObject.getLog_book_approval(), // approvalsObject.log_book_approval,
// approvalsObject.getPh_car_approval()}; // approvalsObject.ph_car_approval};
// //
// //
// return setImageResource(mode(ints)); // 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() { class UserMainFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
@@ -23,14 +20,11 @@ class UserMainFragment : Fragment() {
// Inflate the layout for this fragment // Inflate the layout for this fragment
val view: View = inflater.inflate(R.layout.fragment_user_main, container, false) val view: View = inflater.inflate(R.layout.fragment_user_main, container, false)
Log.i("UserMain", "onCreateView: height = " + view.height) Log.i("UserMain", "onCreateView: height = " + view.height)
val mappedObject: MappedObject = arguments!!.getParcelable("mapped") val mappedObject: MappedObject = requireArguments().getParcelable<MappedObject>("mapped")
activity.setTitle( activity?.title = mappedObject.wholeDriverObject?.user_details?.profileName
mappedObject.getWholeDriverObject().getUser_details().getProfileName()
)
// ListView listView = view.findViewById(R.id.approvals_list);
val listView: GridView = 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 return view
} }
} }

View File

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