diff --git a/.gitignore b/.gitignore index fd45b12..c241fbd 100644 --- a/.gitignore +++ b/.gitignore @@ -3,8 +3,10 @@ /local.properties /.idea/caches/build_file_checksums.ser /.idea/libraries +/.idea/dictionaries /.idea/modules.xml /.idea/workspace.xml +/.idea/navEditor.xml .DS_Store /build /captures diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 30aa626..3cc336b 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -1,29 +1,138 @@ - - - - - - - - - - + + + + + + + + + +
+ + + + xmlns:android + + ^$ + + + +
+
+ + + + xmlns:.* + + ^$ + + + BY_NAME + +
+
+ + + + .*:id + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:name + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + name + + ^$ + + + +
+
+ + + + style + + ^$ + + + +
+
+ + + + .* + + ^$ + + + BY_NAME + +
+
+ + + + .* + + http://schemas.android.com/apk/res/android + + + ANDROID_ATTRIBUTE_ORDER + +
+
+ + + + .* + + .* + + + BY_NAME + +
+
+
+
+ +
\ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..79ee123 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 7ac24c7..5cd135a 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -1,8 +1,10 @@ + - + diff --git a/app/.gitignore b/app/.gitignore index 796b96d..9bdc723 100644 --- a/app/.gitignore +++ b/app/.gitignore @@ -1 +1,3 @@ /build +/release +google-services.json diff --git a/app/build.gradle b/app/build.gradle index e0d9e1e..b8eb85f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,17 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' + +apply plugin: 'com.google.gms.google-services' + +// kotlin kapt +apply plugin: 'kotlin-kapt' +// Android navigation +apply plugin: 'androidx.navigation.safeargs' + +repositories { + mavenCentral() +} android { compileSdkVersion 28 @@ -7,9 +19,9 @@ android { applicationId "h_mal.appttude.com.driver" minSdkVersion 24 targetSdkVersion 28 - versionCode 5 - versionName "1.5" - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + versionCode 6 + versionName "1.6" + testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' } buildTypes { release { @@ -17,30 +29,64 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = "1.8" + } + } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'com.android.support:appcompat-v7:28.0.0' - implementation 'com.android.support:design:28.0.0' - implementation 'com.android.support:cardview-v7:28.0.0' - implementation 'com.android.support:support-v4:28.0.0' - implementation 'com.android.support:exifinterface:28.0.0' - implementation 'com.google.android.gms:play-services-auth:15.0.1' - implementation 'com.google.firebase:firebase-core:16.0.1' - implementation 'com.google.firebase:firebase-auth:16.0.1' - implementation 'com.google.firebase:firebase-storage:16.0.1' - implementation 'com.google.firebase:firebase-database:16.0.1' - implementation 'com.github.chrisbanes:PhotoView:2.1.0' - implementation 'com.squareup.picasso:picasso:2.71828' - implementation 'com.google.code.gson:gson:2.3.1' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'com.android.support.test:runner:1.0.2' - androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' - androidTestImplementation 'com.android.support.test:rules:1.0.2' -} + implementation "androidx.appcompat:appcompat:1.0.0" + implementation "com.google.android.material:material:1.0.0" + implementation "androidx.cardview:cardview:1.0.0" + implementation "androidx.legacy:legacy-support-v4:1.0.0" + implementation "androidx.exifinterface:exifinterface:1.0.0" + implementation "androidx.constraintlayout:constraintlayout:1.1.3" + implementation "androidx.fragment:fragment-ktx:1.2.5" + implementation "androidx.activity:activity-ktx:1.2.0" + implementation "androidx.recyclerview:recyclerview:1.1.0" + implementation "androidx.navigation:navigation-fragment-ktx:2.3.3" + implementation "androidx.navigation:navigation-ui-ktx:2.3.3" + implementation "androidx.drawerlayout:drawerlayout:1.1.1" + implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.0" + implementation 'androidx.viewpager:viewpager:1.0.0' + testImplementation "junit:junit:4.12" + androidTestImplementation "androidx.test.ext:junit:1.1.1" + androidTestImplementation "androidx.test.espresso:espresso-core:3.1.0" + androidTestImplementation "androidx.test:rules:1.1.1" -apply plugin: 'com.google.gms.google-services' -repositories { - mavenCentral() + implementation "androidx.legacy:legacy-support-v4:1.0.0" + // Google play services + implementation "com.google.android.gms:play-services-auth:15.0.1" + // Google firebase + def firebaseVer = "16.0.1" + implementation "com.google.firebase:firebase-core:$firebaseVer" + implementation "com.google.firebase:firebase-auth:$firebaseVer" + implementation "com.google.firebase:firebase-storage:$firebaseVer" + implementation "com.google.firebase:firebase-database:$firebaseVer" + // Photoviewer + implementation "com.github.chrisbanes:PhotoView:2.1.0" + /* Picasso photo loader */ + implementation "com.squareup.picasso:picasso:2.71828" + /* Gson */ + implementation "com.google.code.gson:gson:2.3.1" + /* coroutines support for firebase operations */ + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.1.1" + + // Circle Image View + implementation "com.mikhaellopez:circularimageview:4.2.0" + + //Kodein Dependency Injection + def kodein_version = "6.2.1" + implementation "org.kodein.di:kodein-di-generic-jvm:$kodein_version" + implementation "org.kodein.di:kodein-di-framework-android-x:$kodein_version" + + /* Image Carousal */ + implementation 'com.synnapps:carouselview:0.1.5' } diff --git a/app/src/androidTest/java/h_mal/appttude/com/driver/ExampleInstrumentedTest.java b/app/src/androidTest/java/h_mal/appttude/com/driver/ExampleInstrumentedTest.java index 750d904..bb2e9e9 100644 --- a/app/src/androidTest/java/h_mal/appttude/com/driver/ExampleInstrumentedTest.java +++ b/app/src/androidTest/java/h_mal/appttude/com/driver/ExampleInstrumentedTest.java @@ -3,14 +3,11 @@ package h_mal.appttude.com.driver; import android.content.Context; import android.support.test.InstrumentationRegistry; import android.support.test.runner.AndroidJUnit4; -import android.view.View; -import org.junit.Before; -import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; /** * Instrumented test, which will execute on an Android device. diff --git a/app/src/androidTest/java/h_mal/appttude/com/driver/MainActivityTest.java b/app/src/androidTest/java/h_mal/appttude/com/driver/MainActivityTest.java new file mode 100644 index 0000000..588d209 --- /dev/null +++ b/app/src/androidTest/java/h_mal/appttude/com/driver/MainActivityTest.java @@ -0,0 +1,54 @@ +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.driver.HomeFragment; +import h_mal.appttude.com.driver.ui.driver.MainActivity; + +import static org.junit.Assert.assertNotNull; + +public class MainActivityTest { + + @Rule + public ActivityTestRule activityActivityTestRule = new ActivityTestRule(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; + } + +} \ No newline at end of file diff --git a/app/src/androidTest/java/h_mal/appttude/com/driver/base/BaseActivityTest.kt b/app/src/androidTest/java/h_mal/appttude/com/driver/base/BaseActivityTest.kt new file mode 100644 index 0000000..dfd42d1 --- /dev/null +++ b/app/src/androidTest/java/h_mal/appttude/com/driver/base/BaseActivityTest.kt @@ -0,0 +1,8 @@ +package h_mal.appttude.com.driver.base + +import org.junit.Assert.* + +class BaseActivityTest{ + + +} \ No newline at end of file diff --git a/app/src/androidTest/java/h_mal/appttude/com/driver/user/EspressoTestTwo.java b/app/src/androidTest/java/h_mal/appttude/com/driver/user/EspressoTestTwo.java new file mode 100644 index 0000000..0cc828f --- /dev/null +++ b/app/src/androidTest/java/h_mal/appttude/com/driver/user/EspressoTestTwo.java @@ -0,0 +1,199 @@ +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 h_mal.appttude.com.driver.ui.user.LoginActivity; + +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 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 childAtPosition( + final Matcher parentMatcher, final int position) { + + return new TypeSafeMatcher() { + @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)); + } + }; + } +} diff --git a/app/src/androidTest/java/h_mal/appttude/com/driver/user/LoginActivityTest.java b/app/src/androidTest/java/h_mal/appttude/com/driver/user/LoginActivityTest.java new file mode 100644 index 0000000..e88572f --- /dev/null +++ b/app/src/androidTest/java/h_mal/appttude/com/driver/user/LoginActivityTest.java @@ -0,0 +1,147 @@ +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 h_mal.appttude.com.driver.ui.user.LoginActivity; + +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 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.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 childAtPosition( + final Matcher parentMatcher, final int position) { + + return new TypeSafeMatcher() { + @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)); + } + }; + } + + +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3dbab83..1a31419 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,7 +1,6 @@ - @@ -12,35 +11,33 @@ + + - - - - - + android:theme="@style/AppTheme.NoActionBar" /> @@ -48,8 +45,6 @@ android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> - - \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Archive/ArchiveFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/Archive/ArchiveFragment.kt new file mode 100644 index 0000000..1e5400f --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Archive/ArchiveFragment.kt @@ -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) {} + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Archive/ArchiveObjectListAdapter.java b/app/src/main/java/h_mal/appttude/com/driver/Archive/ArchiveObjectListAdapter.java deleted file mode 100644 index 7aca2d6..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Archive/ArchiveObjectListAdapter.java +++ /dev/null @@ -1,293 +0,0 @@ -package h_mal.appttude.com.driver.Archive; - -import android.content.Context; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.ProgressBar; -import android.widget.TextView; - -import com.squareup.picasso.Picasso; - -import java.text.ParseException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - -import h_mal.appttude.com.driver.Global.ImageSwiperClass; -import h_mal.appttude.com.driver.Objects.ArchiveObject; -import h_mal.appttude.com.driver.Objects.DriverProfileObject; -import h_mal.appttude.com.driver.Objects.DriversLicenseObject; -import h_mal.appttude.com.driver.Objects.InsuranceObject; -import h_mal.appttude.com.driver.Objects.LogbookObject; -import h_mal.appttude.com.driver.Objects.MotObject; -import h_mal.appttude.com.driver.Objects.PrivateHireObject; -import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject; -import h_mal.appttude.com.driver.Objects.VehicleProfileObject; -import h_mal.appttude.com.driver.Objects.WholeObject.VehicleProfile; -import h_mal.appttude.com.driver.R; - -import static h_mal.appttude.com.driver.Global.FirebaseClass.*; -import static h_mal.appttude.com.driver.MainActivity.loadImage; -import static h_mal.appttude.com.driver.MainActivity.printObjectAsJson; -import static h_mal.appttude.com.driver.MainActivity.setAsDateTime; - -public class ArchiveObjectListAdapter extends BaseAdapter { - - private static String TAG = "ArchiveObjectListAdapte"; - - ArchiveObject archiveObject; - Context context; - String archiveString; - - int size; - String[] mKeys; - - private TextView dateArchivedText; - - public ArchiveObjectListAdapter(ArchiveObject archiveObject, Context context, String archiveString) { - this.archiveObject = archiveObject; - this.context = context; - this.archiveString = archiveString; - - switch (archiveString){ - case PRIVATE_HIRE_FIREBASE: - size = archiveObject.getPrivate_hire().size(); - mKeys = archiveObject.getPrivate_hire().keySet().toArray(new String[archiveObject.getPrivate_hire().size()]); - break; - case DRIVERS_LICENSE_FIREBASE: - size = archiveObject.getDriver_license().size(); - mKeys = archiveObject.getDriver_license().keySet().toArray(new String[archiveObject.getDriver_license().size()]); - break; - case VEHICLE_DETAILS_FIREBASE: - size = archiveObject.getVehicle_details().size(); - mKeys = archiveObject.getVehicle_details().keySet().toArray(new String[archiveObject.getVehicle_details().size()]); - break; - case MOT_FIREBASE: - size = archiveObject.getMot_details().size(); - mKeys = archiveObject.getMot_details().keySet().toArray(new String[archiveObject.getMot_details().size()]); - break; - case INSURANCE_FIREBASE: - size = archiveObject.getInsurance_details().size(); - mKeys = archiveObject.getInsurance_details().keySet().toArray(new String[archiveObject.getInsurance_details().size()]); - break; - case LOG_BOOK_FIREBASE: - size = archiveObject.getLog_book().size(); - mKeys = archiveObject.getLog_book().keySet().toArray(new String[archiveObject.getLog_book().size()]); - break; - case PRIVATE_HIRE_VEHICLE_LICENSE: - size = archiveObject.getPh_car().size(); - mKeys = archiveObject.getPh_car().keySet().toArray(new String[archiveObject.getPh_car().size()]); - break; - } - - - } - - @Override - public int getCount() { - return size; - } - - @Override - public Object getItem(int position) { - switch (archiveString){ - case PRIVATE_HIRE_FIREBASE: - return archiveObject.getPrivate_hire().get(mKeys[position]); - case DRIVERS_LICENSE_FIREBASE: - return archiveObject.getDriver_license().get(mKeys[position]); - case VEHICLE_DETAILS_FIREBASE: - return archiveObject.getVehicle_details().get(mKeys[position]); - case MOT_FIREBASE: - return archiveObject.getMot_details().get(mKeys[position]); - case INSURANCE_FIREBASE: - return archiveObject.getInsurance_details().get(mKeys[position]); - case LOG_BOOK_FIREBASE: - return archiveObject.getLog_book().get(mKeys[position]); - case PRIVATE_HIRE_VEHICLE_LICENSE: - return archiveObject.getPh_car().get(mKeys[position]); - default: - return mKeys[position]; - } - } - - @Override - public long getItemId(int position) { - return position; - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - View listItemView = convertView; - if (listItemView == null) { - if (archiveString.equals(PRIVATE_HIRE_FIREBASE) || - archiveString.equals(DRIVERS_LICENSE_FIREBASE) || - archiveString.equals(MOT_FIREBASE) || - archiveString.equals(LOG_BOOK_FIREBASE) || - archiveString.equals(PRIVATE_HIRE_VEHICLE_LICENSE)){ - - listItemView = LayoutInflater.from(context).inflate( - R.layout.archive_license_item, parent, false); - - ImageView imageView = listItemView.findViewById(R.id.image_archive); - ProgressBar progressBar = listItemView.findViewById(R.id.prog_archive); - dateArchivedText = listItemView.findViewById(R.id.date_archived); - - LinearLayout expiryHolder = listItemView.findViewById(R.id.expiry_view); - LinearLayout fieldTwo = listItemView.findViewById(R.id.field_two_view); - - TextView expiryText = listItemView.findViewById(R.id.exp_text); - TextView fiewTwoLable = listItemView.findViewById(R.id.field_two); - TextView fieldTwoText = listItemView.findViewById(R.id.field_two_text); - - switch (archiveString){ - case PRIVATE_HIRE_FIREBASE: - expiryHolder.setVisibility(View.VISIBLE); - fieldTwo.setVisibility(View.VISIBLE); - - PrivateHireObject privateHireObject = (PrivateHireObject) getItem(position); - - Picasso.get().load(privateHireObject.getPhImageString()) - .into(loadImage(progressBar,imageView)); - dateString(position); - - expiryText.setText(privateHireObject.getPhExpiry()); - fiewTwoLable.setText("Private Hire License No.:"); - fieldTwoText.setText(privateHireObject.getPhNumber()); - break; - case DRIVERS_LICENSE_FIREBASE: - expiryHolder.setVisibility(View.VISIBLE); - fieldTwo.setVisibility(View.VISIBLE); - - DriversLicenseObject driversLicenseObject = (DriversLicenseObject) getItem(position); - - Picasso.get().load(driversLicenseObject.getLicenseImageString()) - .into(loadImage(progressBar,imageView)); - dateString(position); - - expiryText.setText(driversLicenseObject.getLicenseExpiry()); - fiewTwoLable.setText("License No.:"); - fieldTwoText.setText(driversLicenseObject.getLicenseNumber()); - break; - case MOT_FIREBASE: - Log.i(TAG, "getView: MOT OBJECT"); - expiryHolder.setVisibility(View.VISIBLE); - fieldTwo.setVisibility(View.GONE); - - MotObject motObject = (MotObject) getItem(position); - - Picasso.get().load(motObject.getMotImageString()) - .into(loadImage(progressBar,imageView)); - dateString(position); - expiryText.setText(motObject.getMotExpiry()); - break; - case LOG_BOOK_FIREBASE: - expiryHolder.setVisibility(View.GONE); - fieldTwo.setVisibility(View.VISIBLE); - - LogbookObject logbookObject = (LogbookObject) getItem(position); - - Picasso.get().load(logbookObject.getPhotoString()) - .into(loadImage(progressBar,imageView)); - dateString(position); - - fiewTwoLable.setText("V5C No.:"); - fieldTwoText.setText(logbookObject.getV5cnumber()); - break; - case PRIVATE_HIRE_VEHICLE_LICENSE: - expiryHolder.setVisibility(View.VISIBLE); - fieldTwo.setVisibility(View.VISIBLE); - - PrivateHireVehicleObject privateHireVehicleObject = (PrivateHireVehicleObject) getItem(position); - - Picasso.get().load(privateHireVehicleObject.getPhCarImageString()) - .into(loadImage(progressBar,imageView)); - dateString(position); - - expiryText.setText(privateHireVehicleObject.getPhCarExpiry()); - fiewTwoLable.setText("Private Hire Vehicle License No.:"); - fieldTwoText.setText(privateHireVehicleObject.getPhCarNumber()); - break; - } - - - }else if (archiveString.equals(INSURANCE_FIREBASE)){ - listItemView = LayoutInflater.from(context).inflate( - R.layout.archive_insurance_item, parent, false); - - View holder = listItemView.findViewById(R.id.image_pager); - ImageSwiperClass swiperClass = new ImageSwiperClass(context,holder); -// swiperClass.hideDelete(); - listItemView.findViewById(R.id.delete).setVisibility(View.GONE); -// holder.findViewById(R.id.delete).setVisibility(View.INVISIBLE); - - dateArchivedText = listItemView.findViewById(R.id.date_archived); - dateString(position); - - TextView expiryText = listItemView.findViewById(R.id.exp_text); - TextView fieldTwoText = listItemView.findViewById(R.id.archive_insurer); - - InsuranceObject insuranceObject = (InsuranceObject) getItem(position); - swiperClass.reinstantiateList(insuranceObject.getPhotoStrings()); - - expiryText.setText(insuranceObject.getExpiryDate()); - fieldTwoText.setText(insuranceObject.getInsurerName()); - - }else if(archiveString.equals(VEHICLE_DETAILS_FIREBASE)){ - listItemView = LayoutInflater.from(context).inflate( - R.layout.archive_vehicle_item, parent, false); - - dateArchivedText = listItemView.findViewById(R.id.date_archived); - dateString(position); - - TextView numberPlate = listItemView.findViewById(R.id.number_plate); - TextView keeperName = listItemView.findViewById(R.id.keeper_name); - TextView keeperAddress = listItemView.findViewById(R.id.keeper_address); - TextView carText = listItemView.findViewById(R.id.car_text_arch); - TextView carColour = listItemView.findViewById(R.id.car_colour); - TextView carSeized = listItemView.findViewById(R.id.seized); - TextView startDate = listItemView.findViewById(R.id.first_date); - - VehicleProfileObject vehicleProfileObject = (VehicleProfileObject) getItem(position); - - numberPlate.setText(vehicleProfileObject.getReg()); - keeperName.setText(vehicleProfileObject.getKeeperName()); - keeperAddress.setText(vehicleProfileObject.getKeeperAddress() + "\n" +vehicleProfileObject.getKeeperPostCode()); - carText.setText(vehicleProfileObject.getMake() + " " + vehicleProfileObject.getModel()); - carColour.setText(vehicleProfileObject.getColour()); - - String s; - if (vehicleProfileObject.isSeized()){ - s = "Yes"; - }else { - s = "No"; - } - carSeized.setText(s); - - startDate.setText(vehicleProfileObject.getStartDate()); - } - - } - - return listItemView; - } - - private void dateString(int position){ - boolean success = true; - try { - dateArchivedText.setText(setAsDateTime(mKeys[position])); - } catch (ParseException e) { - e.printStackTrace(); - success = false; - }finally { - if (!success){ - dateArchivedText.setText(mKeys[position].substring(0,8)); - } - } - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Archive/ArchiveObjectListAdapter.kt b/app/src/main/java/h_mal/appttude/com/driver/Archive/ArchiveObjectListAdapter.kt new file mode 100644 index 0000000..1aee612 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Archive/ArchiveObjectListAdapter.kt @@ -0,0 +1,227 @@ +package h_mal.appttude.com.driver.Archive + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.BaseAdapter +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView +import com.squareup.picasso.Picasso +import h_mal.appttude.com.driver.Global.FirebaseClass +import h_mal.appttude.com.driver.Global.ImageSwiperClass +import h_mal.appttude.com.driver.ui.driver.MainActivity +import h_mal.appttude.com.driver.Objects.ArchiveObject +import h_mal.appttude.com.driver.Objects.InsuranceObject +import h_mal.appttude.com.driver.Objects.LogbookObject +import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject +import h_mal.appttude.com.driver.R +import h_mal.appttude.com.driver.model.DriversLicenseObject +import h_mal.appttude.com.driver.model.MotObject +import h_mal.appttude.com.driver.model.PrivateHireObject +import h_mal.appttude.com.driver.model.VehicleProfileObject +import h_mal.appttude.com.driver.utils.DateUtils.convertDateStringDatePattern +import java.text.ParseException + +class ArchiveObjectListAdapter( + var archiveObject: ArchiveObject?, + var context: Context?, + var archiveString: String? +) : BaseAdapter() { + var size: Int = 0 + lateinit var mKeys: Array + private var dateArchivedText: TextView? = null + override fun getCount(): Int { + return size + } + + override fun getItem(position: Int): Any? { + when (archiveString) { + FirebaseClass.PRIVATE_HIRE_FIREBASE -> return archiveObject?.private_hire + ?.get(mKeys[position]) + FirebaseClass.DRIVERS_LICENSE_FIREBASE -> return archiveObject?.driver_license + ?.get(mKeys[position]) + FirebaseClass.VEHICLE_DETAILS_FIREBASE -> return archiveObject?.vehicle_details + ?.get(mKeys[position]) + FirebaseClass.MOT_FIREBASE -> return archiveObject?.mot_details?.get(mKeys[position]) + FirebaseClass.INSURANCE_FIREBASE -> return archiveObject?.insurance_details?.get( + mKeys[position] + ) + FirebaseClass.LOG_BOOK_FIREBASE -> return archiveObject?.log_book + ?.get(mKeys.get(position)) + FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE -> return archiveObject?.ph_car?.get(mKeys[position]) + else -> return mKeys[position] + } + } + + override fun getItemId(position: Int): Long { + return position.toLong() + } + + override fun getView(position: Int, convertView: View, parent: ViewGroup): View { + var listItemView: View = convertView + if (listItemView == null) { + if (((archiveString == FirebaseClass.PRIVATE_HIRE_FIREBASE) || (archiveString == FirebaseClass.DRIVERS_LICENSE_FIREBASE) || (archiveString == FirebaseClass.MOT_FIREBASE) || (archiveString == FirebaseClass.LOG_BOOK_FIREBASE) || (archiveString == FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE))) { + listItemView = LayoutInflater.from(context).inflate( + R.layout.archive_license_item, parent, false + ) + val imageView: ImageView = listItemView.findViewById(R.id.image_archive) + dateArchivedText = listItemView.findViewById(R.id.date_archived) + val expiryHolder: LinearLayout = listItemView.findViewById(R.id.expiry_view) + val fieldTwo: LinearLayout = listItemView.findViewById(R.id.field_two_view) + val expiryText: TextView = listItemView.findViewById(R.id.exp_text) + val fiewTwoLable: TextView = listItemView.findViewById(R.id.field_two) + val fieldTwoText: TextView = listItemView.findViewById(R.id.field_two_text) + when (archiveString) { +// FirebaseClass.PRIVATE_HIRE_FIREBASE -> { +// expiryHolder.visibility = View.VISIBLE +// fieldTwo.visibility = View.VISIBLE +// val privateHireObject: PrivateHireObject = +// getItem(position) as PrivateHireObject +// Picasso.get().load(privateHireObject.phImageString) +// .placeholder(R.drawable.choice_img) +// .into(imageView) +// dateString(position) +// expiryText.text = privateHireObject.phExpiry +// fiewTwoLable.text = "Private Hire License No.:" +// fieldTwoText.text = privateHireObject.phNumber +// } +// FirebaseClass.DRIVERS_LICENSE_FIREBASE -> { +// expiryHolder.visibility = View.VISIBLE +// fieldTwo.visibility = View.VISIBLE +// val driversLicenseObject: DriversLicenseObject = +// getItem(position) as DriversLicenseObject +// Picasso.get().load(driversLicenseObject.licenseImageString) +// .placeholder(R.drawable.choice_img) +// .into(imageView) +// dateString(position) +// expiryText.text = driversLicenseObject.licenseExpiry +// fiewTwoLable.text = "License No.:" +// fieldTwoText.text = driversLicenseObject.licenseNumber +// } +// FirebaseClass.MOT_FIREBASE -> { +// expiryHolder.visibility = View.VISIBLE +// fieldTwo.visibility = View.GONE +// val motObject: MotObject = getItem(position) as MotObject +// Picasso.get().load(motObject.motImageString) +// .placeholder(R.drawable.choice_img) +// .into(imageView) +// dateString(position) +// expiryText.text = motObject.motExpiry +// } +// FirebaseClass.LOG_BOOK_FIREBASE -> { +// expiryHolder.visibility = View.GONE +// fieldTwo.visibility = View.VISIBLE +// val logbookObject: LogbookObject = getItem(position) as LogbookObject +// Picasso.get().load(logbookObject.photoString) +// .into(MainActivity.loadImage(imageView)) +// dateString(position) +// fiewTwoLable.text = "V5C No.:" +// fieldTwoText.text = logbookObject.v5cnumber +// } +// FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE -> { +// expiryHolder.visibility = View.VISIBLE +// fieldTwo.visibility = View.VISIBLE +// val privateHireVehicleObject: PrivateHireVehicleObject = +// getItem(position) as PrivateHireVehicleObject +// Picasso.get().load(privateHireVehicleObject.phCarImageString) +// .into(MainActivity.loadImage(imageView)) +// dateString(position) +// expiryText.text = privateHireVehicleObject.phCarExpiry +// fiewTwoLable.text = "Private Hire Vehicle License No.:" +// fieldTwoText.text = privateHireVehicleObject.phCarNumber +// } + } + } else if ((archiveString == FirebaseClass.INSURANCE_FIREBASE)) { + listItemView = LayoutInflater.from(context).inflate( + R.layout.archive_insurance_item, parent, false + ) + val holder: View = listItemView.findViewById(R.id.image_pager) + val swiperClass: ImageSwiperClass = ImageSwiperClass(context, holder) + // swiperClass.hideDelete(); + listItemView.findViewById(R.id.delete).visibility = View.GONE + // holder.findViewById(R.id.delete).setVisibility(View.INVISIBLE); + dateArchivedText = listItemView.findViewById(R.id.date_archived) + dateString(position) + val expiryText: TextView = listItemView.findViewById(R.id.exp_text) + val fieldTwoText: TextView = listItemView.findViewById(R.id.archive_insurer) + val insuranceObject: InsuranceObject = getItem(position) as InsuranceObject +// swiperClass.reinstantiateList(insuranceObject.photoStrings) + expiryText.text = insuranceObject.expiryDate + fieldTwoText.text = insuranceObject.insurerName + } else if ((archiveString == FirebaseClass.VEHICLE_DETAILS_FIREBASE)) { + listItemView = LayoutInflater.from(context).inflate( + R.layout.archive_vehicle_item, parent, false + ) + dateArchivedText = listItemView.findViewById(R.id.date_archived) + dateString(position) + val numberPlate: TextView = listItemView.findViewById(R.id.number_plate) + val keeperName: TextView = listItemView.findViewById(R.id.keeper_name) + val keeperAddress: TextView = listItemView.findViewById(R.id.keeper_address) + val carText: TextView = listItemView.findViewById(R.id.car_text_arch) + val carColour: TextView = listItemView.findViewById(R.id.car_colour) + val carSeized: TextView = listItemView.findViewById(R.id.seized_checkbox) + val startDate: TextView = listItemView.findViewById(R.id.first_date) + val vehicleProfileObject: VehicleProfileObject = + getItem(position) as VehicleProfileObject + numberPlate.text = vehicleProfileObject.reg + keeperName.text = vehicleProfileObject.keeperName + keeperAddress.text = vehicleProfileObject.keeperAddress + "\n" + vehicleProfileObject.keeperPostCode + carText.text = vehicleProfileObject.make + " " + vehicleProfileObject.model + carColour.text = vehicleProfileObject.colour + val s: String + if (vehicleProfileObject.isSeized) { + s = "Yes" + } else { + s = "No" + } + carSeized.text = s + startDate.text = vehicleProfileObject.startDate + } + } + return listItemView + } + + private fun dateString(position: Int) { + var success: Boolean = true + try { + dateArchivedText!!.text = mKeys[position].convertDateStringDatePattern("yyyyMMdd_HHmmss", "dd/MM/yyyy") + } catch (e: ParseException) { + e.printStackTrace() + success = false + } finally { + if (!success) { + dateArchivedText!!.text = mKeys.get(position).substring(0, 8) + } + } + } + + companion object { + private val TAG: String = "ArchiveObjectListAdapte" + } + + init { + archiveObject?.apply { + val map = when (archiveString) { + FirebaseClass.PRIVATE_HIRE_FIREBASE -> private_hire + FirebaseClass.DRIVERS_LICENSE_FIREBASE -> driver_license + FirebaseClass.VEHICLE_DETAILS_FIREBASE -> vehicle_details + FirebaseClass.MOT_FIREBASE -> mot_details + FirebaseClass.INSURANCE_FIREBASE -> insurance_details + FirebaseClass.LOG_BOOK_FIREBASE -> log_book + FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE -> ph_car + else -> null + } + setUp(map) + } + + } + + private fun setUp(map: HashMap?){ + size = map?.size ?: 0 + map?.keys?.toTypedArray()?.let{ + mKeys = it + } + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Driver/DriverLicenseFragment.java b/app/src/main/java/h_mal/appttude/com/driver/Driver/DriverLicenseFragment.java deleted file mode 100644 index f6afe18..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Driver/DriverLicenseFragment.java +++ /dev/null @@ -1,290 +0,0 @@ -package h_mal.appttude.com.driver.Driver; - -import android.app.DatePickerDialog; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.net.Uri; -import android.os.Build; -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -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.ImageView; -import android.widget.ProgressBar; -import android.widget.TextView; -import android.widget.Toast; - -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 java.util.Calendar; - -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.Objects.DriversLicenseObject; -import h_mal.appttude.com.driver.R; - -import static h_mal.appttude.com.driver.Global.ExecuteFragment.UPLOAD_NEW; -import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_CONSTANT; -import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_PENDING; -import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVERS_LICENSE_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVER_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.PRIVATE_HIRE_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; -import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.CAMERA_REQUEST; -import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE; -import static h_mal.appttude.com.driver.MainActivity.approvalsClass; -import static h_mal.appttude.com.driver.MainActivity.archiveClass; -import static h_mal.appttude.com.driver.MainActivity.auth; -import static h_mal.appttude.com.driver.MainActivity.fragmentManager; -import static h_mal.appttude.com.driver.MainActivity.getDateStamp; -import static h_mal.appttude.com.driver.MainActivity.loadImage; -import static h_mal.appttude.com.driver.MainActivity.mDatabase; -import static h_mal.appttude.com.driver.MainActivity.viewController; - -public class DriverLicenseFragment extends Fragment { - - private String TAG = this.getClass().getSimpleName(); - - private ImageView imageView; - private ProgressBar progressBar; - - EditText licenseNo; - EditText expiry; - - public Uri filePath; - public Uri picUri; - - String li_numberString; - String li_exprString; - - DatabaseReference reference; - - DriversLicenseObject driversLicenseObject; - Boolean uploadNew; - String UID; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - uploadNew = false; - - if (getArguments() != null){ - Log.i(TAG, "onCreate: args = args exist"); - if (getArguments().containsKey("user_id")){ - UID = getArguments().getString("user_id"); - }else { - UID = auth.getCurrentUser().getUid(); - } - if (getArguments().containsKey(UPLOAD_NEW)){ - uploadNew = true; - } - }else{ - UID = auth.getCurrentUser().getUid(); - } - - reference = mDatabase.child(USER_FIREBASE).child(UID) - .child(DRIVER_FIREBASE).child(DRIVERS_LICENSE_FIREBASE); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - View view = inflater.inflate(R.layout.fragment_driver_license, container, false); - - imageView = view.findViewById(R.id.driversli_img); - progressBar = view.findViewById(R.id.pb_dl); - - viewController.progress(View.VISIBLE); - reference.addListenerForSingleValueEvent(valueEventListener); - - TextView uploadLic = view.findViewById(R.id.upload_lic); - - licenseNo = view.findViewById(R.id.lic_no); - expiry = view.findViewById(R.id.lic_expiry); - - expiry.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - - DateDialog dateDialog = new DateDialog(getContext()); - dateDialog.init(expiry); - - } - }); - - Button submit = view.findViewById(R.id.submit); - submit.setOnClickListener(submitOnClickListener); - - uploadLic.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ImageSelectorDialog imageSelectorDialog = new ImageSelectorDialog(getContext()); - imageSelectorDialog.setImageName("drivers_license"); - imageSelectorDialog.show(); - } - }); - - return view; - } - - View.OnClickListener submitOnClickListener = new View.OnClickListener() { - @Override - public void onClick(View v) { - li_numberString = licenseNo.getText().toString().trim(); - li_exprString = expiry.getText().toString().trim(); - - if (!TextUtils.isEmpty(li_numberString) && - !TextUtils.isEmpty(li_exprString)){ - viewController.progress(View.VISIBLE); - - if (filePath == null && picUri == null){ - Toast.makeText(getContext(), "No Driver image", Toast.LENGTH_SHORT).show(); - viewController.progress(View.GONE); - }else { - if (filePath != null){ - Log.i(TAG, "onClick: new Image uploaded"); - new FirebaseClass(getContext(),filePath,new FirebaseClass.Response(){ - @Override - public void processFinish(Uri output) { - Log.i(TAG, "processFinish: "); - if (output != null){ - picUri = output; - publishObject(); - - }else { - Toast.makeText(getContext(), getString(R.string.failed_upload), Toast.LENGTH_SHORT).show(); - viewController.progress(View.GONE); - } - - } - }).uploadImage(DRIVERS_LICENSE_FIREBASE,DRIVERS_LICENSE_FIREBASE + getDateStamp()); - }else{ - Log.i(TAG, "onClick: pushing with same image"); - publishObject(); - - } - } - - - }else { - if (TextUtils.isEmpty(li_numberString)){ - licenseNo.setError("Field required"); - } - if (TextUtils.isEmpty(li_exprString)){ - expiry.setError("Field required"); - } - if (picUri == null && filePath == null){ - Toast.makeText(getContext(), getString(R.string.image_required), Toast.LENGTH_SHORT).show(); - } - } - - } - - }; - - ValueEventListener valueEventListener = new ValueEventListener() { - @Override - public void onDataChange(@NonNull DataSnapshot dataSnapshot) { - viewController.progress(View.GONE); - try{ - driversLicenseObject = dataSnapshot.getValue(DriversLicenseObject.class); - }catch (Exception e){ - Log.e(TAG, "onDataChange: ", e); - }finally { - if (driversLicenseObject != null){ - picUri = Uri.parse(driversLicenseObject.getLicenseImageString()); - li_numberString = driversLicenseObject.getLicenseNumber(); - li_exprString = driversLicenseObject.getLicenseExpiry(); - - if(!uploadNew){ - licenseNo.setText(li_numberString); - expiry.setText(li_exprString); - Picasso.get() - .load(picUri) - .into(loadImage(progressBar,imageView)); - } - }else{ - Toast.makeText(getContext(), getString(R.string.failed_retrieve), Toast.LENGTH_SHORT).show(); - } - } - } - - @Override - public void onCancelled(@NonNull DatabaseError databaseError) { - viewController.progress(View.GONE); - Toast.makeText(getContext(), databaseError.getMessage(), Toast.LENGTH_SHORT).show(); - Log.e(TAG, "onCancelled: " + databaseError.getMessage()); - } - }; - - private void publishObject(){ - - if (uploadNew){ - archiveClass.archiveRecord(UID,DRIVERS_LICENSE_FIREBASE,driversLicenseObject); - } - - DriversLicenseObject driversLicenseObjectNew = new DriversLicenseObject(picUri.toString(),li_numberString,li_exprString); - - reference.setValue(driversLicenseObjectNew).addOnCompleteListener(new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - if (task.isSuccessful()){ - Log.i(TAG, "onComplete: publish = " + task.isSuccessful()); - approvalsClass.setStatusCode(UID,DRIVERS_LICENSE_FIREBASE+APPROVAL_CONSTANT,APPROVAL_PENDING); - fragmentManager.popBackStack(); - }else { - Toast.makeText(getContext(),R.string.unsuccessful, Toast.LENGTH_SHORT).show(); - } - - viewController.progress(View.GONE); - } - }); - - } - - @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - if (requestCode == MY_CAMERA_PERMISSION_CODE) { - if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { - Toast.makeText(getContext(), "camera permission granted", Toast.LENGTH_LONG).show(); - Intent cameraIntent = new - Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); - startActivityForResult(cameraIntent, CAMERA_REQUEST); - } else { - Toast.makeText(getContext(), "camera permission denied", Toast.LENGTH_LONG).show(); - } - - } - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - - new ImageSelectorResults().Results(getActivity(),requestCode, resultCode, data, - filePath,imageView,new ImageSelectorResults.FilepathResponse() { - @Override - public void processFinish(Uri output) { - filePath = output; - } - }); - - } - -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Driver/DriverOverallFragment.java b/app/src/main/java/h_mal/appttude/com/driver/Driver/DriverOverallFragment.java deleted file mode 100644 index 44e1a6b..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Driver/DriverOverallFragment.java +++ /dev/null @@ -1,147 +0,0 @@ -package h_mal.appttude.com.driver.Driver; - -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -import android.support.v7.widget.CardView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.TextView; - -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.Objects.ApprovalsObject; -import h_mal.appttude.com.driver.Objects.WholeDriverObject; -import h_mal.appttude.com.driver.R; - -import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment; -import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; -import static h_mal.appttude.com.driver.MainActivity.approvalsClass; -import static h_mal.appttude.com.driver.MainActivity.archiveClass; -import static h_mal.appttude.com.driver.MainActivity.auth; -import static h_mal.appttude.com.driver.MainActivity.mDatabase; -import static h_mal.appttude.com.driver.MainActivity.viewController; - - -public class DriverOverallFragment extends Fragment { - - CardView driverProfile; - CardView privateHire; - CardView driversLicense; - - ImageView driverApr; - ImageView privateApr ; - ImageView driversLiApr; - TextView privExp; - TextView drivLiExp; - - DatabaseReference reference; - - WholeDriverObject driverProfileObject; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - reference = mDatabase.child(USER_FIREBASE).child(auth.getCurrentUser().getUid()); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - View view = inflater.inflate(R.layout.fragment_driver_overall, container, false); - - driverProfile = view.findViewById(R.id.driver_prof); - privateHire = view.findViewById(R.id.private_hire); - driversLicense = view.findViewById(R.id.drivers_license); - - driverApr = view.findViewById(R.id.approval_dp); - privateApr = view.findViewById(R.id.approval_ph); - driversLiApr = view.findViewById(R.id.approval_dl); - - privExp = view.findViewById(R.id.ph_button_exp); - drivLiExp = view.findViewById(R.id.dl_button_exp); - - privExp.setVisibility(View.GONE); - drivLiExp.setVisibility(View.GONE); - - viewController.progress(View.VISIBLE); - reference.addListenerForSingleValueEvent(valueEventListener); - - return view; - } - - ValueEventListener valueEventListener = new ValueEventListener() { - @Override - public void onDataChange(@NonNull DataSnapshot dataSnapshot) { - driverProfileObject = dataSnapshot.getValue(WholeDriverObject.class); - - if (driverProfileObject.approvalsObject != null){ - ApprovalsObject approvalsObject = driverProfileObject.getApprovalsObject(); - - driverApr.setImageResource(approvalsClass.setImageResource(approvalsObject.getDriver_details_approval())); - privateApr.setImageResource(approvalsClass.setImageResource(approvalsObject.getPrivate_hire_approval())); - driversLiApr.setImageResource(approvalsClass.setImageResource(approvalsObject.getDriver_license_approval())); - } - - if (driverProfileObject.driver_profile != null){ - if (driverProfileObject.getDriver_profile().private_hire != null){ - privExp.setVisibility(View.VISIBLE); - privExp.setText("Expiry: " + driverProfileObject.getDriver_profile().getPrivate_hire().getPhExpiry()); - } - if (driverProfileObject.getDriver_profile().driver_license != null){ - drivLiExp.setVisibility(View.VISIBLE); - drivLiExp.setText("Expiry: " + driverProfileObject.getDriver_profile().getDriver_license().getLicenseExpiry()); - } - } - - driverProfile.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - executeFragment(new DriverProfileFragment()); - } - }); - - privateHire.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (driverProfileObject.driver_profile == null){ - executeFragment(new PrivateHireLicenseFragment()); - }else { - archiveClass.openDialogArchive(getContext(),driverProfileObject.getDriver_profile().getPrivate_hire() - ,new PrivateHireLicenseFragment()); - } - - } - }); - - driversLicense.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (driverProfileObject.driver_profile == null){ - executeFragment(new DriverLicenseFragment()); - }else { - archiveClass.openDialogArchive(getContext(),driverProfileObject.getDriver_profile().getDriver_license() - ,new DriverLicenseFragment()); - } - } - }); - - viewController.progress(View.GONE); - } - - @Override - public void onCancelled(@NonNull DatabaseError databaseError) { - viewController.progress(View.GONE); - } - }; - - - -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Driver/DriverProfileFragment.java b/app/src/main/java/h_mal/appttude/com/driver/Driver/DriverProfileFragment.java deleted file mode 100644 index 1ec17ea..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Driver/DriverProfileFragment.java +++ /dev/null @@ -1,310 +0,0 @@ -package h_mal.appttude.com.driver.Driver; - -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -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.ImageView; -import android.widget.ProgressBar; -import android.widget.TextView; -import android.widget.Toast; - -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.ViewController; -import h_mal.appttude.com.driver.Objects.DriverProfileObject; -import h_mal.appttude.com.driver.Objects.DriversLicenseObject; -import h_mal.appttude.com.driver.Objects.PrivateHireObject; -import h_mal.appttude.com.driver.Objects.UserObject; -import h_mal.appttude.com.driver.R; - -import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment; -import static h_mal.appttude.com.driver.Global.FirebaseClass.*; -import static h_mal.appttude.com.driver.MainActivity.approvalsClass; -import static h_mal.appttude.com.driver.MainActivity.auth; -import static h_mal.appttude.com.driver.MainActivity.fragmentManager; -import static h_mal.appttude.com.driver.MainActivity.getDateStamp; -import static h_mal.appttude.com.driver.MainActivity.loadImage; -import static h_mal.appttude.com.driver.MainActivity.mDatabase; -import static h_mal.appttude.com.driver.MainActivity.viewController; - - -public class DriverProfileFragment extends Fragment { - - private String TAG = this.getClass().getSimpleName(); - - ImageView driverPic; - ProgressBar pb; - TextView addPic; - EditText forenames; - EditText address; - EditText postcode; - EditText dob; - EditText ni; - EditText dateFirst; - Button submit_driver; - - Uri filePath; - Uri picUri; - - DatabaseReference driverProfileReference; - String UID; - DriverProfileObject driverProfileObject; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - - if (getArguments() != null){ - UID = getArguments().getString("user_id"); - }else{ - UID = auth.getCurrentUser().getUid(); - } - - driverProfileReference = mDatabase.child(USER_FIREBASE).child(UID) - .child(DRIVER_FIREBASE); - - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - View view = inflater.inflate(R.layout.fragment_driver_profile, container, false); - - driverPic = view.findViewById(R.id.driver_pic); - pb = view.findViewById(R.id.pb_dp); - 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); - - viewController.progress(View.VISIBLE); - driverProfileReference.addListenerForSingleValueEvent(valueEventListener); - - addPic.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ImageSelectorDialog imageSelectorDialog = new ImageSelectorDialog(getContext()); - imageSelectorDialog.setImageName("driver_pic"+getDateStamp()); - imageSelectorDialog.show(); - } - }); - - dob.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - DateDialog dateDialog = new DateDialog(getContext()); - dateDialog.init(dob); - } - }); - - dateFirst.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - DateDialog dateDialog = new DateDialog(getContext()); - dateDialog.init(dateFirst); - } - }); - - submit_driver.setOnClickListener(submitOnClickListener); - - - return view; - } - - ValueEventListener valueEventListener = new ValueEventListener(){ - - @Override - public void onDataChange(@NonNull DataSnapshot dataSnapshot) { - viewController.progress(View.GONE); - - try { - driverProfileObject = dataSnapshot.child(DRIVER_DETAILS_FIREBASE).getValue(DriverProfileObject.class); - }catch (Exception e){ - Log.e(TAG, "onDataChange: ", e); - }finally { - if (driverProfileObject != null){ - forenames.setText(driverProfileObject.getForenames()); - address.setText(driverProfileObject.getAddress()); - postcode.setText(driverProfileObject.getPostcode()); - dob.setText(driverProfileObject.getDob()); - dateFirst.setText(driverProfileObject.getDateFirst()); - ni.setText(driverProfileObject.getNi()); - - - Picasso.get().load(driverProfileObject.getDriverPic()) - .into(loadImage(pb,driverPic)); - picUri = Uri.parse(driverProfileObject.getDriverPic()); - } - } - - } - - @Override - public void onCancelled(@NonNull DatabaseError databaseError) { - viewController.progress(View.GONE); - } - }; - - View.OnClickListener submitOnClickListener = new View.OnClickListener() { - @Override - public void onClick(View v) { - - String driverForename = forenames.getText().toString().trim(); - String AddressString = address.getText().toString().trim(); - String postCodeString = postcode.getText().toString().trim(); - String dobString = dob.getText().toString().trim(); - String niString = ni.getText().toString().trim(); - String dateFirstString = dateFirst.getText().toString().trim(); - - 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(getContext(), "No Driver image", Toast.LENGTH_SHORT).show(); - viewController.progress(View.GONE); - }else { - viewController.progress(View.VISIBLE); - if (filePath != null){ - - new FirebaseClass(getContext(),filePath,new FirebaseClass.Response(){ - @Override - public void processFinish(Uri output) { - Log.i(TAG, "processFinish: "); - if (output != null){ - picUri = output; - writeDriverToDb(); - - }else { - viewController.progress(View.GONE); - } - - } - }).uploadImage(DRIVERS_LICENSE_FIREBASE,DRIVERS_LICENSE_FIREBASE + getDateStamp()); - }else{ - Log.i(TAG, "onClick: pushing with same image"); - writeDriverToDb(); - } - } - - }else { - if (TextUtils.isEmpty(driverForename)){ - forenames.setError("Field required"); - } - if (TextUtils.isEmpty(AddressString)){ - address.setError("Field required"); - } - if (TextUtils.isEmpty(postCodeString)){ - postcode.setError("Field required"); - } - if (TextUtils.isEmpty(dobString)){ - dob.setError("Field required"); - } - if (TextUtils.isEmpty(niString)){ - ni.setError("Field required"); - } - if (TextUtils.isEmpty(dateFirstString)){ - dateFirst.setError("Field required"); - } - } - - } - - }; - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - - new ImageSelectorResults().Results(getActivity(),requestCode, resultCode, data, - filePath,driverPic,new ImageSelectorResults.FilepathResponse() { - @Override - public void processFinish(Uri output) { - filePath = output; - } - }); - - - } - - private void writeDriverToDb(){ - - String forenameText = forenames.getText().toString().trim(); - String addressText = address.getText().toString().trim(); - String postcodeText = postcode.getText().toString().trim(); - String dobText = dob.getText().toString().trim(); - String niText = ni.getText().toString().trim(); - String datefirstText = dateFirst.getText().toString().trim(); - - DriverProfileObject driverProfileObject = new DriverProfileObject(picUri.toString(),forenameText, - addressText,postcodeText,dobText,niText,datefirstText); - - if (UID.equals(auth.getCurrentUser().getUid())){ - UserProfileChangeRequest.Builder profileUpdatesBuilder = new UserProfileChangeRequest.Builder(); - profileUpdatesBuilder.setPhotoUri(picUri); - UserProfileChangeRequest profileUpdates = profileUpdatesBuilder.build(); - - auth.getCurrentUser().updateProfile(profileUpdates) - .addOnCompleteListener(new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - if (task.isSuccessful()) { - Log.d(TAG, "User profile updated."); - viewController.reloadDrawer(); - mDatabase.child(USER_FIREBASE).child(auth.getCurrentUser().getUid()).child("user_details") - .setValue(new UserObject(auth.getCurrentUser().getDisplayName(),auth.getCurrentUser().getEmail(),picUri.toString())); - } - } - }) - .addOnFailureListener(new OnFailureListener() { - @Override - public void onFailure(@NonNull Exception e) { - Log.e(TAG, "onFailure: ", e); - } - }); - - } - - driverProfileReference.child(DRIVER_DETAILS_FIREBASE).setValue(driverProfileObject) - .addOnCompleteListener(new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - if (task.isSuccessful()){ - approvalsClass.setStatusCode(UID,DRIVER_DETAILS_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING); - } - viewController.progress(View.GONE); - fragmentManager.popBackStack(); - } - }); - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Driver/InsuranceFragment.java b/app/src/main/java/h_mal/appttude/com/driver/Driver/InsuranceFragment.java deleted file mode 100644 index 6774a2d..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Driver/InsuranceFragment.java +++ /dev/null @@ -1,300 +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.support.annotation.NonNull; -import android.support.v4.app.Fragment; -import android.text.Layout; -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.ImageView; -import android.widget.TextView; -import android.widget.Toast; - -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 java.util.ArrayList; -import java.util.List; - -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.ImageSwiperClass; -import h_mal.appttude.com.driver.Objects.InsuranceObject; -import h_mal.appttude.com.driver.R; - -import static h_mal.appttude.com.driver.Global.ExecuteFragment.UPLOAD_NEW; -import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_CONSTANT; -import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_PENDING; -import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVERS_LICENSE_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.INSURANCE_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.MOT_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.VEHICLE_FIREBASE; -import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.CAMERA_REQUEST; -import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE; -import static h_mal.appttude.com.driver.MainActivity.approvalsClass; -import static h_mal.appttude.com.driver.MainActivity.archiveClass; -import static h_mal.appttude.com.driver.MainActivity.auth; -import static h_mal.appttude.com.driver.MainActivity.fragmentManager; -import static h_mal.appttude.com.driver.MainActivity.getDateStamp; -import static h_mal.appttude.com.driver.MainActivity.mDatabase; -import static h_mal.appttude.com.driver.MainActivity.printObjectAsJson; -import static h_mal.appttude.com.driver.MainActivity.viewController; - - -public class InsuranceFragment extends Fragment { - - private String TAG = this.getClass().getSimpleName(); - DatabaseReference reference; - - TextView uploadIns; - EditText insName; - EditText insExpiry; - View holder; - - public Uri filePath; - public Uri picUri; - - public List photoStrings; - - String insNameString; - String insExpiryString; - - InsuranceObject insuranceObject; - ImageSwiperClass swiperClass; - - Boolean uploadNew; - String UID; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - uploadNew = false; - - photoStrings = new ArrayList<>(); - - if (getArguments() != null){ - Log.i(TAG, "onCreate: args = args exist"); - if (getArguments().containsKey("user_id")){ - UID = getArguments().getString("user_id"); - }else { - UID = auth.getCurrentUser().getUid(); - } - if (getArguments().containsKey(UPLOAD_NEW)){ - uploadNew = true; - } - }else{ - UID = auth.getCurrentUser().getUid(); - } - - reference = mDatabase.child(USER_FIREBASE).child(UID).child(VEHICLE_FIREBASE).child(INSURANCE_FIREBASE); - - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - 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); - Button submit = view.findViewById(R.id.submit_ins); - - holder = view.findViewById(R.id.image_pager); - swiperClass = new ImageSwiperClass(getContext(),holder); - - viewController.progress(View.VISIBLE); - reference.addListenerForSingleValueEvent(valueEventListener); - - uploadIns.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ImageSelectorDialog imageSelectorDialog = new ImageSelectorDialog(getContext()); - imageSelectorDialog.setImageName("insurance"+getDateStamp()); - imageSelectorDialog.show(); - } - }); - - insExpiry.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - DateDialog dateDialog = new DateDialog(getContext()); - dateDialog.init(insExpiry); - } - }); - - submit.setOnClickListener(submitOnClickListener); - - return view; - } - - ValueEventListener valueEventListener = new ValueEventListener() { - @Override - public void onDataChange(@NonNull DataSnapshot dataSnapshot) { - viewController.progress(View.GONE); - try{ - insuranceObject = dataSnapshot.getValue(InsuranceObject.class); - }catch (Exception e){ - 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 - public void onCancelled(@NonNull DatabaseError databaseError) { - viewController.progress(View.GONE); - } - }; - - View.OnClickListener submitOnClickListener = new View.OnClickListener() { - @Override - public void onClick(View v) { - insNameString = insName.getText().toString().trim(); - insExpiryString = insExpiry.getText().toString().trim(); - - if (!TextUtils.isEmpty(insNameString) - && !TextUtils.isEmpty(insExpiryString)){ - viewController.progress(View.VISIBLE); - if (filePath == null && picUri == null){ - Toast.makeText(getContext(), "No Driver image", Toast.LENGTH_SHORT).show(); - viewController.progress(View.GONE); - }else { - if (filePath != null){ - Log.i(TAG, "onClick: new Image uploaded"); - new FirebaseClass(getContext(),filePath,new FirebaseClass.Response(){ - @Override - public void processFinish(Uri output) { - Log.i(TAG, "processFinish: "); - if (output != null){ - picUri = output; - publishObject(); - }else { - Toast.makeText(getContext(), "Could not upload", Toast.LENGTH_SHORT).show(); - viewController.progress(View.GONE); - } - - } - }).uploadImage(INSURANCE_FIREBASE,INSURANCE_FIREBASE + getDateStamp()); - }else{ - Log.i(TAG, "onClick: pushing with same image"); - publishObject(); - } - } - }else { - if (TextUtils.isEmpty(insNameString)){ - insName.setError("Field required"); - } - if (TextUtils.isEmpty(insExpiryString)){ - insExpiry.setError("Field required"); - } - if (picUri == null){ - Toast.makeText(getContext(), getString(R.string.image_required), Toast.LENGTH_SHORT).show(); - } - } - - } - - }; - - private void publishObject(){ - - if (uploadNew){ - archiveClass.archiveRecord(UID,INSURANCE_FIREBASE,insuranceObject); - } - - photoStrings = swiperClass.getImageStrings(); - - InsuranceObject insuranceObject = new InsuranceObject(photoStrings, insNameString, insExpiryString); - - reference.setValue(insuranceObject).addOnCompleteListener(new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - if (task.isSuccessful()){ - approvalsClass.setStatusCode(UID,INSURANCE_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING); - fragmentManager.popBackStack(); - }else{ - Toast.makeText(getContext(), "Upload Unsuccessful", Toast.LENGTH_SHORT).show(); - } - viewController.progress(View.GONE); - } - }); - } - - @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - if (requestCode == MY_CAMERA_PERMISSION_CODE) { - if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { - Toast.makeText(getContext(), "camera permission granted", Toast.LENGTH_LONG).show(); - Intent cameraIntent = new - Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); - startActivityForResult(cameraIntent, CAMERA_REQUEST); - } else { - Toast.makeText(getContext(), "camera permission denied", Toast.LENGTH_LONG).show(); - } - - } - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - - new ImageSelectorResults().Results(getActivity(),requestCode, resultCode, data, - filePath,new ImageSelectorResults.FilepathResponse() { - @Override - public void processFinish(Uri output) { - filePath = output; - new FirebaseClass(getContext(), output, new FirebaseClass.Response() { - @Override - public void processFinish(Uri output) { - if (output != null){ - photoStrings.add(output.toString()); - swiperClass.addPhotoString(output.toString()); - //notify data change - reference.setValue(new InsuranceObject(photoStrings,null,null)); - } - } - }).uploadImage(INSURANCE_FIREBASE,INSURANCE_FIREBASE + getDateStamp()); - } - }); - - } - - @Override - public void onResume() { - super.onResume(); - printObjectAsJson(TAG,photoStrings); - } -} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Driver/MotFragment.java b/app/src/main/java/h_mal/appttude/com/driver/Driver/MotFragment.java deleted file mode 100644 index 3d7cf6c..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Driver/MotFragment.java +++ /dev/null @@ -1,262 +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.support.annotation.NonNull; -import android.support.v4.app.Fragment; -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.ImageView; -import android.widget.ProgressBar; -import android.widget.TextView; -import android.widget.Toast; - -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.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.Objects.MotObject; -import h_mal.appttude.com.driver.R; - -import static h_mal.appttude.com.driver.Global.ExecuteFragment.UPLOAD_NEW; -import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_CONSTANT; -import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_PENDING; -import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVERS_LICENSE_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.LOG_BOOK_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.MOT_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.VEHICLE_FIREBASE; -import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.CAMERA_REQUEST; -import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE; -import static h_mal.appttude.com.driver.MainActivity.approvalsClass; -import static h_mal.appttude.com.driver.MainActivity.archiveClass; -import static h_mal.appttude.com.driver.MainActivity.auth; -import static h_mal.appttude.com.driver.MainActivity.fragmentManager; -import static h_mal.appttude.com.driver.MainActivity.getDateStamp; -import static h_mal.appttude.com.driver.MainActivity.loadImage; -import static h_mal.appttude.com.driver.MainActivity.mDatabase; -import static h_mal.appttude.com.driver.MainActivity.viewController; - - -public class MotFragment extends Fragment { - - private String TAG = this.getClass().getSimpleName(); - DatabaseReference reference; - - TextView uploadMot; - ImageView motImage; - ProgressBar progressBar; - EditText motExpiryEditText; - - public Uri filePath; - public Uri picUri; - - MotObject motObject; - String motExpText; - Boolean uploadNew; - String UID; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - uploadNew = false; - - if (getArguments() != null){ - Log.i(TAG, "onCreate: args = args exist"); - if (getArguments().containsKey("user_id")){ - UID = getArguments().getString("user_id"); - }else { - UID = auth.getCurrentUser().getUid(); - } - if (getArguments().containsKey(UPLOAD_NEW)){ - uploadNew = true; - } - }else{ - UID = auth.getCurrentUser().getUid(); - } - - reference = mDatabase.child(USER_FIREBASE).child(UID) - .child(VEHICLE_FIREBASE).child(MOT_FIREBASE); - - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - View view = inflater.inflate(R.layout.fragment_mot, container, false); - - motImage = view.findViewById(R.id.mot_img); - progressBar = view.findViewById(R.id.pb_mot); - uploadMot = view.findViewById(R.id.uploadmot); - motExpiryEditText = view.findViewById(R.id.mot_expiry); - Button submit = view.findViewById(R.id.submit_mot); - - viewController.progress(View.VISIBLE); - reference.addListenerForSingleValueEvent(valueEventListener); - - uploadMot.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ImageSelectorDialog imageSelectorDialog = new ImageSelectorDialog(getContext()); - imageSelectorDialog.setImageName("mot_certificate"); - imageSelectorDialog.show(); - } - }); - - motExpiryEditText.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - DateDialog dateDialog = new DateDialog(getContext()); - dateDialog.init(motExpiryEditText); - } - }); - - submit.setOnClickListener(submitOnClickListener); - - return view; - } - - ValueEventListener valueEventListener = new ValueEventListener() { - @Override - public void onDataChange(@NonNull DataSnapshot dataSnapshot) { - viewController.progress(View.GONE); - - try{ - motObject = dataSnapshot.getValue(MotObject.class); - }catch (Exception e){ - 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(loadImage(progressBar,motImage)); - } - - } - } - } - - @Override - public void onCancelled(@NonNull DatabaseError databaseError) { - viewController.progress(View.GONE); - } - }; - - View.OnClickListener submitOnClickListener = new View.OnClickListener() { - @Override - public void onClick(View v) { - motExpText = motExpiryEditText.getText().toString().trim(); - - if (!TextUtils.isEmpty(motExpText)){ - viewController.progress(View.VISIBLE); - if (filePath == null && picUri == null){ - Toast.makeText(getContext(), "No Driver image", Toast.LENGTH_SHORT).show(); - viewController.progress(View.GONE); - }else { - if (filePath != null){ - Log.i(TAG, "onClick: new Image uploaded"); - new FirebaseClass(getContext(),filePath,new FirebaseClass.Response(){ - @Override - public void processFinish(Uri output) { - Log.i(TAG, "processFinish: "); - if (output != null){ - picUri = output; - publishObject(); - }else { - Toast.makeText(getContext(), R.string.unsuccessful, Toast.LENGTH_SHORT).show(); - } - - } - }).uploadImage(MOT_FIREBASE,MOT_FIREBASE + getDateStamp()); - }else{ - Log.i(TAG, "onClick: pushing with same image"); - publishObject(); - } - } - }else { - if (TextUtils.isEmpty(motExpText)){ - motExpiryEditText.setError("Field required"); - } - if (picUri == null){ - Toast.makeText(getContext(), getString(R.string.image_required), Toast.LENGTH_SHORT).show(); - } - } - - } - - }; - - private void publishObject(){ - - if (uploadNew){ - archiveClass.archiveRecord(UID,MOT_FIREBASE,motObject); - } - MotObject motObject = new MotObject(picUri.toString(), motExpText); - - reference.setValue(motObject).addOnCompleteListener(new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - if (task.isSuccessful()){ - Log.i(TAG, "onComplete: publish = " + task.isSuccessful()); - approvalsClass.setStatusCode(UID,MOT_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING); - fragmentManager.popBackStack(); - }else { - Toast.makeText(getContext(), "Unable to upload", Toast.LENGTH_SHORT).show(); - } - viewController.progress(View.GONE); - - } - }); - } - - @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - if (requestCode == MY_CAMERA_PERMISSION_CODE) { - if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { - Toast.makeText(getContext(), "camera permission granted", Toast.LENGTH_LONG).show(); - Intent cameraIntent = new - Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); - startActivityForResult(cameraIntent, CAMERA_REQUEST); - } else { - Toast.makeText(getContext(), "camera permission denied", Toast.LENGTH_LONG).show(); - } - - } - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - - new ImageSelectorResults().Results(getActivity(),requestCode, resultCode, data, - filePath,motImage,new ImageSelectorResults.FilepathResponse() { - @Override - public void processFinish(Uri output) { - filePath = output; - } - }); - - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Driver/PrivateHireLicenseFragment.java b/app/src/main/java/h_mal/appttude/com/driver/Driver/PrivateHireLicenseFragment.java deleted file mode 100644 index a33d51d..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Driver/PrivateHireLicenseFragment.java +++ /dev/null @@ -1,278 +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.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; -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.ImageView; -import android.widget.ProgressBar; -import android.widget.TextView; -import android.widget.Toast; - -import com.google.android.gms.tasks.OnCompleteListener; -import com.google.android.gms.tasks.Task; -import com.google.firebase.FirebaseError; -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 java.util.UUID; - -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.Objects.PrivateHireObject; -import h_mal.appttude.com.driver.R; - -import static h_mal.appttude.com.driver.Global.ExecuteFragment.UPLOAD_NEW; -import static h_mal.appttude.com.driver.Global.FirebaseClass.*; -import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.CAMERA_REQUEST; -import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE; -import static h_mal.appttude.com.driver.MainActivity.approvalsClass; -import static h_mal.appttude.com.driver.MainActivity.archiveClass; -import static h_mal.appttude.com.driver.MainActivity.fragmentManager; -import static h_mal.appttude.com.driver.MainActivity.getDateStamp; -import static h_mal.appttude.com.driver.MainActivity.loadImage; -import static h_mal.appttude.com.driver.MainActivity.mDatabase; -import static h_mal.appttude.com.driver.MainActivity.auth; -import static h_mal.appttude.com.driver.MainActivity.viewController; - -public class PrivateHireLicenseFragment extends Fragment { - - private String TAG = this.getClass().getSimpleName(); - - private ImageView imageView; - ProgressBar pb; - - EditText phNo; - EditText phExpiry; - - public Uri filePath; - - public Uri picUri; - String Ph_numberString; - String Ph_exprString; - - DatabaseReference reference; - - PrivateHireObject privateHireObject; - Boolean uploadNew; - String UID; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - uploadNew = false; - - if (getArguments() != null){ - Log.i(TAG, "onCreate: args = args exist"); - if (getArguments().containsKey("user_id")){ - UID = getArguments().getString("user_id"); - }else { - UID = auth.getCurrentUser().getUid(); - } - if (getArguments().containsKey(UPLOAD_NEW)){ - uploadNew = true; - } - }else{ - UID = auth.getCurrentUser().getUid(); - } - - reference = mDatabase.child(USER_FIREBASE).child(UID) - .child(DRIVER_FIREBASE).child(PRIVATE_HIRE_FIREBASE); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - View view = inflater.inflate(R.layout.fragment_private_hire_license, container, false); - - viewController.progress(View.VISIBLE); - reference.addListenerForSingleValueEvent(new ValueEventListener() { - @Override - public void onDataChange(@NonNull DataSnapshot dataSnapshot) { - viewController.progress(View.GONE); - - try{ - privateHireObject = dataSnapshot.getValue(PrivateHireObject.class); - }catch (Exception e){ - Log.e(TAG, "onDataChange: ", e); - }finally { - if (privateHireObject != null){ - picUri = Uri.parse(privateHireObject.getPhImageString()); - Ph_numberString = privateHireObject.getPhNumber(); - Ph_exprString = privateHireObject.getPhExpiry(); - - Log.i(TAG, "onDataChange: uploadNew = " + uploadNew); - if (!uploadNew){ - phNo.setText(Ph_numberString); - phExpiry.setText(Ph_exprString); - Picasso.get() - .load(picUri) - .into(loadImage(pb,imageView)); - } - } - } - - } - - @Override - public void onCancelled(@NonNull DatabaseError databaseError) { - viewController.progress(View.GONE); - } - }); - - TextView uploadPH = view.findViewById(R.id.uploadphlic); - imageView = view.findViewById(R.id.imageView2); - pb = view.findViewById(R.id.pb_priv); - - phNo = view.findViewById(R.id.ph_no); - phExpiry = view.findViewById(R.id.ph_expiry); - - phExpiry.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - DateDialog dateDialog = new DateDialog(getContext()); - dateDialog.init(phExpiry); - dateDialog.show(); - } - }); - - Button submit = view.findViewById(R.id.submit); - - uploadPH.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ImageSelectorDialog imageSelectorDialog = new ImageSelectorDialog(getContext()); - imageSelectorDialog.setImageName("private_hire"); - imageSelectorDialog.show(); - - } - }); - - submit.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Ph_numberString = phNo.getText().toString().trim(); - Ph_exprString = phExpiry.getText().toString().trim(); - - //validation for data then submit - - if (!TextUtils.isEmpty(Ph_numberString) && - !TextUtils.isEmpty(Ph_exprString)){ - viewController.progress(View.VISIBLE); - if (filePath == null && picUri == null){ - Toast.makeText(getContext(), "No Driver image", Toast.LENGTH_SHORT).show(); - viewController.progress(View.GONE); - }else { - if (filePath != null){ - Log.i(TAG, "onClick: new Image uploaded"); - new FirebaseClass(getContext(),filePath,new Response(){ - @Override - public void processFinish(Uri output) { - Log.i(TAG, "processFinish: "); - if (output != null){ - picUri = output; - publishObject(); - - }else { - Toast.makeText(getContext(), R.string.unsuccessful, Toast.LENGTH_SHORT).show(); - viewController.progress(View.GONE); - } - - } - }).uploadImage(PRIVATE_HIRE_FIREBASE,PRIVATE_HIRE_FIREBASE + getDateStamp()); - }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(getContext(), getString(R.string.image_required), Toast.LENGTH_SHORT).show(); - } - } - - } - }); - - return view; - } - - private void publishObject(){ - - if (uploadNew){ - archiveClass.archiveRecord(UID,PRIVATE_HIRE_FIREBASE,privateHireObject); - } - - PrivateHireObject privateHireObjectNew = new PrivateHireObject(picUri.toString(),Ph_numberString,Ph_exprString); - - mDatabase.child(USER_FIREBASE).child(UID).child(DRIVER_FIREBASE).child(PRIVATE_HIRE_FIREBASE) - .setValue(privateHireObjectNew).addOnCompleteListener(new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - if (task.isSuccessful()){ - Log.i(TAG, "onComplete: publish = " + task.isSuccessful()); - approvalsClass.setStatusCode(UID,PRIVATE_HIRE_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING); - fragmentManager.popBackStack(); - }else { - Toast.makeText(getContext(), R.string.unsuccessful, Toast.LENGTH_SHORT).show(); - } - viewController.progress(View.GONE); - - } - }); - - } - - @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - if (requestCode == MY_CAMERA_PERMISSION_CODE) { - if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { - Toast.makeText(getContext(), "camera permission granted", Toast.LENGTH_LONG).show(); - Intent cameraIntent = new - Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); - startActivityForResult(cameraIntent, CAMERA_REQUEST); - } else { - Toast.makeText(getContext(), "camera permission denied", Toast.LENGTH_LONG).show(); - } - - } - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - - new ImageSelectorResults().Results(getActivity(),requestCode, resultCode, data, - filePath,imageView,new ImageSelectorResults.FilepathResponse() { - @Override - public void processFinish(Uri output) { - filePath = output; - } - }); - - } - -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Driver/PrivateHireVehicleFragment.java b/app/src/main/java/h_mal/appttude/com/driver/Driver/PrivateHireVehicleFragment.java deleted file mode 100644 index 8d9cf8b..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Driver/PrivateHireVehicleFragment.java +++ /dev/null @@ -1,285 +0,0 @@ -package h_mal.appttude.com.driver.Driver; - -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.net.Uri; -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -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.ImageView; -import android.widget.ProgressBar; -import android.widget.TextView; -import android.widget.Toast; - -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.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.Objects.PrivateHireObject; -import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject; -import h_mal.appttude.com.driver.R; - -import static h_mal.appttude.com.driver.Global.ExecuteFragment.UPLOAD_NEW; -import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_CONSTANT; -import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_PENDING; -import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVER_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.PRIVATE_HIRE_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.VEHICLE_FIREBASE; -import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.CAMERA_REQUEST; -import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE; -import static h_mal.appttude.com.driver.MainActivity.approvalsClass; -import static h_mal.appttude.com.driver.MainActivity.archiveClass; -import static h_mal.appttude.com.driver.MainActivity.auth; -import static h_mal.appttude.com.driver.MainActivity.fragmentManager; -import static h_mal.appttude.com.driver.MainActivity.getDateStamp; -import static h_mal.appttude.com.driver.MainActivity.loadImage; -import static h_mal.appttude.com.driver.MainActivity.mDatabase; -import static h_mal.appttude.com.driver.MainActivity.viewController; - - -public class PrivateHireVehicleFragment extends Fragment { - - private String TAG = this.getClass().getSimpleName(); - - private ImageView imageView; - ProgressBar pb; - - EditText phNo; - EditText phExpiry; - - public Uri filePath; - - public Uri picUri; - String Ph_numberString; - String Ph_exprString; - - DatabaseReference reference; - - PrivateHireVehicleObject privateHireObject; - Boolean uploadNew; - String UID; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - uploadNew = false; - - if (getArguments() != null){ - Log.i(TAG, "onCreate: args = args exist"); - if (getArguments().containsKey("user_id")){ - UID = getArguments().getString("user_id"); - }else { - UID = auth.getCurrentUser().getUid(); - } - if (getArguments().containsKey(UPLOAD_NEW)){ - uploadNew = true; - } - }else{ - UID = auth.getCurrentUser().getUid(); - } - - reference = mDatabase.child(USER_FIREBASE).child(UID) - .child(VEHICLE_FIREBASE).child(PRIVATE_HIRE_VEHICLE_LICENSE); - - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - View view = inflater.inflate(R.layout.fragment_private_hire_vehicle, container, false); - - viewController.progress(View.VISIBLE); - reference.addListenerForSingleValueEvent(valueEventListener); - - TextView uploadPH = view.findViewById(R.id.uploadphlic); - imageView = view.findViewById(R.id.imageView2); - pb = view.findViewById(R.id.pb_priv); - - phNo = view.findViewById(R.id.ph_no); - phExpiry = view.findViewById(R.id.ph_expiry); - - phExpiry.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - DateDialog dateDialog = new DateDialog(getContext()); - dateDialog.init(phExpiry); - dateDialog.show(); - } - }); - - Button submit = view.findViewById(R.id.submit); - submit.setOnClickListener(submitClick); - - uploadPH.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ImageSelectorDialog imageSelectorDialog = new ImageSelectorDialog(getContext()); - imageSelectorDialog.setImageName("private_hire"); - imageSelectorDialog.show(); - } - }); - - - return view; - } - - private View.OnClickListener submitClick = new View.OnClickListener() { - @Override - public void onClick(View v) { - Ph_numberString = phNo.getText().toString().trim(); - Ph_exprString = phExpiry.getText().toString().trim(); - - //validation for data then submit - - if (!TextUtils.isEmpty(Ph_numberString) && - !TextUtils.isEmpty(Ph_exprString)){ - viewController.progress(View.VISIBLE); - if (filePath == null && picUri == null){ - Toast.makeText(getContext(), "No Driver image", Toast.LENGTH_SHORT).show(); - viewController.progress(View.GONE); - }else { - if (filePath != null){ - Log.i(TAG, "onClick: new Image uploaded"); - new FirebaseClass(getContext(),filePath,new FirebaseClass.Response(){ - @Override - public void processFinish(Uri output) { - Log.i(TAG, "processFinish: "); - if (output != null){ - picUri = output; - publishObject(); - - }else { - Toast.makeText(getContext(), R.string.unsuccessful, Toast.LENGTH_SHORT).show(); - viewController.progress(View.GONE); - } - - } - }).uploadImage(PRIVATE_HIRE_FIREBASE,PRIVATE_HIRE_FIREBASE + getDateStamp()); - }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(getContext(), getString(R.string.image_required), Toast.LENGTH_SHORT).show(); - } - } - - } - }; - - ValueEventListener valueEventListener = new ValueEventListener() { - @Override - public void onDataChange(@NonNull DataSnapshot dataSnapshot) { - viewController.progress(View.GONE); - - try{ - privateHireObject = dataSnapshot.getValue(PrivateHireVehicleObject.class); - }catch (Exception e){ - 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(loadImage(pb,imageView)); - } - } - } - - } - - @Override - public void onCancelled(@NonNull DatabaseError databaseError) { - viewController.progress(View.GONE); - } - }; - - private void publishObject(){ - - if (uploadNew){ - archiveClass.archiveRecord(UID,PRIVATE_HIRE_VEHICLE_LICENSE,privateHireObject); - } - - PrivateHireVehicleObject privateHireObjectNew = new PrivateHireVehicleObject(picUri.toString(),Ph_numberString,Ph_exprString); - - reference.setValue(privateHireObjectNew).addOnCompleteListener(new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - if (task.isSuccessful()){ - Log.i(TAG, "onComplete: publish = " + task.isSuccessful()); - approvalsClass.setStatusCode(UID,PRIVATE_HIRE_VEHICLE_LICENSE + APPROVAL_CONSTANT,APPROVAL_PENDING); - fragmentManager.popBackStack(); - }else { - Toast.makeText(getContext(), R.string.unsuccessful, Toast.LENGTH_SHORT).show(); - } - viewController.progress(View.GONE); - - } - }); - - } - - @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - if (requestCode == MY_CAMERA_PERMISSION_CODE) { - if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { - Toast.makeText(getContext(), "camera permission granted", Toast.LENGTH_LONG).show(); - Intent cameraIntent = new - Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); - startActivityForResult(cameraIntent, CAMERA_REQUEST); - } else { - Toast.makeText(getContext(), "camera permission denied", Toast.LENGTH_LONG).show(); - } - - } - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - - new ImageSelectorResults().Results(getActivity(), requestCode, resultCode, data, - filePath, imageView, new ImageSelectorResults.FilepathResponse() { - @Override - public void processFinish(Uri output) { - filePath = output; - } - }); - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Driver/VehicleOverallFragment.java b/app/src/main/java/h_mal/appttude/com/driver/Driver/VehicleOverallFragment.java deleted file mode 100644 index 96259de..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Driver/VehicleOverallFragment.java +++ /dev/null @@ -1,188 +0,0 @@ -package h_mal.appttude.com.driver.Driver; - -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -import android.support.v7.widget.CardView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.TextView; - -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.Objects.ApprovalsObject; -import h_mal.appttude.com.driver.Objects.WholeDriverObject; -import h_mal.appttude.com.driver.R; - -import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment; -import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; -import static h_mal.appttude.com.driver.MainActivity.approvalsClass; -import static h_mal.appttude.com.driver.MainActivity.archiveClass; -import static h_mal.appttude.com.driver.MainActivity.auth; -import static h_mal.appttude.com.driver.MainActivity.mDatabase; -import static h_mal.appttude.com.driver.MainActivity.viewController; - -public class VehicleOverallFragment extends Fragment { - - ImageView vehicleApr; - ImageView insuranceApr; - ImageView motApr; - ImageView logbookApr; - private ImageView privateHireCarApr; - TextView insuranceExp; - TextView motExp; - private TextView privateHireExp; - private CardView vehicleProfile; - private CardView insurance; - private CardView mot; - private CardView logbook; - private CardView privateHireCar; - - private DatabaseReference reference; - private WholeDriverObject wholeDriverObject; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - reference = mDatabase.child(USER_FIREBASE).child(auth.getCurrentUser().getUid()); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - 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); - - viewController.progress(View.VISIBLE); - reference.addListenerForSingleValueEvent(valueEventListener); - - return view; - } - - ValueEventListener valueEventListener = new ValueEventListener() { - @Override - public void onDataChange(@NonNull DataSnapshot dataSnapshot) { - wholeDriverObject = dataSnapshot.getValue(WholeDriverObject.class); - - if (wholeDriverObject.approvalsObject != null) { - ApprovalsObject approvalsObject = wholeDriverObject.getApprovalsObject(); - - vehicleApr.setImageResource(approvalsClass.setImageResource(approvalsObject.getVehicle_details_approval())); - insuranceApr.setImageResource(approvalsClass.setImageResource(approvalsObject.getInsurance_details_approval())); - motApr.setImageResource(approvalsClass.setImageResource(approvalsObject.getMot_details_approval())); - logbookApr.setImageResource(approvalsClass.setImageResource(approvalsObject.getLog_book_approval())); - privateHireCarApr.setImageResource(approvalsClass.setImageResource(approvalsObject.getPh_car_approval())); - } - - if (wholeDriverObject.vehicle_profile != null){ - if (wholeDriverObject.getVehicle_profile().insurance_details != null){ - insuranceExp.setVisibility(View.VISIBLE); - insuranceExp.setText("Expiry: " + wholeDriverObject.getVehicle_profile().getInsurance_details().getExpiryDate()); - } - if (wholeDriverObject.getVehicle_profile().mot_details != null){ - motExp.setVisibility(View.VISIBLE); - motExp.setText("Expiry: " + wholeDriverObject.getVehicle_profile().getMot_details().getMotExpiry()); - } - if (wholeDriverObject.getVehicle_profile().private_hire_vehicle != null){ - privateHireExp.setVisibility(View.VISIBLE); - privateHireExp.setText("Expiry: " + wholeDriverObject.getVehicle_profile().getPrivateHireVehicleObject().getPhCarExpiry()); - } - } - - vehicleProfile.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (wholeDriverObject.vehicle_profile == null){ - executeFragment(new VehicleSetupFragment()); - }else { - archiveClass.openDialogArchive(getContext(),wholeDriverObject.getVehicle_profile().getVehicle_details() - ,new VehicleSetupFragment()); - } - } - }); - - insurance.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (wholeDriverObject.vehicle_profile == null){ - executeFragment(new InsuranceFragment()); - }else { - archiveClass.openDialogArchive(getContext(),wholeDriverObject.getVehicle_profile().getInsurance_details() - ,new InsuranceFragment()); - } - } - }); - - mot.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (wholeDriverObject.vehicle_profile == null){ - executeFragment(new MotFragment()); - }else { - archiveClass.openDialogArchive(getContext(),wholeDriverObject.getVehicle_profile().getMot_details() - ,new MotFragment()); - } - } - }); - - logbook.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (wholeDriverObject.vehicle_profile == null){ - executeFragment(new logbookFragment()); - }else { - archiveClass.openDialogArchive(getContext(),wholeDriverObject.getVehicle_profile().getLog_book() - ,new logbookFragment()); - } - } - }); - - privateHireCar.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (wholeDriverObject.vehicle_profile == null){ - executeFragment(new PrivateHireVehicleFragment()); - }else { - archiveClass.openDialogArchive(getContext(),wholeDriverObject.getVehicle_profile().getPrivateHireVehicleObject() - ,new PrivateHireVehicleFragment()); - } - } - }); - - - viewController.progress(View.GONE); - } - - @Override - public void onCancelled(@NonNull DatabaseError databaseError) { - viewController.progress(View.GONE); - } - }; - -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Driver/VehicleSetupFragment.java b/app/src/main/java/h_mal/appttude/com/driver/Driver/VehicleSetupFragment.java deleted file mode 100644 index c9dc1ce..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Driver/VehicleSetupFragment.java +++ /dev/null @@ -1,223 +0,0 @@ -package h_mal.appttude.com.driver.Driver; - -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -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.TextView; -import android.widget.Toast; - -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.Objects.DriversLicenseObject; -import h_mal.appttude.com.driver.Objects.InsuranceObject; -import h_mal.appttude.com.driver.Objects.LogbookObject; -import h_mal.appttude.com.driver.Objects.MotObject; -import h_mal.appttude.com.driver.Objects.VehicleProfileObject; -import h_mal.appttude.com.driver.R; - -import static h_mal.appttude.com.driver.Global.ExecuteFragment.UPLOAD_NEW; -import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment; -import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_CONSTANT; -import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_PENDING; -import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVERS_LICENSE_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.INSURANCE_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.LOG_BOOK_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.MOT_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.VEHICLE_DETAILS_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.VEHICLE_FIREBASE; -import static h_mal.appttude.com.driver.MainActivity.approvalsClass; -import static h_mal.appttude.com.driver.MainActivity.archiveClass; -import static h_mal.appttude.com.driver.MainActivity.auth; -import static h_mal.appttude.com.driver.MainActivity.fragmentManager; -import static h_mal.appttude.com.driver.MainActivity.mDatabase; -import static h_mal.appttude.com.driver.MainActivity.viewController; - - -public class VehicleSetupFragment extends Fragment { - - private String TAG = this.getClass().getSimpleName(); - - EditText reg; - EditText make; - EditText model; - EditText color; - EditText keeperName; - EditText address; - EditText postcode; - EditText startDate; - CheckBox seized; - Button Submit; - - DatabaseReference ref; - - VehicleProfileObject vehicleProfileObject; - Boolean uploadNew; - String UID; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - uploadNew = false; - - if (getArguments() != null){ - Log.i(TAG, "onCreate: args = args exist"); - if (getArguments().containsKey("user_id")){ - UID = getArguments().getString("user_id"); - }else { - UID = auth.getCurrentUser().getUid(); - } - if (getArguments().containsKey(UPLOAD_NEW)){ - uploadNew = true; - } - }else{ - UID = auth.getCurrentUser().getUid(); - } - - ref = mDatabase.child(USER_FIREBASE).child(UID).child(VEHICLE_FIREBASE); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - 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(new View.OnClickListener() { - @Override - public void onClick(View v) { - DateDialog dateDialog = new DateDialog(getContext()); - dateDialog.init(startDate); - } - }); - - viewController.progress(View.VISIBLE); - ref.addListenerForSingleValueEvent(valueEventListener); - - Submit.setOnClickListener(submitOnClickListener); - - return view; - } - - ValueEventListener valueEventListener = new ValueEventListener(){ - - @Override - public void onDataChange(@NonNull DataSnapshot dataSnapshot) { - viewController.progress(View.GONE); - try{ - vehicleProfileObject = dataSnapshot.child(VEHICLE_DETAILS_FIREBASE).getValue(VehicleProfileObject.class); - }catch (Exception e){ - 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.setChecked(vehicleProfileObject.isSeized()); - } - } - } - - } - - @Override - public void onCancelled(@NonNull DatabaseError databaseError) { - viewController.progress(View.GONE); - } - }; - - View.OnClickListener submitOnClickListener = new View.OnClickListener() { - @Override - public void onClick(View v) { - String regString = reg.getText().toString().trim(); - String makeString = make.getText().toString().trim(); - String modelString = model.getText().toString().trim(); - String colourString = color.getText().toString().trim(); - String keeperNameStrin = keeperName.getText().toString().trim(); - String addressString = address.getText().toString().trim(); - String postcodeString = postcode.getText().toString().trim(); - String driverForename = startDate.getText().toString().trim(); - - 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){ - archiveClass.archiveRecord(UID,VEHICLE_DETAILS_FIREBASE,vehicleProfileObject); - } - - VehicleProfileObject vehicleProfileObject = new VehicleProfileObject( - regString ,makeString ,modelString ,colourString ,keeperNameStrin ,addressString ,postcodeString ,driverForename, - seized.isChecked() - ); - - viewController.progress(View.VISIBLE); - ref.child(VEHICLE_DETAILS_FIREBASE).setValue(vehicleProfileObject).addOnCompleteListener(new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - if (task.isSuccessful()){ - approvalsClass.setStatusCode(UID,VEHICLE_DETAILS_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING); - approvalsClass.setStatusCode(UID,MOT_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING); - approvalsClass.setStatusCode(UID,INSURANCE_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING); - approvalsClass.setStatusCode(UID,LOG_BOOK_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING); - fragmentManager.popBackStack(); - }else{ - Toast.makeText(getContext(), "Upload Unsuccessful", Toast.LENGTH_SHORT).show(); - } - viewController.progress(View.GONE); - } - }); - - }else { - if (TextUtils.isEmpty(regString)){reg.setError("Field required");} - if (TextUtils.isEmpty(makeString)){make.setError("Field required");} - if (TextUtils.isEmpty(modelString)){model.setError("Field required");} - if (TextUtils.isEmpty(colourString)){color.setError("Field required");} - if (TextUtils.isEmpty(keeperNameStrin)){keeperName.setError("Field required");} - if (TextUtils.isEmpty(addressString)){address.setError("Field required");} - if (TextUtils.isEmpty(postcodeString)){postcode.setError("Field required");} - if (TextUtils.isEmpty(driverForename)){startDate.setError("Field required");} - - } - - } - - }; - -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Driver/homeDriverFragment.java b/app/src/main/java/h_mal/appttude/com/driver/Driver/homeDriverFragment.java deleted file mode 100644 index 33194f3..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Driver/homeDriverFragment.java +++ /dev/null @@ -1,53 +0,0 @@ -package h_mal.appttude.com.driver.Driver; - -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v7.widget.CardView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; - -import h_mal.appttude.com.driver.Global.ExecuteFragment; -import h_mal.appttude.com.driver.R; - -import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment; - - -public class homeDriverFragment extends Fragment { - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - View view = inflater.inflate(R.layout.fragment_home, container, false); - - Button button = view.findViewById(R.id.driver); - button.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - executeFragment(new DriverOverallFragment()); - } - }); - - CardView second= view.findViewById(R.id.car); - second.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - executeFragment(new VehicleOverallFragment()); - } - }); - - return view; - } - - - -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Driver/logbookFragment.java b/app/src/main/java/h_mal/appttude/com/driver/Driver/logbookFragment.java deleted file mode 100644 index 397422f..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Driver/logbookFragment.java +++ /dev/null @@ -1,255 +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.support.annotation.NonNull; -import android.support.v4.app.Fragment; -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.ImageView; -import android.widget.ProgressBar; -import android.widget.TextView; -import android.widget.Toast; - -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.FirebaseClass; -import h_mal.appttude.com.driver.Global.ImageSelectorDialog; -import h_mal.appttude.com.driver.Global.ImageSelectorResults; -import h_mal.appttude.com.driver.Objects.LogbookObject; -import h_mal.appttude.com.driver.R; - -import static h_mal.appttude.com.driver.Global.ExecuteFragment.UPLOAD_NEW; -import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_CONSTANT; -import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_PENDING; -import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVERS_LICENSE_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.INSURANCE_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.LOG_BOOK_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.VEHICLE_FIREBASE; -import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.CAMERA_REQUEST; -import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE; -import static h_mal.appttude.com.driver.MainActivity.approvalsClass; -import static h_mal.appttude.com.driver.MainActivity.archiveClass; -import static h_mal.appttude.com.driver.MainActivity.auth; -import static h_mal.appttude.com.driver.MainActivity.fragmentManager; -import static h_mal.appttude.com.driver.MainActivity.getDateStamp; -import static h_mal.appttude.com.driver.MainActivity.loadImage; -import static h_mal.appttude.com.driver.MainActivity.mDatabase; -import static h_mal.appttude.com.driver.MainActivity.viewController; - - -public class logbookFragment extends Fragment { - - private String TAG = this.getClass().getSimpleName(); - DatabaseReference reference; - - TextView uploadlb; - ImageView lbImage; - ProgressBar progressBar; - EditText v5cNumber; - - public Uri filePath; - public Uri picUri; - - String v5cString; - - LogbookObject logbookObject; - Boolean uploadNew; - String UID; - - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - uploadNew = false; - - if (getArguments() != null){ - Log.i(TAG, "onCreate: args = args exist"); - if (getArguments().containsKey("user_id")){ - UID = getArguments().getString("user_id"); - }else { - UID = auth.getCurrentUser().getUid(); - } - if (getArguments().containsKey(UPLOAD_NEW)){ - uploadNew = true; - } - }else{ - UID = auth.getCurrentUser().getUid(); - } - - reference = mDatabase.child(USER_FIREBASE).child(UID).child(VEHICLE_FIREBASE).child(LOG_BOOK_FIREBASE); - - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - 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); - progressBar = view.findViewById(R.id.pb_lb); - v5cNumber = view.findViewById(R.id.v5c_no); - Button submit = view.findViewById(R.id.submit_lb); - - viewController.progress(View.VISIBLE); - reference.addListenerForSingleValueEvent(valueEventListener); - - uploadlb.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ImageSelectorDialog imageSelectorDialog = new ImageSelectorDialog(getContext()); - imageSelectorDialog.setImageName("logbook_pic"+getDateStamp()); - imageSelectorDialog.show(); - } - }); - - - submit.setOnClickListener(submitOnClickListener); - - return view; - } - - ValueEventListener valueEventListener = new ValueEventListener() { - @Override - public void onDataChange(@NonNull DataSnapshot dataSnapshot) { - viewController.progress(View.GONE); - try{ - logbookObject = dataSnapshot.getValue(LogbookObject.class); - }catch (Exception e){ - 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(loadImage(progressBar, lbImage)); - } - } - } - } - - @Override - public void onCancelled(@NonNull DatabaseError databaseError) { - viewController.progress(View.GONE); - } - }; - - View.OnClickListener submitOnClickListener = new View.OnClickListener() { - @Override - public void onClick(View v) { - v5cString = v5cNumber.getText().toString().trim(); - - if (!TextUtils.isEmpty(v5cString)){ - viewController.progress(View.VISIBLE); - if (filePath == null && picUri == null){ - Toast.makeText(getContext(), "No Driver image", Toast.LENGTH_SHORT).show(); - viewController.progress(View.GONE); - }else { - if (filePath != null){ - Log.i(TAG, "onClick: new Image uploaded"); - new FirebaseClass(getContext(),filePath,new FirebaseClass.Response(){ - @Override - public void processFinish(Uri output) { - Log.i(TAG, "processFinish: "); - if (output != null){ - picUri = output; - publishObject(); - }else { - Toast.makeText(getContext(), R.string.unsuccessful, Toast.LENGTH_SHORT).show(); - viewController.progress(View.GONE); - } - - } - }).uploadImage(LOG_BOOK_FIREBASE,LOG_BOOK_FIREBASE + getDateStamp()); - }else{ - Log.i(TAG, "onClick: pushing with same image"); - publishObject(); - } - } - - - }else { - if (TextUtils.isEmpty(v5cString)){ - v5cNumber.setError("Field required"); - } - if (picUri == null){ - Toast.makeText(getContext(), getString(R.string.image_required), Toast.LENGTH_SHORT).show(); - } - } - - } - - }; - - private void publishObject(){ - - if (uploadNew){ - archiveClass.archiveRecord(UID,LOG_BOOK_FIREBASE,logbookObject); - } - - LogbookObject logbookObjectNew = new LogbookObject(picUri.toString(), v5cString); - - reference.setValue(logbookObjectNew).addOnCompleteListener(new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - if (task.isSuccessful()){ - approvalsClass.setStatusCode(UID,LOG_BOOK_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING); - fragmentManager.popBackStack(); - }else{ - Toast.makeText(getContext(), "Upload Unsuccessful", Toast.LENGTH_SHORT).show(); - } - viewController.progress(View.VISIBLE); - } - }); - } - - @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - if (requestCode == MY_CAMERA_PERMISSION_CODE) { - if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { - Toast.makeText(getContext(), "camera permission granted", Toast.LENGTH_LONG).show(); - Intent cameraIntent = new - Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); - startActivityForResult(cameraIntent, CAMERA_REQUEST); - } else { - Toast.makeText(getContext(), "camera permission denied", Toast.LENGTH_LONG).show(); - } - - } - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - - new ImageSelectorResults().Results(getActivity(),requestCode, resultCode, data, - filePath,lbImage,new ImageSelectorResults.FilepathResponse() { - @Override - public void processFinish(Uri output) { - filePath = output; - } - }); - - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/ApprovalsClass.java b/app/src/main/java/h_mal/appttude/com/driver/Global/ApprovalsClass.java deleted file mode 100644 index 89d869d..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Global/ApprovalsClass.java +++ /dev/null @@ -1,123 +0,0 @@ -package h_mal.appttude.com.driver.Global; - -import android.support.annotation.NonNull; - -import com.google.android.gms.tasks.OnCompleteListener; -import com.google.android.gms.tasks.Task; - -import h_mal.appttude.com.driver.Objects.ApprovalsObject; -import h_mal.appttude.com.driver.Objects.WholeDriverObject; -import h_mal.appttude.com.driver.R; - -import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_DENIED; -import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_PENDING; -import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVED; -import static h_mal.appttude.com.driver.Global.FirebaseClass.NO_DATE_PRESENT; -import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_APPROVALS; -import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; -import static h_mal.appttude.com.driver.MainActivity.mDatabase; -import static h_mal.appttude.com.driver.MainActivity.printObjectAsJson; - -public class ApprovalsClass { - - public ApprovalsClass() { - } - - public static int mode(int[] array) { - printObjectAsJson("modeArrays",array); - int mode = array[0]; - int maxCount = 0; - if (matchedArray(array,3)){ - return 3; - }else if (matchedArray(array,0)){ - return 0; - }else { - for (int i = 0; i < array.length; i++) { - int value = array[i]; - int count = 1; - for (int j = 0; j < array.length; j++) { - if (array[j] == value) count++; - if (count > maxCount) { - mode = value; - maxCount = count; - } - } - } - if (mode == 3){ - return 1; - } - } - return mode; - } - - private static boolean matchedArray (int [] array, int match){ - for (int i : array){ - if (i != match){ - return false; - } - } - - return true; - } - - public int getOverApprovalStatusCode(WholeDriverObject wholeDriverObject){ - - if (wholeDriverObject.approvalsObject != null){ - ApprovalsObject approvalsObject = wholeDriverObject.getApprovalsObject(); - - int[] ints = new int[]{approvalsObject.getDriver_details_approval(), - approvalsObject.getDriver_license_approval(), - approvalsObject.getPrivate_hire_approval(), - approvalsObject.getVehicle_details_approval(), - approvalsObject.getInsurance_details_approval(), - approvalsObject.getMot_details_approval(), - approvalsObject.getLog_book_approval(), - approvalsObject.getPh_car_approval()}; - - - return setImageResource(mode(ints)); - } - - return setImageResource(NO_DATE_PRESENT); - } - - public void setStatusCode(String userId,String approvalNameString,int status){ - - if (!approvalNameString.equals("")) { - mDatabase.child(USER_FIREBASE).child(userId).child(USER_APPROVALS).child(approvalNameString) - .setValue(status).addOnCompleteListener(new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - if (task.isSuccessful()) { - - } else { - - } - } - }); - } - - - } - - public int setImageResource(int statusCode){ - int imageResource; - - switch (statusCode){ - case APPROVAL_PENDING: - imageResource = R.drawable.pending; - break; - case APPROVAL_DENIED: - imageResource = R.drawable.denied; - break; - case APPROVED: - imageResource = R.drawable.approved; - break; - default: - imageResource = R.drawable.zero; - break; - } - - return imageResource; - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/ApprovalsClass.kt b/app/src/main/java/h_mal/appttude/com/driver/Global/ApprovalsClass.kt new file mode 100644 index 0000000..3eb4a5a --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Global/ApprovalsClass.kt @@ -0,0 +1,87 @@ +package h_mal.appttude.com.driver.Global + +import h_mal.appttude.com.driver.Objects.ApprovalsObject +import h_mal.appttude.com.driver.Objects.WholeDriverObject +import h_mal.appttude.com.driver.R + + +class ApprovalsClass { + fun getOverApprovalStatusCode(wholeDriverObject: WholeDriverObject?): Int { + if (wholeDriverObject!!.approvalsObject != null) { + val approvalsObject: ApprovalsObject = wholeDriverObject!!.approvalsObject!! + val ints: IntArray = intArrayOf( + approvalsObject.driver_details_approval, + approvalsObject.driver_license_approval, + approvalsObject.private_hire_approval, + approvalsObject.vehicle_details_approval, + approvalsObject.insurance_details_approval, + approvalsObject.mot_details_approval, + approvalsObject.log_book_approval, + approvalsObject.ph_car_approval + ) + return setImageResource(mode(ints)) + } + return setImageResource(FirebaseClass.NO_DATE_PRESENT) + } + + fun setStatusCode(userId: String?, approvalNameString: String, status: Int) { +// if (!(approvalNameString == "")) { +// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE) +// .child((userId)!!).child(FirebaseClass.USER_APPROVALS) +// .child(approvalNameString) +// .setValue(status).addOnCompleteListener { task -> +// if (task.isSuccessful) { +// } else { +// } +// } +// } + } + + fun setImageResource(statusCode: Int): Int { + val imageResource: Int + when (statusCode) { + FirebaseClass.APPROVAL_PENDING -> imageResource = R.drawable.pending + FirebaseClass.APPROVAL_DENIED -> imageResource = R.drawable.denied + FirebaseClass.APPROVED -> imageResource = R.drawable.approved + else -> imageResource = R.drawable.zero + } + return imageResource + } + + companion object { + fun mode(array: IntArray): Int { + var mode: Int = array.get(0) + var maxCount: Int = 0 + if (matchedArray(array, 3)) { + return 3 + } else if (matchedArray(array, 0)) { + return 0 + } else { + for (i in array.indices) { + val value: Int = array.get(i) + var count: Int = 1 + for (j in array.indices) { + if (array.get(j) == value) count++ + if (count > maxCount) { + mode = value + maxCount = count + } + } + } + if (mode == 3) { + return 1 + } + } + return mode + } + + private fun matchedArray(array: IntArray, match: Int): Boolean { + for (i: Int in array) { + if (i != match) { + return false + } + } + return true + } + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/ArchiveClass.java b/app/src/main/java/h_mal/appttude/com/driver/Global/ArchiveClass.java deleted file mode 100644 index 029db51..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Global/ArchiveClass.java +++ /dev/null @@ -1,99 +0,0 @@ -package h_mal.appttude.com.driver.Global; - -import android.app.AlertDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -import android.util.Log; - -import com.google.android.gms.tasks.OnCompleteListener; -import com.google.android.gms.tasks.Task; -import com.google.firebase.database.DatabaseReference; - -import java.util.UUID; - -import static h_mal.appttude.com.driver.Global.ExecuteFragment.UPLOAD_NEW; -import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment; -import static h_mal.appttude.com.driver.Global.FirebaseClass.ARCHIVE_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; -import static h_mal.appttude.com.driver.MainActivity.getDateTimeStamp; -import static h_mal.appttude.com.driver.MainActivity.mDatabase; - -public class ArchiveClass { - private static final String TAG = "ArchiveClass"; - - public ArchiveClass() { - } - - public void archiveRecord(String UID, String item, Object object) { - final DatabaseReference toPath = mDatabase.child(USER_FIREBASE).child(UID) - .child(ARCHIVE_FIREBASE).child(item); - - toPath.child(getDateTimeStamp()).setValue(object).addOnCompleteListener(new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - if (task.isSuccessful()){ - Log.i(TAG, "onComplete: archive successful"); - }else { - Log.i(TAG, "onComplete: archive unsuccessful"); - } - } - }); - } - - public void openDialogArchive(Context context,Object object, final Fragment fragment){ - if (object == null){ - executeFragment(fragment); - }else { - AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setMessage("Do you want to View/Edit or Upload new?") - .setPositiveButton("View/Edit", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - executeFragment(fragment); - } - }) - .setNegativeButton("Upload New", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - Bundle bundle = new Bundle(); - bundle.putString(UPLOAD_NEW,"Yes"); - fragment.setArguments(bundle); - executeFragment(fragment); - } - }) - .create().show(); - } - - } - - public void openDialogArchive(Context context,Object object, String user,final Fragment fragment){ - final Bundle bundle = new Bundle(); - bundle.putString("user_id",user); - fragment.setArguments(bundle); - - if (object == null){ - executeFragment(fragment); - }else { - AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setMessage("Do you want to View/Edit or Upload new?") - .setPositiveButton("View/Edit", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - executeFragment(fragment); - } - }) - .setNegativeButton("Upload New", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - bundle.putString(UPLOAD_NEW,"Yes"); - executeFragment(fragment); - } - }) - .create().show(); - } - - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/ArchiveClass.kt b/app/src/main/java/h_mal/appttude/com/driver/Global/ArchiveClass.kt new file mode 100644 index 0000000..2f1e129 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Global/ArchiveClass.kt @@ -0,0 +1,70 @@ +package h_mal.appttude.com.driver.Global + +import android.app.AlertDialog +import android.content.Context +import android.os.Bundle +import androidx.fragment.app.Fragment +import h_mal.appttude.com.driver.utils.UPLOAD_NEW + + +class ArchiveClass { + fun archiveRecord(UID: String?, item: String?, `object`: Any?) { +// val toPath: DatabaseReference = +// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child( +// (UID)!! +// ) +// .child(FirebaseClass.ARCHIVE_FIREBASE).child((item)!!) +// toPath.child(MainActivity.dateTimeStamp).setValue(`object`) +// .addOnCompleteListener { task -> +// if (task.isSuccessful) { +// Log.i(TAG, "onComplete: archive successful") +// } else { +// Log.i(TAG, "onComplete: archive unsuccessful") +// } +// } + } + + fun openDialogArchive(context: Context?, `object`: Any?, fragment: Fragment) { + if (`object` == null) { +// executeFragment(fragment) + } else { + val builder: AlertDialog.Builder = AlertDialog.Builder(context) + builder.setMessage("Do you want to View/Edit or Upload new?") + .setPositiveButton("View/Edit" + ) { _, _ -> +// executeFragment(fragment) + } + .setNegativeButton("Upload New" + ) { _, _ -> + val bundle = Bundle() + bundle.putString(UPLOAD_NEW, "Yes") + fragment.arguments = bundle +// executeFragment(fragment) + } + .create().show() + } + } + + fun openDialogArchive(context: Context?, `object`: Any?, user: String?, fragment: Fragment?) { + val bundle: Bundle = Bundle() + bundle.putString("user_id", user) + fragment!!.arguments = bundle + if (`object` == null) { +// executeFragment(fragment) + } else { + val builder: AlertDialog.Builder = AlertDialog.Builder(context) + builder.setMessage("Do you want to View/Edit or Upload new?") + .setPositiveButton("View/Edit" + ) { _, _ -> +// executeFragment(fragment) + } + .setNegativeButton("Upload New" + ) { _, _ -> + bundle.putString(UPLOAD_NEW, "Yes") +// executeFragment(fragment) + } + .create().show() + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/DateDialog.java b/app/src/main/java/h_mal/appttude/com/driver/Global/DateDialog.java deleted file mode 100644 index 43c90e9..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Global/DateDialog.java +++ /dev/null @@ -1,127 +0,0 @@ -package h_mal.appttude.com.driver.Global; - -import android.app.DatePickerDialog; -import android.content.Context; -import android.content.Intent; -import android.os.Build; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.RequiresApi; -import android.text.TextUtils; -import android.util.Log; -import android.widget.DatePicker; -import android.widget.EditText; -import android.widget.TextView; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; - -import h_mal.appttude.com.driver.R; - -public class DateDialog extends DatePickerDialog { - - int mYear; - int mMonth; - int mDay; - - EditText editText; - - @RequiresApi(api = Build.VERSION_CODES.N) - public DateDialog(@NonNull Context context) { - super(context); - } - - @RequiresApi(api = Build.VERSION_CODES.N) - public DateDialog(@NonNull Context context, int themeResId) { - super(context, themeResId); - } - - public DateDialog(@NonNull Context context, - @Nullable DatePickerDialog.OnDateSetListener listener, - int year, int month, int dayOfMonth) { - super(context, listener, year, month, dayOfMonth); - - - } - - public DateDialog(@NonNull Context context, int themeResId, @Nullable DatePickerDialog.OnDateSetListener listener, int year, int monthOfYear, int dayOfMonth) { - super(context, themeResId, listener, year, monthOfYear, dayOfMonth); - - - } - - @Override - public void setTitle(CharSequence title) { - super.setTitle(title); - } - - @Override - public void setOnDateSetListener(@Nullable DatePickerDialog.OnDateSetListener listener) { - super.setOnDateSetListener(dateSetListener); - } - - public void init(EditText editText){ - this.editText = editText; - - String dateString = editText.getText().toString(); - - Date javaDate = null; - - if(TextUtils.isEmpty(dateString)){ - Calendar calendar = Calendar.getInstance(); - mYear = calendar.get(Calendar.YEAR); - mMonth = calendar.get(Calendar.MONTH); - mDay = calendar.get(Calendar.DAY_OF_MONTH); - }else { - try { - SimpleDateFormat sdfrmt = new SimpleDateFormat("dd/MM/yyyy"); - sdfrmt.setLenient(false); - javaDate = sdfrmt.parse(dateString); - } catch (ParseException e) { - e.printStackTrace(); - }finally { - if (javaDate != null) { - mYear = Integer.parseInt(dateString.substring(6, dateString.length())); - mMonth = Integer.parseInt(dateString.substring(3, 5))-1; - mDay = Integer.parseInt(dateString.substring(0, 2)); - }else { - Calendar calendar = Calendar.getInstance(); - mYear = calendar.get(Calendar.YEAR); - mMonth = calendar.get(Calendar.MONTH); - mDay = calendar.get(Calendar.DAY_OF_MONTH); - } - } - - } - - Log.i(this.getClass().getSimpleName(), "init: year =" + mYear + - "month = " + mMonth + - "day = " + mDay); - - - updateDate(mYear,mMonth,mDay); - - setOnDateSetListener(null); - - this.setTitle(getContext().getString(R.string.set_date)); - this.show(); - } - - DatePickerDialog.OnDateSetListener dateSetListener = new OnDateSetListener() { - @Override - public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { - mYear = year; - mMonth = month + 1; - mDay = dayOfMonth; - - editText.setText(String.format("%02d", mDay) + "/" + - String.format("%02d", (mMonth)) +"/" + - mYear - ); - - } - }; - -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/DateDialog.kt b/app/src/main/java/h_mal/appttude/com/driver/Global/DateDialog.kt new file mode 100644 index 0000000..4df5444 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Global/DateDialog.kt @@ -0,0 +1,55 @@ +package h_mal.appttude.com.driver.Global + + +import android.app.AlertDialog +import android.app.DatePickerDialog +import android.app.DatePickerDialog.OnDateSetListener +import android.content.Context +import android.icu.util.Calendar +import android.os.Build +import android.widget.EditText +import androidx.annotation.RequiresApi +import h_mal.appttude.com.driver.R +import h_mal.appttude.com.driver.utils.DateUtils + + +private const val DATE_FORMAT = "dd/MM/yyyy" +@RequiresApi(api = Build.VERSION_CODES.N) +class DateDialog( + private val editText: EditText +) : DatePickerDialog(editText.context, AlertDialog.THEME_HOLO_LIGHT) { + + var dateSetListener: OnDateSetListener = + OnDateSetListener { _, year, month, dayOfMonth -> + val cal = Calendar.getInstance() + cal.set(year, month + 1, dayOfMonth) + + editText.setText(DateUtils.parseCalenderIntoDateString(cal, DATE_FORMAT)) + } + + init { + val dateString = editText.text?.toString() + val date = if (dateString.isNullOrBlank()){ + // Set time to now + Calendar.getInstance() + }else{ + // Parse current edit text string and set value + DateUtils.parseDateStringIntoCalender(dateString, DATE_FORMAT) + ?: Calendar.getInstance() + } + setDateFromCalender(date) + setOnDateSetListener(dateSetListener) + setTitle(context.getString(R.string.set_date)) + show() + } + + private fun setDateFromCalender(calendar: Calendar){ + val mYear = calendar.get(Calendar.YEAR) + val mMonth = calendar.get(Calendar.MONTH) + val mDay = calendar.get(Calendar.DAY_OF_MONTH) + + updateDate(mYear, mMonth, mDay) + } + + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/ExecuteFragment.java b/app/src/main/java/h_mal/appttude/com/driver/Global/ExecuteFragment.java deleted file mode 100644 index a88ebc9..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Global/ExecuteFragment.java +++ /dev/null @@ -1,65 +0,0 @@ -package h_mal.appttude.com.driver.Global; - -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentTransaction; - -import h_mal.appttude.com.driver.R; - -import static h_mal.appttude.com.driver.MainActivity.fragmentManager; - -public class ExecuteFragment { - - public static final String UPLOAD_NEW = "upload_new"; - - public static void executeFragment(Fragment fragment, Bundle bundle) { - executeFragmentMethod(fragment,bundle); - } - - public static void executeFragment(Fragment fragment) { - executeFragmentMethod(fragment); - } - - public static void executeFragment(Fragment fragment, String userId) { - executeFragmentMethod(fragment,userId); - } - - public static void executeFragment(Fragment fragment, String userId, String archive) { - executeFragmentMethod(fragment,userId,archive); - } - - private static void executeFragmentMethod(Fragment f){ - FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); - fragmentTransaction.replace(R.id.container,f).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).addToBackStack(f.getClass().getSimpleName()).commit(); - } - - private static void executeFragmentMethod(Fragment f,String user_id){ - Bundle bundle = new Bundle(); - bundle.putString("user_id",user_id); - - f.setArguments(bundle); - - FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); - fragmentTransaction.replace(R.id.container,f).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).addToBackStack(f.getClass().getSimpleName()).commit(); - } - - private static void executeFragmentMethod(Fragment f,String user_id,String archive){ - Bundle bundle = new Bundle(); - bundle.putString("user_id",user_id); - bundle.putString("archive",archive); - - f.setArguments(bundle); - - FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); - fragmentTransaction.replace(R.id.container,f).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).addToBackStack(f.getClass().getSimpleName()).commit(); - } - - private static void executeFragmentMethod(Fragment f, Bundle b){ - if (b != null){ - f.setArguments(b); - } - FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); - fragmentTransaction.replace(R.id.container,f).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).addToBackStack(f.getClass().getSimpleName()).commit(); - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/FirebaseClass.java b/app/src/main/java/h_mal/appttude/com/driver/Global/FirebaseClass.java deleted file mode 100644 index 5e271b9..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Global/FirebaseClass.java +++ /dev/null @@ -1,111 +0,0 @@ -package h_mal.appttude.com.driver.Global; - -import android.app.ProgressDialog; -import android.content.Context; -import android.net.Uri; -import android.support.annotation.NonNull; -import android.util.Log; -import android.widget.Toast; - -import com.google.android.gms.tasks.Continuation; -import com.google.android.gms.tasks.OnCompleteListener; -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 static h_mal.appttude.com.driver.MainActivity.auth; -import static h_mal.appttude.com.driver.MainActivity.storageReference; - -public class FirebaseClass { - - public static final String USER_FIREBASE = "user"; - public static final String DRIVER_FIREBASE = "driver_profile"; - public static final String DRIVER_DETAILS_FIREBASE = "driver_details"; - public static final String PRIVATE_HIRE_FIREBASE = "private_hire"; - public static final String DRIVERS_LICENSE_FIREBASE = "driver_license"; - - public static final String USER_APPROVALS = "approvalsObject"; - public static final String APPROVAL_CONSTANT = "_approval"; - public static final String ARCHIVE_FIREBASE = "archive"; - - public static final String DRIVER_NUMBER = "driver_number"; - - public static final String VEHICLE_FIREBASE = "vehicle_profile"; - public static final String MOT_FIREBASE = "mot_details"; - public static final String VEHICLE_DETAILS_FIREBASE = "vehicle_details"; - public static final String INSURANCE_FIREBASE = "insurance_details"; - public static final String LOG_BOOK_FIREBASE = "log_book"; - public static final String PRIVATE_HIRE_VEHICLE_LICENSE = "private_hire_vehicle"; - - public static final int NO_DATE_PRESENT = 0; - public static final int APPROVAL_PENDING = 1; - public static final int APPROVAL_DENIED = 2; - public static final int APPROVED = 3; - - - Context context; - Uri filePath; - - public interface Response { - void processFinish(Uri output); - } - - public Response delegate; - - public FirebaseClass(Context context, Uri filePath, Response delegate) { - this.context = context; - this.filePath = filePath; - this.delegate = delegate; - } - - public void uploadImage(String path, String name) { - - if(filePath != null) { - final ProgressDialog progressDialog = new ProgressDialog(context); - progressDialog.setTitle("Uploading..."); - progressDialog.show(); - - final StorageReference ref = storageReference.child("images/"+ auth.getCurrentUser().getUid() + "/" + path - + "/" + name); - - UploadTask uploadTask = ref.putFile(filePath); - - uploadTask.addOnProgressListener(new OnProgressListener() { - @Override - public void onProgress(UploadTask.TaskSnapshot taskSnapshot) { - double progress = (100.0*taskSnapshot.getBytesTransferred()/taskSnapshot - .getTotalByteCount()); - progressDialog.setMessage("Uploaded "+(int)progress+"%"); - } - }).continueWithTask(new Continuation>() { - @Override - public Task then(@NonNull Task task) throws Exception { - if (!task.isSuccessful()) { - throw task.getException(); - } - - // Continue with the task to get the download URL - return ref.getDownloadUrl(); - } - }).addOnCompleteListener(new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - if (task.isSuccessful()) { - delegate.processFinish(task.getResult()); - progressDialog.dismiss(); - Toast.makeText(context, "Uploaded Successfully", Toast.LENGTH_SHORT).show(); - Log.i(context.getClass().getSimpleName(), "onComplete: uploaded Successful uri: " + task.getResult()); - } else { - delegate.processFinish(null); - progressDialog.dismiss(); - Toast.makeText(context, "Failed to upload", Toast.LENGTH_SHORT).show(); - Log.i(context.getClass().getSimpleName(), "onComplete: failed to get url"); - } - } - }); - - } - } - -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/FirebaseClass.kt b/app/src/main/java/h_mal/appttude/com/driver/Global/FirebaseClass.kt new file mode 100644 index 0000000..d644835 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Global/FirebaseClass.kt @@ -0,0 +1,71 @@ +package h_mal.appttude.com.driver.Global + +import android.content.Context +import android.net.Uri + +class FirebaseClass constructor(var context: Context?, var filePath: Uri?, var delegate: Response) { + open interface Response { + fun processFinish(output: Uri?) + } + + fun uploadImage(path: String, name: String) { +// if (filePath != null) { +// val progressDialog: ProgressDialog = ProgressDialog(context) +// progressDialog.setTitle("Uploading...") +// progressDialog.show() +// val ref: StorageReference = MainActivity.storageReference!!.child( +// ("images/" + MainActivity.auth!!.currentUser!! +// .uid + "/" + path +// + "/" + name) +// ) +// val uploadTask: UploadTask = ref.putFile(filePath!!) +// uploadTask.addOnProgressListener { taskSnapshot -> +// val progress: Double = +// (100.0 * taskSnapshot.bytesTransferred / taskSnapshot +// .totalByteCount) +// progressDialog.setMessage("Uploaded " + progress.toInt() + "%") +// }.continueWithTask { task -> +// if (!task.isSuccessful) { +// throw (task.exception)!! +// } +// +// // Continue with the task to get the download URL +// ref.downloadUrl +// }.addOnCompleteListener { task -> +// if (task.isSuccessful) { +// delegate.processFinish(task.result) +// progressDialog.dismiss() +// context?.displayToast("Uploaded Successfully") +// println("onComplete: uploaded Successful uri: " + task.result) +// } else { +// delegate.processFinish(null) +// progressDialog.dismiss() +// context?.displayToast("Uploaded Successfully") +// } +// } +// } + } + + companion object { + val USER_FIREBASE: String = "user" + val DRIVER_FIREBASE: String = "driver_profile" + val DRIVER_DETAILS_FIREBASE: String = "driver_details" + val PRIVATE_HIRE_FIREBASE: String = "private_hire" + val DRIVERS_LICENSE_FIREBASE: String = "driver_license" + val DRIVER_STATUS: String = "driver_status" + val USER_APPROVALS: String = "approvalsObject" + val APPROVAL_CONSTANT: String = "_approval" + val ARCHIVE_FIREBASE: String = "archive" + val DRIVER_NUMBER: String = "driver_number" + val VEHICLE_FIREBASE: String = "vehicle_profile" + val MOT_FIREBASE: String = "mot_details" + val VEHICLE_DETAILS_FIREBASE: String = "vehicle_details" + val INSURANCE_FIREBASE: String = "insurance_details" + val LOG_BOOK_FIREBASE: String = "log_book" + val PRIVATE_HIRE_VEHICLE_LICENSE: String = "private_hire_vehicle" + val NO_DATE_PRESENT: Int = 0 + val APPROVAL_PENDING: Int = 1 + val APPROVAL_DENIED: Int = 2 + val APPROVED: Int = 3 + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSelectorDialog.java b/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSelectorDialog.java deleted file mode 100644 index 835af5e..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSelectorDialog.java +++ /dev/null @@ -1,154 +0,0 @@ -package h_mal.appttude.com.driver.Global; - -import android.Manifest; -import android.app.Activity; -import android.app.Dialog; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.graphics.Bitmap; -import android.net.Uri; -import android.os.Bundle; -import android.os.Environment; -import android.provider.MediaStore; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.ActivityCompat; -import android.support.v4.app.Fragment; -import android.support.v4.content.FileProvider; -import android.support.v7.app.AppCompatActivity; -import android.view.View; -import android.view.Window; -import android.view.WindowManager; -import android.widget.Button; -import android.widget.ImageView; -import android.widget.Toast; - -import com.google.firebase.storage.FirebaseStorage; -import com.google.firebase.storage.StorageReference; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.Date; - -import h_mal.appttude.com.driver.R; - -import static android.support.v4.app.ActivityCompat.getPermissionCompatDelegate; -import static android.support.v4.app.ActivityCompat.requestPermissions; -import static android.support.v4.app.ActivityCompat.startActivityForResult; -import static android.support.v4.content.PermissionChecker.checkSelfPermission; -import static h_mal.appttude.com.driver.MainActivity.fragmentManager; -import static h_mal.appttude.com.driver.MainActivity.verifyStoragePermissions; - -public class ImageSelectorDialog extends Dialog{ - - private String TAG = this.getClass().getSimpleName(); - public static final int PICK_IMAGE_REQUEST = 71; - public static final int CAMERA_REQUEST = 1888; - public static final int MY_CAMERA_PERMISSION_CODE = 100; - public static final int STORAGE_PERMISSION_CODE = 101; - - private String saveFileName; - public static Uri photoURI; - - Fragment fragment; - - public ImageSelectorDialog(@NonNull Context context) { - super(context); - - this.saveFileName = "default_name"; - } - - public ImageSelectorDialog(@NonNull Context context, int themeResId) { - super(context, themeResId); - this.saveFileName = "default_name"; - } - - protected ImageSelectorDialog(@NonNull Context context, boolean cancelable, @Nullable DialogInterface.OnCancelListener cancelListener) { - super(context, cancelable, cancelListener); - this.saveFileName = "default_name"; - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.address_dialog); - - //check if we have we have storage rights - final int permissionPic = ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE); - final int permissionCam = ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.CAMERA); - - fragment = fragmentManager.getFragments().get(0); - - Button upload = findViewById(R.id.upload); - Button takePic = findViewById(R.id.take_pic); - - upload.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (permissionPic == PackageManager.PERMISSION_GRANTED){ - chooseImage(); - - }else { - Toast.makeText(getContext(), "Storage permissions required", Toast.LENGTH_SHORT).show(); - requestPermissions(fragment.getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, - STORAGE_PERMISSION_CODE); - } - dismiss(); - } - }); - - takePic.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (permissionCam == PackageManager.PERMISSION_GRANTED){ - Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); - File file = createFile(); - photoURI = Uri.fromFile(file); - Uri imageUri = FileProvider.getUriForFile( - getContext(), - "h_mal.appttude.com.driver", - file); - cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); - fragment.startActivityForResult(cameraIntent, CAMERA_REQUEST); - }else { - Toast.makeText(getContext(), "Camera Permissions required", Toast.LENGTH_SHORT).show(); - requestPermissions(fragment.getActivity(), new String[]{Manifest.permission.CAMERA}, - MY_CAMERA_PERMISSION_CODE); - } - dismiss(); - } - }); - - } - - public void setImageName(String saveFileName){ - this.saveFileName = saveFileName; - } - - private File createFile(){ - //create directory - File root = getContext().getExternalFilesDir(Environment.DIRECTORY_PICTURES); - //create file - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmm"); - String currentDateandTime = sdf.format(new Date()); - String fname = saveFileName+ currentDateandTime; - File image = new File(root,fname); - - return image; - - } - - private void chooseImage() { - Intent intent = new Intent(); - intent.setType("image/*"); - intent.setAction(Intent.ACTION_GET_CONTENT); - - fragment.startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST); - - } - -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSelectorDialog.kt b/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSelectorDialog.kt new file mode 100644 index 0000000..7d0cbd1 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSelectorDialog.kt @@ -0,0 +1,129 @@ +package h_mal.appttude.com.driver.Global + +import android.Manifest +import android.app.Dialog +import android.content.Context +import android.content.DialogInterface +import android.content.Intent +import android.content.pm.PackageManager +import android.icu.text.SimpleDateFormat +import android.net.Uri +import android.os.Bundle +import android.os.Environment +import android.provider.MediaStore +import android.widget.Button +import android.widget.Toast +import androidx.core.app.ActivityCompat +import androidx.core.content.FileProvider +import androidx.fragment.app.Fragment +import h_mal.appttude.com.driver.R +import java.io.File +import java.util.* + + +class ImageSelectorDialog : Dialog { + private val TAG: String = this.javaClass.simpleName + private var saveFileName: String + var fragment: Fragment? = null + + constructor(context: Context) : super(context) { + saveFileName = "default_name" + } + + constructor(context: Context, themeResId: Int) : super(context, themeResId) { + saveFileName = "default_name" + } + + protected constructor( + context: Context, + cancelable: Boolean, + cancelListener: DialogInterface.OnCancelListener? + ) : super(context, cancelable, cancelListener) { + saveFileName = "default_name" + } + + override fun onCreate(savedInstanceState: Bundle) { + super.onCreate(savedInstanceState) + setContentView(R.layout.address_dialog) + + //check if we have we have storage rights + val permissionPic: Int = ActivityCompat.checkSelfPermission( + context, + Manifest.permission.WRITE_EXTERNAL_STORAGE + ) + val permissionCam: Int = + ActivityCompat.checkSelfPermission(context, Manifest.permission.CAMERA) +// fragment = MainActivity.mainFragmentManager.fragments[0] + val upload: Button = findViewById(R.id.upload) + val takePic: Button = findViewById(R.id.take_pic) + upload.setOnClickListener { + if (permissionPic == PackageManager.PERMISSION_GRANTED) { + chooseImage() + } else { + Toast.makeText(context, "Storage permissions required", Toast.LENGTH_SHORT) + .show() + ActivityCompat.requestPermissions( + (fragment!!.requireActivity()), + arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), + STORAGE_PERMISSION_CODE + ) + } + dismiss() + } + takePic.setOnClickListener { + if (permissionCam == PackageManager.PERMISSION_GRANTED) { + val cameraIntent: Intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) + val file: File = createFile() + photoURI = Uri.fromFile(file) + val imageUri: Uri = FileProvider.getUriForFile( + context, + "h_mal.appttude.com.driver", + file + ) + cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri) + fragment!!.startActivityForResult(cameraIntent, CAMERA_REQUEST) + } else { + Toast.makeText(context, "Camera Permissions required", Toast.LENGTH_SHORT) + .show() + ActivityCompat.requestPermissions( + (fragment!!.requireActivity()), arrayOf(Manifest.permission.CAMERA), + MY_CAMERA_PERMISSION_CODE + ) + } + dismiss() + } + } + + fun setImageName(saveFileName: String) { + this.saveFileName = saveFileName + } + + private fun createFile(): File { + //create directory + val root: File = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES) + //create file + val sdf: SimpleDateFormat = SimpleDateFormat("yyyyMMdd_HHmm") + val currentDateandTime: String = sdf.format(Date()) + val fname: String = saveFileName + currentDateandTime + val image: File = File(root, fname) + return image + } + + private fun chooseImage() { + val intent: Intent = Intent() + intent.type = "image/*" + intent.action = Intent.ACTION_GET_CONTENT + fragment!!.startActivityForResult( + Intent.createChooser(intent, "Select Picture"), + PICK_IMAGE_REQUEST + ) + } + + companion object { + val PICK_IMAGE_REQUEST: Int = 71 + val CAMERA_REQUEST: Int = 1888 + val MY_CAMERA_PERMISSION_CODE: Int = 100 + val STORAGE_PERMISSION_CODE: Int = 101 + var photoURI: Uri? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSelectorResults.java b/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSelectorResults.java deleted file mode 100644 index 6ec3b61..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSelectorResults.java +++ /dev/null @@ -1,182 +0,0 @@ -package h_mal.appttude.com.driver.Global; - -import android.Manifest; -import android.app.Activity; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.graphics.Bitmap; -import android.net.Uri; -import android.os.Environment; -import android.provider.MediaStore; -import android.support.v4.app.ActivityCompat; -import android.util.Log; -import android.view.View; -import android.widget.ImageView; -import android.widget.Toast; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; - -import static android.app.Activity.RESULT_OK; -import static android.os.Environment.DIRECTORY_PICTURES; -import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.CAMERA_REQUEST; -import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.PICK_IMAGE_REQUEST; -import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.photoURI; -import static h_mal.appttude.com.driver.MainActivity.getDateStamp; - -public class ImageSelectorResults { - - Activity activity; - - public interface FilepathResponse { - void processFinish(Uri output); - } - -// public FilepathResponse delegate; - - public ImageSelectorResults() { - } - - public void Results(Activity activity, int requestCode, int resultCode, Intent data, Uri filePath, - ImageView imageView,FilepathResponse delegate){ - - this.activity = activity; - - if(requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK - && data != null && data.getData() != null ) - { - filePath = data.getData(); - Bitmap bitmap = null; - try { - bitmap = MediaStore.Images.Media.getBitmap(activity.getContentResolver(), filePath); - if (imageView.getVisibility() != View.VISIBLE) { - imageView.setVisibility(View.VISIBLE); - } - imageView.setImageBitmap(bitmap); - } - catch (IOException e) - { - e.printStackTrace(); - } - finally { - if (bitmap != null){ - delegate.processFinish(filePath); - Log.i(getClass().getSimpleName(), "Results: " + filePath); - } - } - - - } - - if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) { - //check if we have we have storage rights - int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE); - - if (permission != PackageManager.PERMISSION_GRANTED) { - Toast.makeText(activity, "Storage permissions not granted", Toast.LENGTH_SHORT).show(); - return; - }else { - - try { - File f = Environment.getExternalStoragePublicDirectory(DIRECTORY_PICTURES); - String fname = "driver"+ getDateStamp() + ".jpg"; - File image = new File(f,fname); - FileOutputStream fileOutputStream = new FileOutputStream(image); - - filePath = photoURI; - - Bitmap bitmap = MediaStore.Images.Media - .getBitmap(activity.getContentResolver(), photoURI); - - imageView.setImageBitmap(bitmap); - - bitmap.compress(Bitmap.CompressFormat.JPEG, 90,fileOutputStream); - fileOutputStream.flush(); - fileOutputStream.close(); - galleryAddPic(); - - } catch (Exception e) { - e.printStackTrace(); - } - - } - - delegate.processFinish(filePath); - Log.i(getClass().getSimpleName(), "Results: " + filePath); - } - } - - public void Results(Activity activity, int requestCode, int resultCode, Intent data, Uri filePath,FilepathResponse delegate){ - - this.activity = activity; - - if(requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK - && data != null && data.getData() != null ) - { - filePath = data.getData(); - Bitmap bitmap = null; - try { - bitmap = MediaStore.Images.Media.getBitmap(activity.getContentResolver(), filePath); - } - catch (IOException e) - { - e.printStackTrace(); - } - finally { - if (bitmap != null){ - delegate.processFinish(filePath); - Log.i(getClass().getSimpleName(), "Results: " + filePath); - } - } - } - - if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) { - //check if we have we have storage rights - int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE); - - if (permission != PackageManager.PERMISSION_GRANTED) { - Toast.makeText(activity, "Storage permissions not granted", Toast.LENGTH_SHORT).show(); - return; - }else { - - try { - File f = Environment.getExternalStoragePublicDirectory(DIRECTORY_PICTURES); - String fname = "driver"+ getDateStamp() + ".jpg"; - File image = new File(f,fname); - FileOutputStream fileOutputStream = new FileOutputStream(image); - - filePath = photoURI; - - Bitmap bitmap = MediaStore.Images.Media - .getBitmap(activity.getContentResolver(), photoURI); - - - bitmap.compress(Bitmap.CompressFormat.JPEG, 90,fileOutputStream); - fileOutputStream.flush(); - fileOutputStream.close(); - galleryAddPic(); - - } catch (Exception e) { - e.printStackTrace(); - } - - } - - delegate.processFinish(filePath); - Log.i(getClass().getSimpleName(), "Results: " + filePath); - - } - - - } - - private void galleryAddPic() { - Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); - File f = new File(photoURI.getPath()); - Uri contentUri = Uri.fromFile(f); - mediaScanIntent.setData(contentUri); - activity.sendBroadcast(mediaScanIntent); - } - -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSelectorResults.kt b/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSelectorResults.kt new file mode 100644 index 0000000..36c73f4 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSelectorResults.kt @@ -0,0 +1,159 @@ +package h_mal.appttude.com.driver.Global + +import android.Manifest +import android.app.Activity +import android.content.Intent +import android.content.pm.PackageManager +import android.graphics.Bitmap +import android.net.Uri +import android.os.Environment +import android.provider.MediaStore +import android.view.View +import android.widget.ImageView +import android.widget.Toast +import androidx.core.app.ActivityCompat +import h_mal.appttude.com.driver.utils.DateUtils.getDateStamp +import h_mal.appttude.com.driver.utils.DateUtils.getDateTimeStamp +import java.io.File +import java.io.FileOutputStream +import java.io.IOException + +class ImageSelectorResults // public FilepathResponse delegate; +{ + lateinit var activity: Activity + + interface FilepathResponse { + fun processFinish(output: Uri?) + } + + fun Results( + activity: Activity, requestCode: Int, resultCode: Int, data: Intent?, filePath: Uri?, + imageView: ImageView?, delegate: FilepathResponse + ) { + var filePath: Uri? = filePath + this.activity = activity + if ((requestCode == ImageSelectorDialog.PICK_IMAGE_REQUEST) && (resultCode == Activity.RESULT_OK + ) && (data != null) && (data.data != null) + ) { + val uri = data.data + var bitmap: Bitmap? = null + try { + bitmap = + MediaStore.Images.Media.getBitmap(activity.contentResolver, uri) + if (imageView!!.visibility != View.VISIBLE) { + imageView.visibility = View.VISIBLE + } + imageView.setImageBitmap(bitmap) + } catch (e: IOException) { + e.printStackTrace() + } finally { + if (bitmap != null) { + delegate.processFinish(uri) + } + } + } + if (requestCode == ImageSelectorDialog.CAMERA_REQUEST && resultCode == Activity.RESULT_OK) { + //check if we have we have storage rights + val permission: Int = ActivityCompat.checkSelfPermission( + (activity)!!, + Manifest.permission.WRITE_EXTERNAL_STORAGE + ) + if (permission != PackageManager.PERMISSION_GRANTED) { + Toast.makeText(activity, "Storage permissions not granted", Toast.LENGTH_SHORT) + .show() + return + } else { + try { + val f: File = + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + val fname: String = "driver" + getDateStamp() + ".jpg" + val image = File(f, fname) + val fileOutputStream = FileOutputStream(image) + filePath = ImageSelectorDialog.photoURI + val bitmap: Bitmap = MediaStore.Images.Media + .getBitmap( + activity.contentResolver, + ImageSelectorDialog.photoURI + ) + imageView!!.setImageBitmap(bitmap) + bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fileOutputStream) + fileOutputStream.flush() + fileOutputStream.close() + galleryAddPic() + } catch (e: Exception) { + e.printStackTrace() + } + } + delegate.processFinish(filePath) + } + } + + fun Results( + activity: Activity, + requestCode: Int, + resultCode: Int, + data: Intent?, + filePath: Uri?, + delegate: FilepathResponse + ) { + var filePath: Uri? = filePath + this.activity = activity + if ((requestCode == ImageSelectorDialog.PICK_IMAGE_REQUEST) && (resultCode == Activity.RESULT_OK + ) && (data != null) && (data.data != null) + ) { + filePath = data.data + var bitmap: Bitmap? = null + try { + bitmap = + MediaStore.Images.Media.getBitmap(activity.contentResolver, filePath) + } catch (e: IOException) { + e.printStackTrace() + } finally { + if (bitmap != null) { + delegate.processFinish(filePath) + } + } + } + if (requestCode == ImageSelectorDialog.CAMERA_REQUEST && resultCode == Activity.RESULT_OK) { + //check if we have we have storage rights + val permission: Int = ActivityCompat.checkSelfPermission( + (activity), + Manifest.permission.WRITE_EXTERNAL_STORAGE + ) + if (permission != PackageManager.PERMISSION_GRANTED) { + Toast.makeText(activity, "Storage permissions not granted", Toast.LENGTH_SHORT) + .show() + return + } else { + try { + val f: File = + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + val fname: String = "driver" + getDateTimeStamp() + ".jpg" + val image: File = File(f, fname) + val fileOutputStream: FileOutputStream = FileOutputStream(image) + filePath = ImageSelectorDialog.photoURI + val bitmap: Bitmap = MediaStore.Images.Media + .getBitmap( + activity.contentResolver, + ImageSelectorDialog.photoURI + ) + bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fileOutputStream) + fileOutputStream.flush() + fileOutputStream.close() + galleryAddPic() + } catch (e: Exception) { + e.printStackTrace() + } + } + delegate.processFinish(filePath) + } + } + + private fun galleryAddPic() { + val mediaScanIntent: Intent = Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE) + val f: File = File(ImageSelectorDialog.photoURI!!.path) + val contentUri: Uri = Uri.fromFile(f) + mediaScanIntent.data = contentUri + activity.sendBroadcast(mediaScanIntent) + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSwiperClass.java b/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSwiperClass.java deleted file mode 100644 index 6f92273..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSwiperClass.java +++ /dev/null @@ -1,245 +0,0 @@ -package h_mal.appttude.com.driver.Global; - -import android.app.AlertDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Bitmap; -import android.graphics.Color; -import android.graphics.drawable.Drawable; -import android.provider.ContactsContract; -import android.support.annotation.NonNull; -import android.support.v4.view.PagerAdapter; -import android.support.v4.view.ViewPager; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.animation.AlphaAnimation; -import android.widget.ImageView; -import android.widget.ProgressBar; - -import com.squareup.picasso.Picasso; -import com.squareup.picasso.Target; - -import java.util.ArrayList; -import java.util.List; - -import h_mal.appttude.com.driver.R; - -import static h_mal.appttude.com.driver.MainActivity.imageViewClass; -import static h_mal.appttude.com.driver.MainActivity.loadImage; - -public class ImageSwiperClass{ - - private static final String TAG = "ImageSwiperClass"; - - private ImageView left; - private ImageView mainImage; - private ImageView right; - - private List imageStrings; - private Context context; - - private SlidingImageViewAdapter adapter; - - ViewPager viewPager; - public ImageView delete; - - public ImageSwiperClass(Context context, View wholeView) { - this.context = context; - - left = wholeView.findViewById(R.id.left); - right = wholeView.findViewById(R.id.right); - - left.setOnClickListener(leftClick); - right.setOnClickListener(rightClick); - - viewPager = wholeView.findViewById(R.id.view_pager); - - delete = wholeView.findViewById(R.id.delete); - - viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { - @Override - public void onPageScrolled(int i, float v, int i1) { - AlphaAnimation animation1 = new AlphaAnimation(0.2f, 1.0f); - animation1.setDuration(200); - animation1.setFillAfter(true); - delete.startAnimation(animation1); - } - - @Override - public void onPageSelected(final int i) { - Log.i(TAG, "onPageSelected: position = " + i); - setArrows(); - delete.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - deleteDialog(i); - } - }); - } - - @Override - public void onPageScrollStateChanged(int i) { - - } - }); - - Log.i(TAG, "ImageSwiperClass: viewpager = " + viewPager.getId()); - } - - public List getImageStrings() { - return imageStrings; - } - - public void addPhotoString(String s){ - if (imageStrings == null){ - imageStrings = new ArrayList<>(); - } - imageStrings.add(s); - - adapter = new SlidingImageViewAdapter(); - viewPager.setAdapter(adapter); - } - - public void reinstantiateList(List imageStrings){ - this.imageStrings = imageStrings; - - adapter = new SlidingImageViewAdapter(); - viewPager.setAdapter(adapter); - - setArrows(); - } - - public void hideDelete(){ - delete.setVisibility(View.INVISIBLE); - Log.i(TAG, "hideDelete: hides deleete?"); - } - - private View.OnClickListener leftClick = new View.OnClickListener() { - @Override - public void onClick(View v) { - viewPager.setCurrentItem(viewPager.getCurrentItem() - 1); - setArrows(); - } - }; - - private View.OnClickListener rightClick = new View.OnClickListener() { - @Override - public void onClick(View v) { - viewPager.setCurrentItem(viewPager.getCurrentItem() +1); - setArrows(); - } - }; - - private void deleteDialog(final int position){ - AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setMessage("Are you sure you want to delete?") - .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - imageStrings.remove(position); - viewPager.setAdapter(adapter); -// adapter.notifyDataSetChanged(); - } - }) - .setNegativeButton(android.R.string.cancel, null) - .create() - .show(); - } - - private void setArrows(){ - if (imageStrings != null && imageStrings.size() > 0){ - //left arrow - if (viewPager.getCurrentItem() > 0){ - setAnimation(left,true); - }else{ - setAnimation(left,false); - } - - //right - if (viewPager.getCurrentItem() == imageStrings.size() -1){ - setAnimation(right,false); - }else{ - setAnimation(right,true); - } - } - if (imageStrings == null){ - setAnimation(left,false); - setAnimation(right,false); - } - } - - private void setAnimation(ImageView view,boolean up){ - float start; - float finish; - if(up){ - start = 0.2f; - finish = 1.0f; - }else { - start = 1.0f; - finish = 0.2f; - } -// if (view.getAlpha() != start){ - AlphaAnimation animation1 = new AlphaAnimation(start, finish); - animation1.setDuration(500); - animation1.setFillAfter(true); -// view.startAnimation(animation1); - view.setAlpha(finish); -// } - - } - - class SlidingImageViewAdapter extends PagerAdapter{ - - @Override - public int getCount() { - if (imageStrings == null || imageStrings.size() < 1){ - delete.setVisibility(View.GONE); - return 0; - }else { - delete.setVisibility(View.VISIBLE); - return imageStrings.size(); - } - - } - - @Override - public void destroyItem(@NonNull ViewGroup container, int position,Object object) { - if (object != null){ - container.removeView((View) object); - }else { - container.removeViewAt(position); - } - } - - @Override - public boolean isViewFromObject(@NonNull View view, @NonNull Object o) { - return view.equals(o); - } - - @NonNull - @Override - public Object instantiateItem(@NonNull ViewGroup container, final int position) { - View pagerPic = LayoutInflater.from(context).inflate(R.layout.insurance_item,container,false); - setArrows(); - - if(imageStrings != null && imageStrings.size() >0){ - mainImage = pagerPic.getRootView().findViewById(R.id.main_image); - final ProgressBar pb = pagerPic.findViewById(R.id.pb_ins); - - Picasso.get().load(imageStrings.get(position)).into(loadImage(pb,mainImage)); - - } - - container.addView(pagerPic, 0); - - return pagerPic; - } - - @Override - public void notifyDataSetChanged() { - super.notifyDataSetChanged(); - } - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSwiperClass.kt b/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSwiperClass.kt new file mode 100644 index 0000000..76e9269 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSwiperClass.kt @@ -0,0 +1,159 @@ +package h_mal.appttude.com.driver.Global + +import android.content.Context +import android.content.ContextWrapper +import android.view.View +import android.widget.ImageView +import h_mal.appttude.com.driver.R + + +class ImageSwiperClass( + private val context: Context?, + wholeView: View +) : ContextWrapper(context) { + private var left: ImageView = wholeView.findViewById(R.id.left) + private var right: ImageView = wholeView.findViewById(R.id.right) + + var list: List? = null + +// fun addLocalString(uris: List) { +// list = uris +// } +// +// fun addFirebaseStrings(uris: List) { +// list = uris +// } +// +// private var adapter: SlidingImageViewAdapter? = null +// lateinit var viewPager: ViewPager +// +// +// fun reinstantiateList(imageStrings: MutableList?) { +// this.imageStrings = imageStrings +// adapter = SlidingImageViewAdapter() +// viewPager.adapter = adapter +// setArrows() +// } +// +// fun hideDelete() { +// delete.hide() +// } +// +// private val leftClick: View.OnClickListener = View.OnClickListener { +// viewPager.currentItem = viewPager.currentItem - 1 +// setArrows() +// } +// private val rightClick: View.OnClickListener = View.OnClickListener { +// viewPager.currentItem = viewPager.currentItem + 1 +// setArrows() +// } +// +// private fun deleteDialog(position: Int) { +// val builder: AlertDialog.Builder = AlertDialog.Builder(context) +// builder.setMessage("Are you sure you want to delete?") +// .setPositiveButton( +// android.R.string.ok +// ) { _, _ -> +// imageStrings!!.removeAt(position) +// viewPager.adapter = adapter +// // adapter.notifyDataSetChanged(); +// } +// .setNegativeButton(android.R.string.cancel, null) +// .create() +// .show() +// } +// +// private fun setArrows() { +// with(list) { +// when (list) { +// isNullOrEmpty() -> { } +// isNotEmpty() -> { } +// +// } +// } +// +// if (list?.isNotEmpty()) { +// //left arrow +// if (viewPager.currentItem > 0) { +// setAnimation(left, true) +// } else { +// setAnimation(left, false) +// } +// +// //right +// if (viewPager.currentItem == imageStrings!!.size - 1) { +// setAnimation(right, false) +// } else { +// setAnimation(right, true) +// } +// } +// if (imageStrings == null) { +// setAnimation(left, false) +// setAnimation(right, false) +// } +// } +// +// private fun setAnimation(view: ImageView, up: Boolean) { +// val start: Float +// val finish: Float +// if (up) { +// start = 0.2f +// finish = 1.0f +// } else { +// start = 1.0f +// finish = 0.2f +// } +// val animation1 = AlphaAnimation(start, finish) +// animation1.duration = 500 +// animation1.fillAfter = true +// view.alpha = finish +// } +// +// internal inner class SlidingImageViewAdapter : PagerAdapter() { +// +// override fun getCount(): Int = list?.size ?: 0 +// +// override fun destroyItem(container: ViewGroup, position: Int, item: Any) { +// container.removeView(item as View?) +// } +// +// override fun isViewFromObject(view: View, o: Any): Boolean = view == o +// +// override fun instantiateItem(container: ViewGroup, position: Int): Any { +// val pagerPic: View = +// LayoutInflater.from(context).inflate(R.layout.insurance_item, container, false) +// setArrows() +// if (imageStrings != null && imageStrings!!.size > 0) { +// mainImage = pagerPic.rootView.findViewById(R.id.main_image) +// Picasso.get().load(imageStrings!!.get(position)) +// .placeholder(R.drawable.choice_img) +// .into(MainActivity.loadImage(mainImage)) +// } +// container.addView(pagerPic, 0) +// return pagerPic +// } +// } +// +// +// init { +// left.setOnClickListener(leftClick) +// right.setOnClickListener(rightClick) +// viewPager = wholeView.findViewById(R.id.view_pager) +// delete = wholeView.findViewById(R.id.delete) +// viewPager.addOnPageChangeListener(object : OnPageChangeListener { +// override fun onPageScrolled(i: Int, v: Float, i1: Int) { +// val animation1: AlphaAnimation = AlphaAnimation(0.2f, 1.0f) +// animation1.duration = 200 +// animation1.fillAfter = true +// delete.startAnimation(animation1) +// } +// +// override fun onPageSelected(i: Int) { +// setArrows() +// delete.setOnClickListener { deleteDialog(i) } +// } +// +// override fun onPageScrollStateChanged(i: Int) {} +// }) +// } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/ImageViewClass.java b/app/src/main/java/h_mal/appttude/com/driver/Global/ImageViewClass.java deleted file mode 100644 index 0dcb4b1..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Global/ImageViewClass.java +++ /dev/null @@ -1,121 +0,0 @@ -package h_mal.appttude.com.driver.Global; - -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.Color; -import android.net.Uri; -import android.os.Bundle; -import android.os.Environment; -import android.provider.MediaStore; -import android.support.design.widget.FloatingActionButton; -import android.support.v4.app.Fragment; -import android.support.v4.content.ContextCompat; -import android.support.v7.app.AppCompatActivity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.Window; -import android.view.WindowManager; -import android.widget.ImageView; - -import com.github.chrisbanes.photoview.PhotoView; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; - -import h_mal.appttude.com.driver.R; - -import static android.os.Environment.DIRECTORY_PICTURES; -import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment; -import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.photoURI; -import static h_mal.appttude.com.driver.MainActivity.getDateStamp; - -public class ImageViewClass { - - public static final String IMAGE_VALUE = "image"; - private static Bitmap bitmap; - - public ImageViewClass() { - } - - public void open(Bitmap bitmap){ - ImageViewClass.bitmap = bitmap; - executeFragment(new ImageViewerFragment()); - } - - public static class ImageViewerFragment extends Fragment { - - private View view; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - view = inflater.inflate(R.layout.fragment_image_viewer, container, false); - - FloatingActionButton fab = view.findViewById(R.id.download_pic); - - if (bitmap != null){ - PhotoView photoView = view.findViewById(R.id.photo_view); - photoView.setImageBitmap(bitmap); - - fab.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - try { - downloadPic(); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - } - }); - } - - - - return view; - } - - @Override - public void onResume() { - super.onResume(); - ((AppCompatActivity)getActivity()).getSupportActionBar().hide(); - getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); - } - @Override - public void onStop() { - super.onStop(); - ((AppCompatActivity)getActivity()).getSupportActionBar().show(); - getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); - } - - private void downloadPic() throws FileNotFoundException { - File f = Environment.getExternalStoragePublicDirectory(DIRECTORY_PICTURES); - String fname = "driver"+ getDateStamp() + ".jpg"; - File image = new File(f,fname); - FileOutputStream fileOutputStream = new FileOutputStream(image); - - bitmap.compress(Bitmap.CompressFormat.JPEG, 100,fileOutputStream); - try { - fileOutputStream.flush(); - fileOutputStream.close(); - - Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); - Uri contentUri = Uri.fromFile(image); - mediaScanIntent.setData(contentUri); - getActivity().sendBroadcast(mediaScanIntent); - } catch (IOException e) { - e.printStackTrace(); - } - } - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/ImageViewClass.kt b/app/src/main/java/h_mal/appttude/com/driver/Global/ImageViewClass.kt new file mode 100644 index 0000000..cd33774 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Global/ImageViewClass.kt @@ -0,0 +1,97 @@ +package h_mal.appttude.com.driver.Global + +import android.content.Intent +import android.graphics.Bitmap +import android.net.Uri +import android.os.Bundle +import android.os.Environment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import androidx.appcompat.app.AppCompatActivity +import androidx.fragment.app.Fragment +import com.github.chrisbanes.photoview.PhotoView +import com.google.android.material.floatingactionbutton.FloatingActionButton +import h_mal.appttude.com.driver.R +import h_mal.appttude.com.driver.utils.DateUtils +import java.io.File +import java.io.FileNotFoundException +import java.io.FileOutputStream +import java.io.IOException + + +class ImageViewClass { + fun open(bitmap: Bitmap?) { + Companion.bitmap = bitmap +// executeFragment(ImageViewerFragment()) + } + + class ImageViewerFragment : Fragment() { + private lateinit var viewer: View + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + // Inflate the layout for this fragment + viewer = inflater.inflate(R.layout.fragment_image_viewer, container, false) + val fab: FloatingActionButton = viewer.findViewById(R.id.download_pic) + if (bitmap != null) { + val photoView: PhotoView = viewer.findViewById(R.id.photo_view) + photoView.setImageBitmap(bitmap) + fab.setOnClickListener(object : View.OnClickListener { + override fun onClick(v: View) { + try { + downloadPic() + } catch (e: FileNotFoundException) { + e.printStackTrace() + } + } + }) + } + return viewer + } + + override fun onResume() { + super.onResume() + (activity as AppCompatActivity?)!!.supportActionBar!!.hide() + requireActivity().window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) + } + + override fun onStop() { + super.onStop() + (activity as AppCompatActivity?)!!.supportActionBar!!.show() + requireActivity().window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) + } + + @Throws(FileNotFoundException::class) + private fun downloadPic() { + val f: File = + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + val fname: String = "driver" + DateUtils.getDateTimeStamp() + ".jpg" + val image: File = File(f, fname) + val fileOutputStream: FileOutputStream = FileOutputStream(image) + bitmap!!.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream) + try { + fileOutputStream.flush() + fileOutputStream.close() + val mediaScanIntent: Intent = Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE) + val contentUri: Uri = Uri.fromFile(image) + mediaScanIntent.data = contentUri + requireActivity().sendBroadcast(mediaScanIntent) + } catch (e: IOException) { + e.printStackTrace() + } + } + } + + companion object { + val IMAGE_VALUE: String = "image" + private var bitmap: Bitmap? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/SetApprovalDialog.java b/app/src/main/java/h_mal/appttude/com/driver/Global/SetApprovalDialog.java deleted file mode 100644 index 7a7ae56..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Global/SetApprovalDialog.java +++ /dev/null @@ -1,155 +0,0 @@ -package h_mal.appttude.com.driver.Global; - -import android.app.Activity; -import android.app.AlertDialog; -import android.content.DialogInterface; -import android.support.annotation.NonNull; -import android.view.View; -import android.widget.ImageView; -import android.widget.Toast; - -import com.google.android.gms.tasks.OnCompleteListener; -import com.google.android.gms.tasks.Task; - -import h_mal.appttude.com.driver.R; - -import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment; -import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_CONSTANT; -import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_DENIED; -import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_PENDING; -import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVED; -import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVERS_LICENSE_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVER_DETAILS_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.INSURANCE_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.LOG_BOOK_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.MOT_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.PRIVATE_HIRE_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_APPROVALS; -import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.VEHICLE_DETAILS_FIREBASE; -import static h_mal.appttude.com.driver.MainActivity.approvalsClass; -import static h_mal.appttude.com.driver.MainActivity.mDatabase; -import static h_mal.appttude.com.driver.MainActivity.viewController; - -public class SetApprovalDialog{ - - private final String[] groupNames = {"Pending","Denied","Approved"}; - private String approvalNameString; - - public int statusCode; - private Activity activity; - private String userId; - private ImageView imageView; - - public SetApprovalDialog(int statusCode, Activity activity, String userId, int position, ImageView imageView) { - this.statusCode = statusCode; - this.activity = activity; - this.userId = userId; - this.imageView = imageView; - this.approvalNameString = getElement(position); - - init(); - } - - public void init(){ - int checkedItem; - switch (statusCode){ - case APPROVAL_PENDING: - checkedItem = 0; - break; - case APPROVAL_DENIED: - checkedItem = 1; - break; - case APPROVED: - checkedItem = 2; - break; - default: - checkedItem = -1; - break; - } - - AlertDialog.Builder alertBuilder = new AlertDialog.Builder(activity); - alertBuilder.setSingleChoiceItems(groupNames, checkedItem, singleChoiceListener); -// .setPositiveButton(android.R.string.ok, submit); - alertBuilder.create().getOwnerActivity(); - alertBuilder.show(); - } - - DialogInterface.OnClickListener singleChoiceListener = new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - switch (which) { - case 0: - statusCode = APPROVAL_PENDING; - publishStatuscode(statusCode, dialog); - return; - case 1: - statusCode = APPROVAL_DENIED; - publishStatuscode(statusCode, dialog); - return; - case 2: - statusCode = APPROVED; - publishStatuscode(statusCode, dialog); - return; - } - } - }; - - private void publishStatuscode(final int status, final DialogInterface dialog){ - viewController.progress(View.VISIBLE); - - if (!approvalNameString.equals("")){ - mDatabase.child(USER_FIREBASE).child(userId).child(USER_APPROVALS).child(approvalNameString) - .setValue(status).addOnCompleteListener(new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - if (task.isSuccessful()){ - Toast.makeText(activity, "Status change successful", Toast.LENGTH_SHORT).show(); - imageView.setImageResource(approvalsClass.setImageResource(status)); - dialog.dismiss(); - }else{ - Toast.makeText(activity, "Status change unsuccessful", Toast.LENGTH_SHORT).show(); - } - viewController.progress(View.GONE); - } - }); - }else { - Toast.makeText(activity, "Could not push status", Toast.LENGTH_SHORT).show(); - } - - } - - private String getElement(int i){ - String element = ""; - - switch (i){ - case 0: - element = DRIVER_DETAILS_FIREBASE + APPROVAL_CONSTANT; - break; - case 1: - element = DRIVERS_LICENSE_FIREBASE + APPROVAL_CONSTANT; - break; - case 2: - element = PRIVATE_HIRE_FIREBASE + APPROVAL_CONSTANT; - break; - case 3: - element = VEHICLE_DETAILS_FIREBASE + APPROVAL_CONSTANT; - break; - case 4: - element = INSURANCE_FIREBASE + APPROVAL_CONSTANT; - break; - case 5: - element = MOT_FIREBASE + APPROVAL_CONSTANT; - break; - case 6: - element = LOG_BOOK_FIREBASE + APPROVAL_CONSTANT; - break; - case 7: - element = PRIVATE_HIRE_VEHICLE_LICENSE + APPROVAL_CONSTANT; - - } - - return element; - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/SetApprovalDialog.kt b/app/src/main/java/h_mal/appttude/com/driver/Global/SetApprovalDialog.kt new file mode 100644 index 0000000..611a00b --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Global/SetApprovalDialog.kt @@ -0,0 +1,115 @@ +package h_mal.appttude.com.driver.Global + +import android.app.Activity +import android.app.AlertDialog +import android.content.DialogInterface +import android.widget.ImageView + + +class SetApprovalDialog constructor( + var statusCode: Int, + private val activity: Activity, + private val userId: String?, + position: Int, + private val imageView: ImageView +) { + private val groupNames: Array = arrayOf("Pending", "Denied", "Approved") + private val approvalNameString: String + fun init() { + val checkedItem: Int + when (statusCode) { + FirebaseClass.APPROVAL_PENDING -> checkedItem = 0 + FirebaseClass.APPROVAL_DENIED -> checkedItem = 1 + FirebaseClass.APPROVED -> checkedItem = 2 + else -> checkedItem = -1 + } + val alertBuilder: AlertDialog.Builder = AlertDialog.Builder( + activity + ) + alertBuilder.setSingleChoiceItems(groupNames, checkedItem, singleChoiceListener) + // .setPositiveButton(android.R.string.ok, submit); + alertBuilder.create().ownerActivity + alertBuilder.show() + } + + var singleChoiceListener: DialogInterface.OnClickListener = + object : DialogInterface.OnClickListener { + override fun onClick(dialog: DialogInterface, which: Int) { + when (which) { + 0 -> { + statusCode = FirebaseClass.APPROVAL_PENDING + publishStatuscode(statusCode, dialog) + return + } + 1 -> { + statusCode = FirebaseClass.APPROVAL_DENIED + publishStatuscode(statusCode, dialog) + return + } + 2 -> { + statusCode = FirebaseClass.APPROVED + publishStatuscode(statusCode, dialog) + return + } + } + } + } + + private fun publishStatuscode(status: Int, dialog: DialogInterface) { + +// if (!(approvalNameString == "")) { +// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child( +// (userId)!! +// ).child(FirebaseClass.USER_APPROVALS).child(approvalNameString) +// .setValue(status).addOnCompleteListener { task -> +// if (task.isSuccessful) { +// Toast.makeText(activity, "Status change successful", Toast.LENGTH_SHORT) +// .show() +// imageView.setImageResource( +// MainActivity.approvalsClass!!.setImageResource( +// status +// ) +// ) +// dialog.dismiss() +// } else { +// Toast.makeText( +// activity, +// "Status change unsuccessful", +// Toast.LENGTH_SHORT +// ).show() +// } +// +// } +// } else { +// Toast.makeText(activity, "Could not push status", Toast.LENGTH_SHORT).show() +// } + } + + private fun getElement(i: Int): String { + var element: String = "" + when (i) { + 0 -> element = + FirebaseClass.DRIVER_DETAILS_FIREBASE + FirebaseClass.APPROVAL_CONSTANT + 1 -> element = + FirebaseClass.DRIVERS_LICENSE_FIREBASE + FirebaseClass.APPROVAL_CONSTANT + 2 -> element = + FirebaseClass.PRIVATE_HIRE_FIREBASE + FirebaseClass.APPROVAL_CONSTANT + 3 -> element = + FirebaseClass.VEHICLE_DETAILS_FIREBASE + FirebaseClass.APPROVAL_CONSTANT + 4 -> element = + FirebaseClass.INSURANCE_FIREBASE + FirebaseClass.APPROVAL_CONSTANT + 5 -> element = + FirebaseClass.MOT_FIREBASE + FirebaseClass.APPROVAL_CONSTANT + 6 -> element = + FirebaseClass.LOG_BOOK_FIREBASE + FirebaseClass.APPROVAL_CONSTANT + 7 -> element = + FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE + FirebaseClass.APPROVAL_CONSTANT + } + return element + } + + init { + approvalNameString = getElement(position) + init() + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/ViewController.java b/app/src/main/java/h_mal/appttude/com/driver/Global/ViewController.java deleted file mode 100644 index 26e1adc..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Global/ViewController.java +++ /dev/null @@ -1,32 +0,0 @@ -package h_mal.appttude.com.driver.Global; - -import android.app.Activity; -import android.view.View; - -public class ViewController { - - private Activity activity; - - public ViewController(Activity activity) { - this.activity = activity; - } - - public void progress(int vis){ - if (activity instanceof ViewControllerInterface){ - ((ViewControllerInterface) activity).progressVisibility(vis); - } - } - - public void reloadDrawer(){ - if (activity instanceof ViewControllerInterface){ - ((ViewControllerInterface) activity).updateDrawer(); - } - } - - public interface ViewControllerInterface { - - void progressVisibility(int vis); - - void updateDrawer(); - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/MainActivity.java b/app/src/main/java/h_mal/appttude/com/driver/MainActivity.java deleted file mode 100644 index 2ffd32d..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/MainActivity.java +++ /dev/null @@ -1,397 +0,0 @@ -package h_mal.appttude.com.driver; - -import android.Manifest; -import android.app.Activity; -import android.app.Dialog; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.graphics.Bitmap; -import android.graphics.drawable.Drawable; -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.ActivityCompat; -import android.support.v4.app.FragmentManager; -import android.support.v7.app.AlertDialog; -import android.util.Log; -import android.view.View; -import android.support.design.widget.NavigationView; -import android.support.v4.view.GravityCompat; -import android.support.v4.widget.DrawerLayout; -import android.support.v7.app.ActionBarDrawerToggle; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; -import android.view.Menu; -import android.view.MenuItem; -import android.view.WindowManager; -import android.widget.ImageView; -import android.widget.ProgressBar; -import android.widget.TextView; - -import com.google.firebase.auth.FirebaseAuth; -import com.google.firebase.auth.FirebaseUser; -import com.google.firebase.database.DataSnapshot; -import com.google.firebase.database.DatabaseError; -import com.google.firebase.database.DatabaseReference; -import com.google.firebase.database.FirebaseDatabase; -import com.google.firebase.database.ValueEventListener; -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.Target; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; - -import h_mal.appttude.com.driver.Driver.DriverOverallFragment; -import h_mal.appttude.com.driver.Driver.VehicleOverallFragment; -import h_mal.appttude.com.driver.Driver.VehicleSetupFragment; -import h_mal.appttude.com.driver.Driver.DriverProfileFragment; -import h_mal.appttude.com.driver.Driver.homeDriverFragment; -import h_mal.appttude.com.driver.Global.ApprovalsClass; -import h_mal.appttude.com.driver.Global.ArchiveClass; -import h_mal.appttude.com.driver.Global.ImageViewClass; -import h_mal.appttude.com.driver.Global.ViewController; -import h_mal.appttude.com.driver.SuperUser.homeSuperUserFragment; -import h_mal.appttude.com.driver.User.LoginActivity; -import h_mal.appttude.com.driver.User.profileFragment; - -import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment; -import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; - -public class MainActivity extends AppCompatActivity - implements NavigationView.OnNavigationItemSelectedListener, ViewController.ViewControllerInterface { - - private static String TAG = MainActivity.class.getSimpleName(); - - public static FragmentManager fragmentManager; - public static FirebaseAuth auth; - public static FirebaseStorage storage; - public static StorageReference storageReference; - public static DatabaseReference mDatabase; - - public NavigationView navigationView; - ProgressBar progressBar; - public Toolbar toolbar; - - public static ViewController viewController; - public static ImageViewClass imageViewClass; - public static ApprovalsClass approvalsClass; - public static ArchiveClass archiveClass; - - private static final int REQUEST_EXTERNAL_STORAGE = 1; - private static String[] PERMISSIONS_STORAGE = { - Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.WRITE_EXTERNAL_STORAGE - }; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - - viewController = new ViewController(this); - imageViewClass = new ImageViewClass(); - approvalsClass = new ApprovalsClass(); - archiveClass = new ArchiveClass(); - - auth = FirebaseAuth.getInstance(); - storage = FirebaseStorage.getInstance(); - storageReference = storage.getReference(); - mDatabase = FirebaseDatabase.getInstance().getReference(); - - DatabaseReference ref = mDatabase.child(USER_FIREBASE) - .child(auth.getCurrentUser().getUid()) - .child("role"); - - - toolbar = (Toolbar) findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - - DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); - ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( - this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); - drawer.addDrawerListener(toggle); - toggle.syncState(); - - navigationView = (NavigationView) findViewById(R.id.nav_view); - navigationView.setNavigationItemSelectedListener(this); - setupDrawer(); - - fragmentManager = getSupportFragmentManager(); - fragmentManager.addOnBackStackChangedListener(backStackChangedListener); - - progressBar = findViewById(R.id.progress_bar); - progressBar.setVisibility(View.VISIBLE); - - ref.addListenerForSingleValueEvent(new ValueEventListener() { - @Override - public void onDataChange(@NonNull DataSnapshot dataSnapshot) { - String role = (String) dataSnapshot.getValue(); - Log.i(TAG, "onDataChange: " + role); - if (role.equals("driver")){ - executeFragment(new homeDriverFragment()); - - }else if(role.equals("super_user")){ - executeFragment(new homeSuperUserFragment()); - } - drawerMenuItems(role); - progressBar.setVisibility(View.GONE); - } - - @Override - public void onCancelled(@NonNull DatabaseError databaseError) { - progressBar.setVisibility(View.GONE); - } - }); - } - - public FragmentManager.OnBackStackChangedListener backStackChangedListener= new FragmentManager.OnBackStackChangedListener() { - @Override - public void onBackStackChanged() { - String fragmentString = fragmentManager.getFragments().get(0).getClass().getSimpleName(); - String title; - - switch (fragmentString){ - case "DriverProfileFragment": - title = "Driver Profile"; - break; - case "DriverLicenseFragment": - title = "Drivers License"; - break; - case "InsuranceFragment": - title = "Insurance"; - break; - case "logbookFragment": - title = "Logbook"; - break; - case "MotFragment": - title = "M.O.T"; - break; - case "PrivateHireLicenseFragment": - title = "Private Hire License"; - break; - case "VehicleSetupFragment": - title = "Vehicle Profile"; - break; - case "UserMainFragment": - return; - case "ArchiveFragment": - return; - default: - title = getResources().getString(R.string.app_name); - } - - setTitle(title); - } - }; - - @Override - public void setTitle(CharSequence title) { -// super.setTitle(title); - - toolbar.setTitle(title); - } - - public void drawerMenuItems(String s){ - if (s.equals("super_user")){ - Menu menu = navigationView.getMenu(); - menu.removeGroup(R.id.menu_group); - } - } - - public void setupDrawer(){ - View header = navigationView.getHeaderView(0); - - TextView driverEmail = header.findViewById(R.id.driver_email); - TextView driverName = header.findViewById(R.id.driver_name); - ImageView driverImage = header.findViewById(R.id.profileImage); - - if (auth != null){ - FirebaseUser user = auth.getCurrentUser(); - if (user.getEmail() != null){ - driverEmail.setText(user.getEmail()); - } - if (user.getDisplayName() != null){ - driverName.setText(user.getDisplayName()); - } - - Picasso.get() - .load(user.getPhotoUrl()) - .placeholder(R.drawable.choice_img_round) - .into(driverImage); - } - - TextView textView = findViewById(R.id.logout); - textView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - auth.signOut(); - Intent intent = new Intent(getApplicationContext(),LoginActivity.class); - startActivity(intent); - finish(); - } - }); - - } - - @Override - public void onBackPressed() { - DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); - if (drawer.isDrawerOpen(GravityCompat.START)) { - drawer.closeDrawer(GravityCompat.START); - } else { - if (fragmentManager.getBackStackEntryCount() > 1) { - if (fragmentManager.getFragments().get(0).getClass() - .getSimpleName().equals("InsuranceFragment")){ - new AlertDialog.Builder(this) - .setTitle("Return to previous?") - .setMessage("Progress unsaved. Are you sure?") - .setNegativeButton(android.R.string.no, null) - .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface arg0, int arg1) { - fragmentManager.popBackStack(); - } - }).create().show(); - }else{ - fragmentManager.popBackStack(); - } - - }else{ - new AlertDialog.Builder(this) - .setTitle("Leave?") - .setMessage("Are you sure you want to exit?") - .setNegativeButton(android.R.string.no, null) - .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface arg0, int arg1) { - finish(); - System.exit(0); - } - }).create().show(); - } - } - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. - int id = item.getItemId(); - - //noinspection SimplifiableIfStatement - if (id == R.id.action_settings) { - return true; - } - - return super.onOptionsItemSelected(item); - } - - @SuppressWarnings("StatementWithEmptyBody") - @Override - public boolean onNavigationItemSelected(MenuItem item) { - // Handle navigation view item clicks here. - int id = item.getItemId(); - - if (id == R.id.nav_camera) { - // Handle the camera action - executeFragment(new profileFragment()); - } else if (id == R.id.nav_gallery) { - executeFragment(new DriverOverallFragment()); - } else if (id == R.id.nav_slideshow) { - executeFragment(new VehicleOverallFragment()); - } - - DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); - drawer.closeDrawer(GravityCompat.START); - return true; - } - - public static void verifyStoragePermissions(Activity activity) { - // Check if we have write permission - int permission = 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 - ); - } - } - - public static Target loadImage (final ProgressBar pb, final ImageView mainImage){ - - Target target = new Target() { - @Override - public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) { - pb.setVisibility(View.GONE); - - mainImage.setImageBitmap(bitmap); - mainImage.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - imageViewClass.open(bitmap); - } - }); - } - - @Override - public void onBitmapFailed(Exception e, Drawable errorDrawable) { - pb.setVisibility(View.GONE); - } - - @Override - public void onPrepareLoad(Drawable placeHolderDrawable) { - pb.setVisibility(View.VISIBLE); - } - }; - mainImage.setTag(target); - - return target; - - } - - public static String getDateStamp(){ - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmm"); - return sdf.format(new Date()); - } - - public static String getDateTimeStamp(){ - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss"); - return sdf.format(new Date()); - } - - public static String setAsDateTime(String strCurrentDate) throws ParseException { - SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd_HHmmss"); - Date newDate = format.parse(strCurrentDate); - - format = new SimpleDateFormat("dd/MM/yyyy"); - return format.format(newDate); - } - - public static void printObjectAsJson(String TAG, Object o){ - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - JsonParser jp = new JsonParser(); - JsonElement je = jp.parse(new Gson().toJson(o)); - String prettyJsonString = gson.toJson(je); - - Log.i(TAG, "onBindViewHolder: object" + prettyJsonString); - } - - @Override - public void progressVisibility(int vis) { - progressBar.setVisibility(vis); - } - - @Override - public void updateDrawer() { - setupDrawer(); - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/ApprovalsObject.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/ApprovalsObject.java deleted file mode 100644 index 38d5f0e..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/ApprovalsObject.java +++ /dev/null @@ -1,59 +0,0 @@ -package h_mal.appttude.com.driver.Objects; - -public class ApprovalsObject { - - public int driver_details_approval; - public int driver_license_approval; - public int private_hire_approval; - public int vehicle_details_approval; - public int mot_details_approval; - public int insurance_details_approval; - public int log_book_approval; - public int private_hire_vehicle_approval; - - public ApprovalsObject() { - } - - public ApprovalsObject(int driver_details_approval, int driver_license_approval, int private_hire_approval, int vehicle_details_approval, int mot_details_approval, int insurance_details_approval, int log_book_approval, int private_hire_vehicle_approval) { - this.driver_details_approval = driver_details_approval; - this.driver_license_approval = driver_license_approval; - this.private_hire_approval = private_hire_approval; - this.vehicle_details_approval = vehicle_details_approval; - this.mot_details_approval = mot_details_approval; - this.insurance_details_approval = insurance_details_approval; - this.log_book_approval = log_book_approval; - this.private_hire_vehicle_approval = private_hire_vehicle_approval; - } - - public int getPh_car_approval() { - return private_hire_vehicle_approval; - } - - public int getDriver_details_approval() { - return driver_details_approval; - } - - public int getDriver_license_approval() { - return driver_license_approval; - } - - public int getPrivate_hire_approval() { - return private_hire_approval; - } - - public int getVehicle_details_approval() { - return vehicle_details_approval; - } - - public int getMot_details_approval() { - return mot_details_approval; - } - - public int getInsurance_details_approval() { - return insurance_details_approval; - } - - public int getLog_book_approval() { - return log_book_approval; - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/ApprovalsObject.kt b/app/src/main/java/h_mal/appttude/com/driver/Objects/ApprovalsObject.kt new file mode 100644 index 0000000..3d56389 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Objects/ApprovalsObject.kt @@ -0,0 +1,35 @@ +package h_mal.appttude.com.driver.Objects + + + +class ApprovalsObject { + var driver_details_approval: Int = 0 + var driver_license_approval: Int = 0 + var private_hire_approval: Int = 0 + var vehicle_details_approval: Int = 0 + var mot_details_approval: Int = 0 + var insurance_details_approval: Int = 0 + var log_book_approval: Int = 0 + var ph_car_approval: Int = 0 + + constructor() + constructor( + driver_details_approval: Int, + driver_license_approval: Int, + private_hire_approval: Int, + vehicle_details_approval: Int, + mot_details_approval: Int, + insurance_details_approval: Int, + log_book_approval: Int, + private_hire_vehicle_approval: Int + ) { + this.driver_details_approval = driver_details_approval + this.driver_license_approval = driver_license_approval + this.private_hire_approval = private_hire_approval + this.vehicle_details_approval = vehicle_details_approval + this.mot_details_approval = mot_details_approval + this.insurance_details_approval = insurance_details_approval + this.log_book_approval = log_book_approval + ph_car_approval = private_hire_vehicle_approval + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/ArchiveObject.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/ArchiveObject.java deleted file mode 100644 index 4271a41..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/ArchiveObject.java +++ /dev/null @@ -1,56 +0,0 @@ -package h_mal.appttude.com.driver.Objects; - -import java.util.HashMap; -import java.util.List; - -public class ArchiveObject { - - public HashMap driver_license; - public HashMap private_hire; - public HashMap vehicle_details; - public HashMap insurance_details; - public HashMap mot_details; - public HashMap log_book; - public HashMap private_hire_vehicle; - - public ArchiveObject() { - } - - public ArchiveObject(HashMap driver_license, HashMap private_hire, HashMap vehicle_details, HashMap insurance_details, HashMap mot_details, HashMap log_book, HashMap private_hire_vehicle) { - this.driver_license = driver_license; - this.private_hire = private_hire; - this.vehicle_details = vehicle_details; - this.insurance_details = insurance_details; - this.mot_details = mot_details; - this.log_book = log_book; - this.private_hire_vehicle = private_hire_vehicle; - } - - public HashMap getPh_car() { - return private_hire_vehicle; - } - - public HashMap getDriver_license() { - return driver_license; - } - - public HashMap getPrivate_hire() { - return private_hire; - } - - public HashMap getVehicle_details() { - return vehicle_details; - } - - public HashMap getInsurance_details() { - return insurance_details; - } - - public HashMap getMot_details() { - return mot_details; - } - - public HashMap getLog_book() { - return log_book; - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/ArchiveObject.kt b/app/src/main/java/h_mal/appttude/com/driver/Objects/ArchiveObject.kt new file mode 100644 index 0000000..c873651 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Objects/ArchiveObject.kt @@ -0,0 +1,36 @@ +package h_mal.appttude.com.driver.Objects + +import h_mal.appttude.com.driver.model.DriversLicenseObject +import h_mal.appttude.com.driver.model.MotObject +import h_mal.appttude.com.driver.model.PrivateHireObject +import h_mal.appttude.com.driver.model.VehicleProfileObject +import java.util.* + +class ArchiveObject { + var driver_license: HashMap? = null + var private_hire: HashMap? = null + var vehicle_details: HashMap? = null + var insurance_details: HashMap? = null + var mot_details: HashMap? = null + var log_book: HashMap? = null + var ph_car: HashMap? = null + + constructor() + constructor( + driver_license: HashMap?, + private_hire: HashMap?, + vehicle_details: HashMap?, + insurance_details: HashMap?, + mot_details: HashMap?, + log_book: HashMap?, + private_hire_vehicle: HashMap? + ) { + this.driver_license = driver_license + this.private_hire = private_hire + this.vehicle_details = vehicle_details + this.insurance_details = insurance_details + this.mot_details = mot_details + this.log_book = log_book + this.ph_car = private_hire_vehicle + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/DriverProfileObject.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/DriverProfileObject.java deleted file mode 100644 index d2b0b36..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/DriverProfileObject.java +++ /dev/null @@ -1,55 +0,0 @@ -package h_mal.appttude.com.driver.Objects; - -public class DriverProfileObject { - - public String driverPic; - public String forenames; - public String address; - public String postcode; - public String dob; - public String ni; - public String dateFirst; - - public DriverProfileObject() { - } - - public DriverProfileObject(String driverPic, String forenames, String address, - String postcode, String dob, String ni, String dateFirst) { - this.driverPic = driverPic; - this.forenames = forenames; - this.address = address; - this.postcode = postcode; - this.dob = dob; - this.ni = ni; - this.dateFirst = dateFirst; - } - - public String getDriverPic() { - return driverPic; - } - - public String getForenames() { - return forenames; - } - - public String getAddress() { - return address; - } - - public String getPostcode() { - return postcode; - } - - public String getDob() { - return dob; - } - - public String getNi() { - return ni; - } - - public String getDateFirst() { - return dateFirst; - } - -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/DriversLicenseObject.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/DriversLicenseObject.java deleted file mode 100644 index 70478d0..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/DriversLicenseObject.java +++ /dev/null @@ -1,29 +0,0 @@ -package h_mal.appttude.com.driver.Objects; - -public class DriversLicenseObject { - - public String licenseImageString; - public String licenseNumber; - public String licenseExpiry; - - public DriversLicenseObject() { - } - - public DriversLicenseObject(String licenseImageString, String licenseNumber, String licenseExpiry) { - this.licenseImageString = licenseImageString; - this.licenseNumber = licenseNumber; - this.licenseExpiry = licenseExpiry; - } - - public String getLicenseImageString() { - return licenseImageString; - } - - public String getLicenseNumber() { - return licenseNumber; - } - - public String getLicenseExpiry() { - return licenseExpiry; - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/InsuranceObject.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/InsuranceObject.java deleted file mode 100644 index 4fc907a..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/InsuranceObject.java +++ /dev/null @@ -1,31 +0,0 @@ -package h_mal.appttude.com.driver.Objects; - -import java.util.List; - -public class InsuranceObject { - - public List photoStrings; - public String insurerName; - public String expiryDate; - - public InsuranceObject() { - } - - public InsuranceObject(List photoStrings, String insurerName, String expiryDate) { - this.photoStrings = photoStrings; - this.insurerName = insurerName; - this.expiryDate = expiryDate; - } - - public List getPhotoStrings() { - return photoStrings; - } - - public String getInsurerName() { - return insurerName; - } - - public String getExpiryDate() { - return expiryDate; - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/InsuranceObject.kt b/app/src/main/java/h_mal/appttude/com/driver/Objects/InsuranceObject.kt new file mode 100644 index 0000000..a62dfac --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Objects/InsuranceObject.kt @@ -0,0 +1,9 @@ +package h_mal.appttude.com.driver.Objects + + + +data class InsuranceObject ( + var photoStrings: MutableList? = null, + var insurerName: String? = null, + var expiryDate: String? = null +) \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/LogbookObject.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/LogbookObject.java deleted file mode 100644 index 43ac12e..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/LogbookObject.java +++ /dev/null @@ -1,23 +0,0 @@ -package h_mal.appttude.com.driver.Objects; - -public class LogbookObject { - - public String photoString; - public String v5cnumber; - - public LogbookObject(String photoString, String v5cnumber) { - this.photoString = photoString; - this.v5cnumber = v5cnumber; - } - - public LogbookObject() { - } - - public String getPhotoString() { - return photoString; - } - - public String getV5cnumber() { - return v5cnumber; - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/LogbookObject.kt b/app/src/main/java/h_mal/appttude/com/driver/Objects/LogbookObject.kt new file mode 100644 index 0000000..c0a9e53 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Objects/LogbookObject.kt @@ -0,0 +1,15 @@ +package h_mal.appttude.com.driver.Objects + + + +class LogbookObject { + var photoString: String? = null + var v5cnumber: String? = null + + constructor(photoString: String?, v5cnumber: String?) { + this.photoString = photoString + this.v5cnumber = v5cnumber + } + + constructor() +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/MotObject.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/MotObject.java deleted file mode 100644 index d895221..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/MotObject.java +++ /dev/null @@ -1,23 +0,0 @@ -package h_mal.appttude.com.driver.Objects; - -public class MotObject { - - public String motImageString; - public String motExpiry; - - public MotObject() { - } - - public MotObject(String motImageString, String motExpiry) { - this.motImageString = motImageString; - this.motExpiry = motExpiry; - } - - public String getMotImageString() { - return motImageString; - } - - public String getMotExpiry() { - return motExpiry; - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/PrivateHireObject.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/PrivateHireObject.java deleted file mode 100644 index c222ead..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/PrivateHireObject.java +++ /dev/null @@ -1,29 +0,0 @@ -package h_mal.appttude.com.driver.Objects; - -public class PrivateHireObject { - - public String phImageString; - public String phNumber; - public String phExpiry; - - public PrivateHireObject() { - } - - public PrivateHireObject(String phImageString, String phNumber, String phExpiry) { - this.phImageString = phImageString; - this.phNumber = phNumber; - this.phExpiry = phExpiry; - } - - public String getPhImageString() { - return phImageString; - } - - public String getPhNumber() { - return phNumber; - } - - public String getPhExpiry() { - return phExpiry; - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/PrivateHireVehicleObject.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/PrivateHireVehicleObject.java deleted file mode 100644 index 5389b90..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/PrivateHireVehicleObject.java +++ /dev/null @@ -1,29 +0,0 @@ -package h_mal.appttude.com.driver.Objects; - -public class PrivateHireVehicleObject { - - public String phCarImageString; - public String phCarNumber; - public String phCarExpiry; - - public PrivateHireVehicleObject(String phCarImageString, String phCarNumber, String phCarExpiry) { - this.phCarImageString = phCarImageString; - this.phCarNumber = phCarNumber; - this.phCarExpiry = phCarExpiry; - } - - public PrivateHireVehicleObject() { - } - - public String getPhCarImageString() { - return phCarImageString; - } - - public String getPhCarNumber() { - return phCarNumber; - } - - public String getPhCarExpiry() { - return phCarExpiry; - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/PrivateHireVehicleObject.kt b/app/src/main/java/h_mal/appttude/com/driver/Objects/PrivateHireVehicleObject.kt new file mode 100644 index 0000000..c3a754a --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Objects/PrivateHireVehicleObject.kt @@ -0,0 +1,9 @@ +package h_mal.appttude.com.driver.Objects + + + +class PrivateHireVehicleObject( + var phCarImageString: String? = null, + var phCarNumber: String? = null, + var phCarExpiry: String? = null +) \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/UserObject.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/UserObject.java deleted file mode 100644 index 9f77738..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/UserObject.java +++ /dev/null @@ -1,29 +0,0 @@ -package h_mal.appttude.com.driver.Objects; - -public class UserObject { - - public String profileName; - public String profileEmail; - public String profilePicString; - - public UserObject() { - } - - public UserObject(String profileName, String profileEmail, String profilePicString) { - this.profileName = profileName; - this.profileEmail = profileEmail; - this.profilePicString = profilePicString; - } - - public String getProfileName() { - return profileName; - } - - public String getProfileEmail() { - return profileEmail; - } - - public String getProfilePicString() { - return profilePicString; - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/UserObject.kt b/app/src/main/java/h_mal/appttude/com/driver/Objects/UserObject.kt new file mode 100644 index 0000000..eb33dc3 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Objects/UserObject.kt @@ -0,0 +1,16 @@ +package h_mal.appttude.com.driver.Objects + + + +class UserObject { + var profileName: String? = null + var profileEmail: String? = null + var profilePicString: String? = null + + constructor() + constructor(profileName: String?, profileEmail: String?, profilePicString: String?) { + this.profileName = profileName + this.profileEmail = profileEmail + this.profilePicString = profilePicString + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/VehicleProfileObject.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/VehicleProfileObject.java deleted file mode 100644 index 3349076..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/VehicleProfileObject.java +++ /dev/null @@ -1,67 +0,0 @@ -package h_mal.appttude.com.driver.Objects; - -public class VehicleProfileObject { - - public String reg; - public String make; - public String model; - public String colour; - public String keeperName; - public String keeperAddress; - public String keeperPostCode; - public String startDate; - public boolean seized; - - public VehicleProfileObject() { - } - - public VehicleProfileObject(String reg, String make, String model, String colour, String keeperName, - String keeperAddress, String keeperPostCode, String startDate, boolean seized) { - this.reg = reg; - this.make = make; - this.model = model; - this.colour = colour; - this.keeperName = keeperName; - this.keeperAddress = keeperAddress; - this.keeperPostCode = keeperPostCode; - this.startDate = startDate; - this.seized = seized; - } - - public String getReg() { - return reg; - } - - public String getMake() { - return make; - } - - public String getModel() { - return model; - } - - public String getColour() { - return colour; - } - - public String getKeeperName() { - return keeperName; - } - - public String getKeeperAddress() { - return keeperAddress; - } - - public String getKeeperPostCode() { - return keeperPostCode; - } - - public String getStartDate() { - return startDate; - } - - public boolean isSeized() { - return seized; - } - -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeDriverObject.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeDriverObject.java deleted file mode 100644 index 62a776f..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeDriverObject.java +++ /dev/null @@ -1,59 +0,0 @@ -package h_mal.appttude.com.driver.Objects; - -import h_mal.appttude.com.driver.Objects.ApprovalsObject; -import h_mal.appttude.com.driver.Objects.ArchiveObject; -import h_mal.appttude.com.driver.Objects.UserObject; -import h_mal.appttude.com.driver.Objects.WholeObject.DriverProfile; -import h_mal.appttude.com.driver.Objects.WholeObject.VehicleProfile; - -public class WholeDriverObject { - - public DriverProfile driver_profile; - public String role; - public ArchiveObject archive; - public UserObject user_details; - public VehicleProfile vehicle_profile; - public ApprovalsObject approvalsObject; - public String driver_number; - - public WholeDriverObject(DriverProfile driver_profile, String role, ArchiveObject archive, UserObject user_details, VehicleProfile vehicle_profile, ApprovalsObject approvalsObject, String driver_number) { - this.driver_profile = driver_profile; - this.role = role; - this.archive = archive; - this.user_details = user_details; - this.vehicle_profile = vehicle_profile; - this.approvalsObject = approvalsObject; - this.driver_number = driver_number; - } - - public WholeDriverObject() { - } - - public String getDriver_number() { - return driver_number; - } - - public ArchiveObject getArchive() { - return archive; - } - - public DriverProfile getDriver_profile() { - return driver_profile; - } - - public String getRole() { - return role; - } - - public UserObject getUser_details() { - return user_details; - } - - public VehicleProfile getVehicle_profile() { - return vehicle_profile; - } - - public ApprovalsObject getApprovalsObject() { - return approvalsObject; - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeDriverObject.kt b/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeDriverObject.kt new file mode 100644 index 0000000..4bfd816 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeDriverObject.kt @@ -0,0 +1,35 @@ +package h_mal.appttude.com.driver.Objects + +import h_mal.appttude.com.driver.Objects.WholeObject.DriverProfile +import h_mal.appttude.com.driver.Objects.WholeObject.VehicleProfile + + +class WholeDriverObject { + var driver_profile: DriverProfile? = null + var role: String? = null + var archive: ArchiveObject? = null + var user_details: UserObject? = null + var vehicle_profile: VehicleProfile? = null + var approvalsObject: ApprovalsObject? = null + var driver_number: String? = null + + constructor( + driver_profile: DriverProfile?, + role: String?, + archive: ArchiveObject?, + user_details: UserObject?, + vehicle_profile: VehicleProfile?, + approvalsObject: ApprovalsObject?, + driver_number: String? + ) { + this.driver_profile = driver_profile + this.role = role + this.archive = archive + this.user_details = user_details + this.vehicle_profile = vehicle_profile + this.approvalsObject = approvalsObject + this.driver_number = driver_number + } + + constructor() +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/DriverProfile.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/DriverProfile.java deleted file mode 100644 index 17de05a..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/DriverProfile.java +++ /dev/null @@ -1,33 +0,0 @@ -package h_mal.appttude.com.driver.Objects.WholeObject; - -import h_mal.appttude.com.driver.Objects.DriverProfileObject; -import h_mal.appttude.com.driver.Objects.DriversLicenseObject; -import h_mal.appttude.com.driver.Objects.PrivateHireObject; - -public class DriverProfile { - - public DriverProfileObject driver_profile; - public DriversLicenseObject driver_license; - public PrivateHireObject private_hire; - - public DriverProfile(DriverProfileObject driver_profile, DriversLicenseObject driver_license, PrivateHireObject private_hire) { - this.driver_profile = driver_profile; - this.driver_license = driver_license; - this.private_hire = private_hire; - } - - public DriverProfile() { - } - - public DriverProfileObject getDriver_profile() { - return driver_profile; - } - - public DriversLicenseObject getDriver_license() { - return driver_license; - } - - public PrivateHireObject getPrivate_hire() { - return private_hire; - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/DriverProfile.kt b/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/DriverProfile.kt new file mode 100644 index 0000000..94cdadf --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/DriverProfile.kt @@ -0,0 +1,24 @@ +package h_mal.appttude.com.driver.Objects.WholeObject + +import h_mal.appttude.com.driver.model.DriverProfileObject +import h_mal.appttude.com.driver.model.DriversLicenseObject +import h_mal.appttude.com.driver.model.PrivateHireObject + + +class DriverProfile { + var driver_profile: DriverProfileObject? = null + var driver_license: DriversLicenseObject? = null + var private_hire: PrivateHireObject? = null + + constructor( + driver_profile: DriverProfileObject?, + driver_license: DriversLicenseObject?, + private_hire: PrivateHireObject? + ) { + this.driver_profile = driver_profile + this.driver_license = driver_license + this.private_hire = private_hire + } + + constructor() +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/MappedObject.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/MappedObject.java deleted file mode 100644 index 582abd0..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/MappedObject.java +++ /dev/null @@ -1,56 +0,0 @@ -package h_mal.appttude.com.driver.Objects.WholeObject; - -import android.os.Parcel; -import android.os.Parcelable; - -import h_mal.appttude.com.driver.Objects.WholeDriverObject; - -public class MappedObject implements Parcelable { - - public String userId; - public WholeDriverObject wholeDriverObject; - - public MappedObject(String userId, WholeDriverObject wholeDriverObject) { - this.userId = userId; - this.wholeDriverObject = wholeDriverObject; - } - - public MappedObject() { - } - - protected MappedObject(Parcel in) { - userId = in.readString(); - } - - public static final Creator CREATOR = new Creator() { - @Override - public MappedObject createFromParcel(Parcel in) { - return new MappedObject(in); - } - - @Override - public MappedObject[] newArray(int size) { - return new MappedObject[size]; - } - }; - - public String getUserId() { - return userId; - } - - public WholeDriverObject getWholeDriverObject() { - return wholeDriverObject; - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeString(userId); - } - - -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/MappedObject.kt b/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/MappedObject.kt new file mode 100644 index 0000000..140ad51 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/MappedObject.kt @@ -0,0 +1,41 @@ +package h_mal.appttude.com.driver.Objects.WholeObject + +import android.os.Parcel +import android.os.Parcelable +import h_mal.appttude.com.driver.Objects.WholeDriverObject + + +class MappedObject : Parcelable { + var userId: String? = null + var wholeDriverObject: WholeDriverObject? = null + + constructor(userId: String?, wholeDriverObject: WholeDriverObject?) { + this.userId = userId + this.wholeDriverObject = wholeDriverObject + } + + constructor() + protected constructor(`in`: Parcel) { + userId = `in`.readString() + } + + override fun describeContents(): Int { + return 0 + } + + override fun writeToParcel(dest: Parcel, flags: Int) { + dest.writeString(userId) + } + + companion object { + val CREATOR: Parcelable.Creator = object : Parcelable.Creator { + override fun createFromParcel(`in`: Parcel): MappedObject? { + return MappedObject(`in`) + } + + override fun newArray(size: Int): Array { + return arrayOfNulls(size) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/VehicleProfile.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/VehicleProfile.java deleted file mode 100644 index f02023c..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/VehicleProfile.java +++ /dev/null @@ -1,55 +0,0 @@ -package h_mal.appttude.com.driver.Objects.WholeObject; - -import h_mal.appttude.com.driver.Objects.InsuranceObject; -import h_mal.appttude.com.driver.Objects.LogbookObject; -import h_mal.appttude.com.driver.Objects.MotObject; -import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject; -import h_mal.appttude.com.driver.Objects.VehicleProfileObject; - -public class VehicleProfile { - - public InsuranceObject insurance_details; - public LogbookObject log_book; - public MotObject mot_details; - public VehicleProfileObject vehicle_details; - public PrivateHireVehicleObject private_hire_vehicle; - - public VehicleProfile() { - } - -// public VehicleProfile(InsuranceObject insurance_details, LogbookObject log_book, MotObject mot_details, VehicleProfileObject vehicle_details) { -// this.insurance_details = insurance_details; -// this.log_book = log_book; -// this.mot_details = mot_details; -// this.vehicle_details = vehicle_details; -// } - - public VehicleProfile(InsuranceObject insurance_details, LogbookObject log_book, MotObject mot_details, VehicleProfileObject vehicle_details, PrivateHireVehicleObject private_hire_vehicle) { - this.insurance_details = insurance_details; - this.log_book = log_book; - this.mot_details = mot_details; - this.vehicle_details = vehicle_details; - this.private_hire_vehicle = private_hire_vehicle; - } - - - public PrivateHireVehicleObject getPrivateHireVehicleObject() { - return private_hire_vehicle; - } - - public InsuranceObject getInsurance_details() { - return insurance_details; - } - - public LogbookObject getLog_book() { - return log_book; - } - - public MotObject getMot_details() { - return mot_details; - } - - public VehicleProfileObject getVehicle_details() { - return vehicle_details; - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/VehicleProfile.kt b/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/VehicleProfile.kt new file mode 100644 index 0000000..b004b9b --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/VehicleProfile.kt @@ -0,0 +1,38 @@ +package h_mal.appttude.com.driver.Objects.WholeObject + +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 { + var insurance_details: InsuranceObject? = null + var log_book: LogbookObject? = null + var mot_details: MotObject? = null + var vehicle_details: VehicleProfileObject? = null + var privateHireVehicleObject: PrivateHireVehicleObject? = null + + constructor() + + // public VehicleProfile(InsuranceObject insurance_details, LogbookObject log_book, MotObject mot_details, VehicleProfileObject vehicle_details) { + // this.insurance_details = insurance_details; + // this.log_book = log_book; + // this.mot_details = mot_details; + // this.vehicle_details = vehicle_details; + // } + constructor( + insurance_details: InsuranceObject?, + log_book: LogbookObject?, + mot_details: MotObject?, + vehicle_details: VehicleProfileObject?, + private_hire_vehicle: PrivateHireVehicleObject? + ) { + this.insurance_details = insurance_details + this.log_book = log_book + this.mot_details = mot_details + this.vehicle_details = vehicle_details + privateHireVehicleObject = private_hire_vehicle + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/ApprovalListAdapter.java b/app/src/main/java/h_mal/appttude/com/driver/SuperUser/ApprovalListAdapter.java deleted file mode 100644 index a3ecdb3..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/ApprovalListAdapter.java +++ /dev/null @@ -1,305 +0,0 @@ -package h_mal.appttude.com.driver.SuperUser; - -import android.app.Activity; -import android.content.Context; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; -import android.util.DisplayMetrics; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ArrayAdapter; -import android.widget.ImageView; -import android.widget.TextView; - -import h_mal.appttude.com.driver.Archive.ArchiveFragment; -import h_mal.appttude.com.driver.Driver.DriverLicenseFragment; -import h_mal.appttude.com.driver.Driver.InsuranceFragment; -import h_mal.appttude.com.driver.Driver.MotFragment; -import h_mal.appttude.com.driver.Driver.PrivateHireLicenseFragment; -import h_mal.appttude.com.driver.Driver.PrivateHireVehicleFragment; -import h_mal.appttude.com.driver.Driver.VehicleSetupFragment; -import h_mal.appttude.com.driver.Driver.DriverProfileFragment; -import h_mal.appttude.com.driver.Driver.logbookFragment; -import h_mal.appttude.com.driver.Global.SetApprovalDialog; -import h_mal.appttude.com.driver.Objects.ApprovalsObject; -import h_mal.appttude.com.driver.Objects.ArchiveObject; -import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject; -import h_mal.appttude.com.driver.Objects.WholeDriverObject; -import h_mal.appttude.com.driver.R; - -import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment; -import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVERS_LICENSE_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.INSURANCE_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.LOG_BOOK_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.MOT_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.NO_DATE_PRESENT; -import static h_mal.appttude.com.driver.Global.FirebaseClass.PRIVATE_HIRE_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.VEHICLE_DETAILS_FIREBASE; -import static h_mal.appttude.com.driver.MainActivity.approvalsClass; -import static h_mal.appttude.com.driver.MainActivity.archiveClass; - -public class ApprovalListAdapter extends ArrayAdapter { - - private String TAG = "ApprovalListAdapter"; - - String [] names = {"Driver Profile","Driver License","Private Hire","Vehicle Profile","Insurance","MOT","Logbook","P/H Vehicle"}; - - MappedObject mappedObject; - Activity activity; - int approvalCode; - - public ApprovalListAdapter(@NonNull Activity activity, @NonNull MappedObject[] objects) { - super(activity, 0, objects); - this.mappedObject = objects[0]; - this.activity = activity; - - } - - @NonNull - @Override - public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) { - View listItemView = convertView; - if (listItemView == null) { - listItemView = LayoutInflater.from(activity).inflate( - R.layout.approval_list_grid_item, parent, false); - } - - approvalCode = getApprovalStatusCode(position); - - TextView textView = listItemView.findViewById(R.id.approval_text); - textView.setText(names[position]); - - final ImageView imageView = listItemView.findViewById(R.id.approval_iv); - imageView.setImageResource(approvalsClass.setImageResource(approvalCode)); - - imageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new SetApprovalDialog(approvalCode,activity,mappedObject.getUserId(),position,imageView); - } - }); - - ImageView archiveImage = listItemView.findViewById(R.id.archive_icon); - if (mappedObject.getWholeDriverObject().archive != null){ - Log.i(TAG, "getView: archive = " + getArchive(position,mappedObject.getWholeDriverObject().getArchive())); - archiveImage.setVisibility(getArchive(position,mappedObject.getWholeDriverObject().getArchive())); - archiveImage.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - String s = null; - switch (position){ - case 1: - s = DRIVERS_LICENSE_FIREBASE; - break; - case 2: - s = PRIVATE_HIRE_FIREBASE; - break; - case 3: - s = VEHICLE_DETAILS_FIREBASE; - break; - case 4: - s = INSURANCE_FIREBASE; - break; - case 5: - s = MOT_FIREBASE; - break; - case 6: - s = LOG_BOOK_FIREBASE; - break; - case 7: - s = PRIVATE_HIRE_VEHICLE_LICENSE; - break; - - } - executeFragment(new ArchiveFragment(),mappedObject.getUserId(),s); - } - }); - } - - listItemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - getFragment(position); - } - }); - - listItemView.setMinimumHeight(parent.getHeight()/4); - listItemView.setPadding((int)convertDpToPixel(9,getContext()), - (int)convertDpToPixel(9,getContext()), - (int)convertDpToPixel(9,getContext()), - (int)convertDpToPixel(9,getContext())); - - return listItemView; - - } - - @Override - public int getCount() { - return 8; - } - - private int getArchive(int i, ArchiveObject archiveObject){ - Object o = null; - int visible; - - switch (i){ - case 0: - break; - case 1: - o = archiveObject.driver_license; - break; - case 2: - o = archiveObject.private_hire; - break; - case 3: - o = archiveObject.vehicle_details; - break; - case 4: - o = archiveObject.insurance_details; - break; - case 5: - o = archiveObject.mot_details; - break; - case 6: - o = archiveObject.log_book; - break; - case 7: - o = archiveObject.private_hire_vehicle; - - } - - if (o != null){ - visible = View.VISIBLE; - }else{ - visible = View.GONE; - } - - return visible; - } - - private void getFragment(int i){ - Fragment f = null; - WholeDriverObject wholeDriverObject = mappedObject.getWholeDriverObject(); - Object o = null; - switch (i) { - case 0: - f = new DriverProfileFragment(); - if (wholeDriverObject.driver_profile != null && wholeDriverObject.getDriver_profile().driver_profile != null) { - o = wholeDriverObject.getDriver_profile().getDriver_profile(); - } - break; - case 1: - f = new DriverLicenseFragment(); - if (wholeDriverObject.driver_profile != null && wholeDriverObject.getDriver_profile().driver_license != null) { - o = wholeDriverObject.getDriver_profile().getDriver_license(); - } - break; - case 2: - f = new PrivateHireLicenseFragment(); - if (wholeDriverObject.driver_profile != null && wholeDriverObject.getDriver_profile().private_hire != null) { - o = wholeDriverObject.getDriver_profile().getPrivate_hire(); - } - break; - case 3: - f = new VehicleSetupFragment(); - if (wholeDriverObject.vehicle_profile != null && wholeDriverObject.getVehicle_profile().vehicle_details != null){ - o = wholeDriverObject.getVehicle_profile().getVehicle_details(); - } - break; - case 4: - f = new InsuranceFragment(); - if (wholeDriverObject.vehicle_profile != null && wholeDriverObject.getVehicle_profile().insurance_details != null){ - o = wholeDriverObject.getVehicle_profile().getInsurance_details(); - } - break; - case 5: - f = new MotFragment(); - if (wholeDriverObject.vehicle_profile != null && wholeDriverObject.getVehicle_profile().mot_details != null){ - o = wholeDriverObject.getVehicle_profile().getMot_details(); - } - break; - case 6: - f = new logbookFragment(); - if (wholeDriverObject.vehicle_profile != null && wholeDriverObject.getVehicle_profile().log_book != null){ - o = wholeDriverObject.getVehicle_profile().getLog_book(); - } - break; - case 7: - f = new PrivateHireVehicleFragment(); - if (wholeDriverObject.vehicle_profile != null && wholeDriverObject.getVehicle_profile().private_hire_vehicle != null){ - o = wholeDriverObject.getVehicle_profile().getPrivateHireVehicleObject(); - } - break; - } - - if (o == null){ - executeFragment(f,mappedObject.getUserId()); - }else { - archiveClass.openDialogArchive(getContext(),o - ,mappedObject.getUserId(),f); - } - - } - - private int getApprovalStatusCode(int i){ - int statusCode = NO_DATE_PRESENT; - - if (mappedObject.getWholeDriverObject().approvalsObject != null){ - ApprovalsObject approvalsObject = mappedObject.getWholeDriverObject().getApprovalsObject(); - - switch (i) { - case 0: - if (approvalsObject.driver_details_approval != 0) { - statusCode = approvalsObject.getDriver_details_approval(); - } - break; - case 1: - if (approvalsObject.driver_license_approval != 0) { - statusCode = approvalsObject.getDriver_license_approval(); - } - break; - case 2: - if (approvalsObject.private_hire_approval != 0) { - statusCode = approvalsObject.getPrivate_hire_approval(); - } - break; - case 3: - if (approvalsObject.vehicle_details_approval != 0) { - statusCode = approvalsObject.getVehicle_details_approval(); - } - break; - case 4: - if (approvalsObject.insurance_details_approval != 0) { - statusCode = approvalsObject.getInsurance_details_approval(); - } - break; - case 5: - if (approvalsObject.mot_details_approval != 0) { - statusCode = approvalsObject.getMot_details_approval(); - } - break; - case 6: - if (approvalsObject.log_book_approval != 0) { - statusCode = approvalsObject.getLog_book_approval(); - } - break; - case 7: - if (approvalsObject.private_hire_vehicle_approval != 0) { - statusCode = approvalsObject.getPh_car_approval(); - } - break; - } - } - - return statusCode; - } - - public static float convertDpToPixel(float dp, Context context){ - return dp * ((float) context.getResources().getDisplayMetrics().densityDpi / DisplayMetrics.DENSITY_DEFAULT); - } - -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/ApprovalListAdapter.kt b/app/src/main/java/h_mal/appttude/com/driver/SuperUser/ApprovalListAdapter.kt new file mode 100644 index 0000000..13b8dac --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/SuperUser/ApprovalListAdapter.kt @@ -0,0 +1,205 @@ +package h_mal.appttude.com.driver.SuperUser + +import android.app.Activity +import android.content.Context +import android.util.DisplayMetrics +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ArrayAdapter +import android.widget.ImageView +import android.widget.TextView +import androidx.fragment.app.Fragment +import h_mal.appttude.com.driver.Global.FirebaseClass +import h_mal.appttude.com.driver.Global.SetApprovalDialog +import h_mal.appttude.com.driver.ui.driver.MainActivity +import h_mal.appttude.com.driver.Objects.ArchiveObject +import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject +import h_mal.appttude.com.driver.R +import h_mal.appttude.com.driver.ui.driver.vehicleprofile.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( + val activity: Activity, + objects: Array +): ArrayAdapter(activity, 0, objects) { + + var mappedObject: MappedObject = objects[0] + + var names: Array = arrayOf( + "Driver Profile", + "Driver License", + "Private Hire", + "Vehicle Profile", + "Insurance", + "MOT", + "Logbook", + "P/H Vehicle" + ) + + + var approvalCode: Int = 0 + override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { + var listItemView: View? = convertView + if (listItemView == null) { + listItemView = LayoutInflater.from(activity).inflate( + R.layout.approval_list_grid_item, parent, false + ) + } +// approvalCode = getApprovalStatusCode(position) +// val textView: TextView = listItemView!!.findViewById(R.id.approval_text) +// textView.text = names.get(position) +// val imageView: ImageView = listItemView.findViewById(R.id.approval_iv) +// imageView.setImageResource( +// MainActivity.approvalsClass!!.setImageResource( +// approvalCode +// ) +// ) +// imageView.setOnClickListener { +// SetApprovalDialog( +// approvalCode, +// activity, +// mappedObject.userId, +// position, +// imageView +// ) +// } +// val archiveImage: ImageView = listItemView.findViewById(R.id.archive_icon) +// mappedObject.wholeDriverObject?.archive?.let { +// +// +// archiveImage.visibility = getArchive( +// position, +// it +// ) +// archiveImage.setOnClickListener { +// var s: String? = null +// when (position) { +// 1 -> s = FirebaseClass.DRIVERS_LICENSE_FIREBASE +// 2 -> s = FirebaseClass.PRIVATE_HIRE_FIREBASE +// 3 -> s = FirebaseClass.VEHICLE_DETAILS_FIREBASE +// 4 -> s = FirebaseClass.INSURANCE_FIREBASE +// 5 -> s = FirebaseClass.MOT_FIREBASE +// 6 -> s = FirebaseClass.LOG_BOOK_FIREBASE +// 7 -> s = FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE +// } +//// executeFragment(ArchiveFragment(), mappedObject.userId, s) +// } +// } +// listItemView.setOnClickListener(View.OnClickListener { getFragment(position) }) +// listItemView.minimumHeight = parent.height / 4 +// listItemView.setPadding( +// convertDpToPixel(9f, context).toInt(), +// convertDpToPixel(9f, context).toInt(), +// convertDpToPixel(9f, context).toInt(), +// convertDpToPixel(9f, context).toInt() +// ) + return (listItemView)!! + } + +// override fun getCount(): Int { +// return 8 +// } +// +// private fun getArchive(i: Int, archiveObject: ArchiveObject?): Int { +// var o: Any? = null +// val visible: Int +// when (i) { +// 0 -> { } +// 1 -> o = archiveObject!!.driver_license +// 2 -> o = archiveObject!!.private_hire +// 3 -> o = archiveObject!!.vehicle_details +// 4 -> o = archiveObject!!.insurance_details +// 5 -> o = archiveObject!!.mot_details +// 6 -> o = archiveObject!!.log_book +// 7 -> o = archiveObject!!.ph_car +// } +// if (o != null) { +// visible = View.VISIBLE +// } else { +// visible = View.GONE +// } +// return visible +// } +// +// private fun getFragment(i: Int) { +// lateinit var f: Fragment +// val driverProfile by lazy { mappedObject.wholeDriverObject?.driver_profile } +// val vehicleProfile by lazy { mappedObject.wholeDriverObject?.vehicle_profile } +// val o: Any? = when (i) { +// 0 -> { +// f = DriverProfileFragment() +// driverProfile?.driver_profile +// } +// 1 -> { +// f = DriverLicenseFragment() +// driverProfile?.driver_license +// } +// 2 -> { +// f = PrivateHireLicenseFragment() +// driverProfile?.private_hire +// } +// 3 -> { +// f = VehicleProfileFragment() +// vehicleProfile?.vehicle_details +// } +// 4 -> { +// f = InsuranceFragment() +// vehicleProfile?.insurance_details +// } +// 5 -> { +// f = MotFragment() +// vehicleProfile?.insurance_details +// } +// 6 -> { +// f = LogbookFragment() +// vehicleProfile?.log_book +// } +// 7 -> { +// f = PrivateHireVehicleFragment() +// vehicleProfile?.privateHireVehicleObject +// } +// else -> null +// } +// if (o == null) { +//// executeFragment(f, mappedObject.userId) +// } else { +// MainActivity.archiveClass.openDialogArchive( +// context, o, mappedObject.userId, f +// ) +// } +// } +// +// private fun getApprovalStatusCode(i: Int): Int { +// val statusCode = mappedObject.wholeDriverObject?.approvalsObject?.let{ +// when (i) { +// 0 -> it.driver_details_approval +// 1 -> it.driver_license_approval +// 2 -> it.private_hire_approval +// 3 -> it.vehicle_details_approval +// 4 -> it.insurance_details_approval +// 5 -> it.mot_details_approval +// 6 -> it.log_book_approval +// 7 -> it.ph_car_approval +// else -> FirebaseClass.NO_DATE_PRESENT +// } +// } +// return statusCode ?: FirebaseClass.NO_DATE_PRESENT +// } +// +// companion object { +// fun convertDpToPixel(dp: Float, context: Context): Float { +// return dp * (context.resources +// .displayMetrics.densityDpi.toFloat() / DisplayMetrics.DENSITY_DEFAULT) +// } +// } + + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/DriverStatusClass.kt b/app/src/main/java/h_mal/appttude/com/driver/SuperUser/DriverStatusClass.kt new file mode 100644 index 0000000..42994b5 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/SuperUser/DriverStatusClass.kt @@ -0,0 +1,107 @@ +package h_mal.appttude.com.driver.SuperUser + +import android.app.AlertDialog +import android.content.Context +import android.view.View +import androidx.cardview.widget.CardView + + +class DriverStatusClass : View.OnClickListener { + var userId: String? = null + var cardView: CardView? = null + var context: Context? = null + var currentSelection: Boolean = false + override fun onClick(v: View) { + val choices: Array = arrayOf("Active", "Inactive") + val alertDialog: AlertDialog.Builder = AlertDialog.Builder(context) + var selection: Int = -1 + if (currentSelection) { + selection = 0 + } else if (!currentSelection) { + selection = 1 + } + alertDialog.setSingleChoiceItems( + choices, + selection + ) { dialog, which -> } + alertDialog.create().show() + } + + private fun SetStatus(status: Boolean) { +// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE) +// .child((userId)!!).child(FirebaseClass.DRIVER_STATUS).setValue(status) +// .addOnCompleteListener { task -> +// if (task.isSuccessful) { +// cardView!!.setBackgroundColor(setStatusColour(status)) +// } else { +// } +// } + } + + private fun setStatusColour(b: Boolean): Int { + if (b) { + return android.R.color.holo_green_dark + } else { + return android.R.color.holo_red_dark + } + } // public int getOverApprovalStatusCode(WholeDriverObject wholeDriverObject){ + // + // if (wholeDriverObject.approvalsObject != null){ + // ApprovalsObject approvalsObject = wholeDriverObject.approvalsObject; + // + // int[] ints = new int[]{approvalsObject.getDriver_details_approval(), + // approvalsObject.driver_license_approval, + // approvalsObject.private_hire_approval, + // approvalsObject.vehicle_details_approval, + // approvalsObject.insurance_details_approval, + // approvalsObject.mot_details_approval, + // approvalsObject.log_book_approval, + // approvalsObject.ph_car_approval}; + // + // + // return setImageResource(mode(ints)); + // } + // + // return setImageResource(NO_DATE_PRESENT); + // } + // + // public void setStatusCode(String userId,String approvalNameString,int status){ + // + // if (!approvalNameString.equals("")) { + // mDatabase.child(USER_FIREBASE).child(userId).child(USER_APPROVALS).child(approvalNameString) + // .setValue(status).addOnCompleteListener(new OnCompleteListener() { + // @Override + // public void onComplete(@NonNull Task task) { + // if (task.isSuccessful()) { + // + // } else { + // + // } + // } + // }); + // } + // + // + // } + // + // public int setImageResource(int statusCode){ + // int imageResource; + // + // switch (statusCode){ + // case APPROVAL_PENDING: + // imageResource = R.drawable.pending; + // break; + // case APPROVAL_DENIED: + // imageResource = R.drawable.denied; + // break; + // case APPROVED: + // imageResource = R.drawable.approved; + // break; + // default: + // imageResource = R.drawable.zero; + // break; + // } + // + // return imageResource; + // } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/ListViewSuperAdapter.java b/app/src/main/java/h_mal/appttude/com/driver/SuperUser/ListViewSuperAdapter.java deleted file mode 100644 index e1255d6..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/ListViewSuperAdapter.java +++ /dev/null @@ -1,182 +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.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ArrayAdapter; -import android.widget.EditText; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.ProgressBar; -import android.widget.TextView; -import android.widget.Toast; - -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.Target; - -import java.io.ByteArrayOutputStream; -import java.io.FileInputStream; -import java.util.List; - -import h_mal.appttude.com.driver.Objects.UserObject; -import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject; -import h_mal.appttude.com.driver.R; - -import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment; -import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVER_NUMBER; -import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; -import static h_mal.appttude.com.driver.MainActivity.approvalsClass; -import static h_mal.appttude.com.driver.MainActivity.imageViewClass; -import static h_mal.appttude.com.driver.MainActivity.loadImage; -import static h_mal.appttude.com.driver.MainActivity.mDatabase; - -public class ListViewSuperAdapter extends ArrayAdapter { - - public ListViewSuperAdapter(@NonNull Context context, @NonNull List objects) { - super(context, 0, objects); - } - - @NonNull - @Override - public View getView(int i, @Nullable View convertView, @NonNull ViewGroup parent) { - View listItemView = convertView; - if (listItemView == null) { - listItemView = LayoutInflater.from(getContext()).inflate( - R.layout.list_item_layout, parent, false); - - - } - - Log.i("getviewposition", "getView: pos = " + i); - - final ImageView profilePicImage = listItemView.findViewById(R.id.driverPic); - final ProgressBar progressBar = listItemView.findViewById(R.id.pb_su_list); - TextView userNameTextView = listItemView.findViewById(R.id.username_text); - TextView userEmailTextView = listItemView.findViewById(R.id.emailaddress_text); - ImageView profileApprovalImage = listItemView.findViewById(R.id.approval_iv); - final TextView driverNo = listItemView.findViewById(R.id.driver_no); - final MappedObject mappedObject = getItem(i); - - final UserObject object = mappedObject.getWholeDriverObject().getUser_details(); - - if (object.profilePicString != null){ - Picasso.get() - .load(object.getProfilePicString()) - .resize(128,128) - .placeholder(R.drawable.choice_img_round) - .into(new Target() { - @Override - public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { - progressBar.setVisibility(View.GONE); - profilePicImage.setImageBitmap(bitmap); - - } - - @Override - public void onBitmapFailed(Exception e, Drawable errorDrawable) { - progressBar.setVisibility(View.GONE); - } - - @Override - public void onPrepareLoad(Drawable placeHolderDrawable) { - 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.setText("0"); - }else { - String s = String.valueOf(mappedObject.getWholeDriverObject().getDriver_number()); - driverNo.setText(s); - } - - - driverNo.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); - final EditText input = new EditText(getContext()); - LinearLayout layout = new LinearLayout(getContext()); - layout.setOrientation(LinearLayout.VERTICAL); - layout.setPadding(28,0,56,0); - input.setText(driverNo.getText().toString()); - input.setSelectAllOnFocus(true); - layout.addView(input); - builder.setTitle("Change Driver Number") - .setView(layout) - .setPositiveButton("Submit", new DialogInterface.OnClickListener() { - @Override - public void onClick(final DialogInterface dialog, int which) { - DatabaseReference reference = mDatabase.child(USER_FIREBASE).child(mappedObject.getUserId()) - .child(DRIVER_NUMBER); - Log.i("Dialog Driver no", "onClick: " + reference.toString()); - - reference.setValue(input.getText().toString()).addOnCompleteListener(new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - if (task.isSuccessful()){ - Toast.makeText(getContext(), "Driver Number Changed", Toast.LENGTH_SHORT).show(); - dialog.dismiss(); - notifyDataSetChanged(); - Log.i("Dialog Driver no", "onComplete: " + task.getResult()); - }else { - Log.e("Dialog Driver no", "onComplete: ", task.getException()); - } - - } - }); - } - } - ).create() - .show(); - } - }); - - profileApprovalImage.setImageResource( - approvalsClass.getOverApprovalStatusCode(mappedObject.getWholeDriverObject())); - - - listItemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Bundle bundle = new Bundle(); - bundle.putParcelable("mapped",mappedObject); - - executeFragment(new UserMainFragment(),bundle); - } - }); - - return listItemView; - } - - private boolean hasImage(@NonNull ImageView view) { - Drawable drawable = view.getDrawable(); - boolean hasImage = (drawable != null); - - if (hasImage && (drawable instanceof BitmapDrawable)) { - hasImage = ((BitmapDrawable)drawable).getBitmap() != null; - } - - return hasImage; - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/RecyclerViewAdapter.kt b/app/src/main/java/h_mal/appttude/com/driver/SuperUser/RecyclerViewAdapter.kt new file mode 100644 index 0000000..89ed7ba --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/SuperUser/RecyclerViewAdapter.kt @@ -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.ui.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?) : + RecyclerView.Adapter() { + 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) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/UserMainFragment.java b/app/src/main/java/h_mal/appttude/com/driver/SuperUser/UserMainFragment.java deleted file mode 100644 index 826cd81..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/UserMainFragment.java +++ /dev/null @@ -1,49 +0,0 @@ -package h_mal.appttude.com.driver.SuperUser; - -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.widget.GridView; -import android.widget.ListView; - -import h_mal.appttude.com.driver.Archive.ArchiveFragment; -import h_mal.appttude.com.driver.Global.ExecuteFragment; -import h_mal.appttude.com.driver.MainActivity; -import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject; -import h_mal.appttude.com.driver.R; - -public class UserMainFragment extends Fragment { - - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - View view = inflater.inflate(R.layout.fragment_user_main, container, false); - - Log.i("UserMain", "onCreateView: height = " + view.getHeight()); - - MappedObject mappedObject = getArguments().getParcelable("mapped"); - - getActivity().setTitle(mappedObject.getWholeDriverObject().getUser_details().getProfileName()); - -// ListView listView = view.findViewById(R.id.approvals_list); - GridView listView = view.findViewById(R.id.approvals_list); - listView.setAdapter(new ApprovalListAdapter(getActivity(), new MappedObject[]{mappedObject})); - - return view; - } - - -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/UserMainFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/SuperUser/UserMainFragment.kt new file mode 100644 index 0000000..6d02df9 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/SuperUser/UserMainFragment.kt @@ -0,0 +1,30 @@ +package h_mal.appttude.com.driver.SuperUser + +import android.os.Bundle +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.GridView +import androidx.fragment.app.Fragment +import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject +import h_mal.appttude.com.driver.R + + +class UserMainFragment : Fragment() { + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + // Inflate the layout for this fragment + val view: View = inflater.inflate(R.layout.fragment_user_main, container, false) + Log.i("UserMain", "onCreateView: height = " + view.height) + val mappedObject: MappedObject = requireArguments().getParcelable("mapped") + activity?.title = mappedObject.wholeDriverObject?.user_details?.profileName + + val listView: GridView = view.findViewById(R.id.approvals_list) + listView.adapter = ApprovalListAdapter(requireActivity(), arrayOf(mappedObject)) + return view + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/homeSuperUserFragment.java b/app/src/main/java/h_mal/appttude/com/driver/SuperUser/homeSuperUserFragment.java deleted file mode 100644 index 61556b6..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/homeSuperUserFragment.java +++ /dev/null @@ -1,186 +0,0 @@ -package h_mal.appttude.com.driver.SuperUser; - -import android.app.AlertDialog; -import android.content.DialogInterface; -import android.content.SharedPreferences; -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ListView; - -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 java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject; -import h_mal.appttude.com.driver.Objects.WholeDriverObject; -import h_mal.appttude.com.driver.R; - -import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; -import static h_mal.appttude.com.driver.MainActivity.approvalsClass; -import static h_mal.appttude.com.driver.MainActivity.mDatabase; -import static h_mal.appttude.com.driver.MainActivity.printObjectAsJson; -import static h_mal.appttude.com.driver.MainActivity.viewController; - - -public class homeSuperUserFragment extends Fragment { - - DatabaseReference users; - ListViewSuperAdapter listViewSuperAdapter; - - List mappedObjectList; - private SharedPreferences sharedPreferences; - private int sortOrder; - private boolean sortDesc; - private static final String SORT = "SORT"; - private static final String REVERSED = "REVERSED"; - private static final String TAG = "homeSuperUserFragment"; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setHasOptionsMenu(true); - - users = mDatabase.child(USER_FIREBASE); - mappedObjectList = new ArrayList<>(); - - viewController.progress(View.VISIBLE); - users.addValueEventListener(valueEventListener); - - sharedPreferences = getActivity().getSharedPreferences("PREFS", 0); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - View view = inflater.inflate(R.layout.fragment_home_super_user, container, false); - - final ListView list = view.findViewById(R.id.list_view_super); - - listViewSuperAdapter = new ListViewSuperAdapter(getContext(),mappedObjectList); - list.setAdapter(listViewSuperAdapter); - - return view; - } - - ValueEventListener valueEventListener = new ValueEventListener() { - @Override - public void onDataChange(@NonNull DataSnapshot snapshot) { - mappedObjectList.clear(); - Log.i("Count " ,""+snapshot.getChildrenCount()); - for (DataSnapshot postSnapshot: snapshot.getChildren()) { - if (postSnapshot.child("role").getValue().toString().equals("driver")){ - printObjectAsJson("object",postSnapshot.toString()); - mappedObjectList.add(new MappedObject(postSnapshot.getKey(),postSnapshot.getValue(WholeDriverObject.class))); - } - } - sortDate(sortOrder,sortDesc); - viewController.progress(View.GONE); - } - - @Override - public void onCancelled(@NonNull DatabaseError databaseError) { - viewController.progress(View.GONE); - } - - - }; - - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - inflater.inflate(R.menu.menu_calls_fragment, menu); - super.onCreateOptionsMenu(menu, inflater); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - if (item.getItemId() == R.id.archive){ - final String[] grpname = {"Driver Name","Driver Number","Approval"}; - sortOrder = sharedPreferences.getInt(SORT,0); - int checkedItem = sortOrder; - final int[] compareInt = {0}; - - final AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); - builder.setTitle("Sort by:") - .setSingleChoiceItems(grpname, checkedItem, new DialogInterface - .OnClickListener() { - public void onClick(DialogInterface dialog, int item) { - switch (item) { - case 0: - compareInt[0] = 0; - return; - case 1: - compareInt[0] = 1; - return; - case 2: - compareInt[0] = 2; - } - } - }).setPositiveButton("Ascending", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - sortDate(compareInt[0],false); - dialog.dismiss(); - } - }).setNegativeButton("Descending", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - sortDate(compareInt[0],true); - dialog.dismiss(); - } - }) - .create().show(); - } - - return super.onOptionsItemSelected(item); - } - - private void sortDate(final int compareInt, boolean reversed){ - Log.i(TAG, "sortDate: " + compareInt + " - " + reversed); - Comparator comparator = new Comparator() { - @Override - public int compare(MappedObject o1, MappedObject o2) { - switch (compareInt){ - case 0: - return o1.getWholeDriverObject().getUser_details().getProfileName().compareTo( - o2.getWholeDriverObject().getUser_details().getProfileName()); - case 1: - return o1.getWholeDriverObject().getDriver_number() - .compareTo(o2.getWholeDriverObject().getDriver_number()); - case 2: - return approvalsClass.getOverApprovalStatusCode(o1.wholeDriverObject) - - approvalsClass.getOverApprovalStatusCode(o2.wholeDriverObject); - default: - return approvalsClass.getOverApprovalStatusCode(o1.wholeDriverObject) - - approvalsClass.getOverApprovalStatusCode(o2.wholeDriverObject); - } - } - }; - - sharedPreferences.edit().putInt(SORT,compareInt).apply(); - sharedPreferences.edit().putBoolean(REVERSED,reversed).apply(); - - if (reversed){ - Collections.sort(mappedObjectList,comparator.reversed()); - }else { - Collections.sort(mappedObjectList,comparator); - } - - listViewSuperAdapter.notifyDataSetChanged(); - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/homeSuperUserFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/SuperUser/homeSuperUserFragment.kt new file mode 100644 index 0000000..56b67a5 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/SuperUser/homeSuperUserFragment.kt @@ -0,0 +1,152 @@ +package h_mal.appttude.com.driver.SuperUser + +import android.app.AlertDialog +import android.content.DialogInterface +import android.content.SharedPreferences +import android.os.Bundle +import android.util.Log +import android.view.* +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.LinearLayoutManager +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.ui.driver.MainActivity +import h_mal.appttude.com.driver.Objects.WholeDriverObject +import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject +import h_mal.appttude.com.driver.R +import kotlinx.android.synthetic.main.fragment_home_super_user.* +import java.io.IOException +import java.util.* + + +class homeSuperUserFragment : Fragment() { + var users: DatabaseReference? = null + var mappedObjectList: MutableList? = null + private var sharedPreferences: SharedPreferences? = null + private var sortOrder: Int = 0 + private val sortDesc: Boolean = false + private var recyclerViewAdapter: RecyclerViewAdapter? = null + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setHasOptionsMenu(true) + mappedObjectList = ArrayList() + users!!.addValueEventListener(valueEventListener) + sharedPreferences = requireActivity().getSharedPreferences("PREFS", 0) + } + + 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_super_user, container, false) + + recycler_view.apply { + layoutManager = LinearLayoutManager(context) + recyclerViewAdapter = RecyclerViewAdapter(context, mappedObjectList) + adapter = recyclerViewAdapter + } + + return view + } + + var valueEventListener: ValueEventListener = object : ValueEventListener { + override fun onDataChange(snapshot: DataSnapshot) { + mappedObjectList!!.clear() + Log.i("Count ", "" + snapshot.childrenCount) + for (postSnapshot: DataSnapshot in snapshot.children) { + if ((postSnapshot.child("role").value.toString() == "driver")) { + mappedObjectList!!.add( + MappedObject( + postSnapshot.key, postSnapshot.getValue( + WholeDriverObject::class.java + ) + ) + ) + } + } + sortDate(sortOrder, sortDesc) + + } + + override fun onCancelled(databaseError: DatabaseError) { + + } + } + + override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + inflater.inflate(R.menu.menu_calls_fragment, menu) + super.onCreateOptionsMenu(menu, inflater) + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + if (item.itemId == R.id.archive) { + val grpname: Array = arrayOf("Driver Name", "Driver Number", "Approval") + sortOrder = sharedPreferences!!.getInt(SORT, 0) + val checkedItem: Int = sortOrder + var compareInt = 0 + val click = DialogInterface.OnClickListener { dialog, _ -> + sortDate(compareInt, false) + dialog.dismiss() + } + val builder: AlertDialog.Builder = AlertDialog.Builder(context) + builder.setTitle("Sort by:") + .setSingleChoiceItems( + grpname, + checkedItem + ) { _, pos -> compareInt = pos } + .setPositiveButton("Ascending", click) + .setNegativeButton("Descending", click) + .create().show() + } + return super.onOptionsItemSelected(item) + } + + private fun sortDate(compareInt: Int, reversed: Boolean) { + val comparator: Comparator = object : Comparator { + override fun compare(o1: MappedObject, o2: MappedObject): Int { + when (compareInt) { + 0 -> return o1.wholeDriverObject?.user_details?.profileName!!.compareTo( + o2.wholeDriverObject?.user_details?.profileName!! + ) + 1 -> { + var s1: String? = o1.wholeDriverObject?.driver_number + var s2: String? = o2.wholeDriverObject?.driver_number + if (o1.wholeDriverObject?.driver_number == null || (o1.wholeDriverObject!! + .driver_number == "0") + ) { + s1 = ";" + } + if (o2.wholeDriverObject?.driver_number == null || (o2.wholeDriverObject!! + .driver_number == "0") + ) { + s2 = ";" + } + return s1!!.compareTo((s2)!!) + } + else -> { throw IOException("dfdfs") } +// 2 -> return MainActivity.approvalsClass.getOverApprovalStatusCode(o1.wholeDriverObject) - +// MainActivity.approvalsClass.getOverApprovalStatusCode(o2.wholeDriverObject) +// else -> return MainActivity.approvalsClass.getOverApprovalStatusCode( +// o1.wholeDriverObject +// ) - MainActivity.approvalsClass.getOverApprovalStatusCode(o2.wholeDriverObject) + } + } + } + sharedPreferences!!.edit().putInt(SORT, compareInt).apply() + sharedPreferences!!.edit().putBoolean(REVERSED, reversed).apply() + if (reversed) { + Collections.sort(mappedObjectList, comparator.reversed()) + } else { + Collections.sort(mappedObjectList, comparator) + } + recyclerViewAdapter!!.notifyDataSetChanged() + } + + companion object { + private val SORT: String = "SORT" + private val REVERSED: String = "REVERSED" + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/User/LoginActivity.java b/app/src/main/java/h_mal/appttude/com/driver/User/LoginActivity.java deleted file mode 100644 index 734e245..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/User/LoginActivity.java +++ /dev/null @@ -1,208 +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.support.annotation.NonNull; -import android.support.v7.app.AppCompatActivity; - -import android.os.Build; -import android.os.Bundle; -import android.text.TextUtils; -import android.view.KeyEvent; -import android.view.View; -import android.view.View.OnClickListener; -import android.view.inputmethod.EditorInfo; -import android.widget.Button; -import android.widget.EditText; -import android.widget.TextView; -import android.widget.Toast; - -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.AuthResult; -import com.google.firebase.auth.FirebaseAuth; - -import h_mal.appttude.com.driver.MainActivity; -import h_mal.appttude.com.driver.R; - -/** - * A login screen that offers login via email/password. - */ -public class LoginActivity extends AppCompatActivity{ - - private String TAG = "LoginActivity"; - private FirebaseAuth auth; - - // UI references. - private EditText mEmailView; - private EditText mPasswordView; - private View mProgressView; - private View mLoginView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_login); - - auth = FirebaseAuth.getInstance(); - - // Set up the login form. - mEmailView = findViewById(R.id.email); - - mPasswordView = (EditText) findViewById(R.id.password); - mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() { - @Override - public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) { - if (id == EditorInfo.IME_ACTION_DONE || id == EditorInfo.IME_NULL) { - attemptLogin(); - return true; - } - return false; - } - }); - - - Button mEmailSignInButton = (Button) findViewById(R.id.email_sign_in_button); - mEmailSignInButton.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View view) { - attemptLogin(); - } - }); - - mProgressView = findViewById(R.id.login_progress); - mLoginView = findViewById(R.id.email_login_form); - - TextView register = findViewById(R.id.register_button); - register.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - Intent intent = new Intent(getApplication(),RegisterActivity.class); - startActivity(intent); - } - }); - - TextView forgotPw = findViewById(R.id.forgot); - forgotPw.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - Intent intent = new Intent(getApplication(),forgotPasswordActivity.class); - 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 void attemptLogin() { - if (auth == null) { - Toast.makeText(this, "Login invalid", Toast.LENGTH_SHORT).show(); - return; - } - - // Reset errors. - mEmailView.setError(null); - mPasswordView.setError(null); - - // Store values at the time of the login attempt. - String email = mEmailView.getText().toString(); - String password = mPasswordView.getText().toString(); - - boolean cancel = false; - View focusView = null; - - // Check for a valid password, if the user entered one. - if (!TextUtils.isEmpty(password) && !isPasswordValid(password)) { - mPasswordView.setError(getString(R.string.error_invalid_password)); - focusView = mPasswordView; - cancel = true; - } - - // Check for a valid email address. - if (TextUtils.isEmpty(email)) { - mEmailView.setError(getString(R.string.error_field_required)); - focusView = mEmailView; - cancel = true; - } else if (!isEmailValid(email)) { - mEmailView.setError(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(new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - showProgress(false); - if (task.isSuccessful()){ - Intent intent = new Intent(LoginActivity.this,MainActivity.class); - startActivity(intent); - finish(); - }else { - Toast.makeText(LoginActivity.this, getString(R.string.login_failed), Toast.LENGTH_SHORT).show(); - } - - } - } - ); - } - } - - private boolean isEmailValid(String email) { - //TODO: Replace this with your own logic - return email.contains("@"); - } - - private boolean isPasswordValid(String password) { - //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 void showProgress(final boolean show) { - // 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. - - int shortAnimTime = getResources().getInteger(android.R.integer.config_shortAnimTime); - - mLoginView.setVisibility(show ? View.GONE : View.VISIBLE); - mLoginView.animate().setDuration(shortAnimTime).alpha( - show ? 0 : 1).setListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - mLoginView.setVisibility(show ? View.GONE : View.VISIBLE); - } - }); - - mProgressView.setVisibility(show ? View.VISIBLE : View.GONE); - mProgressView.animate().setDuration(shortAnimTime).alpha( - show ? 1 : 0).setListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - mProgressView.setVisibility(show ? View.VISIBLE : View.GONE); - } - }); - } - - -} - diff --git a/app/src/main/java/h_mal/appttude/com/driver/User/RegisterActivity.java b/app/src/main/java/h_mal/appttude/com/driver/User/RegisterActivity.java deleted file mode 100644 index 5cabe1e..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/User/RegisterActivity.java +++ /dev/null @@ -1,161 +0,0 @@ -package h_mal.appttude.com.driver.User; - -import android.content.Intent; -import android.support.annotation.NonNull; -import android.support.v7.app.AppCompatActivity; -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 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.MainActivity; -import h_mal.appttude.com.driver.Objects.UserObject; -import h_mal.appttude.com.driver.R; - -import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; - -public class RegisterActivity extends AppCompatActivity { - - private FirebaseAuth auth; - private EditText name; - private EditText email; - private EditText passwordTop; - private EditText passwordBottom; - private ProgressBar progressBar; - - @Override - protected void onCreate(Bundle savedInstanceState) { - 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); - Button submit = findViewById(R.id.email_sign_up); - - submit.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - - final String nameString = name.getText().toString().trim(); - String emailText = email.getText().toString().trim(); - String passwordText = passwordTop.getText().toString().trim(); - String passwordTextBottom = passwordBottom.getText().toString().trim(); - - boolean cancel = false; - View focusView = 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.equals(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(RegisterActivity.this, new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - progressBar.setVisibility(View.GONE); - if (!task.isSuccessful()) { - Toast.makeText(RegisterActivity.this, "Authentication failed." + task.getException(), - Toast.LENGTH_SHORT).show(); - } else { - - UserProfileChangeRequest.Builder profileUpdatesBuilder = new UserProfileChangeRequest.Builder(); - - if (!TextUtils.isEmpty(nameString)){ - profileUpdatesBuilder.setDisplayName(nameString); - } - - UserProfileChangeRequest profileUpdates = profileUpdatesBuilder.build(); - - auth.getCurrentUser().updateProfile(profileUpdates).addOnCompleteListener(new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - if (task.isSuccessful()){ - Log.i("RegisterActivity", "onComplete: " + task.isSuccessful()); - - DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference(); - - mDatabase.child(USER_FIREBASE).child(auth.getCurrentUser().getUid()).child("role") - .setValue("driver"); - mDatabase.child(USER_FIREBASE).child(auth.getCurrentUser().getUid()).child("user_details") - .setValue(new UserObject(auth.getCurrentUser().getDisplayName(),auth.getCurrentUser().getEmail(),null)); - - Intent intent = new Intent(RegisterActivity.this,MainActivity.class); - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); - startActivity(intent); - finish(); - } - - } - }); - - - } - } - }); - } - - } - }); - } - - private boolean isPasswordValid(String password) { - //TODO: Replace this with your own logic - return password.length() > 6; - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/User/forgotPasswordActivity.java b/app/src/main/java/h_mal/appttude/com/driver/User/forgotPasswordActivity.java deleted file mode 100644 index 5b63689..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/User/forgotPasswordActivity.java +++ /dev/null @@ -1,59 +0,0 @@ -package h_mal.appttude.com.driver.User; - -import android.support.annotation.NonNull; -import android.support.v4.app.NavUtils; -import android.support.v7.app.AppCompatActivity; -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 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; - -public class forgotPasswordActivity extends AppCompatActivity { - - String TAG = "forgotPasswordActivity"; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_forgot_password); - - final EditText editText = findViewById(R.id.reset_pw); - - final Button resetPw = findViewById(R.id.reset_pw_sign_up); - resetPw.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - resetPassword(editText.getText().toString().trim()); - } - }); - - } - - - private void resetPassword(String emailAddress){ - FirebaseAuth auth = FirebaseAuth.getInstance(); - - auth.sendPasswordResetEmail(emailAddress) - .addOnCompleteListener(new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - if (task.isSuccessful()) { - Log.d(TAG, "Email sent."); - - NavUtils.navigateUpFromSameTask(forgotPasswordActivity.this); - finish(); - }else { - Toast.makeText(forgotPasswordActivity.this, "Could not reset Password", Toast.LENGTH_SHORT).show(); - } - } - }); - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/User/profileFragment.java b/app/src/main/java/h_mal/appttude/com/driver/User/profileFragment.java deleted file mode 100644 index a7d4374..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/User/profileFragment.java +++ /dev/null @@ -1,251 +0,0 @@ -package h_mal.appttude.com.driver.User; - -import android.app.AlertDialog; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.net.Uri; -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -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.Button; -import android.widget.EditText; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; -import android.widget.Toast; - -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.AuthCredential; -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 com.google.firebase.storage.FirebaseStorage; -import com.google.firebase.storage.StorageReference; -import com.squareup.picasso.Picasso; - -import h_mal.appttude.com.driver.Global.ImageSelectorDialog; -import h_mal.appttude.com.driver.Global.ImageSelectorResults; -import h_mal.appttude.com.driver.Global.ViewController; -import h_mal.appttude.com.driver.Objects.UserObject; -import h_mal.appttude.com.driver.R; - -import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVER_DETAILS_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVER_FIREBASE; -import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; -import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.CAMERA_REQUEST; -import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE; -import static h_mal.appttude.com.driver.MainActivity.auth; -import static h_mal.appttude.com.driver.MainActivity.fragmentManager; -import static h_mal.appttude.com.driver.MainActivity.mDatabase; - -public class profileFragment extends Fragment { - - private String TAG = this.getClass().getSimpleName(); - - private TextView email; - private TextView name; - private TextView changePw; - - private FirebaseUser user; - private DatabaseReference databaseReference; - - private static final String EMAIL_CONSTANT = "Email Address"; - private static final String PW_CONSTANT = "Password"; - - ViewController viewController; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - viewController = new ViewController(getActivity()); - - user = auth.getCurrentUser(); - databaseReference = mDatabase.child(USER_FIREBASE).child(user.getUid()) - .child(DRIVER_FIREBASE).child(DRIVER_DETAILS_FIREBASE) - .child("driverPic"); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - View 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); - - Button button = view.findViewById(R.id.submit_profile); - button.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - fragmentManager.popBackStack(); - } - }); - - name.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - AlertDialog.Builder dialog = new AlertDialog.Builder(getContext()); - dialog.setTitle("Update Username"); - - final EditText titleBox = new EditText(getContext()); - titleBox.setText(user.getDisplayName()); - dialog.setView(titleBox); - dialog.setPositiveButton("Update", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - updateProfile(titleBox.getText().toString().trim()); - } - }); - dialog.show(); - - } - }); - - email.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - showDialog(EMAIL_CONSTANT); - } - }); - - changePw.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - showDialog(PW_CONSTANT); - } - }); - - return view; - } - - private void updateProfile(String profileName){ - UserProfileChangeRequest.Builder profileUpdatesBuilder = new UserProfileChangeRequest.Builder(); - - if (!TextUtils.isEmpty(profileName)){ - profileUpdatesBuilder.setDisplayName(profileName); - } - - UserProfileChangeRequest profileUpdates = profileUpdatesBuilder.build(); - - user.updateProfile(profileUpdates) - .addOnCompleteListener(new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - if (task.isSuccessful()) { - Log.d(TAG, "User profile updated."); - viewController.reloadDrawer(); - } - } - }) - .addOnFailureListener(new OnFailureListener() { - @Override - public void onFailure(@NonNull Exception e) { - Toast.makeText(getContext(), "Update Failed", Toast.LENGTH_SHORT).show(); - } - }); - - - } - - private void changeCredentials(String email, String password, final String changeText, final String selector){ - // Get auth credentials from the user for re-authentication - AuthCredential credential = EmailAuthProvider - .getCredential(email, password); // Current Login Credentials \\ - // Prompt the user to re-provide their sign-in credentials - user.reauthenticate(credential) - .addOnCompleteListener(new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - Log.d(TAG, "User re-authenticated."); - - user = FirebaseAuth.getInstance().getCurrentUser(); - if (selector.equals(EMAIL_CONSTANT)){ - user.updateEmail(changeText) - .addOnCompleteListener(new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - if (task.isSuccessful()) { - Log.d(TAG, "User email address updated."); - Toast.makeText(getContext(), "Update Successful", Toast.LENGTH_SHORT).show(); - viewController.reloadDrawer(); - } - } - }); - } - if (selector.equals(PW_CONSTANT)){ - user.updatePassword(changeText) - .addOnCompleteListener(new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - if (task.isSuccessful()) { - Log.d(TAG, "User email address updated."); - Toast.makeText(getContext(), "Update Successful", Toast.LENGTH_SHORT).show(); - } - } - }); - } - - - - } - }); - } - - private void showDialog(final String update){ - //Make new Dialog - AlertDialog.Builder dialog = new AlertDialog.Builder(getContext()); - dialog.setTitle("Update " + update); - - LinearLayout layout = new LinearLayout(getContext()); - layout.setOrientation(LinearLayout.VERTICAL); - layout.setPadding(28,0,56,0); - - final EditText box1 = new EditText(getContext()); - box1.setHint("Current Email Address"); - box1.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); - layout.addView(box1); // Notice this is an add method - - final EditText box2 = new EditText(getContext()); - box2.setHint("Current Password"); - box2.setInputType(InputType.TYPE_CLASS_TEXT | - InputType.TYPE_TEXT_VARIATION_PASSWORD); - layout.addView(box2); // Another add method - - final EditText box3 = new EditText(getContext()); - if (update.equals(PW_CONSTANT)){ - box3.setInputType(InputType.TYPE_CLASS_TEXT | - InputType.TYPE_TEXT_VARIATION_PASSWORD); - }else { - box3.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); - } - box3.setHint("New " + update); - layout.addView(box3); // Another add method - - dialog.setView(layout); - dialog.setPositiveButton("Update", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - String email = box1.getText().toString().trim(); - String password = box2.getText().toString().trim(); - String textThree = box3.getText().toString().trim(); - - changeCredentials(email,password,textThree,update); - } - }); - dialog.show(); - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/application/ApplicationViewModelFactory.kt b/app/src/main/java/h_mal/appttude/com/driver/application/ApplicationViewModelFactory.kt new file mode 100644 index 0000000..77d4103 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/application/ApplicationViewModelFactory.kt @@ -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 auth: FirebaseAuthSource, + private val database: FirebaseDatabaseSource, + private val storage: FirebaseStorageSource +) : ViewModelProvider.Factory { + + @Suppress("UNCHECKED_CAST") + override fun create(modelClass: Class): T { + with(modelClass){ + return when{ + isAssignableFrom(UserViewModel::class.java) -> UserViewModel(auth) + isAssignableFrom(MainViewModel::class.java) -> MainViewModel(auth, database) + isAssignableFrom(UpdateUserViewModel::class.java) -> UpdateUserViewModel(auth, storage) + isAssignableFrom(DriverLicenseViewModel::class.java) -> DriverLicenseViewModel(auth, database, storage) + isAssignableFrom(DriverProfileViewModel::class.java) -> DriverProfileViewModel(auth, database, storage) + isAssignableFrom(PrivateHireLicenseViewModel::class.java) -> PrivateHireLicenseViewModel(auth, database, storage) + isAssignableFrom(VehicleProfileViewModel::class.java) -> VehicleProfileViewModel(auth, database, storage) + isAssignableFrom(InsuranceViewModel::class.java) -> InsuranceViewModel(auth, database, storage) + isAssignableFrom(MotViewModel::class.java) -> MotViewModel(auth, database, storage) + isAssignableFrom(LogbookViewModel::class.java) -> LogbookViewModel(auth, database, storage) + isAssignableFrom(PrivateHireVehicleViewModel::class.java) -> PrivateHireVehicleViewModel(auth, database, storage) + else -> throw IllegalArgumentException("Unknown ViewModel class") + } as T + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/application/DriverApplication.kt b/app/src/main/java/h_mal/appttude/com/driver/application/DriverApplication.kt new file mode 100644 index 0000000..0b6e77f --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/application/DriverApplication.kt @@ -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()) } + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/base/BaseActivity.kt b/app/src/main/java/h_mal/appttude/com/driver/base/BaseActivity.kt new file mode 100644 index 0000000..0f59ad4 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/base/BaseActivity.kt @@ -0,0 +1,123 @@ +package h_mal.appttude.com.driver.base + +import android.content.Intent +import android.os.Bundle +import android.view.View +import android.view.ViewGroup +import android.view.ViewGroup.LayoutParams +import android.view.ViewGroup.LayoutParams.* +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 : AppCompatActivity(), KodeinAware { + + private lateinit var loadingView: View + + abstract fun getViewModel(): V? + abstract val layoutId: Int + + override val kodein by kodein() + val factory by instance() + + inline fun createLazyViewModel(): Lazy = viewModels { factory } + inline fun createViewModel(): VM = + ViewModelProvider(viewModelStore, factory).get(VM::class.java) + + + private var loading: Boolean = false + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + configureObserver() + setContentView(layoutId) + } + + /** + * Creates a loading view which to be shown during async operations + * + * #setOnClickListener(null) is an ugly work around to prevent under being clicked during + * loading + */ + private fun instantiateLoadingView(){ + loadingView = layoutInflater.inflate(R.layout.progress_layout, null) + loadingView.setOnClickListener(null) + addContentView(loadingView, LayoutParams(MATCH_PARENT, MATCH_PARENT)) + + loadingView.hide() + } + + override fun onStart() { + super.onStart() + instantiateLoadingView() + } + + fun startActivity(activity: Class) { + 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() + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/base/BaseFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/base/BaseFragment.kt new file mode 100644 index 0000000..c8cade6 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/base/BaseFragment.kt @@ -0,0 +1,145 @@ +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 : Fragment(), KodeinAware { + + var mActivity: BaseActivity? = 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() + + inline fun getFragmentViewModel(): Lazy = 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 + 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 { clip -> + val list = clip.takeIf { it.size > 10 }?.let{ + clip.subList(0, 9) + } ?: clip + onImageGalleryResult(list) + return + } + onImageGalleryResult(data?.data) + } + } + + } + } + + private fun ClipData.convertToList(): List { + val list = mutableListOf() + 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?){ } + + fun openGalleryForImage() { + val intent = Intent(Intent.ACTION_PICK) + intent.type = "image/*" + intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, multipleImage); + startActivityForResult(intent, IMAGE_SELECT_REQUEST_CODE) + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/base/BaseViewModel.kt b/app/src/main/java/h_mal/appttude/com/driver/base/BaseViewModel.kt new file mode 100644 index 0000000..01e5a38 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/base/BaseViewModel.kt @@ -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 = MutableLiveData() + + fun onStart() { + uiState.postValue(ViewState.HasStarted) + } + + fun 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 + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/base/DataSubmissionBaseFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/base/DataSubmissionBaseFragment.kt new file mode 100644 index 0000000..d605eb8 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/base/DataSubmissionBaseFragment.kt @@ -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, T: Any> : BaseFragment(){ + + 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, + 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 + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/base/DataSubmissionBaseViewModel.kt b/app/src/main/java/h_mal/appttude/com/driver/base/DataSubmissionBaseViewModel.kt new file mode 100644 index 0000000..bd37522 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/base/DataSubmissionBaseViewModel.kt @@ -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( + 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?): Job = Job() + open fun setDataInDatabase(data: T) { } + + inline fun getDataClass() = io { + doTryOperation("Failed to retrieve $objectName") { + val data = databaseRef.getDataFromDatabaseRef() + onSuccess(data ?: FirebaseCompletion.Default) + } + } + + suspend fun 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?): List { + if (localImageUris.isNullOrEmpty()){ + throw IOException("No images is selected") + } + val listOfUrls = mutableListOf() + localImageUris.forEach { uri -> + uploadImage(uri)?.let { + listOfUrls.add(it) + } + } + + return listOfUrls + } + + suspend fun Iterable.mapSuspend(transform: suspend (T) -> R): List = + coroutineScope { map { t: T -> async { transform(t) } }.map { it.await() } } + + + suspend fun Iterable.mapIndexSuspend(transform: suspend (index: Int, T) -> R) = + coroutineScope { mapIndexed { index: Int, t: T -> async { transform(index, t) } }.map { it.await() } } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/data/DataFieldState.kt b/app/src/main/java/h_mal/appttude/com/driver/data/DataFieldState.kt new file mode 100644 index 0000000..81342da --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/data/DataFieldState.kt @@ -0,0 +1,7 @@ +package h_mal.appttude.com.driver.data + +sealed class DataFieldState { + object DefaultState : DataFieldState() + object NonUserStateUpdated: DataFieldState() + object UserUpdateState: DataFieldState() +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/data/EventResponse.kt b/app/src/main/java/h_mal/appttude/com/driver/data/EventResponse.kt new file mode 100644 index 0000000..c96c91e --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/data/EventResponse.kt @@ -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() +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/data/FirebaseAuthSource.kt b/app/src/main/java/h_mal/appttude/com/driver/data/FirebaseAuthSource.kt new file mode 100644 index 0000000..8d68a30 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/data/FirebaseAuthSource.kt @@ -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 = + auth.signInWithEmailAndPassword(email, password) + + override fun registerUser(email: String, password: String): Task = + auth.createUserWithEmailAndPassword(email, password) + + override fun logOut() = auth.signOut() + + override fun forgotPassword(email: String): Task = auth.sendPasswordResetEmail(email) + + override fun updateProfile( + name: String?, + profilePic: Uri? + ): Task? { + 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? { + val credential = EmailAuthProvider.getCredential(email, password) + + return getUser()?.reauthenticate(credential) + } + + override fun updateEmail(email: String): Task? = getUser()?.updateEmail(email) + override fun updatePassword(password: String): Task? = getUser()?.updatePassword(password) + override fun deleteProfile() = getUser()?.delete() +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/data/FirebaseAuthentication.kt b/app/src/main/java/h_mal/appttude/com/driver/data/FirebaseAuthentication.kt new file mode 100644 index 0000000..8c038ff --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/data/FirebaseAuthentication.kt @@ -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 + fun registerUser(email: String, password: String): Task + fun logOut() + fun forgotPassword(email: String): Task + fun updateProfile( + name: String?, + profilePic: Uri? + ): Task? + fun reauthenticate( + email: String, + password: String + ): Task? + fun updateEmail(email: String): Task? + fun updatePassword(password: String): Task? + fun deleteProfile(): Task? +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/data/FirebaseCompletion.kt b/app/src/main/java/h_mal/appttude/com/driver/data/FirebaseCompletion.kt new file mode 100644 index 0000000..bcf9187 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/data/FirebaseCompletion.kt @@ -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() +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/data/FirebaseDatabaseSource.kt b/app/src/main/java/h_mal/appttude/com/driver/data/FirebaseDatabaseSource.kt new file mode 100644 index 0000000..113da92 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/data/FirebaseDatabaseSource.kt @@ -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 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) +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/data/FirebaseStorageSource.kt b/app/src/main/java/h_mal/appttude/com/driver/data/FirebaseStorageSource.kt new file mode 100644 index 0000000..d3c5961 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/data/FirebaseStorageSource.kt @@ -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) +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/data/Roles.kt b/app/src/main/java/h_mal/appttude/com/driver/data/Roles.kt new file mode 100644 index 0000000..2f319d8 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/data/Roles.kt @@ -0,0 +1,6 @@ +package h_mal.appttude.com.driver.data + +enum class Roles(name: String) { + Driver("driver"), + SuperUser("super_user") +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/data/ViewState.kt b/app/src/main/java/h_mal/appttude/com/driver/data/ViewState.kt new file mode 100644 index 0000000..56f22a5 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/data/ViewState.kt @@ -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(val data: Event) : ViewState() + class HasError(val error: Event) : ViewState() +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/dialogs/ExitDialog.kt b/app/src/main/java/h_mal/appttude/com/driver/dialogs/ExitDialog.kt new file mode 100644 index 0000000..2012112 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/dialogs/ExitDialog.kt @@ -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() +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/model/DriverProfileObject.kt b/app/src/main/java/h_mal/appttude/com/driver/model/DriverProfileObject.kt new file mode 100644 index 0000000..46cecff --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/model/DriverProfileObject.kt @@ -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 +) \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/model/DriversLicenseObject.kt b/app/src/main/java/h_mal/appttude/com/driver/model/DriversLicenseObject.kt new file mode 100644 index 0000000..9b6a7e5 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/model/DriversLicenseObject.kt @@ -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 +) \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/model/MotObject.kt b/app/src/main/java/h_mal/appttude/com/driver/model/MotObject.kt new file mode 100644 index 0000000..0cfd606 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/model/MotObject.kt @@ -0,0 +1,8 @@ +package h_mal.appttude.com.driver.model + + + +data class MotObject( + var motImageString: String? = null, + var motExpiry: String? = null +) \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/model/PrivateHireObject.kt b/app/src/main/java/h_mal/appttude/com/driver/model/PrivateHireObject.kt new file mode 100644 index 0000000..66e707c --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/model/PrivateHireObject.kt @@ -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 +) \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/model/VehicleProfileObject.kt b/app/src/main/java/h_mal/appttude/com/driver/model/VehicleProfileObject.kt new file mode 100644 index 0000000..d82fd7d --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/model/VehicleProfileObject.kt @@ -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 +) \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/DriverOverallFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/driver/DriverOverallFragment.kt new file mode 100644 index 0000000..ceb8dad --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/ui/driver/DriverOverallFragment.kt @@ -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() { + + 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) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/HomeFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/driver/HomeFragment.kt new file mode 100644 index 0000000..57b22f7 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/ui/driver/HomeFragment.kt @@ -0,0 +1,31 @@ +package h_mal.appttude.com.driver.ui.driver + +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) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/MainActivity.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/driver/MainActivity.kt new file mode 100644 index 0000000..9682bcc --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/ui/driver/MainActivity.kt @@ -0,0 +1,112 @@ +package h_mal.appttude.com.driver.ui.driver + +import android.Manifest +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.os.Bundle +import android.view.MenuItem +import android.view.View +import android.widget.ImageView +import androidx.core.view.GravityCompat +import androidx.navigation.NavController +import androidx.navigation.findNavController +import androidx.navigation.ui.AppBarConfiguration +import androidx.navigation.ui.navigateUp +import androidx.navigation.ui.setupActionBarWithNavController +import androidx.navigation.ui.setupWithNavController +import com.google.android.material.navigation.NavigationView +import com.google.firebase.auth.FirebaseUser +import com.squareup.picasso.Picasso.LoadedFrom +import com.squareup.picasso.Target +import h_mal.appttude.com.driver.Global.ApprovalsClass +import h_mal.appttude.com.driver.Global.ArchiveClass +import h_mal.appttude.com.driver.Global.ImageViewClass +import h_mal.appttude.com.driver.R +import h_mal.appttude.com.driver.base.BaseActivity +import h_mal.appttude.com.driver.dialogs.ExitDialog.displayExitDialog +import h_mal.appttude.com.driver.ui.user.LoginActivity +import h_mal.appttude.com.driver.utils.ActivityIntentBuilder.createIntent +import h_mal.appttude.com.driver.utils.setPicassoImage +import h_mal.appttude.com.driver.viewmodels.MainViewModel +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.app_bar_main.* +import kotlinx.android.synthetic.main.nav_header_main.view.* + + +class MainActivity : BaseActivity(), + NavigationView.OnNavigationItemSelectedListener { + + private val vm by createLazyViewModel() + override fun getViewModel(): MainViewModel = vm + override val layoutId: Int = R.layout.activity_main + + lateinit var navController: NavController + lateinit var appBarConfiguration: AppBarConfiguration + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + setSupportActionBar(toolbar) + navController = findNavController(R.id.container) + + appBarConfiguration = AppBarConfiguration(navController.graph, drawer_layout) + nav_view.setupWithNavController(navController) + setupActionBarWithNavController(navController, appBarConfiguration) + + getViewModel().getUserDetails() + setupLogoutInDrawer() + } + + override fun onSupportNavigateUp(): Boolean { + return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp() + } + + override fun setTitle(title: CharSequence) { + toolbar.title = title + } + + override fun onBackPressed() { + if (drawer_layout.isDrawerOpen(GravityCompat.START)) { + drawer_layout.closeDrawer(GravityCompat.START) + } else { + val navHostFragment = supportFragmentManager.findFragmentById(R.id.container) + navHostFragment?.childFragmentManager?.backStackEntryCount?.takeIf { it > 1 }?.let { + return super.onBackPressed() + } + displayExitDialog() + } + } + + override fun onSuccess(data: Any?) { + super.onSuccess(data) + when(data){ + is FirebaseUser -> { + setupDrawer(data) + } + } + } + + private fun setupDrawer(user: FirebaseUser) { + val header: View = nav_view.getHeaderView(0) + header.driver_email.text = user.email + header.driver_name.text = user.displayName + header.profileImage.setPicassoImage(user.photoUrl) + } + + private fun setupLogoutInDrawer(){ + logout.setOnClickListener { + getViewModel().logOut() + startActivity(createIntent()) + finish() + } + } + + override fun onNavigationItemSelected(item: MenuItem): Boolean { + // Handle navigation view item clicks here. + when (item.itemId) { + R.id.nav_user_settings -> { } + } + drawer_layout.closeDrawer(GravityCompat.START) + return true + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/VehicleOverallFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/driver/VehicleOverallFragment.kt new file mode 100644 index 0000000..56e614c --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/ui/driver/VehicleOverallFragment.kt @@ -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() { + + 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) } + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/driverprofile/DriverLicenseFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/driver/driverprofile/DriverLicenseFragment.kt new file mode 100644 index 0000000..8e16981 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/ui/driver/driverprofile/DriverLicenseFragment.kt @@ -0,0 +1,57 @@ +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.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.utils.setPicassoImage +import h_mal.appttude.com.driver.viewmodels.DriverLicenseViewModel +import kotlinx.android.synthetic.main.fragment_driver_license.* + +class DriverLicenseFragment : DataSubmissionBaseFragment() { + + 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(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.setPicassoImage(data.licenseImageString) + lic_no.setText(data.licenseNumber) + lic_expiry.setText(data.licenseExpiry) + } + + override fun onImageGalleryResult(imageUri: Uri?) { + super.onImageGalleryResult(imageUri) + this.imageUri = imageUri + driversli_img.setPicassoImage(imageUri) + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/driverprofile/DriverProfileFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/driver/driverprofile/DriverProfileFragment.kt new file mode 100644 index 0000000..9bacc86 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/ui/driver/driverprofile/DriverProfileFragment.kt @@ -0,0 +1,73 @@ +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.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() { + + var localUri: Uri? = null + + private val viewmodel by getFragmentViewModel() + 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.apply { + setTextOnChange{ model.dob = it } + setOnClickListener { + DateDialog(this) + } + } + ni_number.setTextOnChange{ model.ni = it } + date_first.apply { + setTextOnChange{ model.dateFirst = it } + setOnClickListener { + DateDialog(this) + } + } + 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.setText(data.forenames) + address_input.setText(data.address) + postcode_input.setText(data.postcode) + dob_input.setText(data.dob) + ni_number.setText(data.ni) + date_first.setText(data.dateFirst) + } + + override fun onImageGalleryResult(imageUri: Uri?) { + super.onImageGalleryResult(imageUri) + localUri = imageUri + driver_pic.setPicassoImage(imageUri) + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/driverprofile/PrivateHireLicenseFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/driver/driverprofile/PrivateHireLicenseFragment.kt new file mode 100644 index 0000000..9473c6b --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/ui/driver/driverprofile/PrivateHireLicenseFragment.kt @@ -0,0 +1,55 @@ +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.Global.DateDialog +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() { + + val viewmodel by getFragmentViewModel() + 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.apply { + setTextOnChange{ model.phExpiry = it } + setOnClickListener { + DateDialog(this) + } + } + + 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.setText(data.phNumber) + ph_expiry.setText(data.phExpiry) + } + + override fun onImageGalleryResult(imageUri: Uri?) { + super.onImageGalleryResult(imageUri) + imageView2.setPicassoImage(imageUri) + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/vehicleprofile/InsuranceFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/driver/vehicleprofile/InsuranceFragment.kt new file mode 100644 index 0000000..0a46064 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/ui/driver/vehicleprofile/InsuranceFragment.kt @@ -0,0 +1,70 @@ +package h_mal.appttude.com.driver.ui.driver.vehicleprofile + +import android.net.Uri +import android.os.Bundle +import android.view.View +import android.widget.ImageView +import h_mal.appttude.com.driver.Global.DateDialog +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 kotlinx.android.synthetic.main.fragment_insurance.* + + +class InsuranceFragment : DataSubmissionBaseFragment() { + + private var selectedImages: List? = listOf() + + 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() + + insurer.setTextOnChange { model.insurerName = it } + insurance_exp.apply { + setOnClickListener { DateDialog(this) } + setTextOnChange { model.expiryDate = it } + } + + uploadInsurance.setOnClickListener { openGalleryWithPermissionRequest() } + submit_ins.setOnClickListener { submit() } + } + + private fun updateImageCarousal(list: List) { + carouselView.setImageClickListener(null) + carouselView.setImageListener { i: Int, imageView: ImageView -> + when (list[i]) { + is Uri -> { imageView.setPicassoImage(list[i] as Uri) } + is String -> imageView.setPicassoImage(list[i] as String) + } + } + carouselView.pageCount = list.size + + } + + override fun submit() { + super.submit() + validateEditTexts(insurer, insurance_exp).takeIf { !it }?.let { return } + viewmodel.setDataInDatabase(model, selectedImages) + } + + override fun setFields(data: InsuranceObject) { + super.setFields(data) + + insurer.setText(model.insurerName) + insurance_exp.setText(model.expiryDate) + model.photoStrings?.let { updateImageCarousal(it) } + } + + override fun onImageGalleryResult(imageUris: List?) { + selectedImages = imageUris + selectedImages?.let { updateImageCarousal(it) } + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/vehicleprofile/LogbookFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/driver/vehicleprofile/LogbookFragment.kt new file mode 100644 index 0000000..c0c026c --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/ui/driver/vehicleprofile/LogbookFragment.kt @@ -0,0 +1,51 @@ +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.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() { + + private val viewmodel by getFragmentViewModel() + 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.setText(data.v5cnumber) + } + + override fun onImageGalleryResult(imageUri: Uri?) { + super.onImageGalleryResult(imageUri) + + picUri = imageUri + log_book_img.setPicassoImage(picUri) + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/vehicleprofile/MotFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/driver/vehicleprofile/MotFragment.kt new file mode 100644 index 0000000..925ed12 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/ui/driver/vehicleprofile/MotFragment.kt @@ -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.Global.DateDialog +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(){ + + private val viewmodel by getFragmentViewModel() + 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.apply { + setTextOnChange{ model.motExpiry = it } + setOnClickListener { + DateDialog(this) + } + } + + 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.setText(data.motExpiry) + } + + override fun onImageGalleryResult(imageUri: Uri?) { + super.onImageGalleryResult(imageUri) + mot_img.setPicassoImage(imageUri) + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/vehicleprofile/PrivateHireVehicleFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/driver/vehicleprofile/PrivateHireVehicleFragment.kt new file mode 100644 index 0000000..bc555b0 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/ui/driver/vehicleprofile/PrivateHireVehicleFragment.kt @@ -0,0 +1,55 @@ +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.Global.DateDialog +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(){ + + private val viewmodel by getFragmentViewModel() + 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.apply { + setTextOnChange{ model.phCarExpiry = it } + setOnClickListener { + DateDialog(this) + } + } + + 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.setText(data.phCarNumber) + ph_expiry.setText(data.phCarExpiry) + } + + override fun onImageGalleryResult(imageUri: Uri?) { + super.onImageGalleryResult(imageUri) + imageView2.setPicassoImage(imageUri) + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/vehicleprofile/VehicleProfileFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/driver/vehicleprofile/VehicleProfileFragment.kt new file mode 100644 index 0000000..288a097 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/ui/driver/vehicleprofile/VehicleProfileFragment.kt @@ -0,0 +1,62 @@ +package h_mal.appttude.com.driver.ui.driver.vehicleprofile + +import android.os.Bundle +import android.view.View + +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.VehicleProfileObject +import h_mal.appttude.com.driver.viewmodels.VehicleProfileViewModel +import kotlinx.android.synthetic.main.fragment_vehicle_setup.* + + +class VehicleProfileFragment: DataSubmissionBaseFragment(){ + + private val viewmodel by getFragmentViewModel() + 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.apply { + setTextOnChange{ model.startDate = it } + setOnClickListener { + DateDialog(this) + } + } + seized_checkbox.setOnCheckedChangeListener { _, res -> model.isSeized = res} + + submit_vehicle.setOnClickListener { submit() } + } + + override fun submit() { + validateEditTexts(reg, make, car_model, colour, keeper_name, address, postcode, start_date) + .takeIf { !it } + ?.let { return } + + viewmodel.setDataInDatabase(model) + } + + override fun setFields(data: VehicleProfileObject) { + super.setFields(data) + reg.setText(data.reg) + make.setText(data.make) + car_model.setText(data.model) + colour.setText(data.colour) + keeper_name.setText(data.keeperName) + address.setText(data.keeperAddress) + postcode.setText(data.keeperPostCode) + start_date.setText(data.startDate) + seized_checkbox.isChecked = data.isSeized + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/update/DeleteProfileFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/update/DeleteProfileFragment.kt new file mode 100644 index 0000000..87fddb7 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/ui/update/DeleteProfileFragment.kt @@ -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() { + + 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) + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdateActivity.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdateActivity.kt new file mode 100644 index 0000000..588eb19 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdateActivity.kt @@ -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() { + + override val layoutId: Int = R.layout.update_activity + override fun getViewModel(): UpdateUserViewModel? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + createViewModel() + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdateEmailFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdateEmailFragment.kt new file mode 100644 index 0000000..4f04946 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdateEmailFragment.kt @@ -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() { + + 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) + } + + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdateOverviewFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdateOverviewFragment.kt new file mode 100644 index 0000000..bc23a51 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdateOverviewFragment.kt @@ -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(), View.OnClickListener { + + private val vm by activityViewModels() + 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() + } + + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdatePasswordFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdatePasswordFragment.kt new file mode 100644 index 0000000..125e628 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdatePasswordFragment.kt @@ -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() { + + 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) + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdateProfileFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdateProfileFragment.kt new file mode 100644 index 0000000..0633bc7 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdateProfileFragment.kt @@ -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() { + + 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, + 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.setPicassoImage(imageUri) + imageChangeListener = true + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/user/ForgotPasswordFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/user/ForgotPasswordFragment.kt new file mode 100644 index 0000000..7f8015e --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/ui/user/ForgotPasswordFragment.kt @@ -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() { + + 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) + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/user/LoginActivity.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/user/LoginActivity.kt new file mode 100644 index 0000000..bfcaf95 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/ui/user/LoginActivity.kt @@ -0,0 +1,37 @@ +package h_mal.appttude.com.driver.ui.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.ui.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() { + + override fun getViewModel(): UserViewModel? = null + override val layoutId: Int = R.layout.activity_login + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + createViewModel() + } + + 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() + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/user/LoginFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/user/LoginFragment.kt new file mode 100644 index 0000000..0d0efe4 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/ui/user/LoginFragment.kt @@ -0,0 +1,40 @@ +package h_mal.appttude.com.driver.ui.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() { + + 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) + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/user/RegisterFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/user/RegisterFragment.kt new file mode 100644 index 0000000..fe83477 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/ui/user/RegisterFragment.kt @@ -0,0 +1,43 @@ +package h_mal.appttude.com.driver.ui.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() { + + 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) + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/user/SplashScreenFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/user/SplashScreenFragment.kt new file mode 100644 index 0000000..12147cd --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/ui/user/SplashScreenFragment.kt @@ -0,0 +1,35 @@ +package h_mal.appttude.com.driver.ui.user + +import android.os.Bundle +import android.view.View +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.data.FirebaseCompletion +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() { + + private val userViewModel by activityViewModels() + 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.splashscreenCheckUserIsLoggedIn() + } + + override fun onSuccess(data: Any?) { + super.onSuccess(data) + when(data){ + is FirebaseCompletion.Default -> view?.navigateTo(R.id.to_loginFragment) + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/utils/ActivityIntentBuilder.kt b/app/src/main/java/h_mal/appttude/com/driver/utils/ActivityIntentBuilder.kt new file mode 100644 index 0000000..0da57af --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/utils/ActivityIntentBuilder.kt @@ -0,0 +1,16 @@ +package h_mal.appttude.com.driver.utils + +import android.content.Context +import android.content.Intent +import androidx.appcompat.app.AppCompatActivity +import androidx.fragment.app.Fragment + +object ActivityIntentBuilder { + + inline fun Context.createIntent(): Intent = + Intent(this, T::class.java) + + inline fun Fragment.createIntent() = + requireContext().createIntent() + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/utils/AnimationUtils.kt b/app/src/main/java/h_mal/appttude/com/driver/utils/AnimationUtils.kt new file mode 100644 index 0000000..0968518 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/utils/AnimationUtils.kt @@ -0,0 +1,16 @@ +package h_mal.appttude.com.driver.utils + +import android.view.View +import android.view.animation.Animation +import android.view.animation.AnimationUtils +import androidx.annotation.AnimRes + +fun View.triggerAnimation(@AnimRes id:Int, complete:(View) -> Unit){ + val animation = AnimationUtils.loadAnimation(context, id) + animation.setAnimationListener(object : Animation.AnimationListener { + override fun onAnimationEnd(animation: Animation?) = complete(this@triggerAnimation) + override fun onAnimationStart(a: Animation?) {} + override fun onAnimationRepeat(a: Animation?) {} + }) + startAnimation(animation) +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/utils/Coroutines.kt b/app/src/main/java/h_mal/appttude/com/driver/utils/Coroutines.kt new file mode 100644 index 0000000..dfed4d5 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/utils/Coroutines.kt @@ -0,0 +1,12 @@ +package h_mal.appttude.com.driver.utils + +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch + +object Coroutines{ + + fun io(work: suspend () -> Unit) = CoroutineScope(Dispatchers.IO).launch { work() } + fun main(work: suspend () -> Unit) = CoroutineScope(Dispatchers.Main).launch { work() } + fun default(work: suspend () -> Unit) = CoroutineScope(Dispatchers.Default).launch { work() } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/utils/DateUtils.kt b/app/src/main/java/h_mal/appttude/com/driver/utils/DateUtils.kt new file mode 100644 index 0000000..89cd3f4 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/utils/DateUtils.kt @@ -0,0 +1,56 @@ +package h_mal.appttude.com.driver.utils + +import android.icu.util.Calendar +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.* + +object DateUtils { + fun getDateStamp(): String { + val sdf: SimpleDateFormat = getSimpleDateFormat("yyyyMMdd_HHmm") + return sdf.format(Date()) + } + + fun getDateTimeStamp(): String{ + val sdf: SimpleDateFormat = getSimpleDateFormat("yyyyMMdd_HHmmss") + return sdf.format(Date()) + } + + @Throws(ParseException::class) + fun String.convertDateStringDatePattern(formatIn: String, formatOut: String): String { + return try { + val sdfIn = getSimpleDateFormat(formatIn) + val sdfOut = getSimpleDateFormat(formatOut) + val newDate: Date = sdfIn.parse(this) + sdfOut.format(newDate) + }catch (e: Exception){ + e.printStackTrace() + this + } + } + + private fun getSimpleDateFormat(format: String) = SimpleDateFormat(format, Locale.getDefault()) + + fun parseDateStringIntoCalender(dateString: String, format: String): Calendar? { + val dateFormat = getSimpleDateFormat(format) + val calendar = Calendar.getInstance() + return try { + calendar.time = dateFormat.parse(dateString) + calendar + } catch (e: Exception) { + null + } + } + + fun parseCalenderIntoDateString(calendar: Calendar, format: String): String? { + val date = calendar.time + val dateFormat = getSimpleDateFormat(format) + + return try { + dateFormat.format(date) + } catch (e: ParseException) { + e.printStackTrace() + null + } + } +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/utils/FirebaseUtils.kt b/app/src/main/java/h_mal/appttude/com/driver/utils/FirebaseUtils.kt new file mode 100644 index 0000000..35fd6f9 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/utils/FirebaseUtils.kt @@ -0,0 +1,35 @@ +package h_mal.appttude.com.driver.utils + +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.data.EventResponse +import kotlin.coroutines.resume +import kotlin.coroutines.suspendCoroutine + + + +suspend fun DatabaseReference.singleValueEvent(): EventResponse = suspendCoroutine { continuation -> + val valueEventListener = object: ValueEventListener { + override fun onCancelled(error: DatabaseError) { + continuation.resume(EventResponse.Cancelled(error)) + } + + override fun onDataChange(snapshot: DataSnapshot) { + continuation.resume(EventResponse.Changed(snapshot)) + } + } + addListenerForSingleValueEvent(valueEventListener) +} + +suspend inline fun DatabaseReference.getDataFromDatabaseRef(): T?{ + return when (val response: EventResponse = singleValueEvent()) { + is EventResponse.Changed -> { + response.snapshot.getValue(T::class.java) + } + is EventResponse.Cancelled -> { + throw response.error.toException() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/utils/LiveDataUtils.kt b/app/src/main/java/h_mal/appttude/com/driver/utils/LiveDataUtils.kt new file mode 100644 index 0000000..eeb7640 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/utils/LiveDataUtils.kt @@ -0,0 +1,25 @@ +package h_mal.appttude.com.driver.utils + + +open class Event(private val content: T) { + + var hasBeenHandled = false + private set // Allow external read but not write + + /** + * Returns the content and prevents its use again. + */ + fun getContentIfNotHandled(): T? { + return if (hasBeenHandled) { + null + } else { + hasBeenHandled = true + content + } + } + + /** + * Returns the content, even if it's already been handled. + */ + fun peekContent(): T = content +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/utils/NavigationUtils.kt b/app/src/main/java/h_mal/appttude/com/driver/utils/NavigationUtils.kt new file mode 100644 index 0000000..75b4bff --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/utils/NavigationUtils.kt @@ -0,0 +1,28 @@ +package h_mal.appttude.com.driver.utils + +import android.content.Context +import android.content.Intent +import android.view.View +import androidx.annotation.IdRes +import androidx.navigation.Navigation + +const val UPLOAD_NEW = "upload_new" + +fun navigateToActivity(context: Context, navigationActivity: Navigations) { + try { + val ourClass: Class<*> = + Class.forName("h_mal.appttude.com.driver." + navigationActivity.value) + val intent = Intent(context, ourClass) + context.startActivity(intent) + } catch (e: Exception) { + e.printStackTrace() + } +} + +fun View.navigateTo(@IdRes navId: Int){ + Navigation + .findNavController(this) + .navigate(navId) +} + + diff --git a/app/src/main/java/h_mal/appttude/com/driver/utils/Navigations.kt b/app/src/main/java/h_mal/appttude/com/driver/utils/Navigations.kt new file mode 100644 index 0000000..6f1335f --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/utils/Navigations.kt @@ -0,0 +1,6 @@ +package h_mal.appttude.com.driver.utils + +enum class Navigations(val value: String) { + Main("MainActivity"); + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/utils/PermissionsUtils.kt b/app/src/main/java/h_mal/appttude/com/driver/utils/PermissionsUtils.kt new file mode 100644 index 0000000..136b8bf --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/utils/PermissionsUtils.kt @@ -0,0 +1,65 @@ +package h_mal.appttude.com.driver.utils + +import android.app.Activity +import android.content.Context +import android.content.Intent +import android.content.pm.PackageManager +import android.net.Uri +import android.provider.Settings +import androidx.appcompat.app.AlertDialog +import androidx.core.app.ActivityCompat +import androidx.core.content.ContextCompat +import androidx.fragment.app.Fragment + + +object PermissionsUtils { + /** + * Check if you have been granted a particular permission. + * + * @param permission The name of the permission being checked. + * + * @return boolean if you have the permission, or if not. + */ + fun Context.isPermissionsAllowed(permission: String): Boolean { + return ContextCompat.checkSelfPermission( + this, permission + ) == PackageManager.PERMISSION_GRANTED + } + + + fun Activity.askForPermissions(permission: String, requestCode: Int): Boolean { + if (!isPermissionsAllowed(permission)) { + if (ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) { + showPermissionDeniedDialog() + } else { + ActivityCompat.requestPermissions(this, arrayOf(permission), requestCode) + } + return false + } + return true + } + + fun Fragment.askForPermissions(permission: String, requestCode: Int): Boolean = + requireActivity().askForPermissions(permission, requestCode) + + fun isGranted(grantResults: IntArray): Boolean = + grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED + + + private fun Context.showPermissionDeniedDialog() { + AlertDialog.Builder(this) + .setTitle("Permission Denied") + .setMessage("Permission is denied, Please allow permissions from App Settings.") + .setPositiveButton("App Settings") { _, _ -> + // send to app settings if permission is denied permanently + val intent = Intent() + intent.action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS + val uri = Uri.fromParts("package", packageName, null) + intent.data = uri + startActivity(intent) + } + .setNegativeButton("Cancel", null) + .show() + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/utils/TextValidationUtils.kt b/app/src/main/java/h_mal/appttude/com/driver/utils/TextValidationUtils.kt new file mode 100644 index 0000000..db97e0b --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/utils/TextValidationUtils.kt @@ -0,0 +1,70 @@ +package h_mal.appttude.com.driver.utils + +import android.widget.EditText +import h_mal.appttude.com.driver.R + + +object TextValidationUtils { + /** + * Validate input of EditText containing email + * @return email retrieved if valid + */ + fun EditText.validateEmailEditText(): String? { + val input = text.toString().trim() + if (input.isEmpty()) { + error = context.getString(R.string.error_field_required) + requestFocus() + return null + } + if (!isEmailValid(input)) { + error = context.getString(R.string.error_invalid_email) + requestFocus() + return null + } + return input + } + + /** + * Validate input of EditText containing password + * @return password retrieved if valid + */ + fun EditText.validatePasswordEditText(): String? { + val input = text.toString().trim() + if (input.isEmpty()) { + error = context.getString(R.string.error_field_required) + requestFocus() + return null + } + if (!isPasswordValid(input)) { + error = context.getString(R.string.error_invalid_password) + requestFocus() + return null + } + return input + } + + /** + * Validate input of EditText containing text + * @return email retrieved if valid + */ + fun EditText.validateEditText(): String? { + val input = text.toString().trim() + if (input.isEmpty()) { + error = context.getString(R.string.error_field_required) + requestFocus() + return null + } + return input + } + + private fun isEmailValid(email: String?): Boolean { + email?.let { + return android.util.Patterns.EMAIL_ADDRESS.matcher(it).matches() + } + return false + } + + private fun isPasswordValid(password: String?): Boolean { + return (password?.length ?: 0) > 6 + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/utils/ViewUtils.kt b/app/src/main/java/h_mal/appttude/com/driver/utils/ViewUtils.kt new file mode 100644 index 0000000..87c1852 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/utils/ViewUtils.kt @@ -0,0 +1,104 @@ +package h_mal.appttude.com.driver.utils + +import android.app.Activity +import android.content.Context +import android.content.res.Resources +import android.net.Uri +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.inputmethod.EditorInfo +import android.view.inputmethod.InputMethodManager +import android.widget.EditText +import android.widget.ImageView +import android.widget.TextView +import android.widget.Toast +import androidx.annotation.DrawableRes +import androidx.appcompat.widget.SearchView +import androidx.fragment.app.Fragment +import com.squareup.picasso.Picasso +import h_mal.appttude.com.driver.R + +fun View.show() { + this.visibility = View.VISIBLE +} + +fun View.hide() { + this.visibility = View.GONE +} + +fun Context.displayToast(message: String) { + Toast.makeText(this, message, Toast.LENGTH_LONG).show() +} + +fun Fragment.displayToast(message: String) { + requireContext().displayToast(message) +} + +fun EditText.setEnterPressedListener(action: () -> Unit) { + setOnEditorActionListener(TextView.OnEditorActionListener { _, id, _ -> + if (id == EditorInfo.IME_ACTION_DONE || id == EditorInfo.IME_NULL) { + action() + return@OnEditorActionListener true + } + false + }) +} + +fun ImageView.setPicassoImage( + url: String?, + @DrawableRes placeholderRes: Int = R.drawable.choice_img_round +) { + + val creator = Picasso.get() + .load(url) + viewTreeObserver.addOnPreDrawListener { + creator.resize(width, height) + true + } + creator + .placeholder(placeholderRes) + .into(this) +} + +fun ImageView.setPicassoImage( + url: Uri?, + @DrawableRes placeholderRes: Int = R.drawable.choice_img_round +) { + val creator = Picasso.get() + .load(url) + viewTreeObserver.addOnPreDrawListener { + creator.resize(width, height) + true + } + creator + .placeholder(placeholderRes) + .into(this) +} + +fun ViewGroup.generateView(layoutId: Int): View = LayoutInflater + .from(context) + .inflate(layoutId, this, false) + +fun Int.dpToPx(): Int = (this * Resources.getSystem().displayMetrics.density).toInt() + +fun SearchView.onSubmitListener(searchSubmit: (String) -> Unit) { + this.setOnQueryTextListener(object : + SearchView.OnQueryTextListener { + override fun onQueryTextSubmit(s: String): Boolean { + searchSubmit.invoke(s) + return true + } + + override fun onQueryTextChange(s: String): Boolean { + return true + } + }) +} + +fun Fragment.hideKeyboard() { + val imm = context?.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager? + imm?.hideSoftInputFromWindow(view?.windowToken, 0) +} + +fun EditText.extractString(): String = text.toString().trim() \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/DriverLicenseViewModel.kt b/app/src/main/java/h_mal/appttude/com/driver/viewmodels/DriverLicenseViewModel.kt new file mode 100644 index 0000000..3959b61 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/viewmodels/DriverLicenseViewModel.kt @@ -0,0 +1,34 @@ +package h_mal.appttude.com.driver.viewmodels + +import android.net.Uri +import com.google.firebase.database.DatabaseReference +import com.google.firebase.storage.StorageReference +import h_mal.appttude.com.driver.base.DataSubmissionBaseViewModel +import h_mal.appttude.com.driver.data.FirebaseAuthentication +import h_mal.appttude.com.driver.data.FirebaseDatabaseSource +import h_mal.appttude.com.driver.data.FirebaseStorageSource +import h_mal.appttude.com.driver.model.DriversLicenseObject +import h_mal.appttude.com.driver.utils.Coroutines.io + +class DriverLicenseViewModel( + auth: FirebaseAuthentication, + database: FirebaseDatabaseSource, + storage: FirebaseStorageSource +) : DataSubmissionBaseViewModel(database, storage) { + val uid = auth.getUid()!! + + override val databaseRef: DatabaseReference = database.getDriverLicenseRef(uid) + override val storageRef: StorageReference = storage.driversLicenseStorageRef(uid) + override val objectName: String = "drivers license" + + override fun getDataFromDatabase() = getDataClass() + + override fun setDataInDatabase(data: DriversLicenseObject, localImageUri: Uri?) = io { + doTryOperation("Failed to upload $objectName"){ + val imageUrl = getImageUrl(localImageUri, data.licenseImageString) + data.licenseImageString = imageUrl + postDataToDatabase(data) + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/DriverProfileViewModel.kt b/app/src/main/java/h_mal/appttude/com/driver/viewmodels/DriverProfileViewModel.kt new file mode 100644 index 0000000..cd1e112 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/viewmodels/DriverProfileViewModel.kt @@ -0,0 +1,36 @@ +package h_mal.appttude.com.driver.viewmodels + +import android.net.Uri +import com.google.firebase.database.DatabaseReference +import com.google.firebase.storage.StorageReference +import h_mal.appttude.com.driver.base.DataSubmissionBaseViewModel +import h_mal.appttude.com.driver.data.FirebaseAuthentication +import h_mal.appttude.com.driver.data.FirebaseDatabaseSource +import h_mal.appttude.com.driver.data.FirebaseStorageSource +import h_mal.appttude.com.driver.model.DriverProfileObject +import h_mal.appttude.com.driver.utils.Coroutines.io + +class DriverProfileViewModel( + auth: FirebaseAuthentication, + database: FirebaseDatabaseSource, + storage: FirebaseStorageSource +) : DataSubmissionBaseViewModel(database, storage) { + val uid = auth.getUid()!! + + override val databaseRef: DatabaseReference = database.getDriverDetailsRef(uid) + override val storageRef: StorageReference = storage.profileImageStorageRef(uid) + override val objectName: String = "drivers profile" + + override fun getDataFromDatabase() = getDataClass() + + override fun setDataInDatabase(data: DriverProfileObject, localImageUri: Uri?) = io { + doTryOperation("Failed to upload $objectName"){ + + val imageUrl = getImageUrl(localImageUri, data.driverPic) + data.driverPic = imageUrl + + postDataToDatabase(data) + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/InsuranceViewModel.kt b/app/src/main/java/h_mal/appttude/com/driver/viewmodels/InsuranceViewModel.kt new file mode 100644 index 0000000..e99934b --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/viewmodels/InsuranceViewModel.kt @@ -0,0 +1,42 @@ +package h_mal.appttude.com.driver.viewmodels + +import android.net.Uri +import com.google.firebase.database.DatabaseReference +import com.google.firebase.storage.StorageReference +import h_mal.appttude.com.driver.Objects.InsuranceObject +import h_mal.appttude.com.driver.base.DataSubmissionBaseViewModel +import h_mal.appttude.com.driver.data.FirebaseAuthentication +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 + +class InsuranceViewModel ( + auth: FirebaseAuthentication, + database: FirebaseDatabaseSource, + storage: FirebaseStorageSource +) : DataSubmissionBaseViewModel(database, storage) { + val uid = auth.getUid()!! + + override val databaseRef: DatabaseReference = database.getInsuranceDetailsRef(uid) + override val storageRef: StorageReference? = storage.insuranceStorageRef(uid) + override val objectName: String = "insurance" + + override fun getDataFromDatabase() = getDataClass() + + override fun setDataInDatabase(data: InsuranceObject, localImageUris: List?) = io { + doTryOperation("Failed to upload $objectName") { + val imageUrls = if (!localImageUris.isNullOrEmpty()){ + getImageUrls(localImageUris).toMutableList() + }else{ + data.photoStrings + } + if (imageUrls.isNullOrEmpty()){ + onError("no images selected") + return@doTryOperation + } + + data.photoStrings = imageUrls + postDataToDatabase(data) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/LogbookViewModel.kt b/app/src/main/java/h_mal/appttude/com/driver/viewmodels/LogbookViewModel.kt new file mode 100644 index 0000000..616e04c --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/viewmodels/LogbookViewModel.kt @@ -0,0 +1,33 @@ +package h_mal.appttude.com.driver.viewmodels + +import android.net.Uri +import com.google.firebase.database.DatabaseReference +import com.google.firebase.storage.StorageReference +import h_mal.appttude.com.driver.Objects.LogbookObject +import h_mal.appttude.com.driver.base.DataSubmissionBaseViewModel +import h_mal.appttude.com.driver.data.FirebaseAuthentication +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 + +class LogbookViewModel ( + auth: FirebaseAuthentication, + database: FirebaseDatabaseSource, + storage: FirebaseStorageSource +) : DataSubmissionBaseViewModel(database, storage) { + val uid = auth.getUid()!! + override val databaseRef: DatabaseReference = database.getLogbookRef(uid) + override val storageRef: StorageReference = storage.logBookStorageRef(uid) + override val objectName: String = "Log book" + + override fun getDataFromDatabase() = getDataClass() + + override fun setDataInDatabase(data: LogbookObject, localImageUri: Uri?) = io { + doTryOperation("Failed to upload $objectName") { + val imageUrl = getImageUrl(localImageUri, data.photoString) + data.photoString = imageUrl + postDataToDatabase(data) + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/MainViewModel.kt b/app/src/main/java/h_mal/appttude/com/driver/viewmodels/MainViewModel.kt new file mode 100644 index 0000000..69bbbe4 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/viewmodels/MainViewModel.kt @@ -0,0 +1,35 @@ +package h_mal.appttude.com.driver.viewmodels + +import h_mal.appttude.com.driver.base.BaseViewModel +import h_mal.appttude.com.driver.data.FirebaseAuthentication +import h_mal.appttude.com.driver.data.FirebaseDatabaseSource +import h_mal.appttude.com.driver.utils.Coroutines.io +import h_mal.appttude.com.driver.utils.getDataFromDatabaseRef + +class MainViewModel( + private val firebaseAuth: FirebaseAuthentication, + private val firebaseDatabase: FirebaseDatabaseSource +) : BaseViewModel(){ + + val uid = firebaseAuth.getUid()!! + + fun getRole() = io { + doTryOperation("failed to retrieve data") { + val ref = firebaseDatabase.getUserRoleRef(uid) + val role = ref.getDataFromDatabaseRef() + role?.apply { onSuccess(this) } ?: onError("No role found") +// + } + } + + + fun getUserDetails(){ + firebaseAuth.getUser()?.let { + onSuccess(it) + } + } + + fun logOut(){ + firebaseAuth.logOut() + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/MotViewModel.kt b/app/src/main/java/h_mal/appttude/com/driver/viewmodels/MotViewModel.kt new file mode 100644 index 0000000..cc38fa1 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/viewmodels/MotViewModel.kt @@ -0,0 +1,34 @@ +package h_mal.appttude.com.driver.viewmodels + +import android.net.Uri +import com.google.firebase.database.DatabaseReference +import com.google.firebase.storage.StorageReference +import h_mal.appttude.com.driver.base.DataSubmissionBaseViewModel +import h_mal.appttude.com.driver.data.FirebaseAuthentication +import h_mal.appttude.com.driver.data.FirebaseDatabaseSource +import h_mal.appttude.com.driver.data.FirebaseStorageSource +import h_mal.appttude.com.driver.model.MotObject +import h_mal.appttude.com.driver.utils.Coroutines.io + +class MotViewModel ( + auth: FirebaseAuthentication, + database: FirebaseDatabaseSource, + storage: FirebaseStorageSource +) : DataSubmissionBaseViewModel(database, storage) { + val uid = auth.getUid()!! + + override val databaseRef: DatabaseReference = database.getMotDetailsRef(uid) + override val storageRef: StorageReference? = storage.motStorageRef(uid) + override val objectName: String = "vehicle profile" + + override fun getDataFromDatabase() = getDataClass() + + override fun setDataInDatabase(data: MotObject, localImageUri: Uri?) = io { + doTryOperation("Failed to upload $objectName"){ + val imageUrl = getImageUrl(localImageUri, data.motImageString) + data.motImageString = imageUrl + postDataToDatabase(data) + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/PrivateHireLicenseViewModel.kt b/app/src/main/java/h_mal/appttude/com/driver/viewmodels/PrivateHireLicenseViewModel.kt new file mode 100644 index 0000000..1ebd506 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/viewmodels/PrivateHireLicenseViewModel.kt @@ -0,0 +1,39 @@ +package h_mal.appttude.com.driver.viewmodels + +import android.net.Uri +import com.google.firebase.database.DatabaseReference +import com.google.firebase.storage.StorageReference +import h_mal.appttude.com.driver.base.DataSubmissionBaseViewModel +import h_mal.appttude.com.driver.data.FirebaseAuthentication +import h_mal.appttude.com.driver.data.FirebaseDatabaseSource +import h_mal.appttude.com.driver.data.FirebaseStorageSource +import h_mal.appttude.com.driver.model.PrivateHireObject +import h_mal.appttude.com.driver.utils.Coroutines.io + +class PrivateHireLicenseViewModel( + auth: FirebaseAuthentication, + database: FirebaseDatabaseSource, + storage: FirebaseStorageSource +) : DataSubmissionBaseViewModel(database, storage) { + val uid = auth.getUid()!! + + override val databaseRef: DatabaseReference = database.getPrivateHireRef(uid) + override val storageRef: StorageReference = storage.privateHireStorageRef(uid) + override val objectName: String = "private hire license" + + override fun getDataFromDatabase() = getDataClass() + + override fun setDataInDatabase(data: PrivateHireObject, localImageUri: Uri?) = io { + doTryOperation("Failed to upload private hire license"){ + val imageUrl = getImageUrl(localImageUri, data.phImageString) + val driverLicense = PrivateHireObject( + phExpiry = data.phExpiry, + phNumber = data.phNumber, + phImageString = imageUrl + ) + + postDataToDatabase(driverLicense) + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/PrivateHireVehicleViewModel.kt b/app/src/main/java/h_mal/appttude/com/driver/viewmodels/PrivateHireVehicleViewModel.kt new file mode 100644 index 0000000..6ed3790 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/viewmodels/PrivateHireVehicleViewModel.kt @@ -0,0 +1,33 @@ +package h_mal.appttude.com.driver.viewmodels + +import android.net.Uri +import com.google.firebase.database.DatabaseReference +import com.google.firebase.storage.StorageReference +import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject +import h_mal.appttude.com.driver.base.DataSubmissionBaseViewModel +import h_mal.appttude.com.driver.data.FirebaseAuthentication +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 + +class PrivateHireVehicleViewModel ( + auth: FirebaseAuthentication, + database: FirebaseDatabaseSource, + storage: FirebaseStorageSource +) : DataSubmissionBaseViewModel(database, storage) { + val uid = auth.getUid()!! + + override val databaseRef: DatabaseReference = database.getPrivateHireVehicleRef(uid) + override val storageRef: StorageReference? = storage.privateHireVehicleStorageRef(uid) + override val objectName: String = "private hire vehicle license" + + override fun getDataFromDatabase() = getDataClass() + + override fun setDataInDatabase(data: PrivateHireVehicleObject, localImageUri: Uri?) = io { + doTryOperation("Failed to upload $objectName") { + val imageUrl = getImageUrl(localImageUri, data.phCarImageString) + data.phCarImageString = imageUrl + postDataToDatabase(data) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/UpdateUserViewModel.kt b/app/src/main/java/h_mal/appttude/com/driver/viewmodels/UpdateUserViewModel.kt new file mode 100644 index 0000000..bf77f3d --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/viewmodels/UpdateUserViewModel.kt @@ -0,0 +1,75 @@ +package h_mal.appttude.com.driver.viewmodels + +import android.net.Uri +import h_mal.appttude.com.driver.base.BaseViewModel +import h_mal.appttude.com.driver.data.FirebaseAuthentication +import h_mal.appttude.com.driver.data.FirebaseCompletion +import h_mal.appttude.com.driver.data.FirebaseStorageSource +import h_mal.appttude.com.driver.utils.Coroutines.io +import kotlinx.coroutines.tasks.await +import java.io.IOException + +class UpdateUserViewModel( + private val auth: FirebaseAuthentication, + private val storage: FirebaseStorageSource +) : BaseViewModel() { + + fun updateEmail(oldEmail: String, password: String, newEmail: String) = io { + doTryOperation("Failed to update email"){ + auth.reauthenticate(oldEmail, password)?.await() + val complete = auth.updateEmail(newEmail)?.await() + complete?.postResult("Email address") + } + } + + fun updatePassword(oldEmail: String, password: String, newPassword: String) = io { + doTryOperation("Failed to update password"){ + auth.reauthenticate(oldEmail, password)?.await() + val complete = auth.updatePassword(newPassword)?.await() + complete?.postResult("Password") + } + } + + fun updateProfile(name: String?, localImageUri: Uri?) = io { + if (name.isNullOrBlank() && localImageUri == null) return@io + doTryOperation("Failed to update User"){ + + val profilePicUrl = localImageUri?.let { + val storageRef = storage.profileImageStorageRef(auth.getUid()!!) + storage.uploadImage(it, storageRef, "profile_pic") + } + + val complete = auth.updateProfile(name, profilePicUrl)?.await() + complete.postResult("Profile updated") + } + } + + fun deleteProfile(oldEmail: String, password: String) = io { + doTryOperation("Failed to delete profile"){ + auth.reauthenticate(oldEmail, password)?.await() + val complete = auth.deleteProfile()?.await() + complete?.let { + onSuccess(FirebaseCompletion.ProfileDeleted("Profile deleted")) + return@doTryOperation + } + throw IOException("Failed to complete") + + } + } + + + fun getUser(): Boolean { + return auth.getUser()?.let { + onSuccess(it) + true + } ?: false + } + + private fun Void?.postResult(section: String){ + this?.let { + onSuccess(FirebaseCompletion.Changed("$section has been updated")) + return + } + throw IOException("Failed to complete") + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/UserViewModel.kt b/app/src/main/java/h_mal/appttude/com/driver/viewmodels/UserViewModel.kt new file mode 100644 index 0000000..cde9d3e --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/viewmodels/UserViewModel.kt @@ -0,0 +1,47 @@ +package h_mal.appttude.com.driver.viewmodels + +import com.google.firebase.auth.AuthResult +import h_mal.appttude.com.driver.base.BaseViewModel +import h_mal.appttude.com.driver.data.FirebaseAuthentication +import h_mal.appttude.com.driver.data.FirebaseCompletion +import h_mal.appttude.com.driver.utils.Coroutines.io +import kotlinx.coroutines.delay +import kotlinx.coroutines.tasks.await + +class UserViewModel( + val auth: FirebaseAuthentication +) : BaseViewModel() { + + fun signInUser(email: String?, password: String?) = io { + doTryOperation("Failed to sign in") { + val user: AuthResult = auth.signIn(email!!, password!!).await() + onSuccess(user) + } + } + + + fun registerUser(name: String?, email: String?, password: String?) = io { + doTryOperation("Failed to register user") { + val user: AuthResult = auth.registerUser(email!!, password!!).await() + auth.updateProfile(name, null) + onSuccess(user) + } + } + + + fun forgotPassword(email: String?) = io { + doTryOperation("Failed to reset password") { + val result = auth.forgotPassword(email!!).await() + onSuccess(result) + } + } + + fun splashscreenCheckUserIsLoggedIn() = io { + delay(1000) + auth.getUser()?.let { + onSuccess(it) + } + onSuccess(FirebaseCompletion.Default) + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/VehicleProfileViewModel.kt b/app/src/main/java/h_mal/appttude/com/driver/viewmodels/VehicleProfileViewModel.kt new file mode 100644 index 0000000..58f9132 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/viewmodels/VehicleProfileViewModel.kt @@ -0,0 +1,34 @@ +package h_mal.appttude.com.driver.viewmodels + +import com.google.firebase.database.DatabaseReference +import com.google.firebase.storage.StorageReference +import h_mal.appttude.com.driver.base.DataSubmissionBaseViewModel +import h_mal.appttude.com.driver.data.FirebaseAuthentication +import h_mal.appttude.com.driver.data.FirebaseDatabaseSource +import h_mal.appttude.com.driver.data.FirebaseStorageSource +import h_mal.appttude.com.driver.model.VehicleProfileObject +import h_mal.appttude.com.driver.utils.Coroutines.io + +class VehicleProfileViewModel ( + auth: FirebaseAuthentication, + database: FirebaseDatabaseSource, + storage: FirebaseStorageSource +) : DataSubmissionBaseViewModel(database, storage) { + val uid = auth.getUid()!! + + override val databaseRef: DatabaseReference = database.getVehicleDetailsRef(uid) + override val storageRef: StorageReference? = null + override val objectName: String = "vehicle profile" + + override fun getDataFromDatabase() = getDataClass() + + override fun setDataInDatabase(data: VehicleProfileObject) { + io { + doTryOperation("Failed to upload $objectName"){ + postDataToDatabase(data) + } + } + } + + +} \ No newline at end of file diff --git a/app/src/main/res/drawable-v21/gradient_colour.xml b/app/src/main/res/drawable-v21/gradient_colour.xml deleted file mode 100644 index 6037c6c..0000000 --- a/app/src/main/res/drawable-v21/gradient_colour.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable-v21/ic_menu_camera.xml b/app/src/main/res/drawable-v21/ic_menu_camera.xml deleted file mode 100644 index 634fe92..0000000 --- a/app/src/main/res/drawable-v21/ic_menu_camera.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable-v21/ic_menu_gallery.xml b/app/src/main/res/drawable-v21/ic_menu_gallery.xml deleted file mode 100644 index 03c7709..0000000 --- a/app/src/main/res/drawable-v21/ic_menu_gallery.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable-v21/ic_menu_manage.xml b/app/src/main/res/drawable-v21/ic_menu_manage.xml deleted file mode 100644 index aeb047d..0000000 --- a/app/src/main/res/drawable-v21/ic_menu_manage.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - \ No newline at end of file diff --git a/app/src/main/res/drawable-v21/ic_menu_send.xml b/app/src/main/res/drawable-v21/ic_menu_send.xml deleted file mode 100644 index fdf1c90..0000000 --- a/app/src/main/res/drawable-v21/ic_menu_send.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable-v21/ic_menu_share.xml b/app/src/main/res/drawable-v21/ic_menu_share.xml deleted file mode 100644 index 338d95a..0000000 --- a/app/src/main/res/drawable-v21/ic_menu_share.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable-v21/ic_menu_slideshow.xml b/app/src/main/res/drawable-v21/ic_menu_slideshow.xml deleted file mode 100644 index 5e9e163..0000000 --- a/app/src/main/res/drawable-v21/ic_menu_slideshow.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml deleted file mode 100644 index 1f6bb29..0000000 --- a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - diff --git a/app/src/main/res/drawable-xxhdpi/background.jpg b/app/src/main/res/drawable-xxhdpi/background.jpg deleted file mode 100644 index 71d558d..0000000 Binary files a/app/src/main/res/drawable-xxhdpi/background.jpg and /dev/null differ diff --git a/app/src/main/res/drawable/background.jpg b/app/src/main/res/drawable/background.jpg deleted file mode 100644 index 61809d0..0000000 Binary files a/app/src/main/res/drawable/background.jpg and /dev/null differ diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index 0d025f9..0000000 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_local_taxi_black_24dp.xml b/app/src/main/res/drawable/ic_local_taxi_black_24dp.xml deleted file mode 100644 index 21b763e..0000000 --- a/app/src/main/res/drawable/ic_local_taxi_black_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_person_black_24dp.xml b/app/src/main/res/drawable/ic_person_black_24dp.xml deleted file mode 100644 index b2cb337..0000000 --- a/app/src/main/res/drawable/ic_person_black_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/layout/activity_forgot_password.xml b/app/src/main/res/layout/activity_forgot_password.xml deleted file mode 100644 index 3fb1c86..0000000 --- a/app/src/main/res/layout/activity_forgot_password.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - + + diff --git a/app/src/main/res/menu/activity_main_drawer.xml b/app/src/main/res/menu/activity_main_drawer.xml index 3240c25..d6e867a 100644 --- a/app/src/main/res/menu/activity_main_drawer.xml +++ b/app/src/main/res/menu/activity_main_drawer.xml @@ -3,23 +3,10 @@ xmlns:tools="http://schemas.android.com/tools" tools:showIn="navigation_view"> - - - - - - diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml deleted file mode 100644 index a2411e3..0000000 --- a/app/src/main/res/menu/main.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/app/src/main/res/navigation/auth_navigation.xml b/app/src/main/res/navigation/auth_navigation.xml new file mode 100644 index 0000000..9e160e1 --- /dev/null +++ b/app/src/main/res/navigation/auth_navigation.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/main_navigation.xml b/app/src/main/res/navigation/main_navigation.xml new file mode 100644 index 0000000..65f53a9 --- /dev/null +++ b/app/src/main/res/navigation/main_navigation.xml @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/update_navigation.xml b/app/src/main/res/navigation/update_navigation.xml new file mode 100644 index 0000000..8d69ead --- /dev/null +++ b/app/src/main/res/navigation/update_navigation.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-v26/styles.xml b/app/src/main/res/values-v26/styles.xml new file mode 100644 index 0000000..0d2c4cc --- /dev/null +++ b/app/src/main/res/values-v26/styles.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index be870d8..15f8e34 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -4,6 +4,7 @@ #010057 #03a9f4 + #03a9f4 #f78626 #a5b0b6 diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 344695f..cdddf8e 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -4,6 +4,4 @@ 16dp 8dp 200dp - 16dp - 22dp \ No newline at end of file diff --git a/app/src/main/res/values/drawables.xml b/app/src/main/res/values/drawables.xml index 52c6a6c..3505456 100644 --- a/app/src/main/res/values/drawables.xml +++ b/app/src/main/res/values/drawables.xml @@ -1,8 +1 @@ - - @android:drawable/ic_menu_camera - @android:drawable/ic_menu_gallery - @android:drawable/ic_menu_slideshow - @android:drawable/ic_menu_manage - @android:drawable/ic_menu_share - @android:drawable/ic_menu_send - + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1f39fbe..fadb5e9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,36 +1,40 @@ Choice Minicabs - Open navigation drawer - Close navigation drawer Driver Name driver@example.com Navigation header - Settings - Sign in Email Password - Log in - Sign in This email address is invalid This password is too short Passwords do not match - This password is incorrect This field is required - "Contacts permissions are needed for providing email - completions." - - Hello blank fragment - Passwords Do Not Match - Login Failed! Submit Open Camera Upload from Storage Select date - Driver Photo Required - No role detected list item image - Failed to retrieve data - Failed to upload data - Unable To upload + Reset Password + Enter email address to receive a password reset link. + Name + Register + Complete form to sign up + Update profile + Update profile and credentials + Update Email + Update Profile + Update Password + Update your email by inserting your current credentials with a new email address + New email + Update your password by inserting your current credentials with a new email password + New password + Select whether to upload a new profile photo or update name on profile. + New name + Delete Profile + Enter email address and password to delete your profile. + Welcome to Choice Car + Manage your verified driver detail. Keep your data secure and control how you share it. + Driver profile + Add/update your driver details diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 0fcb51f..b2cf2e0 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -43,4 +43,25 @@ + + + + + + diff --git a/app/src/main/res/xml/file_paths.xml b/app/src/main/res/xml/file_paths.xml index ce9f15f..5e28c34 100644 --- a/app/src/main/res/xml/file_paths.xml +++ b/app/src/main/res/xml/file_paths.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/app/src/test/java/h_mal/appttude/com/driver/ExampleUnitTest.java b/app/src/test/java/h_mal/appttude/com/driver/ExampleUnitTest.java index 3508381..66de00b 100644 --- a/app/src/test/java/h_mal/appttude/com/driver/ExampleUnitTest.java +++ b/app/src/test/java/h_mal/appttude/com/driver/ExampleUnitTest.java @@ -2,7 +2,7 @@ package h_mal.appttude.com.driver; import org.junit.Test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; /** * Example local unit test, which will execute on the development machine (host). diff --git a/build.gradle b/build.gradle index 255688e..af8609a 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.2.71' + ext.kotlin_version = "1.3.72" repositories { google() @@ -9,10 +9,13 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.2.1' + classpath 'com.android.tools.build:gradle:4.0.0' classpath 'com.google.gms:google-services:4.0.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + def nav_version = "2.1.0-alpha06" + classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" + // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } diff --git a/gradle.properties b/gradle.properties index 82618ce..7bbba6a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,6 +7,9 @@ # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. org.gradle.jvmargs=-Xmx1536m +android.useAndroidX=true +android.enableJetifier=true +kotlin.code.style=official # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9a4163a..49ff193 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Sun Oct 11 00:29:59 BST 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip